轉:圖解ARP協議(四)代理ARP原理與實踐(「善意的欺騙」)

非原創,轉發,本人認爲此篇文章總結的很是好,講解的很是詳細,本人受益不淺緩存

原文地址:https://blog.51cto.com/chenxinjie/1961255安全

1、代理ARP概述服務器

我:當電腦要訪問互聯網上的服務器,目標MAC是什麼?網絡

不少小夥伴在剛學習網絡協議的時候,常常這樣直接回應:不就是服務器的MAC嘛!學習

 

wKiom1mm5OKSUROxAAFLJK6Bvz8988.png

這時我會反問:那電腦怎麼拿到這個服務器的MAC地址呢?網站

小夥伴通常都自信的拋出下面兩個點:spa

①根據網絡通訊中數據封裝的原則,通訊雙方須要封裝源目IP和MAC地址;操作系統

②若是要拿到目標MAC地址,就須要經過ARP協議進行交互。.net

 

我:好,確實沒毛病,你是指的下面這個意思吧 ==>3d

 

wKioL1mm5N2SHqzCAAIItTEERuI671.png

 

小夥伴:對對對,是這個意思的。

我:好,你再看看下面這個圖,再確認下。

 

wKiom1mm5QGwFbbFAAGwXkYOQMc396.png

 

小夥伴:好像不太對唉,剛纔沒注意看...... 互聯網這麼多路由器,根據以前學過的:

①路由器隔離廣播域,每一個接口/網段都是獨立的廣播域;

②ARP請求是二層廣播包,廣播包無法過路由器,

這樣的話,ARP請求廣播包根本無法穿越互聯網到達目標服務器。

 

我:那咱們日常上微博逛知乎去京東剁手基本都依據上面這張圖,經過DNS協議將域名解析爲IP地址,經過ARP協議將IP解析爲MAC地址。如今ARP請求沒法穿越過去,電腦便沒法獲取目標服務器的MAC地址,怎麼跟它通訊呢?

小夥伴:。。。。。。

 

上面這個疑惑,我相信每一個學習網絡協議的初學者常常會問到,更廣泛的狀況是,不少工做多年的工程師,也未必可以將下面這幾個問題徹底搞清楚:

 

①電腦訪問互聯網服務器的時候,ARP詢問的內容,真的是問服務器的嗎?

②什麼是代理ARP?跟ARP有什麼區別?什麼場景下會用到代理ARP?

③代理ARP跟網關(默認路由)設置有什麼關係?

 

因此,這一篇文章雖然是講代理ARP,但其實核心內容是圍繞代理ARP,解讀跨網段通訊過程當中,ARP/代理ARP/網關(默認路由)/數據封裝等相關問題

二 代理ARP原理

當ARP請求目標跨網段時,網關設備收到此ARP請求,會用本身的MAC地址返回給請求者,這即是代理ARP(Proxy ARP)。

 

wKioL1mm5PmxCmSCAAJHNEP5SXo883.png

上面這張圖中,電腦發送ARP請求服務器8.8.8.8的MAC地址,路由器(網關)收到這個請求時會進行判斷,因爲目標8.8.8.8不屬於本網段(即跨網段),此時便返回本身的接口MAC地址給PC,後續電腦訪問服務器時,目標MAC直接封裝爲MAC254。

 

代理ARP本質是一個"善意的欺騙",是一個"錯位"的映射。從圖中咱們看到服務器地址的正常映射是<8.8.8.8-MAC2>,而路由器返回給電腦的,倒是 <8.8.8.8-MAC254>。不論是不是"欺騙",至少最終電腦能夠與外網的服務器實現通訊,以PC Ping Server爲例=>

 

wKiom1mm5×××_3WyAAIz5oQE4Mw307.png

 

實際網絡中,代理ARP由網絡中的網關設備來執行,包括路由器、多層交換機、無線路由器、防火牆等設備。而且,網關即使有代理ARP功能,也未必必定執行,還必須知足兩個條件:①網關已經開啓代理ARP功能;②網關有目標的路由信息。咱們來看下面這張圖=>

 

wKioL1mm5SvSx2ETAAKWXMXFIOo885.png

 

上面這張圖中,咱們假設路由器已具有全網的路由,但鏈接電腦的接口沒有開啓(或不支持)代理ARP功能,此時便形成一個尷尬的狀況:電腦反覆詢問到8.8.8.8的MAC地址,路由器收到以後,處理流程跟正常ARP是一致的,"問本身的回覆,不是問本身的丟棄"。所以,當網絡通訊採用代理ARP時,可能會"受制於沿途網關設備",形成網絡通訊故障

 

