圖解ARP協議(五)免費ARP:地址衝突了腫麼辦?

1、免費ARP概述html

網絡世界紛繁複雜,除了各類******行爲對網絡能形成實際破壞以外,還有一類安全問題或泛安全問題,看上去問題不大,但其實仍然能夠形成極大的殺傷力。今天跟你們探討的,也是技術原理比較簡單,但實際防範比較頭疼的一個問題:地址衝突ios


wKiom1mrpLfTVub_AAGdYo6gzBk232.png


這個局域網中,你們所在IP網段是192.168.1.0/24,PC1的地址是192.168.1.1,而PC2和PC3的地址發生衝突,都是192.168.1.2。那麼,若是PC1須要將數據包發送給192.168.1.2,數據包最終到了PC2仍是PC3手裏?仍是負載均衡?無論結果如何,這裏的地址衝突確定會對正常通訊形成麻煩。windows


上面這個電腦/手機之間的地址衝突,你們可能以爲沒什麼太大的問題,那麼接下來再看下面這個圖片=>緩存

wKioL1mrpKyhCzuvAAIcF-nxOoM646.png


這裏的Server1和Server2處在 [服務集羣]中,提供着企業的某種服務,例如Web網站、郵箱系統、FTP文件服務器等,此時服務器的地址發生了衝突,都是10.1.1.1。這種地址衝突則會影響大規模的用戶沒法訪問這個服務器,若服務器承載的是核心業務,對於企業則會形成極大的影響安全

 

因此,地址衝突問題可大可小,可能網絡運維人員部署上的疏忽,也多是普通電腦小白無心致使的,更有多是主動的***行爲,例如***者製造地址衝突場景,擾亂正常業務,致使業務服務中斷。服務器

 

所以,如何在IP地址衝突的時候及時檢測,而且作出解決方案呢?微信




2、免費ARP原理網絡

Gratuitous ARP,被翻譯爲『免費ARP』也被稱爲『無端ARP』,用於檢測局域網內的IP地址衝突,在必定程度上可以給用戶和網絡運維人員提供幫助。相比『免費』這個翻譯,『無端』這個詞其實會更加好理解:"在沒有人問本身的狀況下,平白無故自問自答"。負載均衡


wKioL1mrpMXxjeiKAAHvcwaqcOQ798.png


這項技術不須要電腦和服務器安裝什麼安全軟件或產品例如防火牆之類的,也不須要交換機和路由器購買什麼license,只要設備具有聯網功能(有網卡)就內置了這項功能,因爲免費ARP本質是ARP協議的實現,因此只要有TCP/IP協議棧的網卡,就能支持。相比其餘安全防護技術,免費ARP是一項輕量級的"用戶無感知"的技術。運維

 

接下來,咱們來回顧下以前的圖片=>


wKiom1mrpPvgPXptAAIWOVbDqSA027.png


當用戶發送數據包給192.168.1.2的時候,交換機會將數據包轉發給誰呢?

①根據咱們以前學過的ARP原理,交換機會拆開這個數據包,而且根據目的MAC進行轉發


②那麼PC1在數據封裝的時候,目的MAC是封裝PC2仍是PC3的MAC


目標MAC則取決於電腦本地的ARP緩存表,因此PC1最終把數據包給PC2仍是PC3,則取決於收到的ARP迴應,而且根據"後到優先"原則做出選擇。

 

因此,若PC2提早迴應ARP,則PC1一直髮給PC3;若PC3提早迴應ARP,則PC1一直髮送給PC2。還有一種狀況,PC2和PC3交替迴應ARP,PC1有可能將部分數據給PC2,部分數據給PC3(而PC1則處於懵逼狀態,由於關於192.168.1.2的MAC映射一直在變更)。這個更可能是理論推導,實際狀況不一樣設備測試出來的效果有些差別,後面章節我會帶你們作真實和虛擬網絡的實驗

 

咱們來看看免費ARP是如何工做的並介入這場衝突的?

wKioL1mrpPGj1tnRAAKYpR743I0987.png


當電腦檢測到本身的IP地址跟其餘電腦衝突時,它們會相互發送免費ARP("互懟"),用來提醒對方:你的IP地址跟個人衝突啦! 這裏要注意一點:免費ARP是以ARP Request或Reply廣播形式發送,將IP和MAC地址信息綁定,並宣告到整個局域網。若是在宣告的過程當中,其餘電腦監聽到,而且地址跟本身同樣,也會直接參與這個"互懟"過程。

 

