概述:
在PC數量30臺以下的小型局域網,如果是較為穩定的辦公PC我會推薦用固定IP地址,但是如果PC數量較多的情況下,手動去設置IP地址明顯不合適(幾百臺PC全部手工配IP會瘋的),這種情況下就要用到DHCP了,DHCP可以為PC自動分配IP地址,這個節省了很多工作量,因為PC機的獲取IP的機制問題,PC會獲取最先響應的DHCP所分配的地址,那麼這裡問題就來了,假設在一個企業網絡中,有一個用戶私接了一臺家用無線路由,大家都知道無線家用路由器是默認開啟DHCP服務器的,這個時候有一臺PC剛好開機,正好也是自動獲取IP地址的,那麼這臺PC就會發送DHCP請求報文,因為DHCP請求報文是以廣播形式發送的,所以無線路由器也會接收到這請求,然後無線路由器率先響應了這臺PC,然後這臺PC就會使用無線路由器所分配的IP地址了,這種情況最糟糕的就是大面積斷網了,而且因為這個路由器是用戶私自接入的,同時也增加了排查難度。這種情況我們稱之為非法DHCP攻擊。
上述的這個局域網如果配置了DHCP Snooping就不會出現這種情況了,那麼我們先來了解一下DHCP Snooping是一個怎樣的協議。
DHCP Snooping:
DHCP Snooping是一種安全特性,是為了保證客戶端能夠從合法的DHCP服務器上獲取到IP地址。
DHCP Snooping最核心的功能就是"信任功能",這個信任功能可能控制DHCP服務器報文的來源,信任功能會把端口分成"信任端口"和"非信任端口"。
信任端口:允許所有的DHCP報文通過。
非信任端口:不允許DHCP服務器響應報文通過,當非信任端口接收到DHCP響應報文後會把這個報文丟棄。
通過信任端口和非信任端口基本上就可以排除非法DHCP了。
實驗:
下面我們通過ENSP模擬軟件進行模擬實驗。
描述:正常情況下PC1和PC2需要獲取到從R1分配到的192.168.1.0 網段的IP地址,但是因為有R2的非法DHCP服務器的存在,PC1和PC2就會有概率獲取到R2所分配的非法DHCP地址。
實驗環境一(未配置DHCP Snooping):
R1:
- dhcp enable
- interface Ethernet0/0/0
- ip address 192.168.1.1 255.255.255.0
- dhcp select interface
- dhcp server lease day 0 hour 4 minute 0
- dhcp server dns-list 8.8.8.8 8.8.4.4
R2:
- dhcp enable
- interface Ethernet0/0/0
- ip address 192.168.2.1 255.255.255.0
- dhcp select interface
- dhcp server lease day 0 hour 4 minute 0
- dhcp server dns-list 1.1.1.1 2.2.2.2
SW1:
- 無需配置,默認即可。
不知道上述的實驗配置如何配置的話可以查看一下我前段時間寫的這篇文章
實驗結果:
PC1和PC2 成功地被R2所迷惑了,獲取的是R2的所非配的非法IP地址。
實驗分析:
以下是wireshark 抓取SW1的eth0/0/4端口和R1的eth0/0/0的DHCP報文,我在PC1上使用"ipconfig / release"釋放當前IP,然後再使用"ipconfig / renew"重新獲取IP所得出的結果。
我們先來看看R1的eth0/0/0端口的DHCP報文,通過下圖,我們都可以看到R1的確是接收到了來自PC1所發送出來的DHCP請求,然後就立刻做出了響應。
然後我們再來看看SW1的eth0/0/4端口的DHCP報文,通過下圖我們都可以看到PC1發送的DHCP請求,然後R1和R2都發送了響應報文,但是因為R1的響應報文發的比較快,因為PC獲取IP地址的機制問題,所以PC1選擇了由R2來為自己分配IP地址。
看到這裡可能有人會問PC所獲取到的IP地址是有租約時間限制的,如果租約時間到期後會重新獲取別的IP的這就有可能獲取到R1所分配的IP地址,如果R2一直運作正常且沒有其他干預的話PC1會一直沿用R2分配的IP地址,PC會在IP租約時間過去50%就會提出續租請求,如果沒有得到服務器的響應,PC又會在IP租約時間過去75%再次提出續租請求。
然後我們再來做第二個實驗
實驗環境二(配置DHCP Snooping):
R1:
- dhcp enable
- interface Ethernet0/0/0
- ip address 192.168.1.1 255.255.255.0
- dhcp select interface
- dhcp server lease day 0 hour 4 minute 0
- dhcp server dns-list 8.8.8.8 8.8.4.4
R2:
- dhcp enable
- interface Ethernet0/0/0
- ip address 192.168.2.1 255.255.255.0
- dhcp select interface
- dhcp server lease day 0 hour 4 minute 0
- dhcp server dns-list 1.1.1.1 2.2.2.2
SW1:
- Dhcp enable #在全局打開DHCP功能
- dhcp snooping enable #在全局打開DHCP Snooping功能
- interface Ethernet0/0/1 #進入eth0/0/1端口
- dhcp snooping enable #開啟DHCP Snooping功能
- dhcp snooping trusted #設置為信任端口
- interface Ethernet0/0/2 #進入eth0/0/2端口
- dhcp snooping enable #開啟DHCP Snooping功能
注意:所有端口都系要開啟DHCP Snooping。
實驗結果:
PC1和PC2已經正常獲取到合法的IP地址了。
我們來看看R1的eth0/0/0口的DHCP報文:
我們再來看看R2的eth0/0/0口的DHCP報文,通過下圖我們可以看到R2確實是收到了PC1的DHCP請求報文,R2也發送了響應報文。
我們再來看看SW1的eth0/0/4端口的DHCP報文,通過下圖我們只能看到來自R1發送的報文了,而R2的已經被過濾掉了。
閱讀更多 網絡技術棧 的文章