一、采用DHCP服务的常见问题  架设DHCP服务器可以为客户端自动分配IP地址、掩码、默认网关、DNS服务器等网络参数,简化了网络配置,提高了管理效率。但在DHCP服务的管理上存在一些问题,常见的有:
 ·DHCP Server的冒充   
 ·DHCP Server的DOS***,如DHCP耗竭***
 ·某些用户随便指定IP地址,造成IP地址冲突

    1、DHCP Server的冒充    由于DHCP服务器和客户端之间没有认证机制,所以如果在网络上随意添加一台DHCP服务器,它就可以为客户端分配IP地址以及其他网络参数。只要让该DHCP服务器分配错误的IP地址和其他网络参数,那就会对网络造成非常大的危害。

    2、DHCP Server的拒绝服务***
    通常DHCP服务器通过检查客户端发送的DHCP请求报文中的CHADDR(也就是Client MAC address)字段来判断客户端的MAC地址。正常情况下该CHADDR字段和发送请求报文的客户端真实的MAC地址是相同的。***者可以利用伪造MAC的方式发送DHCP请求,但这种***可以使用Cisco 交换机的端口安全特性来防止。端口安全特性(Port Security)可以限制每个端口只使用唯一的MAC地址。但是如果***者不修改DHCP请求报文的源MAC地址,而是修改DHCP报文中的CHADDR字段来实施***,那端口安全就不起作用了。由于DHCP服务器认为不同的CHADDR值表示请求来自不同的客户端,所以***者可以通过大量发送伪造CHADDR的DHCP请求,导致DHCP服务器上的地址池被耗尽,从而无法为其他正常用户提供网络地址,这是一种DHCP耗竭***。DHCP耗竭***可以是纯粹的DOS***,也可以与伪造的DHCP服务器配合使用。当正常的DHCP服务器瘫痪时,***者就可以建立伪造的DHCP服务器来为局域网中的客户端提供地址,使它们将信息转发给准备截取的恶意计算机。甚至即使DHCP请求报文的源MAC地址和CHADDR字段都是正确的,但由于DHCP请求报文是广播报文,如果大量发送的话也会耗尽网络带宽,形成另一种拒绝服务***。

    3、客户端随意指定IP地址    客户端并非一定要使用DHCP服务,它可以通过静态指定的方式来设置IP地址。如果随便指定的话,将会大大提高网络IP地址冲突的可能性。

二、DHCP Snooping技术介绍
    DHCP监听(DHCP Snooping)是一种DHCP安全特性。Cisco交换机支持在每个VLAN基础上启用DHCP监听特性。通过这种特性,交换机能够拦截第二层VLAN域内的所有DHCP报文。

    DHCP监听将交换机端口划分为两类:

  ·非信任端口:通常为连接终端设备的端口,如PC,网络打印机等
  ·信任端口:连接合法DHCP服务器的端口或者连接汇聚交换机的上行端口
  通过开启DHCP监听特性,交换机限制用户端口(非信任端口)只能够发送DHCP请求,丢弃来自用户端口的所有其它DHCP报文,例如DHCP Offer报文等。而且,并非所有来自用户端口的DHCP请求都被允许通过,交换机还会比较DHCP 请求报文的(报文头里的)源MAC地址和(报文内容里的)DHCP客户机的硬件地址(即CHADDR字段),只有这两者相同的请求报文才会被转发,否则将被丢弃。这样就防止了DHCP耗竭***。
 
信任端口可以接收所有的DHCP报文。通过只将交换机连接到合法DHCP服务器的端口设置为信任端口,其他端口设置为非信任端口,就可以防止用户伪造DHCP服务器来***网络。DHCP监听特性还可以对端口的DHCP报文进行限速。通过在每个非信任端口下进行限速,将可以阻止合法DHCP请求报文的广播***。
DHCP监听还有一个非常重要的作用就是建立一张DHCP监听绑定表(DHCP Snooping Binding)。一旦一个连接在非信任端口的客户端获得一个合法的DHCPOffer,交换机就会自动在DHCP监听绑定表里添加一个绑定条目,内容包括了该非信任端口的客户端IP地址、MAC地址、端口号、VLAN编号、租期等信息。如:

Switch#show ip dhcp snooping binding

MacAddress         IpAddress       Lease(sec)    Type         VLAN          Int
00:0F:1F:C5:10:08 192.168.10.131    682463     dhcp-snooping   10       FastEthernet0/1

这张DHCP监听绑定表为进一步部署IP源防护(IPSG)和动态ARP检测(DAI)提供了依据。说明:
  I. 非信任端口只允许客户端的DHCP请求报文通过,这里只是相对于DHCP报文来说的。其他非DHCP报文还是可以正常转发的。这就表示客户端可以以静态指定IP地址的方式通过非信任端口接入网络。由于静态客户端不会发送DHCP报文,所以DHCP监听绑定表里也不会有该静态客户端的记录。

    信任端口的客户端信息不会被记录到DHCP监听绑定表里。如果有一客户端连接到了一个信任端口,即使它是通过正常的DHCP方式获得IP地址,DHCP监听绑定表里也不有该客户端的记录。如果要求客户端只能以动态获得IP的方式接入网络,则必须借助于IPSG和DAI技术。
 
    II.交换机为了获得高速转发,通常只检查报文的二层帧头,获得目标MAC地址后直接转发,不会去检查报文的内容。而DHCP监听本质上就是开启交换机对DHCP报文的内容部分的检查,DHCP报文不再只是被检查帧头了。
 
    III. DHCP监听绑定表不仅用于防御DHCP***,还为后续的IPSG和DAI技术提供动态数据库支持。


DHCP-SNOOPING配置

DHCP-snooping配置任务
        DHCP-snooping的任务就是对DHCP报文进行判断,防止伪造的DHCP服务器提供DHCP服务,维护接口上MAC地址与IP地址的对应绑定关系。根据MAC地址与IP地址的对应绑定,可以完成DAI(动态ARP监测)和IP source guard功能。DHCP-snooping功能主要包括侦听DHCP报文、动态维护MAC地址与IP地址的对应绑定表,二层交换机过滤非信任端口的不满足这种对应绑定关系的报文,防止非法用户对网络的***。

     ·开启/关闭DHCP-snooping功能

     ·在VLAN 上启动DHCP-snooping
     ·配置接口为DHCP信任接口
     ·在VLAN上启动DAI功能
     ·配置接口为ARP监测信任接口
     ·在VLAN上启动IP源地址监测功能
     ·配置接口为IP 源地址监测信任接口
     ·配置DHCP-snooping绑定备份的TFTP服务器
     ·配置DHCP-snooping绑定备份的文件名
     ·配置DHCP-snooping绑定备份的时间间隔
     ·手工配置添加绑定关系
     ·DHCP-snooping的监控与维护
     ·配置DHCP-snooping的示例


Switch(config)#ip dhcp snooping        //打开DHCP Snooping功能

Switch(config)#ip dhcp snooping vlan 10    //设置DHCP Snooping功能将作用于哪些VLAN

Switch(config)#ip dhcp snoopiing verify mac-address    //非信任端口收到的DHCP请求报文的源MAC和CHADDR字段是否相同,以防止DHCP耗竭***,该功能默认即为开启

Switch(config-if)#ip dhcp snooping trust        //配置接口为DHCP监听特性的信任接口,所有接口默认为非信任接口

Switch(config-if)#ip dhcp snoopiing limit rate 15    //限制非信任端口的DHCP报文速率为每秒15个包(默认即为每秒15个包)如果不配该语句,则show ip dhcp snooping的结果将不列出没有该语句的端口,可选速率范围为1-2048

建议,在配置了端口的DHCP报文限速之后,最好配置以下两条命令