上面PC2和PC3一直不停地對外發送免費ARP:個人地址是192.168.1.2,MAC是xxx。與此同時,同一局域網的其餘主機,則根據這兩個免費ARP信息不斷的修改本地ARP表,192.168.1.2一會映射到MAC2,一會映射到MAC3。

 

那麼,這個混亂的爭搶過程,會不會停下來呢?

可能會持續一段時間,也可能一直持續下去(後面有實驗驗證)。衝突方之間可能會一直髮送,直到有一邊作出讓步並修改IP地址。(不一樣系統解決方法不一樣)

 

不少人在這裏開始有疑惑,即使免費ARP幫咱們檢測到了地址衝突,可是也是在協議底層在"互懟",咱們做爲"主人",如何收到地址衝突提示,而且作出修改和讓步呢?由於不管是普通用戶仍是專業工程師,也不可能每天掛在wireshark這種抓包軟件,時時刻刻盯着免費ARP包,判斷是否有人跟咱們地址衝突了。因此,這又涉及到電腦(操做系統)如何根據免費ARP的地址衝突檢測,更好的提示或幫助用戶了。

 

目前行業的解決方案是這樣的:若是是圖形化操做系統,例如Windows或者MacOS,是經過系統彈框的方式提示用戶;而若是是命令行操做系統(交換機/路由器/防火牆),則經過日誌報錯信息提示用戶。

 

也就是說,不管普通電腦仍是專業的防火牆設備,經過免費ARP檢測到地址衝突以後,設備都會彈出來跟他說:喂,主人,你地址跟人家衝突了,該改改了!


這是Windows和MacOS的地址衝突彈框告警,引導用戶修改本機IP地址=>


wKiom1mrpSOBz3hiAAhuP7E9LPg620.png


這是思科路由器IOS(網際操做系統)的地址衝突日誌信息,引導網絡運維人員修改IP地址=>

%IP-4-DUPADDR: Duplicate address 192.168.1.2 on FastEthernet0/0, sourced by cc02.394f.0000


因此,當地址發生衝突時,根據免費ARP引發的彈框和日誌告警,用戶或者管理員即可以對IP地址進行修改,從而解決通訊問題。例如,下面的PC2和PC3,只要一方修改了地址便可 =>


wKioL1mrpSOTf-p6AAGqsuPLgp0860.png




3、免費ARP實戰指南

免費ARP出現的場景很是多,例如地址衝突時、地址修改或變動時、DHCP分發地址時、網關冗餘協議交互時(例如HSRP)、TFTP傳輸數據時……

 

不一樣的場景,抓到的免費ARP數據包,底層結構都會有所差別,多是基於ARP請求廣播發送的,也多是基於ARP迴應廣播發送的(沒看錯!ARP迴應這裏是廣播方式)

 

爲了讓你們"親眼所見",同時可跟着我一塊兒實踐,更好吸取這塊的知識,這裏我設計了真實和虛擬網絡來進行實戰,並抓取免費ARP數據包,經過數據包解構原理。



(一)真實網絡下 免費ARP實戰

① 跟上一篇文章中代理ARP的真實網絡同樣,個人網絡拓撲是這樣的:


wKiom1mrpWiBXh6VAAIh9QO2IRU863.png


爲了讓這個實驗更有通用性,我加入了一臺Windows電腦。此時登陸無線路由器(極路由)查看局域網主機列表:


wKiom1mrpXuD1IFPAAXgr42xxz4942.png


仍是原來的配方.... 蘋果全家桶和一臺Windows電腦。實物圖大概是這樣的:



wKioL1mrpZLDf4J3AAJ9X8FOnU4682.jpg


② 接下來,爲了看到地址衝突時,免費ARP的數據包交互,咱們在Windows和MacOS同時開啓Wireshark並抓包本機電腦的數據包,設置arp過濾。

macbook端截圖以下:


wKioL1mrpaajJ1cTAADU2xezwL4653.png


Windows端截圖以下:(Windows 10跟無線路由器一直在交互)

wKioL1mrpbrhKaRyAAgZ4qsyPe0412.png



③在Mac端,將IP地址設置爲跟Windows地址同樣從192.168.199.177改成192.168.199.152


wKiom1mrpevxicFRAAJcTKcyK_k059.png

wKioL1mrpd-QMGShAAHPyScYQ2s474.png


點擊應用以後,開始觀察兩邊電腦彈框和wireshark的ARP包交互過程=>


wKiom1mrpg6ThwyaAAcV2TCW7Hk105.png


