HCNP Routing&Switching之代理ARP

1874發表於2022-04-25

  前文我們瞭解了埠隔離相關話題,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/16186451.html;今天我們來聊一聊ARP代理相關話題;

  埠隔離之破解之道

  前文我們通過抓包可以看到,當同一vlan下的埠做了雙向埠隔離或者單向埠隔離以後,對應的埠就不能正常通訊;其中最主要的原因是通訊雙方在通訊時,拿不到對方的mac;拿不到通訊對方的mac,乙太網二層封裝就封裝不了,從而導致通訊無法正常進行;那怎麼打破埠隔離這樣的限制呢?其實也很簡單,我們找一箇中間裝置或介面,該介面能夠和通訊雙方正常通訊,然後賦予該介面轉發arp的功能,是不是可以實現做過埠隔離的雙方實現通訊呢?

  代理ARP

  所謂代理ARP是指,如果ARP請求是從一個網路的主機發往同一網段,卻不再同一物理物理網路上的另一臺主機(即相互隔離的同一網段內的主機),那麼連線它們的具有代理ARP功能的裝置就可以回答該請求,這個過程就叫做代理ARP(Proxy ARP);代理ARP遮蔽了分離的物理網路,使使用者使用起來就好像在同一物理網路上一樣;代理ARP可以分為兩大類,一類是連線相同三層介面的本地代理和連線不同三層介面的普通代理arp;

  普通代理ARP

  提示:普通代理ARP是通訊雙方分別連線到裝置的不同三層介面上,且這些主機不再同一廣播域上;如上圖主機A和主機B,分別連線路由器的兩個埠上;但是主機A和主機B通訊時,由於掩碼都是16位,網路地址都一樣,所以主機A和主機B通訊時,它們都會先傳送ARP請求(因為同一網段,不需要找閘道器);但是主機A或主機B如果直接傳送arp請求,都會被路由器分割,所以導致通訊無法正常進行;要想正常進行,我們需要在路由器的兩個介面上開啟代理ARP,這樣主機A或主機B傳送的arp請求都會通過開啟路由器代理arp的介面轉發,從而實現拿到對方mac實現通訊;

  本地代理ARP

  提示:本地代理ARP就是指想要互通的主機連線到裝置的同一個三層介面上,且這些主機不再同一廣播域中;如上圖主機A和主機B都同屬VLAN2 且有做了雙向埠隔離,此時主機A和主機B的通訊就依賴一個三層介面來代理ARP實現通訊;

  實驗:在交換機上我們做了pc1和pc2雙向埠隔離,pc1和pc3做了單向埠隔離,在不取消埠隔離的情況下是實現pc1和pc2、pc3互通

  交換機配置

