今天去一个客户那里排查一个困扰他们半个月之久的问题,就是网络中一部分VLAN不能自动获取IP地址,上午去到他们那里已经10点多了,天气有点热,客户的网络结构是,思科6509两台做hsrp为核心层,下面的接入层交换机为思科2950,在6509上启用了DHCP服务,为每个VLAN分配IP地址。现问题就出现在其中的几个VLAN,PC接在这VLAN下就是获取不到IP地址,跟客户沟通知道这几个有问题的VLAN,都接在同一台交换机,看了下6509的配置,没发现什么问题,就是注意到开启了ip dhcp snooping ,问题出现在同一台交换机,那里确定方向了,走,到生产线上,查看问题机器。
 
来到问题机器,进入里面一看,交换机没做什么配置,但注意到也配置了ip dhcp snooping ,这是时想 dhcp snooping 的主要功能是:能够拦截第二层VLAN域内的所有DHCP报文,查看与6509所接的端口,没有启用dhcp snooping trust ,呵呵,这就是问题所在了。
 
DHCP监听将交换机端口划分为两类:
    ●非信任端口:通常为连接终端设备的端口,如PC,网络打印机等
    ●
信任端口:连接合法DHCP服务器的端口或者连接汇聚交换机的上行端口
 
根据以上可知,我在级连接口上启用ip dhcp snooping trust 后,把本地接口接上,马上获取到了IP地地址。
 
下面是我在网上查到的关于ip dhcp snooping 的东西,总结一下:
 
一、DHCP snooping 技术介绍
 
DHCP监听(DHCP Snooping)是一种DHCP安全特性。Cisco交换机支持在每个VLAN基础上启用DHCP监听特性。通过这种特性,交换机能够拦截第二层VLAN域内的所有DHCP报文。
 
通过开启DHCP监听特性,交换机限制用户端口(非信任端口)只能够发送DHCP请求,丢弃来自用户端口的所有其它DHCP报文,例如DHCP Offer报文等。而且,并非所有来自用户端口的DHCP请求都被允许通过,交换机还会比较DHCP 请求报文的(报文头里的)源MAC地址和(报文内容里的)DHCP客户机的硬件地址(即CHADDR字段),只有这两者相同的请求报文才会被转发,否则将被丢弃。这样就防止了DHCP耗竭攻击。信任端口可以接收所有的DHCP报文。通过只将交换机连接到合法DHCP服务器的端口设置为信任端口,其他端口设置为非信任端口,就可以防止用户伪造DHCP服务器来攻击网络。DHCP监听特性还可以对端口的DHCP报文进行限速。通过在每个非信任端口下进行限速,将可以阻止合法DHCP请求报文的广播攻击。DHCP监听还有一个非常重要的作用就是建立一张DHCP监听绑定表(DHCP Snooping Binding)。一旦一个连接在非信任端口的客户端获得一个合法的DHCP Offer,交换机就会自动在DHCP监听绑定表里添加一个绑定条目,内容包括了该非信任端口的客户端IP地址、MAC地址、端口号、VLAN编号、租期等信息。
 
二、DHCP snooping 配置
 
Switch(config)#ip dhcp snooping //打开DHCP Snooping功能
Switch(config)#ip dhcp snooping vlan 10 //
设置DHCP Snooping功能将作用于哪些VLAN
Switch(config)#ip dhcp snooping verify mac-adress                 
 
//检测非信任端口收到的DHCP请求报文的源MACCHADDR字段是否相同,以防止DHCP耗竭攻击,该功能默认即为开启

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

Switch(config-if)#ip dhcp snooping limit rate 15 
 
//限制非信任端口的DHCP报文速率为每秒15个包(默认即为每秒15个包)如果不配该语句,则show ip dhcp snooping的结果里将不列出没有该语句的端口,可选速率范围为1-2048
 
建议:在配置了端口的DHCP报文限速之后,最好配置以下两条命令
Switch(config)#errdisable recovery cause dhcp-rate-limit                 
//使由于DHCP报文限速原因而被禁用的端口能自动从err-disable状态恢复

Switch(config)#errdisable recovery interval 30
//设置恢复时间;端口被置为err-disable状态后,经过30秒时间才能恢复
 
Switch(config)#ip dhcp snooping information option                 
//设置交换机是否为非信任端口收到的DHCP报文插入Option 82,默认即为开启状态
Switch(config)#ip dhcp snooping information option allow-untrusted                
//设置汇聚交换机将接收从非信任端口收到的接入交换机发来的带有选项82DHCP报文

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

Switch(config)#ip dhcp snooping database
tftp://192.168.2.5/Switch/dhcp_snooping.db 
//将DHCP监听绑定表保存到tftp服务器;192.168.2.5tftp服务器地址,必须事先确定可达。URL中的Switchtftp服务器下一个文件夹;保存后的文件名为dhcp_snooping.db,当更改保存位置后会立即执行操作。

Switch(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监听绑定表。