En enklare labb på routing över DMVPN som jag inte hunnit läsa/labba så mycket på ännu, verkade dock rätt intressant för att få en bättre förståelse över hur NHRP används för att sätta upp tunnlar mellan spokes.
- Konfigurera en statisk default-route i R1 & R2 genom DMVPN-molnet till R5, routen får endast vara giltig när Tunnel-interfacet är i UP-state
- Konfigurera R5 med statiska routes till R1 & R2’s loopbacks genom DMVPN-molnet
- Tunnel-interfacen för respektive router är: R1 155.1.0.1, R2 155.1.0.2, R5 155.1.0.5
Enklaste sättet att lösa första kravet är att ange utgående interface tillsammans med nexthop till R5, då blir routen endast giltig när nexthop är nåbar över specificerade interfacet. Anger vi bara nexthop kommer routen fortfarande vara giltig så länge det finns en alternativ väg (och då matchar vi inte längre kravet i labben).
R1(config)#ip route 0.0.0.0 0.0.0.0 Tunnel0 155.1.0.5 R2(config)#ip route 0.0.0.0 0.0.0.0 Tunnel0 155.1.0.5 R5(config)#ip route 150.1.1.1 255.255.255.255 Tunnel0 155.1.0.1 R5(config)#ip route 150.1.2.2 255.255.255.255 Tunnel0 155.1.0.2
Vi skulle även kunna krångla till det lite och använda trackers på R1 & R2 istället i stil med detta:
R1(config)#track 1 interface Tunnel0 line-protocol R1(config)#ip route 0.0.0.0 0.0.0.0 155.1.0.5 track 1 R2(config)#track 1 interface Tunnel0 line-protocol R2(config)#ip route 0.0.0.0 0.0.0.0 155.1.0.5 track 1
Hur som.. Alla routrar bör nu kunna pinga varandra utan problem.
R1#ping 150.1.5.5 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 150.1.5.5, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/4 ms R1#ping 150.1.2.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 150.1.2.2, timeout is 2 seconds: .!!!! Success rate is 80 percent (4/5), round-trip min/avg/max = 4/4/5 ms
Observera att vi tappar första paketet till R2, detta beror på att R1 måste skicka ett NHRP Resolution Request till R5 där den efterfrågar den publika ip-adressen (NBMA address) för att komma till R2/150.1.2.2. R5 svarar med R2’s publika address 169.254.100.2, R1 handskakar därefter upp en dynamisk tunnel mellan den & R2. Vi kan verifiera detta med:
R2# interface Tunnel0 ip address 155.1.0.2 255.255.255.0 ... tunnel source GigabitEthernet1.100 ... interface GigabitEthernet1.100 encapsulation dot1Q 100 ip address 169.254.100.2 255.255.255.0 R1#sh ip nhrp 155.1.0.1/32 via 155.1.0.1 Tunnel0 created 00:00:03, expire 00:04:56 Type: dynamic, Flags: router unique local NBMA address: 169.254.100.1 (no-socket) 155.1.0.2/32 via 155.1.0.2 Tunnel0 created 00:00:03, expire 00:04:56 Type: dynamic, Flags: router implicit used nhop NBMA address: 169.254.100.2 155.1.0.5/32 via 155.1.0.5 Tunnel0 created 01:30:55, never expire Type: static, Flags: used NBMA address: 169.254.100.5
Detta fungerar lika bra även om vi endast anger DMVPN-molnet som utgående IF i R1 & R2:
R2(config)#no ip route 0.0.0.0 0.0.0.0 Tunnel0 155.1.0.5 R2(config)#ip route 0.0.0.0 0.0.0.0 Tunnel0 R1(config)#no ip route 0.0.0.0 0.0.0.0 Tunnel0 155.1.0.5 R1(config)#ip route 0.0.0.0 0.0.0.0 Tunnel0 R1#sh ip nhrp 155.1.0.5/32 via 155.1.0.5 Tunnel0 created 01:38:25, never expire Type: static, Flags: used NBMA address: 169.254.100.5 R1#ping 150.1.2.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 150.1.2.2, timeout is 2 seconds: .!!!! Success rate is 80 percent (4/5), round-trip min/avg/max = 4/4/5 ms
Vad händer dock om vi gör samma sak i vår hub/R5?
R5(config)#no ip route 150.1.1.1 255.255.255.255 Tunnel0 155.1.0.1 R5(config)#no ip route 150.1.2.2 255.255.255.255 Tunnel0 155.1.0.2 R5(config)#ip route 150.1.2.2 255.255.255.255 Tunnel0 R5(config)#ip route 150.1.1.1 255.255.255.255 Tunnel0 R1#ping 150.1.2.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 150.1.2.2, timeout is 2 seconds: ..... Success rate is 0 percent (0/5)
Detta trots att våra tunnlar fortfarande är uppe!
R1#sh ip nhrp 150.1.2.2/32 via 155.1.0.2 Tunnel0 created 00:01:11, expire 00:03:49 Type: dynamic, Flags: router NBMA address: 169.254.100.2 155.1.0.2/32 via 155.1.0.2 Tunnel0 created 00:01:10, expire 00:03:49 Type: dynamic, Flags: router nhop NBMA address: 169.254.100.2 155.1.0.5/32 via 155.1.0.5 Tunnel0 created 01:39:55, never expire Type: static, Flags: used NBMA address: 169.254.100.5
En debug ger lite bättre inblick vad det är som går fel:
R5#debug nhrp NHRP protocol debugging is on R5#debug ip pack R5#debug ip packet detail IP packet debugging is on (detailed) R5#ping 150.1.1.1 rep 1 Type escape sequence to abort. Sending 1, 100-byte ICMP Echos to 150.1.1.1, timeout is 2 seconds: IP: s=155.1.0.5 (local), d=150.1.1.1, len 100, local feature ICMP type=8, code=0, feature skipped, Auth Proxy(16), rtype 0, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE FIBipv4-packet-proc: route packet from (local) src 155.1.0.5 dst 150.1.1.1 FIBfwd-proc: packet routed by adj to Tunnel0 150.1.1.1 FIBipv4-packet-proc: packet routing succeeded IP: tableid=0, s=155.1.0.5 (local), d=150.1.1.1 (Tunnel0), routed via FIB IP: s=155.1.0.5 (local), d=150.1.1.1 (Tunnel0), len 100, sending ICMP type=8, code=0 IP: s=155.1.0.5 (local), d=150.1.1.1 (Tunnel0), len 100, output feature ICMP type=8, code=0, feature skipped, TCP Adjust MSS(58), rtype 1, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE NHRP: NHRP could not map 150.1.1.1 to NBMA, cache entry not found NHRP: MACADDR: if_in null netid-in 0 if_out Tunnel0 netid-out 1 NHRP: Checking for delayed event NULL/150.1.1.1 on list (Tunnel0 vrf: global(0x0)) NHRP: No delayed event node found. NHRP: No cache for forwarding(0) NHRP: Node found. Success rate is 0 percent (0/1)
Det är hubrouterns uppgift att hålla kolla på mappningarna mellan intern/publik nexthop och den har ingen annan att fråga än sig själv. Därför ska man alltid ange nexthop-adress när man konfigurerar rötter i hubroutern/R5. Vi kan dock lösa detta genom en workaround och göra statiska mappningar för loopback-näten i R5.
R5(config)#int tu0 R5(config-if)#ip nhrp map 150.1.1.1 169.254.100.1 R5(config-if)#ip nhrp map 150.1.2.2 169.254.100.2 R5#sh ip nhrp 150.1.1.1/32 via 150.1.1.1 Tunnel0 created 00:00:12, never expire Type: static, Flags: NBMA address: 169.254.100.1 150.1.2.2/32 via 150.1.2.2 Tunnel0 created 00:00:04, never expire Type: static, Flags: NBMA address: 169.254.100.2 155.1.0.1/32 via 155.1.0.1 Tunnel0 created 01:50:06, expire 00:04:24 Type: dynamic, Flags: unique registered used nhop NBMA address: 169.254.100.1 155.1.0.2/32 via 155.1.0.2 Tunnel0 created 01:50:01, expire 00:04:28 Type: dynamic, Flags: unique registered used nhop NBMA address: 169.254.100.2 R1#ping 150.1.2.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 150.1.2.2, timeout is 2 seconds: .!!!! Success rate is 80 percent (4/5), round-trip min/avg/max = 4/4/5 ms R5#sh ip cef 150.1.1.1 internal 150.1.1.1/32, epoch 2, RIB[S], refcnt 6, per-destination sharing sources: RIB feature space: IPRM: 0x00048000 Broker: linked, distributed at 4th priority ifnums: Tunnel0(16): 155.1.0.1 path list 7F324BEC8258, 3 locks, per-destination, flags 0x49 [shble, rif, hwcn] path 7F324C152DB0, share 1/1, type attached nexthop, for IPv4 nexthop 155.1.0.1 Tunnel0, IP midchain out of Tunnel0, addr 155.1.0.1 7F322D228540 output chain: IP midchain out of Tunnel0, addr 155.1.0.1 7F322D228540 IP adj out of GigabitEthernet1.100, addr 169.254.100.1 7F322D228CE0
Kanske får komma tillbaka och revidera texten lite när jag har bättre koll på DMVPN sen men förhoppningsvis är det inte allt för många felaktigheter.. 🙂