问题现象:
由于DHCP Server和DHCP Client之间没有认证机制,所以如果在网络上随意添加一台DHCP服务器,它就可以为客户端分配IP地址以及其他网络参数,以致终端无法正常上网。
解决方法:
为了防止DHCP Server仿冒者攻击,可在DHCP服务器与DHCP客户端中间的网络设备上配置对应接口的“信任(Trusted)/非信任(Untrusted)”工作模式。
将与合法DHCP服务器直接或间接连接的接口设置为信任接口,其他接口设置为非信任接口。此后,从“非信任(Untrusted)”接口上收到的DHCP回应报文将被直接丢弃,这样可以有效防止DHCP Server仿冒者的攻击。
配置命令:
案例一:G0/0/1连接服务器,配置为trusted口,其它端口都设置为untrusted口
#
dhcp enable
#
dhcp snooping enable
#
interface GigabitEthernet0/0/1
dhcp snooping enable
dhcp snooping trusted
#
interface GigabitEthernet0/0/2
dhcp snooping enable
#
interface GigabitEthernet0/0/3
dhcp snooping enable
#
开启DHCP Snooping后,各端口对DHCP包处理结果
接口下DHCP Snooping状态 | 收到DHCP请求报文 (Discover与Request) | 收到DHCP响应报文 (Offer与Ack) | |
接口下使能dhcp snooping enable | dhcp snooping trusted | 接DHCP服务器的端口配置为信任端口,故端口入向一般不会收到请求报文,故不做分析 | 转发 |
dhcp snooping untrusted (默认状态) | 接DHCP客户端的端口配置为非信任端,当端口入向收到请求报文,转发给所有的信任接口 | 丢弃 | |
接口下未使能dhcp snooping enable | 转发给所有端口 | 转发 |
情况一:当G0/0/2口(非信任端口)连接服务器,G0/0/18口(接口未使能DHCP Snooping)连接客户端,客户端无法获取IP,G0/0/2抓包会发现只有Discover与Offer包,而G0/0/18只有Discover的包,证明非信任端口在收到DHCP响应报文时会丢弃。
情况二:当G0/0/2口(非信任端口)连接服务器,G0/0/3口(非信任端口)连接客户端,客户端无法获取IP,G0/0/2抓不到任何DHCP包,G0/0/3只能抓包Discover包,证明非信任端口G0/0/3收到请求报文时,只把请求报文转发给信任端口。
情况三:当G0/0/1口(信任端口)连接服务器,G0/0/2(非信任端口)与G0/0/18口(接口未使能DHCP Snooping)连接客户端,G0/0/2与G0/0/18口暂能正常获取IP。