進一步思考:既然代理ARP不是一種特別流暢的實現,會"受限於別人",那咱們不必必定要使用它。甚至,這裏咱們須要搞清一個事實:實際網絡中,不管是同網段仍是跨網段通訊(例如訪問互聯網),絕大狀況下都是使用正常的ARP,而不是代理ARP。生活中的上網的經驗也已經告訴咱們,好像歷來沒有遇到或聽到過"XXX設備不支持代理ARP功能,致使通訊故障"這樣的問題。

 

不少小夥伴看到這裏,會有大大的疑惑:

① "什麼! 咱們纔剛學習了代理ARP的實現原理,如今竟然告訴說它沒怎麼用?"

② 那爲何要創造代理ARP,它的真正使用場景在哪裏??

③ 上述圖解中,電腦跨網段通訊時ARP究竟是如何工做的???

 

接下來給你們劃重點:

第一,代理ARP僅僅是正常ARP的一個拓展使用,是可選項而不是必要項;

第二:代理ARP有特定的應用場景,與網關/路由的設置有直接關係:當電腦沒有網關/路由功能時,而且須要跨網站通訊時,則會觸發代理ARP。換句話說,若是有網關/路由功能,則不須要代理ARP;

第三:正常環境下,當用戶接入網絡時,都會經過DHCP協議或手工配置的方式獲得IP和網關信息(因此不須要代理ARP)。

 

 

3、ARP與代理ARP:不是互斥而是互補

在你們理解了代理ARP的工做原理和應用場景以後,接下來咱們終於能夠更加全面的分析開篇的這個經典問題:當用戶訪問互聯網的時候,到底用ARP仍是代理ARP?跟網關/路由設置有什麼關係?數據封裝又有什麼區別?

 

咱們經過下面兩張圖作個對比=>

 

當電腦沒有網關時,PC Ping 8.8.8.8,採用代理ARP =>

 

wKiom1mm5VPjDPMOAAJtvSyRjyY728.png

 

當電腦有網關時,PC Ping 8.8.8.8,採用正常ARP =>

wKiom1mm5XuwH8HhAAKTD90Y1DY629.png

 

經過上面的對比,咱們獲得如下信息:

①電腦沒有網關時,ARP直接詢問目標IP對應的MAC地址(跨網段),採用代理ARP;

②電腦有網關時,ARP只需詢問網關IP對應的MAC地址(同網段),採用正常ARP;

③不管是正常ARP仍是代理ARP,電腦最終都拿到同一個目標MAC地址:網關MAC。

 

爲了讓上面這個總結更加的通用性,咱們將原有的網絡拓撲稍微複雜化 =>

 

當電腦沒有網關時(採用代理ARP ),PC 依次Ping 8.8.8.八、8.8.4.四、114.114.114.114=> 

wKioL1mm5ZKgIBGTAATtHcu7wv0626.png

 

當電腦有網關時(採用正常ARP ),PC 依次Ping 8.8.8.八、8.8.4.四、114.114.114.114=>

wKioL1mm5bDzM7-HAATnSUywH0Y812.png

 

經過上面的拓撲,咱們能夠獲得更加通用性的總結,概括以下:

①當電腦沒有網關(採用代理ARP)時:"跨網段訪問誰,就問誰的MAC"

②當電腦有網關(採用正常ARP)時:"跨網段訪問誰,都問網關的MAC"

③不管哪一種ARP,跨網段通訊時,發送方請求獲得的目標MAC地址都是網關MAC。

 

註明:網關(Gateway)、下一跳(Next-hop)、路由器(Router)都指的是離發送方最近的三層(或多層)設備,具有三層和路由轉發功能。舉例:咱們經過WiFi上網時,網關就是無線路由器,它幫忙將電腦和手機的數據轉發到互聯網;因此,咱們訪問互聯網時(不管訪問誰),電腦和手機採用的目的MAC,都是無線路由器的MAC。有興趣的小夥伴均可以跟着我驗證下(請見下面章節)。

 

 

4、ARP與代理ARP實戰指南

爲了讓你們更直觀理解,真正"親眼所見"上面學到的技術原理,這裏我帶你們在真實網絡和虛擬環境分別驗證。第一個實驗,主要是針對沒任何命令基礎的小夥伴,你們能夠在家就能夠實驗;第二個實驗,主要針對有必定網絡和安全基礎的小夥伴,經過構造網絡虛擬實驗環境來驗證。

 

(一)真實網絡下ARP與代理ARP實驗

 

wKiom1mm5eHhXTgCAATL0E1TBp4934.png

