图解ARP协议(五)免费ARP:地址冲突了肿么办?
一、免費(fèi)ARP概述
網(wǎng)絡(luò)世界紛繁復(fù)雜,除了各種黑客攻擊行為對網(wǎng)絡(luò)能造成實(shí)際破壞之外,還有一類安全問題或泛安全問題,看上去問題不大,但其實(shí)仍然可以造成極大的殺傷力。今天跟大家探討的,也是技術(shù)原理比較簡單,但實(shí)際防范比較頭疼的一個(gè)問題:地址沖突。
?
這個(gè)局域網(wǎng)中,大家所在IP網(wǎng)段是192.168.1.0/24,PC1的地址是192.168.1.1,而PC2和PC3的地址發(fā)生沖突,都是192.168.1.2。那么,如果PC1需要將數(shù)據(jù)包發(fā)送給192.168.1.2,數(shù)據(jù)包最終到了PC2還是PC3手里?還是負(fù)載均衡?不管結(jié)果如何,這里的地址沖突肯定會對正常通信造成麻煩。
上面這個(gè)電腦/手機(jī)之間的地址沖突,大家可能覺得沒什么太大的問題,那么接下來再看下面這個(gè)圖片=>
?
這里的Server1和Server2處在 [服務(wù)集群]中,提供著企業(yè)的某種服務(wù),例如Web網(wǎng)站、郵箱系統(tǒng)、FTP文件服務(wù)器等,此時(shí)服務(wù)器的地址發(fā)生了沖突,都是10.1.1.1。這種地址沖突則會影響大規(guī)模的用戶無法訪問這個(gè)服務(wù)器,若服務(wù)器承載的是核心業(yè)務(wù),對于企業(yè)則會造成極大的影響。
所以,地址沖突問題可大可小,可能網(wǎng)絡(luò)運(yùn)維人員部署上的疏忽,也可能是普通電腦小白無意導(dǎo)致的,更有可能是主動的黑客行為,例如攻擊者制造地址沖突場景,擾亂正常業(yè)務(wù),導(dǎo)致業(yè)務(wù)服務(wù)中斷。
因此,如何在IP地址沖突的時(shí)候及時(shí)檢測,并且做出解決方案呢?
二、免費(fèi)ARP原理
Gratuitous ARP,被翻譯為『免費(fèi)ARP』也被稱為『無故ARP』,用于檢測局域網(wǎng)內(nèi)的IP地址沖突,在一定程度上能夠給用戶和網(wǎng)絡(luò)運(yùn)維人員提供幫助。相比『免費(fèi)』這個(gè)翻譯,『無故』這個(gè)詞其實(shí)會更加好理解:"在沒有人問自己的情況下,無緣無故自問自答"。
?
這項(xiàng)技術(shù)不需要電腦和服務(wù)器安裝什么安全軟件或產(chǎn)品例如防火墻之類的,也不需要交換機(jī)和路由器購買什么license,只要設(shè)備具備聯(lián)網(wǎng)功能(有網(wǎng)卡)就內(nèi)置了這項(xiàng)功能,由于免費(fèi)ARP本質(zhì)是ARP協(xié)議的實(shí)現(xiàn),所以只要有TCP/IP協(xié)議棧的網(wǎng)卡,就能支持。相比其他安全防御技術(shù),免費(fèi)ARP是一項(xiàng)輕量級的"用戶無感知"的技術(shù)。
接下來,我們來回顧下之前的圖片=>
?
當(dāng)用戶發(fā)送數(shù)據(jù)包給192.168.1.2的時(shí)候,交換機(jī)會將數(shù)據(jù)包轉(zhuǎn)發(fā)給誰呢?
①根據(jù)我們之前學(xué)過的ARP原理,交換機(jī)會拆開這個(gè)數(shù)據(jù)包,并且根據(jù)目的MAC進(jìn)行轉(zhuǎn)發(fā);
②那么PC1在數(shù)據(jù)封裝的時(shí)候,目的MAC是封裝PC2還是PC3的MAC?
③目標(biāo)MAC則取決于電腦本地的ARP緩存表,所以PC1最終把數(shù)據(jù)包給PC2還是PC3,則取決于收到的ARP回應(yīng),并且根據(jù)"后到優(yōu)先"原則作出選擇。
所以,若PC2提前回應(yīng)ARP,則PC1一直發(fā)給PC3;若PC3提前回應(yīng)ARP,則PC1一直發(fā)送給PC2。還有一種情況,PC2和PC3交替回應(yīng)ARP,PC1有可能將部分?jǐn)?shù)據(jù)給PC2,部分?jǐn)?shù)據(jù)給PC3(而PC1則處于懵逼狀態(tài),因?yàn)殛P(guān)于192.168.1.2的MAC映射一直在變動)。這個(gè)更多是理論推導(dǎo),實(shí)際情況不同設(shè)備測試出來的效果有些差異,后面章節(jié)我會帶大家做真實(shí)和虛擬網(wǎng)絡(luò)的實(shí)驗(yàn)。
我們來看看免費(fèi)ARP是如何工作的并介入這場沖突的?
?
當(dāng)電腦檢測到自己的IP地址跟其他電腦沖突時(shí),它們會相互發(fā)送免費(fèi)ARP("互懟"),用來提醒對方:你的IP地址跟我的沖突啦!?這里要注意一點(diǎn):免費(fèi)ARP是以ARP Request或Reply廣播形式發(fā)送,將IP和MAC地址信息綁定,并宣告到整個(gè)局域網(wǎng)。如果在宣告的過程中,其他電腦監(jiān)聽到,并且地址跟自己一樣,也會直接參與這個(gè)"互懟"過程。?
上面PC2和PC3一直不停地對外發(fā)送免費(fèi)ARP:我的地址是192.168.1.2,MAC是xxx。與此同時(shí),同一局域網(wǎng)的其他主機(jī),則根據(jù)這兩個(gè)免費(fèi)ARP信息不斷的修改本地ARP表,192.168.1.2一會映射到MAC2,一會映射到MAC3。
那么,這個(gè)混亂的爭搶過程,會不會停下來呢?
可能會持續(xù)一段時(shí)間,也可能一直持續(xù)下去(后面有實(shí)驗(yàn)驗(yàn)證)。沖突方之間可能會一直發(fā)送,直到有一邊做出讓步并修改IP地址。(不同系統(tǒng)解決方法不同)
很多人在這里開始有疑惑,即便免費(fèi)ARP幫我們檢測到了地址沖突,但是也是在協(xié)議底層在"互懟",我們作為"主人",如何收到地址沖突提示,并且做出修改和讓步呢?因?yàn)闊o論是普通用戶還是專業(yè)工程師,也不可能天天掛在wireshark這種抓包軟件,時(shí)時(shí)刻刻盯著免費(fèi)ARP包,判斷是否有人跟我們地址沖突了。所以,這又涉及到電腦(操作系統(tǒng))如何根據(jù)免費(fèi)ARP的地址沖突檢測,更好地提示或幫助用戶了。
目前行業(yè)的解決方案是這樣的:如果是圖形化操作系統(tǒng),例如Windows或者M(jìn)acOS,是通過系統(tǒng)彈框的方式提示用戶;而如果是命令行操作系統(tǒng)(交換機(jī)/路由器/防火墻),則通過日志報(bào)錯(cuò)信息提示用戶。
也就是說,無論普通電腦還是專業(yè)的防火墻設(shè)備,通過免費(fèi)ARP檢測到地址沖突之后,設(shè)備都會彈出來跟他說:喂,主人,你地址跟人家沖突了,該改改了!
這是Windows和MacOS的地址沖突彈框告警,引導(dǎo)用戶修改本機(jī)IP地址=>
?
這是思科路由器IOS(網(wǎng)際操作系統(tǒng))的地址沖突日志信息,引導(dǎo)網(wǎng)絡(luò)運(yùn)維人員修改IP地址=>
%IP-4-DUPADDR: Duplicate address?192.168.1.2 on FastEthernet0/0, sourced by cc02.394f.0000
所以,當(dāng)?shù)刂钒l(fā)生沖突時(shí),根據(jù)免費(fèi)ARP引起的彈框和日志告警,用戶或者管理員便可以對IP地址進(jìn)行修改,從而解決通信問題。例如,下面的PC2和PC3,只要一方修改了地址即可 =>
?
三、免費(fèi)ARP實(shí)戰(zhàn)指南
免費(fèi)ARP出現(xiàn)的場景非常多,例如地址沖突時(shí)、地址修改或變更時(shí)、DHCP分發(fā)地址時(shí)、網(wǎng)關(guān)冗余協(xié)議交互時(shí)(例如HSRP)、TFTP傳輸數(shù)據(jù)時(shí)……?
不同的場景,抓到的免費(fèi)ARP數(shù)據(jù)包,底層結(jié)構(gòu)都會有所差異,可能是基于ARP請求廣播發(fā)送的,也可能是基于ARP回應(yīng)廣播發(fā)送的(沒看錯(cuò)!ARP回應(yīng)這里是廣播方式)
為了讓大家"親眼所見",同時(shí)可跟著我一起實(shí)踐,更好吸收這塊的知識,這里我設(shè)計(jì)了真實(shí)和虛擬網(wǎng)絡(luò)來進(jìn)行實(shí)戰(zhàn),并抓取免費(fèi)ARP數(shù)據(jù)包,通過數(shù)據(jù)包解構(gòu)原理。
(一)真實(shí)網(wǎng)絡(luò)下 免費(fèi)ARP實(shí)戰(zhàn)
① 跟上一篇文章中代理ARP的真實(shí)網(wǎng)絡(luò)一樣,我的網(wǎng)絡(luò)拓?fù)涫沁@樣的:
?
為了讓這個(gè)實(shí)驗(yàn)更有通用性,我加入了一臺Windows電腦。此時(shí)登錄無線路由器(極路由)查看局域網(wǎng)主機(jī)列表:
?
還是原來的配方.... 蘋果全家桶和一臺Windows電腦。實(shí)物圖大概是這樣的:
?
② 接下來,為了看到地址沖突時(shí),免費(fèi)ARP的數(shù)據(jù)包交互,我們在Windows和MacOS同時(shí)開啟Wireshark并抓包本機(jī)電腦的數(shù)據(jù)包,設(shè)置arp過濾。
macbook端截圖如下:
?
Windows端截圖如下:(Windows 10跟無線路由器一直在交互)
?
③在Mac端,將IP地址設(shè)置為跟Windows地址一樣,從192.168.199.177改為192.168.199.152
?
?
點(diǎn)擊應(yīng)用之后,開始觀察兩邊電腦彈框和wireshark的ARP包交互過程=>
?
上圖可以看到macbook的彈框告警了,接下來我們來分析下此時(shí)Mac和windows抓到的數(shù)據(jù)交互過程=>
?
?
我的windows電腦很明確的回應(yīng)Mac電腦:這個(gè)地址199.152,已經(jīng)被我用了。這個(gè)過程重復(fù)了3次。根據(jù)抓包,這個(gè)過程后面還在不斷的持續(xù)中,不管在win還是mac,都能抓到類似的問答過程。
?
由于macbook電腦此刻不能上網(wǎng),所以還"不屈不撓"地詢問著,它在想:沒準(zhǔn)windows下線了,沒有回應(yīng)了呢?(如果windows沒有回應(yīng),則說明它下線了或改為其他地址了,那么macbook就可以使用)
?
④ 接下來,我們將windows的網(wǎng)絡(luò)斷開,然后在macbook這端觀察arp交互和網(wǎng)絡(luò)連接狀態(tài):
?
此時(shí),macbook跟往常一樣發(fā)生三個(gè)arp請求,詢問152這個(gè)地址是否有人使用,由于windows已經(jīng)下線,所以三次都沒有應(yīng)答。緊接著有三個(gè)gratuitous arp數(shù)據(jù)包,跟上面三個(gè)請求包幾乎是一樣的,只有一個(gè)區(qū)別,就是發(fā)送者的IP地址此時(shí)從0.0.0.0修改為192.168.199.152。這意味著mac確認(rèn)了152沒有其他人使用,并且認(rèn)為此刻自己有資格用上152這個(gè)地址了。
從wireshark抓包來看,之前的arp請求好像沒有標(biāo)記"gratuitous"這個(gè)關(guān)鍵詞,那么算不是是免費(fèi)arp或者無故arp呢?這個(gè)其實(shí)也是比較多討論和爭議。如果從"自己問自己的角度"出發(fā),這兩種arp都算是免費(fèi)arp,因?yàn)槎际窃趩栕约号渲玫倪@個(gè)新地址192.168.199.152,而且目的都是一致的,都是為了檢測是否地址可用是否存在沖突。
當(dāng)然,更嚴(yán)謹(jǐn)?shù)牡拿赓M(fèi)arp包,則是需要"發(fā)送方ip"和"接收者ip"是一致的,就是下面這種arp請求包,都有192.168.199.152這個(gè)地址。所以,這一小知識點(diǎn)的話,我個(gè)人覺得不用太糾結(jié),通過數(shù)據(jù)包結(jié)構(gòu)還原整個(gè)免費(fèi)arp工作原理才是最重要的。
從wireshark截圖可以看到,經(jīng)過了上面這些免費(fèi)ARP的請求之后,由于一直沒有其他設(shè)備回應(yīng)152這個(gè)地址,所以macbook電腦再次詢問網(wǎng)關(guān)192.168.199.1的物理地址,拿到網(wǎng)關(guān)的ARP回應(yīng)之后,我的macbook便可以正常通信了。
?
⑤【接下來是拓展內(nèi)容,涉及dhcp協(xié)議,新手的話可暫時(shí)忽略這一小段...】
這個(gè)實(shí)驗(yàn)還可以繼續(xù)深挖下來,此時(shí)讓windows電腦重新接入這個(gè)wifi網(wǎng)絡(luò),之后同樣會出現(xiàn)免費(fèi)arp的交互過程,只不過多了一個(gè)dhcp協(xié)議交互,并且最終windows使用了192.168.199.153這個(gè)地址接入wifi網(wǎng)絡(luò)。先整理下流程再截核心數(shù)據(jù)包=>
windows重新接入網(wǎng)絡(luò)的dhcp交互包=>
?
windows獲取地址后通過免費(fèi)arp檢測到macbook=>
?
windows通過dhcp decline放棄152,并重新獲取153這個(gè)地址=>
?
windows通過免費(fèi)arp檢測,發(fā)現(xiàn)153地址沒其他人用,所以接入了網(wǎng)絡(luò)=>
?
總結(jié):通過這個(gè)真實(shí)網(wǎng)絡(luò),我們構(gòu)造了windows和macbook地址沖突的環(huán)境,通過wireshark抓取免費(fèi)arp數(shù)據(jù)包,學(xué)習(xí)了免費(fèi)arp的地址檢測功能以及數(shù)據(jù)包結(jié)構(gòu)。
①當(dāng)電腦(手工)修改的地址跟局域網(wǎng)其他主機(jī)地址一樣的時(shí)候,通過免費(fèi)arp協(xié)議,電腦會彈框提醒并無法上網(wǎng);
②當(dāng)相同地址的電腦其中一臺下線時(shí),通過免費(fèi)arp可以證明此地址可使用(沒人爭搶/回應(yīng)),此時(shí)便可接入網(wǎng)絡(luò);
③當(dāng)電腦通過DHCP獲取地址時(shí),會通過免費(fèi)arp檢測這個(gè)地址是否可用,若已經(jīng)被使用,則重新通過dhcp獲取新的地址,再接入互聯(lián)網(wǎng)。
④這里抓取的免費(fèi)ARP包是請求廣播包,并且特征是"自己問自己"。("自己答自己"的回應(yīng)廣播包,在下面的實(shí)驗(yàn)有)
(二)虛擬網(wǎng)絡(luò)下 免費(fèi)ARP實(shí)戰(zhàn)
網(wǎng)絡(luò)拓?fù)洳捎肎NS3搭建,采用C3640操作系統(tǒng)鏡像=>
?
①為每個(gè)路由器配置IP地址,所在網(wǎng)段為192.168.1.0/24=>
R1(config)#int f0/0
R1(config-if)#no sh
R1(config-if)#ip add 192.168.1.1 255.255.255.0
R2(config)#int f0/0
R2(config-if)#no sh
R2(config-if)#ip add 192.168.1.2 255.255.255.0
R3(config)#int f0/0
R3(config-if)#no sh
R3(config-if)#ip add 192.168.1.3 255.255.255.0
②在路由器相連鏈路上抓包,路由器相互PING通,并查看ARP表=>
(這里用R1舉例,其他類似)
R1#ping 192.168.1.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 64/64/64 ms
R1#ping 192.168.1.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 64/64/68 ms
R1#show arp
Protocol? Address????????? Age (min)? Hardware Addr?? Type?? Interface
Internet? 192.168.1.1???????????? -?? cc00.394f.0000? ARPA?? FastEthernet0/0
Internet? 192.168.1.3???????????? 0?? cc02.394f.0000? ARPA?? FastEthernet0/0
Internet? 192.168.1.2???????????? 0?? cc01.394f.0000? ARPA?? FastEthernet0/0
③讓R3和R2的地址沖突,例如將R3的地址從192.168.1.3配置為192.168.1.2,在R2和R3上面開啟arp調(diào)試"debug arp",在R1上面查看ARP表,通過wireshark觀察底層免費(fèi)ARP包交互過程=>
R3(config)#int f0/0
R3(config-if)#ip add 192.168.1.2 255.255.255.0
一旦R3設(shè)置了上面的地址,跟R2沖突之后,此時(shí)R2和R3的命令行界面開始不停斷"刷屏"=>
?
核心日志信息:
R2#
*Mar? 1 00:13:25.519: %IP-4-DUPADDR:?Duplicate address 192.168.1.2?on FastEthernet0/0, sourced by cc02.394f.0000
R2#
*Mar? 1 00:13:56.259: %IP-4-DUPADDR:?Duplicate address 192.168.1.2?on FastEthernet0/0, sourced by cc02.394f.0000
R2#
*Mar? 1 00:14:27.167: %IP-4-DUPADDR:?Duplicate address 192.168.1.2?on FastEthernet0/0, sourced by cc02.394f.0000
雖然網(wǎng)絡(luò)設(shè)備沒法像Windows或者M(jìn)acos彈框告警,但是通過日志提示同樣可以達(dá)到同樣的目的,讓網(wǎng)絡(luò)運(yùn)維人員作出修改。
Cisco IOS通過免費(fèi)ARP檢測到地址沖突之后,解決的方法相對"暴力",例如,R2和R3直接會持續(xù)發(fā)送免費(fèi)ARP(reply廣播包),直到地址沖突問題被解決掉。可以通過wireshark數(shù)據(jù)包觀察=>
?
此時(shí)再觀察R1上面的ARP表,關(guān)于192.168.1.2這個(gè)地址的映射信息:
R1#show arp
Protocol? Address????????? Age (min)? Hardware Addr?? Type?? Interface
Internet? 192.168.1.1???????????? -?? cc00.394f.0000? ARPA?? FastEthernet0/0
Internet? 192.168.1.3???????????? 6?? cc02.394f.0000? ARPA?? FastEthernet0/0
Internet? 192.168.1.2???????????? 0?? cc02.394f.0000? ARPA?? FastEthernet0/0
R1#show arp
Protocol? Address????????? Age (min)? Hardware Addr?? Type?? Interface
Internet? 192.168.1.1???????????? -?? cc00.394f.0000? ARPA?? FastEthernet0/0
Internet? 192.168.1.3???????????? 6?? cc02.394f.0000? ARPA?? FastEthernet0/0
Internet? 192.168.1.2???????????? 0?? cc01.394f.0000? ARPA?? FastEthernet0/0
R1#show arp
Protocol? Address????????? Age (min)? Hardware Addr?? Type?? Interface
Internet? 192.168.1.1???????????? -?? cc00.394f.0000? ARPA?? FastEthernet0/0
Internet? 192.168.1.3???????????? 6?? cc02.394f.0000? ARPA?? FastEthernet0/0
Internet? 192.168.1.2???????????? 0?? cc02.394f.0000? ARPA?? FastEthernet0/0
R1#show arp
Protocol? Address????????? Age (min)? Hardware Addr?? Type?? Interface
Internet? 192.168.1.1???????????? -?? cc00.394f.0000? ARPA?? FastEthernet0/0
Internet? 192.168.1.3???????????? 6?? cc02.394f.0000? ARPA?? FastEthernet0/0
Internet? 192.168.1.2???????????? 0?? cc01.394f.0000? ARPA?? FastEthernet0/0
……
可以看到,由于免費(fèi)ARP是一種廣播的形式,所以R1同處一個(gè)局域網(wǎng)可以收到,并且ARP信息被不斷修改,一會將192.168.1.2指向R2的MAC地址,一會指向R3的MAC地址。
這個(gè)過程會一種持續(xù)下去,直到地址做了修改,這里我們將R3的IP地址重新修改為192.168.1.3,之后網(wǎng)絡(luò)便恢復(fù)了平靜。
總結(jié):通過這個(gè)虛擬網(wǎng)絡(luò),我們構(gòu)造了路由器地址沖突的環(huán)境,同樣驗(yàn)證了免費(fèi)ARP能夠檢測IP地址沖突的功能,當(dāng)然,這里跟Windows和Macos的處理方式有一些差別,例如Cisco路由器檢測到免費(fèi)ARP之后,會保持非常高頻率的"互懟"過程,然后不斷報(bào)出錯(cuò)日志,督促管理員感覺修改地址。除此之外,數(shù)據(jù)包結(jié)構(gòu)也有差異,Windows和Macos是"自己問自己"的arp request包,而cisco ios是"自己答自己"的arp reply包。
四、總結(jié):地址沖突了怎么辦?
①對于普通用戶而言,當(dāng)看到電腦彈框告警說明地址有沖突時(shí),在不懂技術(shù)的情況下,可以嘗試重啟家里的路由器,這樣可以重新為局域網(wǎng)的電腦分配地址;
②路由器不是自己的,接入的是租房網(wǎng)絡(luò)、校園網(wǎng)絡(luò)等第三方網(wǎng)絡(luò),當(dāng)看到電腦彈框告警說明地址有沖突時(shí)并且無法管理路由器的時(shí)候,可以嘗試手工修改本機(jī)電腦的IP地址,無論是Windows還是Macos,直接進(jìn)入網(wǎng)卡設(shè)置修改即可,怎么做手工修改呢?例如電腦地址是192.168.1.1,提示沖突的話,那么可以在原有數(shù)字的基礎(chǔ)上遞增1或者10,直到顯示不沖突,例如修改為192.168.1.2、192.168.1.3或者192.168.1.11、192.168.1.21,以此類推..... (這種方法未必能保證解決,但是在管理員介入之前,至少算是一種解決方案);
③對于專業(yè)的網(wǎng)絡(luò)和安全運(yùn)維人員而言,當(dāng)看到網(wǎng)絡(luò)地址沖突,則需要考慮自己的DHCP部署、IP地址規(guī)劃有沒有問題,或者找出網(wǎng)絡(luò)中是否有"搗蛋鬼"自己私設(shè)IP之類的;
?④通過本章節(jié)的學(xué)習(xí),我們掌握了免費(fèi)ARP不同網(wǎng)絡(luò)環(huán)境下的實(shí)現(xiàn),例如"自己問自己"和"自己答自己"兩種廣播包方式,也了解了電腦和網(wǎng)絡(luò)設(shè)備的不同機(jī)制。
?
總結(jié)
以上是生活随笔為你收集整理的图解ARP协议(五)免费ARP:地址冲突了肿么办?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IT人士的知识管理-第一篇
- 下一篇: 图解ARP协议(六)RARP与IARP: