近期有许多读者朋友在读者中路由器上DHCP服务器配置方面的,在此把笔者编著的《路由器配置与管理完全手册——Cisco篇》一书中的相关内容节选给大家。其中列出了在Cisco路由器上配置DHCP服务器的必需和可选任务,以及各种功能配置的具体步骤和大量示例。在下一篇中将给出DHCP服务中继的配置与示例。
4.1 Cisco IOS DHCP服务器配置概述
Cisco IOS系统的路由器包括DHCP服务器和中继代理软件。Cisco IOS DHCP服务器功能包括一个从路由器中指定的地址池中为DHCP客户端分配和管理IP地址的全功能平台。还可以配置附加参数(如通常所说的选项82),如DNS服务器IP地址和默认路由。但不同的IOS版本所支持的DHCP功能并不完全一样,具体大家可以参见Cisco官方网站以下链接中的表4:http://www.cisco.com/en/US/docs/ios/ipaddr/configuration/guide/iad_dhcp_svr_cfg_ps6350_TSD_Products_Configuration_Guide_Chapter.html#wp1145658,或者具体路由器产品用户手册。
本节将介绍在DHCP服务器配置过程中所涉及到的以下几项任务:
n 配置DHCP数据库代理或禁止冲突日志(必需)
n 配置DHCP地址池(必需)
n 配置IP地址排除(可选)
n 配置手动绑定(可选)
n 配置DHCP静态映射(可选)
n 自定义DHCP服务器选项(可选)
n 中心DHCP服务器选项导入到DHCP服务器的配置(可选)
n 使用选项82配置DHCP地址(可选)
n 配置以从DHCP服务器中动态获得的地址作为下一跳的静态路由(可选)
n 清除DHCP服务器变量(可选)
【经验之谈】以上这些功能的配置,我们在学习Windows Server 2003或者RHEL Linux 5服务器系统下的DHCP服务器配置中都有涉及,大家在学习本节内容时最好能在心中对原来所学内容进行回顾,对比,这样更容易理解。具体可以参见笔者编著的全实战战型教材《金牌网管师》系列。
4.2 DHCP数据库代理或禁止冲突日志配置
Cisco路由器配置成DHCP服务器之前,首先要考虑两个方面:一是是否要配置DHCP数据库代理,二是是否要开启冲突日志功能。
DHCP服务器的数据库中的地址绑定数据存放在另一台PC主机上,然后通过FTP、TFTP或者RCP服务器进行存取。这时这些存储DHCP服务器数据库的主机就称之为“DHCP数据库代理”了。你可以配置多个DHCP数据库代理,也可以为每个代理配置数据库更新和传输的时间间隔。强烈建议使用DHCP数据库代理,但是Cisco IOS DHCP服务器也可以在无数据库代理的情况下正常运行。
DHCP数据库代理中存放的是用户的地址绑定条目,其中包括由DHCP服务器自动建立的自动绑定、和由管理员手动建立的手动绑定。自动绑定条目中的自动绑定信息(如租用期、接口索引、VPN路由和转发(VPN routing and forwarding,VRF)名称)是存储在DHCP数据库代理中的。而且,这个绑定信息是以纯文本方式记录的,易于维护。
另外,当有多个主机使用同一个IP地址时就会发生地址冲突。在DHCP服务器分配IP地址给客户端的过程中,DHCP服务器会使用ping和强制的ARP功能检测冲突。如果检测到有冲突,则该地址会从地址池中删除,不会分配给客户端,直到冲突解除。如果你没有配置DHCP数据库代理,则一定要通过“no ip dhcp conflict logging”全局配置模式命令禁止DHCP服务器上的地址冲突日志功能,否则路由器上的闪存空间很快就会被冲突日志耗尽。
4.2.1 DHCP数据库代理或者禁止冲突日志的配置步骤及示例
DHCP数据库代理和冲突日志功能的配置可按表4-1所示步骤自全局配置模式开始进行。配置过程很简单,所用的命令主要是两个:配置DHCP数据库代理是用“ip dhcp database”全局配置模式命令,禁用冲突日志功能是用“no ip dhcp conflict logging”全局配置模式命令。当然如果要启用冲突日志功能,则要直接用“ip dhcp conflict logging”全局配置模式命令了。
表4-1 DHCP数据库代理或冲突日志的配置步骤
步骤 | 命令 | 说明 |
Step1 | enable 例如: Router> enable | 进入特权模式。如果配置了特权模式密码,则要按提示输入正确的特权模式密码才能进入。 |
Step2 | configureterminal 例如: Router# configure terminal | 进入全局配置模式。 |
Step3 | ip dhcp database url [timeoutseconds | write-delayseconds] 例如: Router(config)#ip dhcp database ftp://winda:123456@172.16.1.1/router-dhcp timeout 80 或者 no ip dhcp conflict logging 例如: Router(config)#no ip dhcp conflict logging | 配置DHCP服务器在远程主机(数据库代理)中保存自动绑定信息。这里要输入远程主机的URL(通常是FTP或者TFTP服务器),要注意的是要同时指定有权向远程主机写入文件的用户帐户和密码。 如果不配置数据库代理,则要用“no ip dhcp conflict logging”命令来禁止DHCP服务器地址冲突日志功能。 示例中是把172.16.1.1的FTP服务器作为DHCP数据库代理,自动绑定信息保存在根目录的router-dhcp文件中。所使用的远程主机帐户为winda,密码为123456。 |
在以上步骤中涉及到两条主要命令:“ip dhcp database”和“ip dhcp conflict logging”全局配置模式命令。下面对这两个命令进行详细介绍。
1. ip dhcp database命令
“ip dhcp database”的完整命令格式如下:
ip dhcp database url [timeout seconds | write-delay seconds]
它是用来配置IOS DHCP服务器和中继代理在一个称之为“数据库代理”远程主机(如FTP、TFTP、RCP服务器或者网络磁盘)上保存自动绑定关系。你可以配置多个DHCP数据库代理,而且你可以为每个数据库代理设置数据库更新的时间间隔。要删除数据库代理,则可用“no ip dhcp database url”命令。命令中的可选项和参数说明如下:
url:指定用于存储自动绑定关系的远程文件名。它可以有以下几种URL格式:
Ø tftp://host/filename
Ø ftp://user:password@host/filename
Ø rcp://user@host/filename
Ø flash://filename
Ø disk0://filename
timeout seconds:(可选)指定在放弃一个数据库传输前应该等待的时间(以秒为单位)。超出这个设置的时间限制,则传输将放弃。默认情况下,DHCP服务器是等待300秒时间,如果设为0,则相当于可以无限等待。
write-delay seconds:(可选)指定多久时间后DHCP服务器应当发送一次更新。默认情况下,DHCP服务器是每300秒发送一次更新,最小时间为60秒。
以下示例指定DHCP停止向数据库传输前等待的时间为80秒,远程存储的数据库文件名为ftp://user:password@172.16.1.1/router-dhcp。
ip dhcp database ftp://user:password@172.16.1.1/router-dhcp timeout 80
以下示例显示“tftp://172.16.1.1/router-dhcp”DHCP数据库更新时间间隔为100秒。
ip dhcp database tftp://172.16.1.1/router-dhcp write-delay 100
2. ip dhcp conflict logging命令
“ip dhcp conflict logging”全局配置模式命令用来启动在DHCP服务器上的冲突日志功能。要禁用冲突日志功能,则要使用“no ip dhcp conflict logging”全局配置模式命令。一般情况下是会使用至少一个DHCP服务器代理的,所以默认会启用冲突日志功能。如果没有使用数据库代理,则要禁止冲突日志功能,因为在路由器上没有这么大的闪存空间可用来存储这些日志。
4.2.2 DHCP数据库代理的配置示例
以下示例显示如何把绑定存储在IP地址为172.16.4.253的主机的router-dhcp目录中,使这台主机成为DHCP数据库代理。代理与DHCP服务器之间是通过FTP协议进行文件传输的。示例中,在重写数据库并且更新前,DHCP服务器将等待2分钟时间。所用的用户帐户和密码就是winda,123456
Router> enable
Router# configure terminal
Router(config)#ip dhcp database ftp://winda:123456@172.16.4.253/router-dhcp write-delay 120
4.3 DHCP服务器IP地址排除配置
DHCP服务器是假设在DHCP地址池中的所有地址都是可以分配给DHCP客户端的。如果有些地址必须静态分配给某个主机(如各种服务器),而该地址又在DHCP地址池中,这时你必须把那些在IP地址池中不能分配给DHCP客户端的IP地址排除在外。还有一种情况,如果在同一个网络或者子网中配置了两台地址池所对应的网段完全一样的DHCP服务器用于冗余或均衡,并且允许两台DHCP服务器同时工作,而不是在一台服务器时才接替原来那台服务器的工作,这时这两台DHCP服务器的地址池一定得用排除功能来排除在另一台DHCP服务器地址池中的地址,否则就会发生冲突。
4.3.1 IP地址排除的配置步骤及示例
配置排除IP地址的步骤如表4-2所示。也很简单,主要就一个命令,那就是“ip dhcp excluded-address”全局配置模式命令,用来排除不能给DHCP客户端分配的IP地址,或者一个IP地址范围。
表4-2 排除IP地址的配置步骤
步骤 | 命令 | 说明 |
Step1 | enable 例如: Router> enable | 如果配置了特权模式密码,则要按提示输入正确的特权模式密码才能进入。 |
Step2 | configureterminal 例如: Router# configure terminal | 进入全局配置模式。 |
Step3 | ip dhcp excluded-address low-address [high-address] 例如: Router(config)#ip dhcp excluded-address 172.16.1.100 172.16.1.103 | 指定DHCP服务器不能分配给客户端的地址或者地址段。示例中指定是172.16.1.00~172.16.1.103这四个地址不能分配给客户端。为了管理上的方便,通常是把一个连续的地址段保留下来用于一些服务器静态使用,而不是零散的单个IP地址,否则需要运用本步命令多次排除这些单个的IP地址。 |
“ip dhcp excluded-address low-address [high-address] ”全局配置模式命令是用来指定DHCP服务器不分配给客户端的地址池中的地址或地址范围的。如果要排除一个地址,则只用low-address参数来指定;如果要排除的是一个连续的IP地址范围,则还要使用high-address参数,这时low-address参数用来指定要排除地址范围中的最低IP地址,而参数high-address是用来指定要排除地址范围中最高的IP地址。可使用最前面加“no”关键字选项的该命令来删除原来所做的相应地址排除。
以下示例显示如何配置排除一个从172.16.1.100到172.16.1.199,共包含100个IP地址的地址范围。
Router>enable
Router#configure terminal
Router(config)#ip dhcp excluded-address 172.16.1.100 172.16.1.199
4.3.2 IP地址排除的配置示例
Server A和Server B两个服务器,且都是在10.0.20.0/24这个子网中。现在通过DHCP服务器的IP地址排除功能把这个子网均匀地地划分到这两个DHCP服务器上,Server A配置可分配的IP地址范围为10.0.20.1~10.0.20.125,而Server B配置可分配的IP地址范围为10.0.20.126 ~10.0.20.254。
Server A上的配置:
ip dhcp excluded-address 10.0.20.126 10.0.20.255
!
ip dhcp pool A
network 10.0.20.0 255.255.255.0
Server B上的配置:
ip dhcp excluded-address 10.0.20.0 10.0.20.125
!
ip dhcp pool B
network 10.0.20.0 255.255.255.0
4.4 DHCP服务器IP地址池配置
DHCP服务器上的最基本配置就是DHCP地址池的创建与配置了。你可以一个字符串(如“engineering”)或者整数(如“0”)命名DHCP地址池。配置地址池的同时就进入了路由器DHCP地址池配置模式(提示符为“(dhcp-config)#”),为地址池配置各种所需的参数,如IP子网号和默认路由列表等。
4.4.1 DHCP地址池的选择及配置准备
DHCP服务定义了一个过程,判定由哪个DHCP服务器识别DHCP客户端所在子网,然后从一个有效的IP地址池为客户端子网分配IP地址。这个过程是通过DHCP服务器来标识用哪个DHCP地址池用于响应客户端请求。
DHCP服务器是按照以下规则来确定用哪个DHCP地址池来响应DHCP客户端请求的:
n 如果DHCP客户端不是直接连接DHCP服务器的(此时DHCPDISCOVER广播包消息中的网关地址为非零),则DHCP服务器用DHCP地址池中的网关地址部分所对应的子网与DHCPDISCOVER广播包中网关地址进行匹配,然后确定最终由哪个DHCP地址池来响应DHCP客户端的请求。
n 如果DHCP客户是直接连接DHCP服务器的(此时DHCPDISCOVER广播包消息中的网关地址为零),则DHCP服务器用DHCP地址池所连接接口的接口地址所对应的子网与DHCPDISCOVER广播包中网关地址进行匹配,然后确定最终由哪个DHCP地址池来响应DHCP客户端的请求。如果所连接口有第二个IP地址,则在与第一个IP地址相匹配的DHCP地址池中地址用完后,就会采用与第二个地址匹配的DHCP地址池进行响应。
在配置DHCP地址池之前,你需要:
n 标识DHCP选项(包括默认引导映像文件名、默认路由器、DNS服务器、NetBIOS名称服务器、主子网、第二个子网和指定子网的默认路由器列表)
n 确定NetBIOS节点类型(B、P、M或者H)
n 确定DNS域名
【说明】NetBIOS 名称解析成 IP 地址的确切机制取决于为 NetBIOS 节点配置的节点类型。RFC1001“TCP/UDP 传输上的 NetBIOS 服务的协议标准:概念和方法”定义了 NetBIOS 节点类型,具体如下所示。
B-节点(广播):B-节点使用广播NetBIOS名称来注册和解析名称。B-节点有两个主要问题:(1)广播将干扰网络上的每个节点,(2)路由器通常不转发广播,所以只能解析本地网络上的NetBIOS名称。
P-节点(端对端):P-节点使用NetBIOS名称服务器(NBNS),如WINS服务器来解析NetBIOS名称。P-节点不使用广播,而是直接查询名称服务器。
M-节点(混合):M-节点是B-节点和P-节点的组合。默认情况下,M-节点作为B-节点使用。如果M-节点无法通过广播解析名称,则使用P-节点查询NBNS服务器。
H-节点(混合):H-节点是P-节点和B-节点的组合。默认情况下,H-节点作为P-节点使用。如果H-节点无法通过NBNS解析名称,则使用广播解析名称。
运行Windows Server2003 的计算机默认是 B-节点,配置WINS服务器时变成H-节点。这些计算机也可以使用本地数据库文件(Lmhosts)来解析远程NetBIOS名称。Lmhost文件存储在 systemroot/System32/Drivers/Etc文件夹中。
4.4.2 DHCP地址池的配置步骤及示例
DHCP地址池的配置过程比较长,使用的命令比较多,因为它涉及到许多选项的配置。具体配置步骤如表4-3所示:
表4-3 DHCP地址池的配置步骤
步骤 | 命令 | 说明 |
Step1 | enable 例如: Router> enable | 进入特权模式。如果配置了特权模式密码,则要按提示输入正确的特权模式密码才能进入。 |
Step2 | configureterminal 例如: Router# configure terminal | 进入全局配置模式。 |
Step3 | ip dhcp pool name 例如: Router(config)#ip dhcp pool 1 | 创建一个DHCP服务器地址池,进入DHCP地址池配置模式。示例中创建的DHCP地址池名字为1(DHCP地址池名称可以是数字,或者字符串)。 |
Step4 | utilization mark high percentage-number [log] 例如: Router(dhcp-config)#utilization mark high 80 log | (可选)配置当前地址池中地址数允许最高的利用率(也就是利用率的上限阈值,是由percentage-number参数指定的)。如果选择了“log”关键字,则启用系统消息日志功能,在地址池中已使用的地址比例超过上面所设置的比例时,系统就会发出一条消息,并记录这个事件。 示例中设置的是利用率阈值为80%。 |
Step5 | utilization mark low percentage-number [log] 例如: Router(dhcp-config)#utilization mark low 70 log | (可选)配置当前地址池中允许最低的利用率(也就是利用率的下限阈值,是由percentage-number参数指定的)。如果选择了“log”关键字,则启用系统消息日志功能,在地址池中已使用的地址比例低于上面所设置的比例时,系统就会发出一条消息,并记录这个事件。示例中设置的是最低利用率阈值为70%。 |
Step6 | network network-number [mask | /prefix-length] 例如: Router(dhcp-config)#network 172.16.0.0 /16 | 指定DHCP地址池中地址所在子网号和掩码。可以是传统的网络地址(network-number)+子网掩码(mask)方式表示,如192.168.1.0 255.255.255.0,也可以网络地址+/地址前缀(/prefix-length)方式表示,如192.168.1.0/24。示例中是以地址前缀方式表示的,指定的是172.16.0.0/16这样一个标准的B类网络。 |
Step7 | domain-name domain 例如: Router(dhcp-config)#domain-name lycb.com | 指定DHCP客户端域名(domain)。如果客户端已是域网络中,则要键入对应的域网络域名,如果客户端是在一个工作组网络中,则在这里配置了域名后,自动为DHCP客户端主机名加上这个指定的域名后缀。示例中指定的域名是lycb.com。 |
Step8 | dns-server address [address2 ... address8] 例如: Router(dhcp-config)#dns server 172.16.1.103 172.16.2.103 | 为DHCP客户端指定可用的一个或多个个(最多8个)DNS服务器地址(address [address2 ... address8])。至少指定一个,在指定多个时,各地址中间以空格分隔。DNS服务器应以优先级顺序排列。示例中指定了两个DNS服务器:172.16.1.103,172.16.2.103。 |
Step9 | bootfile filename 例如: Router(dhcp-config)#bootfile xllboot | (可选)指定DHCP客户端所默认使用的DHCP服务器上引导映象。 |
Step10 | next-server address [address2 ... address8] 例如: Router(dhcp-config)#next-server 172.17.1.103 172.17.2.103 | (可选)为DHCP客户端指定在启动进程中使用的下一个DHCP服务器地址(address [address2 ... address8])。这当然是在配置了多个DHCP服务器,并且想轮流使用这DHCP服务器时才需要设置。如果没有配置这个命令,则DHCP服务器会通过“ip helper address”命令使用指定的服务器作为启动时用的DHCP服务器。 |
Step11 | netbios-name-server address [address2 ... address8] 例如: Router(dhcp-config)#netbios-name-server 172.16.1.103 172.16.2.103 | (可选)为Microsoft DHCP客户端指定基于NetBIOS协议的WINS服务器地址(address [address2 ... address8]),最多指定8个,且按优先级排列,中间以空格分隔。 |
Step12 | netbios-node-type type 例如: Router(dhcp-config)# netbios-node-type h-node | (可选)为Windows DHCP客户端指定NetBIOS节点类型。型包括:broadcas(广播)、 peer-to-peer(点对点)、mixed(混合)或者hybrid(混杂)。 |
Step13 | default-router address [address2 ... address8] 例如: Router(dhcp-config)#default-router 172.16.1.100 172.16.1.101 | (可选)为DHCP客户端指定默认路由器IP地址(address [address2 ... address8])。这个路由器应当是与客户端处于同一子网中(其实就是这些路由器连接客户端所在子网的接口的IP地址)。至少指定一个默认路由器,最多可以指定8个,也是按优先级顺序排列的。当一个DHCP客户端请求一个IP地址时,担当DHCP服务器的路由器会访问这个默认的路由器列表,并从中选择另一个路由器作为DHCP客户端用于转发消息的第一跳。在DHCP客户端启动时,客户端就会把数据包发送到这个默认的路由器,使用这个默认路由器连接其他网络。示例中指定了两个默认路由器:172.16.1.100和172.16.1.101。 |
Step14 | option code[instancenumber] {asciistring | hexstring | ip-address} 例如: Router(dhcp-config)#option 19 hex 01 | (可选)配置DHCP服务器选项。DHCP选项定义一个传送配置信息到DHCP客户端的框架,配置参数和其他控制信息是装载在存储在DHCP消息选项字段中的特征数据项目。命令中的参数和选项说明如表4-4所示。示例中配置的是代码为19的选项,启用IP数据包转发。 |
Step15 | lease {days [hours] [minutes]| infinite} 例如: Router(dhcp-config)#lease 30 | (可选)指定客户端租约IP地址的期限。默认为一天。“infinite”关键字指定客户端IP地址的租约期为不受限制。示例中指定的租约期为30天。 |
Step16 | end 例如: Router(config-dhcp-subnet-secondary)#end | 退出DHCP地址池配置模式,返回到全局配置模式。 |
表4-4 option命令参数和选项说明
参数和选项 | 说明 |
code | 指定DHCP选项代码,取值范围为0~254。代码是指定给选项的唯一数字,选项类别中的其他任何选项都不能使用相同的代码。代码必须适用于选项类别: 供应商选项-对于每个供应商类,代码值为 1~254 站点选项-代码值为 128~54 扩展选项-代码值为 77~27 |
instance number | (可选)指定一个示例号,取值范围为0~255,默认为0。 |
ascii string | 指定一个NVI(Network Virtual Terminal,网络虚拟终端)ASCII字符串。如果包含空格则一定要用引号括住整个字符串。 |
hex string | 指定点分十六进制数据(以字符串表示)。在十六进制字符串中每个字节是两个十六进制数字,每个字节可以用句点、冒号或者空格分隔。值勤为0时表示禁止IP数据包转发,值为1时表示启用IP数据包转发,其他值对应不同的类型,具体参见相关DHCP详细的选项说明。如下面的示例配置的是代码为19的选项,启用IP数据包转发(因为十六进制为1)。 Router(dhcp-config)# option 19 hex 01 |
ip address | 指定DHCP客户端所用的Web服务器IP地址或主机名,可以指定多个。如下面的示例配置的是代码为72的选项,其中指定了DHCP客户端可以使用的Web服务器地址有两个:172.16.3.252和172.16.3.253。Router(dhcp-config)# option 72 ip 172.16.3.252 172.16.3.253 |
4.4.3 DHCP地址池的配置示例
DHCP地址池:一个是在172.16.0.0/16网络中(名称为pool 0),一个是在172.16.1.0/24子网中(名称为pool 1),第三个是在172.16.2.0/24子网中(名称为pool 2)。pool 0地址池中配置了域名、DNS服务器、NetBIOS名称服务器和NetBIOS节点类型,pool 和pool 2地址池继承了pool 0地址池中的这些属性配置。在这三个DHCP地址池中,客户端的IP地址租用期均为30天,并且在每个子网中的所有地址,除了排除地址均可以由DHCP服务器分配给客户端。表4-5列出了在这三个DHCP地址池中的设备所用的IP地址(这些地址是需要排除的)。
表4-5 三个地址池的设备地址分配
Pool 0 (Network 172.16.0.0) | Pool 1 (Subnetwork 172.16.1.0) | Pool 2 (Subnetwork 172.16.2.0) | |||
设备 | IP Address | 设备 | IP Address | 设备 | IP Address |
默认路由器 | — | 默认路由器 | 172.16.1.100 172.16.1.101 | 默认路由器 | 172.16.2.100 172.16.2.101 |
DNS服务器 | 172.16.1.102 172.16.2.102 | — | — | — | — |
NetBIOS名称服务器 | 172.16.1.103 172.16.2.103 | — | — | — | — |
NetBIOS节点类型 | h-node | — | — | — | — |
ip dhcp database ftp://winda:123456@172.16.4.253/router-dhcp write-delay 120 !---这是设置DHCP数据库代理,参见本章前面介绍
ip dhcp excluded-address 172.16.1.100 172.16.1.103
ip dhcp excluded-address 172.16.2.100 172.16.2.103
!--- 以上两条语句是用来排除设备所用的静态IP地址的
!
ip dhcp pool 0
network 172.16.0.0 /16
domain-name cisco.com
dns-server 172.16.1.102 172.16.2.102
netbios-name-server 172.16.1.103 172.16.2.103
netbios-node-type h-node
!
ip dhcp pool 1
network 172.16.1.0 /24
default-router 172.16.1.100 172.16.1.101
lease 30
!
ip dhcp pool 2
network 172.16.2.0 /24
default-router 172.16.2.100 172.16.2.101
lease 30