什麼是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代理)的運作機制:

【步驟一】

    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)


您可在下列課程中了解更多技巧喔!