在DHCPsnooping环境中(部署在交换机上),我们将端口视为trust或untrust两种安全级别,也就是信任或非信任接口。在交换机上,将连接合法DHCP服务器的接口配置为trust。只有trust接口上收到的来自DHCPserver的报文(如DHCPOFFER,DHCPACK, DHCPNAK,或者DHCPLEASEQUERY)才会被放行,相反,在untrust接口上收到的来自DHCPserver的报文将被过滤掉,这样一来就可以防止非法的DHCPserver接入。同时在部署了DHCPSnooping了交换机本地,还能维护一张DHCPsnooping的绑定数据库(bindingdatabase),用于保存侦听到的DHCP交互的表项,信息包括(针对untrust接口的):MAC地址、IP地址(DHCP分配的)、租期、绑定类型、VLAN号、接口编号(DHCP客户端也就是连接客户端PC的untrust接口)。这个DHCPsnooping bandingdatabse除了可以做一些基本的安全接入控制,还能够用于DAI等防ARP欺骗的解决方案。 一台支持DHCPsnooping的交换机,如果在其untrust接口上,收到来自下游交换机发送的、且带有option82的DHCP报文,则默认的动作是丢弃这些报文。如果该交换机开启了DHCPsnooping并且带有option82的DHCP报文是在trusted接口上收到的,则交换机接收这些报文,但是不会根据报文中包含的相关信息建立DHCPbingding databse表项。
如果交换机确实通过一个untrust接口连接了下游交换机,并且希望放行该接口收到的、下游交换机发送出来的带有option82的DHCP报文,则可使用全局命令:ipdhcp snooping information optionallow-untrusted,同时由于是通过untust接口收到的DHCP报文,因此会根据侦听的结果创建DHCP snoopingbinding database表项。
二、Option82 DHCP option82又称为DHCP中继代理信息选项(Relay Agent InformationOption),是DHCP报文中的一个选项,其编号为82 CISCO注释:The DHCPoption-82 feature is supported only when DHCP snooping is globallyenabled and on the VLANs to which subscriber devices using thisfeature are assigned.
基本的交互过程如下(下面描述的过程与上面的配图无关):
- DHCP client广播DHCP request
- 交换机收到DHCPrequest,它在报文中插入option82信息(当然,要你先做了相应的配置后),在插入的信息中,remote-IDsuboption是该交换机的MAC;circuit-ID suboption是收到DHCP request报文的接口ID。
- 如果交换机上还部署了DHCP relay,那么交换机将中继地址也添加进DHCP报文中
- 交换机将携带了option82信息的DHCP报文转发给DHCP服务器
- DHCP服务器接收到了DHCP报文,如果这台服务器是能够识别option82的,那么它将根据option82中携带的信息,来为客户端分配IP地址,以及选择相应的策略。然后服务器回应一个DHCP包,其中也包含option82信息。
- 交换机收到该DHCP报文后,发现报文的option82信息正是从本地始发,交换机将option82信息移除后,将DHCP报文转发给DHCPclient。
在上述事件的发生过程中,下面字段的内容不会发生改变: –Suboption type –Length of the suboption type –Circuit-ID type –Length of the circuit-ID type –Suboption type –Length of the suboption type –Remote-ID type –Length of the remote-ID type
In the port field of thecircuit-ID suboption, the port numbers start at3.也就是说这个字段中,端口号是从3开似乎的,第一个端口号就是3,依次类推。例如,一个带了SFP插槽的24口交换机,port3是fastx/0/1,port4是fast x/0/2,以此类推,port 27就是sfq模块的x/0/1口。其中x为堆叠成员编号。
Option报文结构:DHCP option 82又称为DHCP中继代理信息选项(Relay Agent InformationOption),是DHCP报文中的一个选项,其编号为82。rfc3046定义了option 82,选项位置在option255之前而在其它option之后。
CODE:82LEN:Agent Information field的字节数,不包含code及len字段的长度Option82可包含多个suboption,rfc3046定义了如下两个:
Subopt:子选项编号,如果是circuit ID则值为1,remote ID则值为2Len:Sub-option Value的字节个数,不包括SubOpt和Len字段的两个字节
option82子选项1:即CircuitID,它表示接收到的DHCP请求报文来自的电路标识,这个标识只在中继代理节点内部有意义,在服务器端不可以解析其含义,只作为一个不具含义的标识使用。一般情况下,默认是接收到DHCP请求报文的接入交换机VlanID加接入二层端口名称,如Vlan2+Ethernet0/0/10,也可以由用户指定自己的代理电路ID。通常子选项1与子选项2要共同使用来标识DHCP客户端的信息。
option82子选项2:即 RemoteID,一般情况下为插入该option82信息的接入层交换机的MAC。
CISCO注释:If the DHCP relay agent is enabled but DHCP snoopingis disabled, the DHCP option-82 data insertion feature is notsupported.
三、DHCP Snooping BindingDatabase
在交换机上激活DHCPsnooping后,交换机会使用在untrust接口上“侦听到的“DHCP交互内容形成一个表:dhcp snoopingbinding database。如下:SW1#show ip dhcp snoopingbindingMacAddress ipAddress Lease(sec)Type VLAN Interface------- ----------- ---------- ------------- ------------------------00:B0:64:04:09:99 192.168.10.1 86025 dhcp-snooping 10 FastEthernet0/1Total number of bindings: 1
默认情况下,这个数据库是动态的,也就是说当交换机重启,数据库内的表项全部丢失。这个事情的结果可能会造成网络的中断。因此我们可以将这个数据库以文件的形式存储起来,这个就是DHCPsnooping database agent。
配置命令非常简单,全局命令:SW2(config)#ip dhcp snooping database ? flash: Database agent URL ftp: Database agent URL http: Database agent URL https: Database agent URL rcp: Database agent URL scp: Database agent URL tftp: Database agent URL timeout Configure abort timeoutinterval write-delay Configuredelay timer for writes to URL由于flash空间非常有限,因此建议将文件存储在TFTP服务器上。当部署在TFTP服务器上时,注意先创建一个空的文件以对应配置命令中的URL,这个文件用于dhcpsnooping bingding database的写入(视具体设备而定)。
形成的文件的格式如下:TYPE DHCP-SNOOPINGVERSION 1BEGIN......END
下面是一个例子:2bb4c2a1TYPE DHCP-SNOOPINGVERSION 1BEGIN192.1.168.1 3 0003.47d8.c91f 2BB6488E interface-id21ae5fbb192.1.168.3 3 0003.44d6.c52f 2BB648EB interface-id1bdb223f192.1.168.2 3 0003.47d9.c8f1 2BB648AB interface-id584a38f0END
四、配置示例1.实验1:基础实验PC属于VLAN10,网关在SW2上。DHCPserver属于VLAN100,网关在SW2上。SW1为接入层交换机,部署DHCP snooping,将Fa0/24定义为trust接口。SW2为核心层交换机,部署DHCP relay
DHCPserver的配置如下:no ip routingip default-gateway 192.168.100.254Interface fast0/0 ip address 192.168.100.1255.255.255.0 no shutdown exitService dhcpIp dhcp pool vlan10 network 192.168.10.0 /24 default-router 192.168.10.254
SW1的配置如下:vlan 10!ip dhcp snooping !! 全局开启DHCPsnoopingip dhcp snooping vlan 10 !!vlan10激活DHCP snoopingno ip dhcp snooping informationoption !!不写入option82!Interface fast0/1 switchport access vlan 10interface fast0/24 switchport trunk encapsulation dot1q switchport mode trunk ip dhcp snoopingtrust
SW2的配置如下:vlan 10vlan 100 name Server!Interface fast0/1 switchport access vlan 100interface fast0/24 switchport trunk encapsulation dot1q switchport mode trunkInterface vlan 10 ip address 192.168.10.254255.255.255.0 ip helper-address 192.168.100.1Interface vlan 100 ip address 192.168.100.254255.255.255.0
实验结果:PC获取到了地址,在SW1上查看dhcp snooping bingding databsae:SW1#show ip dhcp snoopingbindingMacAddress ipAddress Lease(sec)Type VLAN Interface------ --------------- ---------- ---------- -----------------------00:B0:64:04:09:99 192.168.10.1 86025 dhcp-snooping 10 FastEthernet0/1Total number of bindings: 1
2.实验2:接入交换机插入option82,核心交换机做中继在SW1上开启DHCP snooping,同时不去no ip dhcp snooping informationoption,也就是插入option82。其他设备配置与上一个实验相同,发现PC机无法获取地址,通过在网关设备上,也即是SW2上debug会发现报错:relayinformation option exists, but giaddr iszero。giaddr字段意思为该报文做经过的第一个DHCP中继代理的IP地址。在SW2上增加配置:(全局配置模式)ip dhcp relay information trust-all或:Interface vlan 10 ip dhcp relay information trusted上述命令,将使交换机接受携带option82信息,同时giaddr为0的dhcp报文,然后做中继。如此一来即可成功获取地址。
SW1的配置如下:vlan 10!ip dhcp snoopingip dhcp snooping vlan10Interface fast0/1 switchport access vlan 10interface fast0/24 switchport trunk encapsulation dot1q switchport mo————de trunk ip dhcp snoopingtrust
SW2的配置如下:vlan 10vlan 100 name Server!ip dhcp relay informationtrust-allInterface fast0/1 switchport access vlan 100interface fast0/24 switchport trunk encapsulation dot1q switchport mode trunkInterface vlan 10 ip address 192.168.10.254255.255.255.0 ip helper-address 192.168.100.1Interface vlan 100 ip address 192.168.100.254255.255.255.0
3.实验3:接入层交换机插入option82,上游核心交换机也开启dhcp snooping接入层交换机SW1开启dhcp snooping,插入option82;核心层交换机SW2也开启dhcpsnooping,默认所有端口都是untrust的,这时如果SW2的fast0/24口收到携带了option82的dhcp报文,则丢弃。解决办法之一,是将SW2的fast0/24口配置为trust接口,但是这么一来通过该trust接口收到的dhcp报文,是不会创建dhcpsnooping binding表项的。另一个方法是,使用命令:ip dhcp snooping information optionallow-untrusted。这条命令放行携带了option82的DHCP报文,同时会在本地创建dhcp snoopingbinding表项。
SW1的配置如下:vlan 10!ip dhcp snoopingip dhcp snooping vlan 10Interface fast0/1 switchport access vlan 10interface fast0/24 switchport trunk encapsulation dot1q switchport mode trunk ip dhcp snooping trust
SW2的配置如下:vlan 10vlan 100 name Server!ip dhcp snooping information optionallow-untrustedip dhcp relay information trust-all !!注意区分上述两条命令Interface fast0/1 switchport access vlan 100interface fast0/24 switchport trunk encapsulation dot1q switchport mode trunkInterface vlan 10 ip address 192.168.10.254255.255.255.0 ip helper-address 192.168.100.1Interface vlan 100 ip address 192.168.100.254255.255.255.0
4.无DHCP中继环境中,option82及相关问题
这个环境比较简单,PC与DHCP服务器同处一个VLAN,我主要想证实一下普通交换机对携带了option82的DHCP包的处理情况。SW1仍然开启dhcp snooping,同时插入option82SW2将服务器划入与PC相同的VLAN,相当于纯做透传。其中SW1的配置如下:vlan 10!ip dhcp snoopingip dhcp snooping vlan 10Interface fast0/1 switchport access vlan 10interface fast0/24 switchport trunk encapsulation dot1q switchport mode trunk ip dhcp snooping trust
SW2的配置如下:vlan 10!Interface fast0/1 switchport access vlan 10interface fast0/24 switchport trunk encapsulation dot1q switchport mode trunkInterface vlan 10 ip address 192.168.10.254255.255.255.0DHCP server的配置就是常规配置,这里不再赘述。
实验的结果是,PC无法获取地址。我们分析一下,SW1将PC发出来的DHCP请求消息插入option82,随后发给SW2。通过SW2上的debug信息我们发现:*Mar 16 17:09:21.858: DHCPD: inconsistent relayinformation.*Mar 16 17:09:21.858: DHCPD: relay information option exists,but giaddr is zero.SW2意识到,DHCP报文中有中继信息选项,也就是option82,但是giaddr是全0。SW2虽然意识到了这个问题,但还是乖乖将这个数据交给了DHCPserver,通过在DHCPserver上的debug信息:*Mar 4 07:02:23.473: DHCPD: inconsistentrelay information.*Mar 4 07:02:23.473: DHCPD: relayinformation option exists, but giaddr is zero.显然,DHCP服务器也意识到了上面的问题,它采取的动作是,忽略这个DHCP请求。因此PC无法获取地址。
解决的办法之一,是SW1不插入opiton82,另一个方法,是在DHCPserver上,使用配置:(全局配置模式)ip dhcp relay information trust-all或:Interface fast0/0 ip dhcp relay information trusted思路和实验2一样。这样一来SW2会接受这些DHCP报文并进行处理,PC就能够获取到地址了。
5.其他配置ip dhcp snooping limit rate rate注意,在交换机开启了DHCPsnooping后,由于对dhcp报文都要进行窥探,因此当网络中存在DHCP攻击行为,将会严重消耗交换机的性能,因此,可以通过该命令限制接口上允许收到的DHCP报文数量。Configurethe number of DHCP packets per second that an interface canreceive. The range is 1 to 2048. By default, no rate limit isconfigured.
ip dhcp snooping verify mac-addressConfigure the switch to verify that the source MAC address ina DHCP packet received on untrusted ports matches the clienthardware address in the packet. The default is to verify that thesource MAC address matches the client hardware address in thepacket.
ip dhcp snooping binding mac-address vlan vlan-idip-address interface interface-id expiry seconds静态配置一条dhcp snooping bingding dabase表项,该命令是在特权模式下配置。
红茶三杯网络工程 | 项目管理 | IT服务管理 | CCIE培训学习 沉淀 成长 分享微博:http://weibo.com/vinsoney博客:http://blog.sina.com.cn/vinsoney站点:http://ccietea.com