HCNP Routing&Switching之代理ARP
sys
sys sw1
vlan 12
int g0/0/1
port link-type access
port default vlan 12
int g0/0/2
port link-type access
port default vlan 12
int g0/0/3
port link-type access
port default vlan 12
int g0/0/1
port-isolate en
int g0/0/2
port-isolate en 
int g0/0/3
am isolate g0/0/1
View Code

  驗證隔離資訊

  驗證:pc1和pc2、pc3的互通性

  提示:現在pc1和pc2、pc3都是不通的;

  在交換機上啟用一個vlanif12的介面,並配置和pc1、pc2同網段ip地址

  在vlanif 12介面上開啟同vlan內arp代理

  提示:在三層交換機上開啟arp代理分同一vlan內的arp代理和不同vlan間的arp代理;上述實驗環境需要在三層介面上開啟同一vlan內的arp代理;arp-proxy 這個命令是路由器上開啟arp代理;

  驗證:pc1和pc2、pc3的互通性

  提示:可以看到現在pc1和pc2、pc3都能正常通訊;

  在pc1上檢視arp表

  提示:可以看到在pc1上pc2和pc3的mac地址都是同vlanif 12介面mac地址一樣,這是為什麼呢?其實從上面的mac地址表我們就能想到,pc1和pc2、pc3通訊都是用的vlanif 12的mac,這是因為pc1和pc2、pc3通訊時傳送arp請求,對應回覆pc1的都是vlanif12介面;

  清空三臺pc上的arp地址表和交換機的mac地址表,抓包檢視其過程

  提示:可以看到pc1pingpc2時,首先是pc1傳送arp廣播,說誰是1.0.0.2,請告訴我你的mac地址,此時vlanif 12收到pc1傳送的arp廣播後,它一看自己的路由表是可以直接到達1.0.0.2,所以它就把自己的mac地址告訴pc1,然後vlanif 12又傳送arp請求,說誰是1.0.0.2,請把mac地址告訴1.0.0.12,此時pc2收到arp廣播後,就把自己的mac告訴1.0.0.12,後續pc傳送資料給vlanif12 ,vlanif12 通過拆除乙太網二層包頭,然後又用pc2的mac地址作為目標mac封裝乙太網二層包頭髮送給pc2;pc1同pc3的通訊過程同pc1和pc2的過程一樣;

  埠隔離之防破解之道

  通過上述實驗可以看到如果我們在三層交換機上建立vlanif介面,並開啟arp代理,那麼我們之前配置的埠隔離就失效了,那怎麼避免呢?其實很簡單,預設情況下埠隔離只是隔離的二層,如果我們想要把三層也給隔離了,只需要修改埠隔離模式為all即可,如下所示

  驗證:pc1和pc2、pc3的互通性

  提示:可以看到現在把隔離模式修改為all以後,即便我們在交換機上建立了vlanif介面,也開啟了arp代理,對應通訊還是被隔離的;這是因為之前只是隔離二層,現在修改隔離模式為all,表示二層和三層都做隔離;所以現在即便有三層介面,也開啟了arp代理,對應通訊也是被隔離的;

  代理arp之寫靜態路由出介面和下一跳區別

  在前邊聊靜態路由時,我們特意提到在寫靜態路由時,如果是乙太網鏈路上,我們推薦寫下一跳地址,不推薦寫出介面,這是為什麼呢?先看一個實驗

  如上實驗環境,我們在R1上配置靜態路由時,為什麼推薦寫下一跳呢?

  寫下一跳,然後r1 ping 2.2.2.2 抓包檢視其過程

  在R1抓包看看通訊過程

  提示:可以看到R1ping 2.2.2.2時,根據靜態路由,它首先會傳送arp請求下一跳的arp;

  靜態路由改寫成出介面,看看對應通訊又有什麼變化呢?

  在R1上抓包,看看通訊過程

  提示:可以看到當我們寫靜態路由寫成出介面後,R1會直接問2.2.2.2的mac地址,它會認為2.2.2.2和本地直連;這樣一來會導致一個問題就是拿不到2.2.2.2的mac;從而導致通訊無法正常完成;

  分析:之所以在乙太網環境中寫靜態路由推薦寫下一跳地址,是因為寫下一跳,路由器會傳送要下一跳的mac地址,從而實現通訊;寫出介面就是告訴路由器去往目標網段,直接將資料傳送給對應出介面即可;這樣一來導致路由器認為目標網段和出介面直連(誤認為出介面和目標地址在同一廣播域,所以它就直接傳送arp請求目標地址的mac地址),從而導致拿不到目標網段的mac,導致通訊無法正常完成;

  在R2上開啟arp代理,實現通訊

  驗證:R1ping2.2.2.2看看是否能通?

  提示:可以看到在R2上開啟arp代理以後,對應通訊就能正常進行;這是因為R1傳送arp請求2.2.2.2的mac地址,R2的g0/0/0口收到arp請求以後,一看自己的路由表中能夠到達2.2.2.2,且該介面也開啟了arp代理,所以它會把自己的mac告訴給R1,然後R1有了2.2.2.2的mac後,後續就可以直接封裝乙太網包頭髮送資料;

  那為什麼點到點的序列鏈路中寫下一跳或出介面都行呢?

  因為,序列鏈路中不需要封裝mac地址!!!

相關文章