這個網絡中,個人電腦地址是192.168.199.177,鏈接到極路由(無線路由器),經過極路由器訪問互聯網。這個WiFi網絡的主機列表狀況以下,這裏的PC就是個人Macbook。

 

wKiom1mm5fOxhvM2AAM99XZWEcg029.png

 

接下來再看看極路由MAC地址=>

 

wKioL1mm5evy7oirAAIVFlwNFvw107.png

 

查看個人電腦(Macox系統)IP地址和網關信息,經過命令"ifconfig"查看ip地址=>(Windows系統則經過"ipconfig /all"查看IP地址和網關信息)

 

wKiom1mm5hPibcJ_AAS2uf3Ki-Y876.png

 

經過命令"netstat -rn"查看個人電腦網關設置=>

 

wKioL1mm5hDyc2dQAAHzAQuIlV8888.png

 

接下來,個人電腦連續PING 8.8.8.8和114.114.114.114或其餘外網地址=>

 

wKioL1mm5iOCt_FgAAYa0BgSCgw121.png

 

重點來了,在個人電腦連續訪問這麼多外網地址以後,咱們來看看ARP表項是怎樣的,是否有8.8.8.八、114.114.114.11四、www.pinginglab.net(120.24.59.68)對應的MAC呢?

 

經過命令"arp -a"查看電腦的ARP緩存信息=>

 

wKioL1mm5jSyXCamAAF0Z3bt6k0108.png

從最終的ARP內容來看,個人電腦只記錄着本機和網關的MAC地址,MAC地址"d4:ee-07:54:c1:9e"就是上面給你們截圖的極路由MAC。

 

 

經過這個真實網絡的實驗,咱們能夠驗證瞭如下內容:

①真實網絡中通常都是正常ARP,而不是代理ARP;

②當電腦有網關(採用正常ARP)時,不管跨網段訪問誰,都直接問網關的MAC;

③當第一次獲取網關MAC以後,後續的通訊都再也不須要從新進行ARP請求。(這個是比較容易忽略的,而代理ARP每次訪問新的外網地址,都須要再次請求)

 

 

(二)虛擬環境下ARP與代理ARP實驗

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

 

wKiom1mm5lyCFarGAAGtSwD4_dY840.png

① 首先爲各個設備打開接口並配置IP地址:

PC(config)#int f0/0

PC(config-if)#no shutdown

PC(config-if)#ip address 192.168.1.1 255.255.255.0

Router(config)#int f0/0

Router(config-if)#no shutdown

Router(config-if)#ip address 192.168.1.254 255.255.255.0

Router(config-if)#int f1/0

Router(config-if)#no shutdown

Router(config-if)#ip address 8.8.8.1 255.255.255.0

Server(config)#int f0/0

Server(config-if)#no shutdown

Server(config-if)#ip address 8.8.8.8 255.255.255.0

 

②爲各個設備設置路由信息:

a.關閉PC上路由功能,模擬主機並查看路由表(此時的電腦沒有設置網關)

PC(config)#no ip routing

PC#show ip route

Default gateway is not set

Host               Gateway           Last Use    Total Uses  Interface

b.設置並查看Router和Server路由表,保證聯通,模擬互聯網(這裏Router已有全網的直連路由,Server須要設置返回內網的路由;實際環境應該經過NAT返回,這裏再也不深刻)

 

Router#show ip route

Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP

       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area

       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2

       E1 - OSPF external type 1, E2 - OSPF external type 2

       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2

       ia - IS-IS inter area, * - candidate default, U - per-user static route

       o - ODR, P - periodic downloaded static route

 

Gateway of last resort is not set

 

     8.0.0.0/24 is subnetted, 1 subnets

C       8.8.8.0 is directly connected, FastEthernet1/0

C    192.168.1.0/24 is directly connected, FastEthernet0/0

 

Server(config)#ip route 192.168.1.0 255.255.255.0 8.8.8.1

Server#show ip route

Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP

       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area

       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2

       E1 - OSPF external type 1, E2 - OSPF external type 2

       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2

       ia - IS-IS inter area, * - candidate default, U - per-user static route

       o - ODR, P - periodic downloaded static route

 

Gateway of last resort is not set

 

     8.0.0.0/24 is subnetted, 1 subnets

C       8.8.8.0 is directly connected, FastEthernet0/0

S    192.168.1.0/24 [1/0] via 8.8.8.1

 

③查看PC/Router/Server的接口MAC地址:

PC#show int f0/0

FastEthernet0/0 is up, line protocol is up

  Hardware is AmdFE, address is cc05.1f56.0000 (bia cc05.1f56.0000)

  Internet address is 192.168.1.1/24