上圖能夠看到macbook的彈框告警了,接下來咱們來分析下此時Mac和windows抓到的數據交互過程=>



wKiom1mrpjTRuApHAAkxuKCn2rY526.pngwKiom1mrpkjg9oi0AAcUXe51ago968.png



個人windows電腦很明確的迴應Mac電腦:這個地址199.152,已經被我用了。這個過程重複了3次。根據抓包,這個過程後面還在不斷的持續中,無論在win仍是mac,都能抓到相似的問答過程


wKioL1mrpnKh6imSAAuJz21EBCA852.png


因爲macbook電腦此刻不能上網,因此還"不屈不撓"的詢問着,它在想:沒準windows下線了,沒有迴應了呢?(若是windows沒有迴應,則說明它下線了或改成其餘地址了,那麼macbook就可使用)

wKioL1mrpo2RA5hPAAF0Qbc0fvQ559.png




④ 接下來,咱們將windows的網絡斷開,而後在macbook這端觀察arp交互和網絡鏈接狀態:


wKiom1mrps-CBD-UAAiQEQHC6BA239.png


此時,macbook跟往常同樣發生三個arp請求,詢問152這個地址是否有人使用,因爲windows已經下線,因此三次都沒有應答。緊接着有三個gratuitous arp數據包,跟上面三個請求包幾乎是同樣的,只有一個區別,就是發送者的IP地址此時從0.0.0.0修改成192.168.199.152。這意味着mac確認了152沒有其餘人使用,而且認爲此刻本身有資格用上152這個地址了

 

從wireshark抓包來看,以前的arp請求好像沒有標記"gratuitous"這個關鍵詞,那麼算不是是免費arp或者無端arp呢?這個其實也是比較多討論和爭議。若是從"本身問本身的角度"出發,這兩種arp都算是免費arp,由於都是在問本身配置的這個新地址192.168.199.152,並且目的都是一致的,都是爲了檢測是否地址可用是否存在衝突

 

固然,更嚴謹的的免費arp包,則是須要"發送方ip"和"接收者ip"是一致的,就是下面這種arp請求包,都有192.168.199.152這個地址。因此,這一小知識點的話,我我的以爲不用太糾結,經過數據包結構還原整個免費arp工做原理纔是最重要的。

 

從wireshark截圖能夠看到,通過了上面這些免費ARP的請求以後,因爲一直沒有其餘設備迴應152這個地址,因此macbook電腦再次詢問網關192.168.199.1的物理地址,拿到網關的ARP迴應以後,個人macbook即可以正常通訊了。


wKiom1mrpu2Q1PUyAAGHXuuu334517.png


⑤【接下來是拓展內容,涉及dhcp協議,新手的話可暫時忽略這一小段...】

這個實驗還能夠繼續深挖下來,此時讓windows電腦從新接入這個wifi網絡,以後一樣會出現免費arp的交互過程,只不過多了一個dhcp協議交互,而且最終windows使用了192.168.199.153這個地址接入wifi網絡。先整理下流程再截核心數據包=>

  1. 當windows從新接入網絡以後,會經過dhcp從新獲取192.168.199.152這個地址(因爲macbook的152這個地址是由我手工靜態指定的而不是路由器分配,全部路由器仍然經過dhcp地址池分配);

  2. windows收到這個地址以後,第一時間便發送免費arp包進行地址檢測,可是發現這個地址已經被macbook佔用了!所以,經過dhcp decline數據包向無線路由器取消這個地址;

  3. windows從新獲取192.168.199.153這個地址,經過免費arp從新檢測,發現沒有人迴應了,說明這個地址可用,後續用這個地址接入wifi網絡。



windows從新接入網絡的dhcp交互包=>


wKioL1mrpvWh8fHKAAgiPmlFaco242.png

windows獲取地址後經過免費arp檢測到macbook=>


wKiom1mrpzPCI_J-AAe299t9Azg683.png

windows經過dhcp decline放棄152,並從新獲取153這個地址=>


wKiom1mrp1iSo5DXAAkust40ow8419.png



windows經過免費arp檢測,發現153地址沒其餘人用,因此接入了網絡=>

wKiom1mrp27i_gEAAAmD7RwWXF8452.png



總結:經過這個真實網絡,咱們構造了windows和macbook地址衝突的環境,經過wireshark抓取免費arp數據包,學習了免費arp的地址檢測功能以及數據包結構。

①當電腦(手工)修改的地址跟局域網其餘主機地址同樣的時候,經過免費arp協議,電腦會彈框提醒並沒有法上網;

