什麼是ARP代理(ARP Proxy)?
戴致禮 Travis Tai
- 精誠資訊/恆逸教育訓練中心-資深講師
- 技術分類:網路管理與通訊應用
一般按照正常方式,用戶主機會經由Default Gateway(預設閘道)的設定,將資料數據路由轉送給在不同IP子網段的目標主機;然而,即使用戶主機本身沒有設定預設閘道的話,那麼該用戶主機是否仍可以傳送資料數據給不在相同IP子網段的目標主機? 答案:還是可以的,那就是使用ARP Proxy(ARP代理)。
什麼是ARP Proxy(ARP代理)?
當啟動ARP Proxy(ARP代理)的路由器收到ARP Request(ARP請求)封包時,倘若發現欲查詢的目標IP位址不在相同的子網段時,扮演ARP代理角色的路由器就會代替目標主機回答,告訴查詢者目標主機的MAC位址。
下面是ARP Proxy(ARP代理)的運作機制:
![](https://www.uuu.com.tw/Public/content/article/21/20210510/1.jpg)
【步驟一】:
PC1# show ip route Default gateway is not set Host Gateway Last Use Total Uses Interface ICMP redirect cache is empty
【說明】:
在本實驗中,我們使用1台取消路由功能的路由器來模擬用戶主機PC1,在以上show ip route指令輸出畫面中,可清楚看到Default gateway is not set的訊息。
【步驟二】:
PC1# show arp Protocol Address Age(min) Hardware Addr Type Interface Internet 10.10.1.1 2 aabb.cc00.2100 ARPA Ethernet0/0 Internet 10.10.1.2 0 aabb.cc80.2a00 ARPA Ethernet0/0 Internet 10.10.1.10 - aabb.cc00.2200 ARPA Ethernet0/0 Internet 10.10.1.20 2 aabb.cc00.2800 ARPA Ethernet0/0
【說明】:
從以上show arp指令輸出畫面中,可明顯地看出用戶主機PC1使用ARP協定,學習在相同IP子網段的其他主機MAC位址,並記錄在其ARP Cache(ARP快取區)。
【注意】:
從以上用戶主機PC1的快取區中,除了可看到在相同子網段的其他主機(例:PC2和SW2)IP位址與其MAC位址的對應,還可以看到路由器R1 Eth0/0端口的IP位址與MAC位址的對應。
【步驟三】:
PC1# ping 192.168.3.2 Type escape sequence to abort Sending 5, 100-byte ICMP Echos to 192.168.3.2, timeout is 2 seconds: . ! ! ! ! Success rate is 80 percent (4/5), round-rip min/avg/max = 1/1/1 ms
【說明】:
用戶主機PC1使用PING與不在相同IP子網段的目標主機PC3(IP位址是192.168.3.2)通訊,此時因為用戶主機PC1沒有設定預設閘道,所以不論目標主機的IP位址是否在相同網段,PC1都會先使用ARP Request(ARP請求)封包來查詢目標主機的MAC位址(ARP請求封包的封包頭格式,請參考下面的注意1),這是一個廣播封包的格式,與PC1相同網段的所有主機(包含路由器R1)都會接收到該廣播封包,但由於路由器不會轉發廣播封包,所以目標主機PC3無法接收到該廣播封包而親自做回應,此時只有扮演ARP代理角色的路由器R1通過路由表的比對,知道目標主機PC3在其他的網段,因此該路由器R1就會代替目標主機PC3回答,使用ARP Reply(ARP回覆)封包來告知目標主機PC3的MAC位址(ARP回覆封包的封包頭格式,請參考下面的注意2)。
【注意1】:用戶主機PC1所發送的ARP請求封包,其封包頭的格式為:
來源MAC:用戶主機PC1的MAC位址(aabb.cc00.2200)
來源IP:用戶主機PC1的IP位址(10.10.1.10)
目標MAC:0000.0000.0000
目標IP:目標主機PC3的IP位址(192.168.3.2)
【注意2】:路由器R1回應給用戶主機PC1的ARP回覆封包,其封包頭的格式:
來源MAC:路由器R1 Eth0/0端口的MAC位址(aabb.cc00.2100)
來源IP:目標主機PC3的IP位址(192.168.3.2)
目標MAC:用戶主機PC1的MAC位址(aabb.cc00.2200)
目標IP:目標主機PC1的IP位址(10.10.1.10)
【步驟四】:
PC1# show arp Protocol Address Age(min) Hardware Addr Type Interface Internet 10.10.1.1 2 aabb.cc00.2100 ARPA Ethernet0/0 Internet 10.10.1.2 0 aabb.cc80.2a00 ARPA Ethernet0/0 Internet 10.10.1.10 - aabb.cc00.2200 ARPA Ethernet0/0 Internet 10.10.1.20 2 aabb.cc00.2800 ARPA Ethernet0/0 Internet 192.168.3.2 0 aabb.cc00.2100 ARPA Ethernet0/0
【說明】:
當用戶主機PC1收到扮演ARP代理角色的路由器R1的ARP回覆封包後,便會將之紀錄在其ARP快取區(ARP cache)內,請特別注意在步驟四的show arp指令輸出畫面中,其中有兩筆記錄192.168.3.2與10.10.1.1所對應的MAC位址是完全相同的。
【結論】:
基本上,ARP協定只能適用於將本地的IP位址解析為乙太MAC位址,由在相同IP子網段的目的主機直接應答ARP的請求;但是如果要把資料數據傳送到不同的子網段,而本身又沒有設定預設閘道的話,那麼就由扮演ARP代理角色的中間裝置以自己的MAC位址代為應答ARP的請求,因此這些資料數據就先傳送給這個啟動ARP代理服務的中間裝置(一般為路由器),再透過路由轉送給其他在不同IP子網段的目的主機。根據維基百科(Wikipedia)的紀錄,目前ARP Proxy在業界有如下的用途:
1)Joining a broadcast LAN with serial links(例如:撥接或VPN線路)
2)Taking multiple addresses from a LAN
3)Proxy-ARP Firewall
4)Mobile-IP Home Agent
5)Transparent subnet gatewaying(RFC 1027)
6)Redundancy(例如:Common Address Redundancy Protocol與Virtual Router Redundancy Protocol)