Proxy ARP

A proxy ARP manapság már kevés helyen kap szerepet, de régen egy alapköve volt a hálózatok működésének. Ejtsünk hát róla pár szót.

Még a DHCP előtti időkben, mikor RARP/BOOTP szerverek adták az IP címeket, a proxy ARP nagyon elterjedt volt. Manapság is találkozhatunk vele. Ha telepítettek gépeket az osztálynak megfelelő maszkkal, akkor is működött a kommunikáció az eszközök között, mert a routeren a proxy ARP megoldotta a problémát.

A technológia lényege röviden:

Mikor egy host kommunikálni szeretne egy másikkal, a subnet mask alapján:

  • ha azonos alhálózatban vannak, akkor küld egy ARP kérést a kérdéses host IP-jére, hogy megszerezze annak MAC címét
  • ha nem azonos alhálózatban vannak, a default gateway-hez fordul.

De mi van a következő esetben?

proxyarp

A két host szeretne kommunikálni egymással. Mivel a subnet mask alapján egy alhálózatban vannak (a maszk el van írva mindkét oldalon, bal oldalon /16, jobb oldalon /23), ezért mindkét host azt hiszi, hogy egy alhálózatban vannak, és egymás IP címére küldenek ARP kéréseket (ha csak Host1 maszkja lenne rossz, akkor is hasonló a probléma, viszont abban az esetben HOST2 helyesen tudná, hogy nincs HOST1-gyel egy hálózatban, és a default gateway felé kell küldenie a csomagokat, most csak az egyszerűség kedvéért írtam el mindkét oldalon a maszkot). Működni fog? Technikailag nem, de mégis igen, mert a Cisco routeren alapból engedélyezett a proxy ARP.

Nézzük gyakorlatban a problémát.

Alap konfigok:

Host1
no ip routing
!
interface Ethernet0/0
 ip address 192.168.0.10 255.255.0.0
 no ip route-cache
!
!
ip default-gateway 192.168.0.1
Host2
no ip routing
!
interface Ethernet0/1
 ip address 192.168.1.10 255.255.254.0
 no ip route-cache
!
!
ip default-gateway 192.168.1.1
R1
 conf t
 int e0/0
 ip add 192.168.0.1 255.255.255.0
 ! Proxy ARP-t kikapcsolom E0/0-n, alapból engedélyezve van
 no ip proxy-arp
 no shutdown
 int e0/1
 ip add 192.168.1.1 255.255.255.0
 no shutdown
 ! Proxy ARP-t kikapcsolom E0/1-n, alapból engedélyezve van
 no ip proxy-arp
 end

Nézzük, megy -e a kommunikáció…

Előtte bónusz: hogy ne kelljen annyit gépelni később, csinálok host bejegyzéseket:

HOST1(config)#ip host R1 192.168.0.1
HOST1(config)#ip host HOST2 192.168.1.10
HOST1(config)#end
HOST2(config)#ip host HOST1 192.168.0.10
HOST2(config)#ip host R1 192.168.1.1
HOST2(config)#end
HOST2#

Gateway pingelhető mindkét eszközről:

HOST1#ping r1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 6/6/7 ms
HOST1#
HOST2#ping r1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 8/211/1018 ms
HOST2#

Na és egymást?

HOST1#ping host2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.10, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
HOST1#

Nem megy. Ahogy várható volt. Na és miért nem?

HOST1#debug arp
ARP packet debugging is on
HOST1#ping host2 repeat 1
Type escape sequence to abort.
Sending 1, 100-byte ICMP Echos to 192.168.1.10, timeout is 2 seconds:
*Aug 30 21:20:34.851: IP ARP: sent req src 192.168.0.10 aabb.cc00.0200,
 dst 192.168.1.10 0000.0000.0000 Ethernet0/0
*Aug 30 21:20:35.858: IP ARP throttled out the ARP Request for 192.168.1.10.
Success rate is 0 percent (0/1)
HOST1#
*Aug 30 21:20:36.867: IP ARP: sent req src 192.168.0.10 aabb.cc00.0200,
 dst 192.168.1.10 0000.0000.0000 Ethernet0/0
HOST1#
*Aug 30 21:20:37.874: IP ARP throttled out the ARP Request for 192.168.1.10
HOST1#

Azaz HOST1 HOST2-nek küld ARP kérést, amelyre nyilván sosem jön válasz, hiszen nincs a subnetben ilyen IP cím.

R1 is megkapja az ARP kérést, de nem tesz semmit – mert kikapcsoltam a proxy ARP-t. Pedig ő tudja, hogy nem egy alhálóban van a két host – a routeren jó a subnet mask. Mégsem menti meg a világot, mert megtiltottam neki :). Ezt látjuk R1-en egyébként:

R1#debug arp
ARP packet debugging is on
R1#
*Aug 30 21:21:44.508: IP ARP: rcvd req src 192.168.0.10 aabb.cc00.0200, dst 192.168.1.10 Ethernet0/0
R1#
*Aug 30 21:21:46.524: IP ARP: rcvd req src 192.168.0.10 aabb.cc00.0200, dst 192.168.1.10 Ethernet0/0
R1#

Nézzük, mi történik, ha engedélyezem a proxy ARP-t:

HOST1#ping host2 rep 2
Type escape sequence to abort.
Sending 2, 100-byte ICMP Echos to 192.168.1.10, timeout is 2 seconds:
*Aug 30 21:23:28.792: IP ARP: creating incomplete entry for IP address: 192.168.1.10 interface Ethernet0/0
*Aug 30 21:23:28.792: IP ARP: sent req src 192.168.0.10 aabb.cc00.0200,
 dst 192.168.1.10 0000.0000.0000 Ethernet0/0
*Aug 30 21:23:28.798: IP ARP: rcvd rep src 192.168.1.10 aabb.cc00.0300, dst 192.168.0.10 Ethernet0/0..
Success rate is 0 percent (0/2)
HOST1#

HOST1 kap választ az ARP kérésre – R1-től.

R1#
*Aug 30 21:23:21.578: %SYS-5-CONFIG_I: Configured from console by console
R1#
*Aug 30 21:23:28.793: IP ARP: rcvd req src 192.168.0.10 aabb.cc00.0200, dst 192.168.1.10 Ethernet0/0
*Aug 30 21:23:28.793: IP ARP: sent rep src 192.168.1.10 aabb.cc00.0300,
 dst 192.168.0.10 aabb.cc00.0200 Ethernet0/0
R1#
*Aug 30 21:23:29.801: IP ARP: rcvd req src 192.168.1.10 aabb.cc00.0110, dst 192.168.0.10 Ethernet0/1
R1#

Tehát látható, R1 “behazudja” a saját MAC címét HOST1-nek a kérésére, mert a router tudja, hogy a 192.168.1.0/24 hálózat felé merre küldje a csomagot, és azt is tudja, hogy HOST1 ARP kérését HOST2 sosem fogja megkapni.

A ping mégsem megy. Miért?

HOST1 R1-en keresztül már tudna kommunikálni. De HOST2 nem tudja, hogy mi HOST1 MAC címe (a proxy ARP-t csak HOST1 felé kapcsoltam be a routeren).

HOST2#
*Aug 30 21:25:54.289: IP ARP: creating incomplete entry for IP address: 192.168.0.10 interface Ethernet0/1
*Aug 30 21:25:54.289: IP ARP: sent req src 192.168.1.10 aabb.cc00.0110,
 dst 192.168.0.10 0000.0000.0000 Ethernet0/1

Tehát R1 másik interface-n is engedélyeznem kell a proxy ARP-t:

R1(config)#int e0/1
R1(config-if)#ip pr
R1(config-if)#ip proxy-arp
R1(config-if)#end
R1#

És most?

HOST1#ping host2 rep 2
Type escape sequence to abort.
Sending 2, 100-byte ICMP Echos to 192.168.1.10, timeout is 2 seconds:
.!
Success rate is 100 percent (2/2), round-trip min/avg/max = 7/7/8 ms
HOST1#

Az első ping kiesik az ARP kérés miatt, de miután megvan az ARP REPLY, működik a kommunikáció.

Ahogy az sejthető, HOST1-en és HOST2-n az ARP táblában a default gateway és a másik host MAC címének ugyanazt az eszközt látjuk – a routerét.

HOST1#sh ip arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 192.168.0.1 1 aabb.cc00.0300 ARPA Ethernet0/0
Internet 192.168.0.10 - aabb.cc00.0200 ARPA Ethernet0/0
Internet 192.168.1.10 1 aabb.cc00.0300 ARPA Ethernet0/0

A router interface-n ellenőrizhető, aktív -e a proxy ARP:

R1#sh ip int e0/0
Ethernet0/0 is up, line protocol is up
 Internet address is 192.168.0.1/24
 Broadcast address is 255.255.255.255
 Address determined by setup command
 MTU is 1500 bytes
 Helper address is not set
 Directed broadcast forwarding is disabled
 Multicast reserved groups joined: 224.0.0.251
 Outgoing access list is not set
 Inbound access list is not set
 Proxy ARP is enabled
 Local Proxy ARP is disabled
 Security level is default
 Split horizon is enabled
 ICMP redirects are always sent
 ICMP unreachables are always sent
 ICMP mask replies are never sent
 IP fast switching is enabled
 IP fast switching on the same interface is disabled
 IP Flow switching is disabled
 IP CEF switching is enabled
 IP CEF switching turbo vector
 IP multicast fast switching is enabled
 IP multicast distributed fast switching is disabled
 IP route-cache flags are Fast, CEF
 Router Discovery is disabled
 IP output packet accounting is disabled
 IP access violation accounting is disabled
 TCP/IP header compression is disabled
 RTP/IP header compression is disabled
 Policy routing is disabled
 Network address translation is disabled
 BGP Policy Mapping is disabled
 Input features: MCI Check
 IPv4 WCCP Redirect outbound is disabled
 IPv4 WCCP Redirect inbound is disabled
 IPv4 WCCP Redirect exclude is disabled
R1#

Remélem követhető és hasznos volt a bejegyzés. 🙂