②當相同地址的電腦其中一臺下線時,經過免費arp能夠證實此地址可以使用(沒人爭搶/迴應),此時即可接入網絡;

③當電腦經過DHCP獲取地址時,會經過免費arp檢測這個地址是否可用,若已經被使用,則從新經過dhcp獲取新的地址,再接入互聯網。

④這裏抓取的免費ARP包是請求廣播包,而且特徵是"本身問本身"。("本身答本身"的迴應廣播包,在下面的實驗有)



(二)虛擬網絡下 免費ARP實戰

網絡拓撲採用GNS3搭建,採用C3640操做系統鏡像=>

wKioL1mrp3GgKShBAAGFjg-ju6Q037.png


①爲每一個路由器配置IP地址,所在網段爲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調試"debug arp",在R1上面查看ARP表,經過wireshark觀察底層免費ARP包交互過程=>


R3(config)#int f0/0

R3(config-if)#ip add 192.168.1.2 255.255.255.0


一旦R3設置了上面的地址,跟R2衝突以後,此時R2和R3的命令行界面開始不停斷"刷屏"=>


wKioL1mrp46QzDlZABEw70XY_tY669.png


核心日誌信息:

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


雖然網絡設備無法像Windows或者Macos彈框告警,可是經過日誌提示一樣能夠達到一樣的目的,讓網絡運維人員做出修改。


Cisco IOS經過免費ARP檢測到地址衝突以後,解決的方法相對"暴力",例如,R2和R3直接會持續發送免費ARP(reply廣播包),直到地址衝突問題被解決掉。能夠經過wireshark數據包觀察=>


wKiom1mrp-vRbJ4BAAvWpSTDdDs906.png


此時再觀察R1上面的ARP表,關於192.168.1.2這個地址的映射信息:

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

……

 

能夠看到,因爲免費ARP是一種廣播的形式,因此R1同處一個局域網能夠收到,而且ARP信息被不斷修改,一會將192.168.1.2指向R2的MAC地址,一會指向R3的MAC地址

 

這個過程會一種持續下去,直到地址作了修改,這裏咱們將R3的IP地址從新修改成192.168.1.3,以後網絡便恢復了平靜。


總結:經過這個虛擬網絡,咱們構造了路由器地址衝突的環境,一樣驗證了免費ARP可以檢測IP地址衝突的功能,固然,這裏跟Windows和Macos的處理方式有一些差異,例如Cisco路由器檢測到免費ARP以後,會保持很是高頻率的"互懟"過程,而後不斷報出錯日誌,督促管理員感受修改地址。除此以外,數據包結構也有差別,Windows和Macos是"本身問本身"的arp request包,而cisco ios是"本身答本身"的arp reply包




4、總結:地址衝突了怎麼辦?

①對於普通用戶而言,當看到電腦彈框告警說明地址有衝突時,在不懂技術的狀況下,能夠嘗試重啓家裏的路由器,這樣能夠從新爲局域網的電腦分配地址;


②路由器不是本身的,接入的是租房網絡、校園網絡等第三方網絡,當看到電腦彈框告警說明地址有衝突時而且沒法管理路由器的時候,能夠嘗試手工修改本機電腦的IP地址,不管是Windows仍是Macos,直接進入網卡設置修改便可,怎麼作手工修改呢?例如電腦地址是192.168.1.1,提示衝突的話,那麼能夠在原有數字的基礎上遞增1或者10,直到顯示不衝突,例如修改成192.168.1.二、192.168.1.3或者192.168.1.十一、192.168.1.21,以此類推..... (這種方法未必能保證解決,可是在管理員介入以前,至少算是一種解決方案);


③對於專業的網絡和安全運維人員而言,當看到網絡地址衝突,則須要考慮本身的DHCP部署、IP地址規劃有沒有問題,或者找出網絡中是否有"搗蛋鬼"本身私設IP之類的;


 ④經過本章節的學習,咱們掌握了免費ARP不一樣網絡環境下的實現,例如"本身問本身"和"本身答本身"兩種廣播包方式,也瞭解了電腦和網絡設備的不一樣機制。




【相關推薦】

《GNS3從入門到精通》(精品免費視頻教程)

《TCP/IP協議棧視頻教程》(精品免費視頻教程)

《Wireshark協議分析從入門到精通》(精品免費視頻教程,20萬人都在看)

新浪微博:@拼客學院陳鑫傑

微信公衆號:拼客院長陳鑫傑(搜索"pingsec"便可關注,大牛們都在看)

相關文章
相關標籤/搜索