Proxy ARP
Today I am going to talk about the Proxy ARP. Proxy-ARP is used on routers by default. The idea is that it permits devices on 2 different subnets to exchange information to each other without configuring a default gateway.
Let’s have this verified by a LAB. This lab was setup on GNS3. Router NB_R1 and NB_R3 are routers, however, we are going to imitate them as hosts by restricting ip routing. So imagine this as 2 hosts (NB_R1 & NB_R3) connecting to 1 router (NB_R2).
![]() |
Fig 1.1- Proxy ARP |
NB_R1#no ip routing
interface FastEthernet0/0
ip address 192.168.0.2 255.255.255.0
NB_R1#sh arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 192.168.0.2 - cc00.0e1c.0000 ARPA FastEthernet0/0
NB_R2#
interface FastEthernet0/0
description connections to R1
ip address 192.168.0.1 255.255.255.0
interface FastEthernet0/1
description connections to R3
ip address 10.10.10.1 255.255.255.0
NB_R2#sh arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 10.10.10.1 - cc01.0e1c.0001 ARPA FastEthernet0/1
Internet 192.168.0.1 - cc01.0e1c.0000 ARPA FastEthernet0/0
NB_R3#
no ip routing
interface FastEthernet0/1
ip address 10.10.10.2 255.255.255.0
NB_R3#sh arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 10.10.10.2 - cc02.116c.0001 ARPA FastEthernet0/1
So let’s try and ping from NB_R1 to NB_R3 without a default gateway configured either side.
NB_R1#ping 10.10.10.2
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 28/32/40 ms
NB_R1#sh arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 10.10.10.2 - cc01.0e1c.0000 ARPA FastEthernet0/0
Internet 192.168.0.2 - cc00.0e1c.0000 ARPA FastEthernet0/0
The MAC address for 10.10.10.2 is actually the MAC address of our router NB_R2′s fa0/0 interface (as opposed to the MAC of our host NB_R3). Let’s verify this by checking the MAC for NB_R2′s fa0/0 interface.
NB_R2#sh int fa0/0 | i bia
Hardware is AmdFE, address is cc01.0e1c.0000 (bia cc01.0e1c.0000)
Cool. This means our ping from NB_R1 to NB_R3 was actually proxy-arp’d by our router NB_R2 (i.e. NB_R2 actually arp’d NB_R3 for us. This is because he knows the destination IP off one of his interfaces). So if we disable proxy-arp on NB_R2, the ping from NB_R1–>NB_R3 should be unsuccessful! At this point, I’ve now cleared the arp-cache by using #clear arp on each of the three devices so that we don’t use any old arp entries.
NB_R2(config)#interface FastEthernet0/1
NB_R2(config-if)#no ip proxy-arp
NB_R2(config)#interface FastEthernet0/0
NB_R2(config-if)#no ip proxy-arp
NB_R2#ping 10.10.10.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.10.10.2, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
NB_R1#sh arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 10.10.10.2 0 Incomplete ARPA
Internet 192.168.0.2 – cc00.0e1c.0000 ARPA FastEthernet0/0
Good. The incomplete ARP entry indicates that we didn’t manage to receive a response from the destination of 10.10.10.2. Because we removed proxy-arp we now need to add a default gateway on both NB_R1 & NB_R3 in order for this to work!
NB_R3(config)#ip default-gateway 10.10.10.1
NB_R1(config)#ip default-gateway 192.168.0.1
NB_R1#ping 10.10.10.2
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 28/32/40 ms
NB_R1#sh arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 192.168.0.1 0 cc01.0e1c.0000 ARPA FastEthernet0/0
Internet 192.168.0.2 - cc00.0e1c.0000 ARPA FastEthernet0/0
Now we understand the config as it should work without proxy ARP. When we ping an address on another subnet, our host (NB_R1) knows it needs to use its default gateway. It sends a broadcast ARP to find the MAC of the gateway so that he is able to pass the frame onto NB_R2. R2 looks up his routing table to see that the 10.10.10.0/24 network is directly connected via fa0/1.
Then broadcast ARPs for the MAC assigned to 10.10.10.2 and passes the frame onto NB_R3. Because of the route-lookup, we are working at layer 3 on the router. This means we are no longer sending broadcast frames at layer 2 across different subnets.