网络的普及与网络技术的成熟,现在的人越离不开网络,个人的手机,电脑,智能家居设备等都需要网络,我们的这些用网的设备无论是在在访问Internet网,还是局域网内部通信都离开不了IP地址的支持,IP地址就是这些硬件在网络上互相交互信息时用来区分彼此的"名字",无论你是使用IPv6还是IPv4,都需要给你的网络设备分配一个对应的地址。
IP地址在计算机的世界里是一段有规律的0和1(二进制数),IPv4地址32位的0和1,IPv6地址128位的0和1,我们人无论是去记忆还是手写这些二进制的0和1都是非常困难的,可是没有IP地址你的电脑即使连接了网线,也向运营商办理了宽带,上网的基础环境也准备好了,也就是无法访问网络的。而大叔非网络专业相关的人员不要说去记忆或者配置这些IP地址了,可能对于IP地址的组合与识别都做不到。
既为了简化IP地址的使用,又为了把网络管理人员从IP地址配置的重复工作中解放出来,网络技术里加入了DHCP-- Dynamic Host Configuration Protocol动态主机配置协议。DHCP服务可以为网络中的接入终端(电脑,手机等普通的用户设备)自动下发一个正确且不重复的IP地址;同时为了使得用户可以正常访问网络,DHCP服务还会为终端设备下发管理员指定正确的GW-网关地址(提供跨网段访问)和DNS(提供IP地址与域名的解析)服务器地址。
如图DHCPserver为接入的终端PC-1到PC-3提供IP地址,掩码,网关,DNS等上网必须信息。
DHCP服务的正确使用可以为接入终端上网带来极大的便利,可是如果如果因为错误配置及部署导致网络中存在多个DHCP服务器就会带来严重问题。因为网络管理员指定的DHCP服务器里配置和网段和网关地址是当前网络设备(主要是网关路由器)所认识的,这样获得IP地址的终端设备是可以找到正确的网关,通过正确的网关设备访问公网。
从上面的拓扑与测试环境就可以看到获得192.168.1.0网段IP地址的PC-1是可以访问外网的,因为这个网段的IP地址我们的网关GW是可以识别的,网关路由器上并不存在172.168.1.0网段的路由,所以无法处理此网段成员的数据。而且网络中存在于网关设备不匹配的DHCP服务器,会影响网络的多个终端设备的正常访问。DHCP功能又是网络设备最基本的功能之一,所以很多家用的路由器想TP-Link,小米,华为家用路由器都可以当作一台DHCP服务器,而这些家用路由器配置简单,很多人都即插即用,一般用在接口扩展或者无线扩展,但很多人并不清楚这些路由器默认运行这DHCP功能,有着缺省的DHCP参数,再不关闭DHCP功能就接入到网络中,就会为正常的网络运作埋藏隐患或者造成无法上网的故障。
终端设备向DHCP服务器请求地址时发送的是DHCP的广播消息,这样在网络中的(一个广播域且不涉及DHCP中继的情况)所有设备都会收到此请求信息,如果网络中存在多个多个DHCP服务器或者具有DHCP功能的设备都会对这个请求消息做出响应,我们的终端设备是无法分辨哪个是合法的DHCP服务器,哪个是非法的,也无法分辨哪个DHCP服务器的回应的网段是可用的,下发的网关地址是安全的,如果把终端设备请求地址比做人组房子,那我们房客一般是无法分辨出哪些中介(DHCP服务器)是合法的哪些是黑心的?
如果终端设备收到多个DHCP服务器的的回应,终端设备会按照"先到先得"的原则来使用第一个到达终端设备的DHCP数据包中的IP地址。在如今稍微有点规模的网络中网络规划中会设定单独的DHCP服务器,而且距离用户的接入层相较来说有点远,而用户私自接入的DHCP服务器的数据包往往在接入层,直接面向终端,这样只要接入端有一台私自接入DHCP服务器,就会影响到终端的接入端成员,造成成片区域的用户因为获得错误的IP地址及网关地址而无法正常访问网络。
为了防止私自接入或者恶意接入DHCP服务器造成网络中的终端设备获得错误的IP地址和网关地址而导致的网络无法正常访问,也为了防止网络攻击者恶意部署DHCP服务器将向内网用户下发攻击者指定的网关地址,导致内网用户访问外网的数据引导至非法网关导致用户数据的泄露。
DHCP Snooping是DHCP安全特性,通常部署在接入端的交换机上,开启DHCP Snooping功能的交换机会将所有的接口针对DHCP报文设定为不信任状态---即不转发或者上传任何DHCP的请求和回应报文,对于连接合法DHCP服务器的接口设置为信任接口,可以正常发送DHCP报文。
使用DHCP Snooping功能后我们就可以有效的防止因为用户私自接入具有DHCP功能设备下发错误的IP及网关地址导致网络内的用户无法正常上网的问题,同时也可以防止针对DHCP发起的各类攻击,如DHCP饿死攻击---攻击者发送大量的DHCP请求报文,将DHCP服务器的IP地址池里的地址占用殆尽,造成合法用户无地址可用;DHCP的续租报文攻击—攻击者冒充合法用户不断续租DHCP下发的IP地址,即使使用此IP地址的合法用户依据下线,DHCP服务器也无法正常回收地址。
接下来我们通过实验来验证DHCP Snooping开启前与开启后的区别
1---没有开启DHCP Snooping时 交换机对于DHCP数据包的处理
,
我们在没有开启图中接入交换机SW-2的DHCP Snooping的情况下,开机电脑PC-3,让他通过DHCP自动获得IP地址,这时我们会发现PC-3获取了非法DHCP服务器提供的 172.168.1.0/24网段的IP地址,因为这个非法服务器(172.168.1.0)距离电脑比合法DHCP服务器(192.168.1.0)要"更近"(物理距离上),所以即使PC-3的DHCP请求包这两台DHCP服务器都收到并且都做了回应,PC-3依然只接收了来自非法DHCP服务器的提供的IP地址。
2---接下来我们在SW-2上开启DHCP Snooping功能继续在SW-2的G0/0/5接口配置IP地址。
[SW-2]dhcp enable ---------交换机要运行DHCP Snooping功能,先必须开启这台交换机的DHCP功能
[SW-2]
[SW-2]dhcp snooping enable -----运行DHCP Snooping功能
[SW-2]
[SW-2]vlan 1---------------------------------------进入连接vlan 1
[SW-2-vlan1]
[SW-2-vlan1]dhcp snooping enable--------------------在vlan 进程下开启DHCP Snooping功能,这样这个vlan 1的所有接口的DHCP Snooping特性就开启了,默认处于不信任状态,不转发DHCP的请求与回应报文
[SW-2-vlan1]qui
[SW-2-vlan1]quit
[SW-2]
开启DHCP Snooping后交换机对DHCP报文进行丢弃,不做转发,所以PC-7的DHCP请求包其实没有送到整个环境中的任何一台DHCP服务器,就算送到了,受DHCP Snooping的作用,交换机也不会对不信任接口的DHCP应答报文进行转发。
我们继续部署,配置SW-2的 G0/0/1接口为信任接口,这个接口可以转发DHCP服务器的报文;这里我们只需要在连接DHCP服务器的接口或者DHCP服务器方向的接口配置信任即可(当DHCP服务器没有在在开启DHCP Snooping功能的交换机上直连时)
对连接DHCP服务器(方向)的接口配置为DHCP Snooping信任接口后 我们在PC-7上扑捉到了来自次SW-2的G0/0/1接口的DHCP 服务器的回应包---属于192.168.1.0网段的IP地址
这样我们通过DHCP Snoopin功能就解决了因为私接DHCP 服务器导致网络内用户无法正常上网的需求