Switch(config)#errdisable recovery cause dhcp-rate-limit        //使由于DHCP报文限速而被禁用的端口能自动从err-disable状态后,经过30秒时间才能恢复

Switch(config)#ip dhcp snooping information option        //设置交换机是否为非信任端口收到的DHCP报文插入Option 82,默认即为开启状态

Swtich(config)#ip dhcp snooping information option   allow-untrusted     //设置汇聚交换机将接收从非信任端口收到的接入交换机发来的带有选项82的DHCP报文

Switch#ip dhcp snooping binding 000f.1fc5.1008 vlan 10 192.168.10.131 interface fa0/2 expiry 692000        //特权模式命令:手工添加一条DHCP监听绑定条目;expiry为时间值,即为监听绑定中的lease(租期)

Switch(config)#ip dhcp snooping database flash:dhcp_snooping.db        //将DHCP监听表保存在flash中,文件名为dhcp_snooping.db

Swtich(config)#ip dhcp snooping database tftp://192.168.2.5/Switch/dhcp_snooping.db        //将DHCP事先确定可达。URL中的Switch是tftp服务器下一个文件夹;保存后的文件名为dhcp_snooping.db,当更改保存位置后会立即执行“写”操作。

Swtich(config)#ip dhcp snooping database write-delay 30        //指DHCP监听绑定表发生更新后,等待30秒,再写入文件,默认为300秒;可选范围为15-86400秒

Switch(config)#ip dhcp snooping database timeout 60        //指DHCP监听绑定表尝试写入操作失败后,重新尝试写入操作,直到60秒后停止尝试。默认为300秒;可选范围为0-86400秒

说明:实际上当DHCP监听绑定表发生改变时会先等待write-delay的时间,然后执行写入操作,如果写入操作失败(比如tftp服务器不可达),接着就等待timeout的时间,在此时间段内不断重试。在timeout时间过后,停止写入尝试。但由于监听绑定表已经发生了改变,因此重新开始等待write-delay时间执行写入操作,不断循环,直到写入操作成功。

Switch#renew ip dhcp snooping database flash:dhcp_snooping.db        //特权级命令:立即保存好的数据库文件中读取DHCP监听表。


显示DHCP Snooping的状态

Switch#show ip dhcp snooping        //显示当前DHCP监听的各选项和各端口的配置情况

Switch#show ip dhcp snooping binding        //显示当前的DHCP监听绑定表

Switch#show ip dhcp snooping database    //显示DHCP监听绑定数据库的相关信息

Switch#show ip dhcp snooping statistics    //显示DHCP监听的工作统计

Switch#clear ip dhcp snooping binding      //清除DHCP监听绑定表;注意:本命令无法对单一条目进行清楚,只能清楚所有条目

Switch#clear ip dhcp snooping database statistics    //清空DHCP监听绑定数据库的计数器

Switch#clear ip dhcp snooping statistics    //清空DHCP监听的工作统计计数器


DHCP Snooping实例

1、单交换机(DHCP服务器和DHCP客户端位于同一VLAN)

环境:Windows 2003 DHCP服务器和客户端都位于Vlan 10;服务器接在F0/1,客户端接在F0/2

ip dhcp snoopiing vlan 10

ip dhcp snooping

!

int f0/1

switchport access vlan 10

spanning-tree portfast

ip dhcp snooping trust

!

int f0/2

switchport access vlan 10

spanning-tree portfast

ip dhcp snooping limit rate 15


说明:

    ·本例中交换机对于客户端的DHCP请求报文插入选项 82信息;也可以通过配置no ip dhcp snooping information option命令选择不插入选项82信息。两种情况都可以。

    ·客户端端口推荐配置spanning-tree portfast命令,使得该端口不参与生成树计算,节省端口启动时间,防止可能因为端口启动时间过长导致客户端得不到IP地址。

    ·开启DHCP监听特性的vlan并不需要该vlan的三层接口被创建。