DHCP 协议被广泛用来动态分配可重用的网络资源,如 IP 地址。一次典型的DHCP Client 发出 DHCP DISCOVER广播报文给 DHCP Server,若 Client 在一定时间内没有收到服务器的响应,则重发 DHCP DISCOVER 报文。
DHCP Server收到 DHCP DISCOVER报文后,根据一定的策略来给 Client 分配资源(如 IP 地址),然后发出 DHCP OFFER报文。
DHCP Client 收到 DHCP OFFER报文后,发出 DHCP REQUEST请求,请求获取服务器租约,并通告其他服务器已接受此服务器分配地址。
服务器收到 DHCP REQUEST报文,验证资源是否可以分配,如果可以分配,则发送 DHCP ACK 报文;如果不可分配,则发送 DHCP NAK 报文。DHCP Client收到 DHCP ACK 报文,就开始使用服务器分配的资源。如果收到 DHCP NAK,则重新发送 DHCP DISCOVER报文。
理解DHCP Snooping
DHCP Snooping 就是 DHCP 窥探,通过对 Client 和服务器之间的 DHCP 交互报文进行窥探,实现对用户的监控,同时 DHCP Snooping起到一个 DHCP 报文过滤的功能,通过合理的配置实现对非法服务器的过滤。下边对 DHCP Snooping内使用到的一些术语及功能进行一些解释:
DHCP Snooping TRUST 口:由于 DHCP 获取 IP的交互报文是使用广播的形式,从而存在着非法服务器影响用户正常 IP 的获取,更有甚者通过非法服务器欺骗窃取用户信息的现象,为了防止非法服务器的问题,DHCP nooping 把端口分为两种类型, TRUST口和UNTRUST口,设备只转发TRUST口收到的DHCP Reply报文,而丢弃所有来自UNTRUST口DHCP Reply报文,这样我们把合法的DHCP Server 连接的端口设置为 TURST 口,其他口设置为 UNTRUST 口,就可以实现对非法 DHCP Server 的屏蔽。
DHCP Snooping 绑定数据库:在 DHCP 环境的网络里经常会出现用户私自设置IP 地址的问题,用户私设 IP 地址不但使网络难以维护,并且会导致一些合法的使用 DHCP 获取 IP 的用户因为冲突而无法正常使用网络, DHCP Snooping通过窥探 Client 和 Server 之间交互的报文,把用户获取到的 IP信息以及用户 MAC、VID、PORT、租约时间等信息组成一个用户记录表项,从而形成一个 DHCP Snooping 的用户数据库,配合 ARP检测功能的使用,从而达到控制用户上网的目的。
DHCP Snooping 就是通过对经过设备的 DHCP 报文进行合法性检查,丢弃不合法的 DHCP 报文,并记录用户信息生成 DHCP Snooping 绑定数据库供 ARP 检测查询使用。以下几种类型的报文被认为是非法的 DHCP 报文:
1. UNTRUST 口收到的 DHCP reply 报文,包括 DHCPACK、DHCPNACK、DHCPOFFER 等。
2. 打开 mac 校验时,源 MAC 与 DHCP 报文携带的 DHCP Client 字段值分别为不同的报文。
3. 用户的信息存在于 DHCP Snooping 绑定数据库中,但是端口信息与设备保存在DHCP绑定数据库中的信息中的端口信息不一致的DHCPRELEASE报文。
DHCP Snooping和ARP探测的关系
ARP 探测就是对经过设备的所有 ARP 报文进行检查, DHCP Snooping需要提供数据库信息供 ARP 探测使用,在开启 DAI 功能的设备上,当收到 ARP报文时,DAI 模块就根据报文查询 DHCP snooping的绑定数据库,只有当收到得 ARP 报文得 mac、ip 和端口信息都匹配时才认为收到的 ARP 报文是合法的,才进行相关的学习和转发操作,否则丢弃该报文。
DHCP Snooping配置的其他注意事项
DHCP Snooping功能与 1x的 DHCP Option 82 功能是互斥的,即不能同时使用
DHCP Snooping和 DHCP Option82
DHCP Snooping仅对用户的DHCP过程进行窥探,若想控制用户必须使用DHCP分配的 IP 上网, 则必须使用 ARP 探测功能,而 ARP 检测模块需要检测所有 ARP报文,所以会对设备的整体性能产生影响,需要用户注意。
配置打开和关闭DHCP Snooping
缺省情况下,设备的 DHCP Snooping 功能是关闭,当配置 ip dhcp snooping 命
令后,设备就打开了 dhcp snooping 功能,开始对 dhcp报文进行监控。
命令 说明
switch# configure terminal 进入配置模式
switch(config)# [no] ip dhcp snooping DHCP snooping打开和关闭
下边是配置打开设备 DHCP snooping功能:
switch# configure terminal
switch(config)# ip dhcp snooping
switch(config)# end
switch#
配置DHCP源MAC检查功能
配置此命令后,设备就会对 UNTRUST 口送上来的 DHCP Request 报文进行源
MAC和 Client 字段的 MAC地址校验检查,丢弃 MAC值不相同的不合法的报文。
默认不检查。
命令 说明
switch# configure terminal 进入配置模式
switch(config)# [no]ip dhcp snooping
verify mac-address
打开和关闭源 MAC检查功能
下边的是打开 DHCP 源 MAC检查的功能
switch# configure terminal
switch(config)# ip dhcp snooping verify mac-address
switch(config)# end
switch#
配置静态DHCP snooping用户
在某些应用情况下,某些端口下的用户希望能够静态使用某些 IP,就可以通过静
态配置此用户信息来实现。
命令 说明
switch# configure terminal 进入配置模式
switch(config)# [no] ip dhcp snooping
bindingmac-addrees vlan vlan_id ip
ip-addressinterface interface-id
设置 DHCP 静态用户到 DHCP
snooping 绑定数据库
下边是添加一个静态的用户到设备的 9端口:
switch# configure terminal
switch(config)# ip dhcp snooping binding 00d0.f801.0101 vlan
1 ip 192.168.4.243 interface gigabitEthernet 0/9
switch(config)# end
switch#
配置定时写DHCP Snooping数据库信息到flash
为了防止设备断电重启导致设备上的 DHCP 用户信息丢失,所以 DHCP
Snooping 提供可配置的定时把 DHCP Snooping 数据库信息写入 flash的命令,
默认情况下,定时为 0,即不定时写 flash。
命令 说明
switch# configure terminal 进入配置模式
switch(config)# [no] ip dhcp snooping
database write-delay [time]
设置DHCP延迟写flash的时间
time:600s--86400s.缺省为 0
下边的是设置 DHCP Snooping延迟写 flash的时间为 3600s:
switch# configure terminal
switch(config)# ip dhcp snooping database write-delay 3600
switch(config)# end
switch#
手动把DHCP snooping数据库信息写到flash
为了防止设备断电重启导致设备上的DHCP用户信息丢失,除了配置定时写flash
外,也可以根据需要手动地把当前的DHCP Snooping绑定数据库信息写入flash。
命令 说明
switch# configure terminal 进入配置模式
switch(config)# ip dhcp snooping database
write-to-flash
把DHCP snooping数据库信息
写入 flash
下边的是手动的把 DHCP Snooping 数据库信息写入 flash:
switch# configure terminal
switch(config)# ip dhcp snooping database write-to-flash
switch(config)# end
配置端口为TRUST口
用户通过配置此命令来设置一个端口为 TRUST 口,默认情况下所有端口全部为
UNTRUST 口:
命令 说明
switch# configure terminal 进入配置模式
switch(config)# interface interface 进入接口配置模式
switch(config-if)# [no] ip dhcp snooping trust 将端口设置为 trust 口
下边是配置设备的 1端口为 TRUST 口:
switch# configure terminal
switch(config)# interface gigabitEthernet 0/1
switch(config-if)# ip dhcp snooping trust
switch(config-if)# end
switch#
清空DHCP Snooping数据库动态用户信息
此命令用于清空当前的 DHCP Snooping 数据库的信息。
命令 说明
switch# clear ip dhcp snooping binding 清空当前数据库的信息
下边的是手动清空当前数据库的信息:
switch# clear ip dhcp snooping binding
DHCP snooping配置显示
显示DHCP snooping
您可以通过以下步骤显示 ip dhcp snooping内容
命令 说明
switch# show ip dhcp snooping
显示 dhcp snooping 的相关配
置信息
例如:
switch# show ip dhcp snooping
Switch DHCP snooping status : ENABLE
DHCP snooping Verification of hwaddr status : ENABLE
DHCP snooping database wirte-delay time : 3600
Interface Trusted
------------------------ -------
GigabitEthernet 0/1 YES
显示DHCP snooping 数据库信息
您可以通过以下步骤显示 ip dhcp snooping数据库信息的相关内容
命令 说明
switch# show ip dhcp snooping binding
查看 DHCP Snooping 绑定数
据库的静态用户信息
例如:
switch# show ip dhcp snooping binding
MacAddress IpAddress Lease(sec) Type VLAN Interface
------------------ --------------- ---------- -------------
00d0.f801.0101 192.168.4.243 - static 1 GigabitEthernet 0/9