Für einen DMVPN Aufbau muss nicht zwingend IPSec eingesetzt werden, aber wer Verschlüsselung möchte setzt sie üblicherweise direkt auf dem Tunnelinterface ein. Hier zwei Beispiele um IPSec mit DMVPN zu nutzen. Einmal mit dem älteren IKEv1, beschrieben im Blogpost zu DMVPN. Und dann das neuere IKEv2, welches hier beschrieben wird.
Die DMVPN Konfig unterscheided sich nicht, daher gehe ich daruf nicht ein. Siehe dazu den alten Beitrag in dem auch IKEv1 zu finden ist.
Die Konfig habe ich von der Seite journey2theccie kopiert und angepasst, vielen Dank an dieser Stelle. Das hat mir viel Sucherei erspart!
Die Konfig für IKEv2 sieht wie folgt aus:
crypto ikev2 keyring IKEV2-KEYRING
peer dmvpn-node
address 0.0.0.0 0.0.0.0
pre-shared-key CISCO123
!
crypto ikev2 profile IKEV2-PROF
keyring local IKEV2-KEYRING
authentication local pre-share
authentication remote pre-share
match address local 0.0.0.0
match identity remote address 0.0.0.0 0.0.0.0
!
crypto ipsec transform-set TRANSFORMSET esp-gcm 256
mode transport
!
crypto ipsec profile IPSEC-IKEV2
set transform-set TRANSFORMSET
set ikev2-profile IKEV2-PROF
!
interface Tunnel1234
tunnel protection ipsec profile IPSEC-IKEV2
Damit erzeugt man eine IKEv2 Konfiguration die das Passwort „CISCO123″ nutzt und für alle Spokes (“ address 0.0.0.0 0.0.0.0″) annimmt. Man könnte hier auch einzelne PSKs für einzelne IPs einsetzen. Oder keinen Keyring sondern Zertifikate nutzen.
Wie sehen wir jetzt dass es geht? Show Befehle:
Überblick der IKEv2 SAs, vergleichbar mit „show crypto isakmp sa“ bei IKEv1:
R1#show crypto ikev2 sa IPv4 Crypto IKEv2 SA Tunnel-id Local Remote fvrf/ivrf Status 4 10.0.0.1/500 10.0.0.4/500 none/none READY Encr: AES-CBC, keysize: 256, Hash: SHA512, DH Grp:5, Auth sign: PSK, Auth verify: PSK Life/Active Time: 86400/668 sec Tunnel-id Local Remote fvrf/ivrf Status 1 10.0.0.1/500 10.0.0.2/500 none/none READY Encr: AES-CBC, keysize: 256, Hash: SHA512, DH Grp:5, Auth sign: PSK, Auth verify: PSK Life/Active Time: 86400/669 sec Tunnel-id Local Remote fvrf/ivrf Status 2 10.0.0.1/500 10.0.0.3/500 none/none READY Encr: AES-CBC, keysize: 256, Hash: SHA512, DH Grp:5, Auth sign: PSK, Auth verify: PSK Life/Active Time: 86400/669 sec IPv6 Crypto IKEv2 SA R1#
Das kann man auch noch mit mehr Details anzeigen lassen, pro Remote oder Localer IP:
R1#show crypto ikev2 sa remote 10.0.0.4 detailed Tunnel-id Local Remote fvrf/ivrf Status 4 10.0.0.1/500 10.0.0.4/500 none/none READY Encr: AES-CBC, keysize: 256, Hash: SHA512, DH Grp:5, Auth sign: PSK, Auth verify: PSK Life/Active Time: 86400/732 sec CE id: 1005, Session-id: 2 Status Description: Negotiation done Local spi: 016822E6B216F21F Remote spi: DC50E3E0CF158E97 Local id: 10.0.0.1 Remote id: 10.0.0.4 Local req msg id: 0 Remote req msg id: 2 Local next msg id: 0 Remote next msg id: 2 Local req queued: 0 Remote req queued: 2 Local window: 5 Remote window: 5 DPD configured for 0 seconds, retry 0 NAT-T is not detected Cisco Trust Security SGT is disabled Initiator of SA : No
Die Show Befehle für IPSec sind noch die gleichen wie bei IKEv1. Hier ein Beispiel für den Peer 10.0.0.4, ohne die Angabe des Peer werden alle angezeigt, das war mir für diesen Text aber schlicht zu lang.
Danach kann man auch noch das Schlüsselwort „detail“ eintragen um noch mehr Infos zu bekommen.
Jedenfalls sehr ihr hier, ob Pakete verschlüsselt (#pkts encaps:“) und entschlüsselt (#pkts decaps:“) werden. Gerade zu Beginn wenn man mit Pings testet, ist das sehr hilfreich da dann noch wenig Pakete über die Verbindung gehen und ihr sehen könnt ob die Anzahl der Pakete in beide Richtungen gleichmäßig steigt. Also Anfrage und Anwort durch den Tunnel gehen.
R1#show crypto ipsec sa peer 10.0.0.4
interface: Tunnel1234
Crypto map tag: Tunnel1234-head-0, local addr 10.0.0.1
protected vrf: (none)
local ident (addr/mask/prot/port): (10.0.0.1/255.255.255.255/47/0)
remote ident (addr/mask/prot/port): (10.0.0.4/255.255.255.255/47/0)
current_peer 10.0.0.4 port 500
PERMIT, flags={origin_is_acl,}
#pkts encaps: 44, #pkts encrypt: 44, #pkts digest: 44
#pkts decaps: 45, #pkts decrypt: 45, #pkts verify: 45
#pkts compressed: 0, #pkts decompressed: 0
#pkts not compressed: 0, #pkts compr. failed: 0
#pkts not decompressed: 0, #pkts decompress failed: 0
#send errors 0, #recv errors 0
local crypto endpt.: 10.0.0.1, remote crypto endpt.: 10.0.0.4 path mtu 1500, ip mtu 1500, ip mtu idb (none) current outbound spi: 0xC5BE1BB4(3317570484) PFS (Y/N): N, DH group: none inbound esp sas: spi: 0xC9FACE1F(3388657183) transform: esp-gcm 256 , in use settings ={Transport, } conn id: 9, flow_id: SW:9, sibling_flags 80000000, crypto map: Tunnel1234-head-0 sa timing: remaining key lifetime (k/sec): (4303125/2823) IV size: 8 bytes replay detection support: N Status: ACTIVE(ACTIVE) inbound ah sas: inbound pcp sas: outbound esp sas: spi: 0xC5BE1BB4(3317570484) transform: esp-gcm 256 , in use settings ={Transport, } conn id: 10, flow_id: SW:10, sibling_flags 80000000, crypto map: Tunnel1234-head-0 sa timing: remaining key lifetime (k/sec): (4303125/2823) IV size: 8 bytes replay detection support: N Status: ACTIVE(ACTIVE) outbound ah sas: outbound pcp sas:
R1#
Ansonsten könnt ihr natürlich einen Traceroute von einem Spoke machen und schauen wer euer Next-Hop ist, es sollte das Tunnelinterface des Hub sein.
Hier Traceroutes von Lo0 R2 (2.2.2.2) zu Lo0 R1 und Lo0 R3. Die Hops sind die IPs der Tunnelinterfaces und alles ist genau wie erwartet.
R2#traceroute 1.1.1.1 source 2.2.2.2 Type escape sequence to abort. Tracing the route to 1.1.1.1 VRF info: (vrf in name/id, vrf out name/id) 1 172.110.123.1 5 msec * 5 msec R2# R2#traceroute 3.3.3.3 source 2.2.2.2 Type escape sequence to abort. Tracing the route to 3.3.3.3 VRF info: (vrf in name/id, vrf out name/id) 1 172.110.123.1 4 msec 5 msec 5 msec 2 172.110.123.3 5 msec * 5 msec R2# R2#traceroute 3.3.3.3 source 2.2.2.2 Type escape sequence to abort. Tracing the route to 3.3.3.3 VRF info: (vrf in name/id, vrf out name/id) 1 172.110.123.3 5 msec * 10 msec
Und hier nochmal eine Ausgabe wegen der Paketanzahl im IPsec, schön zu sehen dass die Anzahl jeweils um 5 Pakete steigt nachdem 5 Pings gelaufen sind:
R2#ping 3.3.3.3 source 2.2.2.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds: Packet sent with a source address of 2.2.2.2 !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 2/6/17 ms R2#sh crypto ipsec sa pe R2#sh crypto ipsec sa peer 10.0.0.3 | inc encaps|decaps #pkts encaps: 12, #pkts encrypt: 12, #pkts digest: 12 #pkts decaps: 10, #pkts decrypt: 10, #pkts verify: 10 R2#ping 3.3.3.3 source 2.2.2.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds: Packet sent with a source address of 2.2.2.2 !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/4/5 ms R2#sh crypto ipsec sa peer 10.0.0.3 | inc encaps|decaps #pkts encaps: 17, #pkts encrypt: 17, #pkts digest: 17 #pkts decaps: 15, #pkts decrypt: 15, #pkts verify: 15 R2#