Router#show int f0/0

FastEthernet0/0 is up, line protocol is up

  Hardware is AmdFE, address is cc07.1f56.0000 (bia cc07.1f56.0000)

  Internet address is 192.168.1.254/24

Router#show int f1/0

FastEthernet1/0 is up, line protocol is up

  Hardware is AmdFE, address is cc07.1f56.0010 (bia cc07.1f56.0010)

  Internet address is 8.8.8.1/24

Server#show int f0/0

FastEthernet0/0 is up, line protocol is up

  Hardware is AmdFE, address is cc06.1f56.0000 (bia cc06.1f56.0000)

  Internet address is 8.8.8.8/24

 

④經過Wireshark抓取PC和Router鏈路的數據包,並讓PC ping Server(8.8.8.8),查看ARP問答信息:

 

PC#ping 8.8.8.8

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 8.8.8.8, timeout is 2 seconds:

.!!!!   (一個ping來回爲一個 ! 標識,而第一個點 . 表明此時正在arp)

Success rate is 80 percent (4/5), round-trip min/avg/max = 44/47/48 ms

 

wKiom1mm5nSh_KAvAAqLnE0bOoU603.png

 

從數據包能夠看到,因爲PC沒有設置默認網關,因此直接採用代理ARP方式詢問:即直接詢問跨網段目的8.8.8.8的IP地址。而因爲路由器Router默認開啓了代理ARP功能,因此直接用本身的MAC地址迴應了。這裏的cc:07:1f:56:00:00即路由器的MAC地址。這裏順便查看下PC的arp表:

 

PC#show arp

Protocol  Address          Age (min)  Hardware Addr   Type   Interface

Internet  8.8.8.8                 9   cc07.1f56.0000  ARPA   FastEthernet0/0

Internet  192.168.1.1             -   cc05.1f56.0000  ARPA   FastEthernet0/0

 

所以,這裏便驗證了:當電腦沒有設置網關信息,則採用代理ARP。

咱們接着驗證另一個點:當採用代理ARP時,會"受限於沿途網關設備",例如網關設備(路由器)可能不支持代理ARP或關閉代理ARP功能,此時電腦就沒法與外網IP實現通訊

 

怎麼驗證呢?這裏咱們須要關閉路由器接口的代理ARP功能,而且清空電腦PC的arp表=>

Router(config)#int f0/0

Router(config-if)#no ip proxy-arp

PC#clear arp

PC#ping 8.8.8.8

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 8.8.8.8, timeout is 2 seconds:

.....

Success rate is 0 percent (0/5)

 

查看底層數據包交互過程=>

 

wKioL1mm5oHh2PbbAAwHw8w5r5o755.png

 

當路由器關閉代理ARP時,此時電腦"苦苦哀求"外網8.8.8.8的MAC地址,而路由器直接丟棄再也不返回,因爲電腦沒有目標IP對應的MAC信息,因此通訊失敗,即  ...... 咱們來看下此時PC的arp表是怎樣的=>

 

PC#show arp

Protocol  Address          Age (min)  Hardware Addr   Type   Interface

Internet  8.8.8.8                 0   Incomplete      ARPA  

Internet  192.168.1.1             -   cc05.1f56.0000  ARPA   FastEthernet0/0

 

⑤爲PC設置默認網關,從新ping 8.8.8.8,看看能不能通=>

PC(config)#ip default-gateway 192.168.1.254

PC#ping 8.8.8.8

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 8.8.8.8, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 44/244/1040 ms

 

能夠看到,當電腦具有網關信息以後,此時直接採用ARP詢問網關的MAC,即去往8.8.8.8的時候直接詢問192.168.1.254的MAC,這個時候無論Router有沒有開啓代理ARP,也會正常回應PC的ARP詢問,咱們來看看底層數據包截圖=>

 

wKiom1mm5rWTPNKxAAtviuOFW7Q323.png

 

4、代理ARP總結

① 本章節咱們深刻學習了代理ARP的原理和實踐,在文章的開頭,咱們經過一個引子,幫你們矯正一個誤區:跨網段通訊時,就必定要用到代理ARP;

②代理ARP是一個"善意的欺騙",當電腦要跨網段訪問外網設備時,網關設備用本身的MAC返回;

③代理ARP和ARP的具體實現,跟電腦是否有設置網關有直接的關係;有網關經過ARP,沒網關經過代理ARP;代理ARP能夠當作是ARP的補充;

④代理ARP會"受限於沿途網絡設備",真實網絡裏面通常都直接用ARP獲取MAC地址。

相關文章
相關標籤/搜索