UDP hole punching for spokes behind NAT
UDP hole punching allows ADVPN shortcuts to be established through a UDP hole on a NAT device. The NAT device must support RFC 4787 Endpoint-Independent Mapping.
In the following example, device 10.1.100.11 behind Spoke1 needs to reach device 192.168.4.33 behind Spoke2. Spoke1 and Spoke2 are behind NAT devices and have established IPsec tunnels to the Hub. The hole punching creates a shortcut between Spoke1 and Spoke2 that bypasses the Hub.
To verify the ADVPN shortcut is established between both spokes behind NAT:
# diagnose debug enable # diagnose debug application ike -1 ike 0: comes 22.1.1.1:4500->12.1.1.2:4500,ifindex=6.... ike 0: IKEv1 exchange=Informational id=3c10fb6a76f1e264/6c7b397100dffc63:58ac7c02 len=204 ike 0:toHub1:35: notify msg received: SHORTCUT-OFFER ike 0:toHub1: shortcut-offer 10.1.100.11->192.168.4.33 psk 64 ppk 0 ver 1 mode 0 ike 0 looking up shortcut by addr 192.168.4.33, name toHub1 ike 0:toHub1: send shortcut-query 1438189781753480593 d3fdd1bfbc94caee/0000000000000000 12.1.1.2 10.1.100.11->192.168.4.33 psk 64 ttl 32 nat 1 ver 1 mode 0 ike 0:toHub1:35: sent IKE msg (SHORTCUT-QUERY): 12.1.1.2:4500->22.1.1.1:4500, len=236, id=3c10fb6a76f1e264/6c7b397100dffc63:12e263f7 ike 0: comes 22.1.1.1:4500->12.1.1.2:4500,ifindex=6.... ike 0: IKEv1 exchange=Informational id=3c10fb6a76f1e264/6c7b397100dffc63:4976e1ac len=236 ike 0:toHub1:35: notify msg received: SHORTCUT-REPLY ike 0:toHub1: recv shortcut-reply 1438189781753480593 d3fdd1bfbc94caee/16a1eb5b0f37ee23 14.1.1.3 to 10.1.100.11 psk 64 ppk 0 ver 1 mode 0 nat 55.1.1.2:64916 ike 0:toHub1: iif 22 192.168.4.33->10.1.100.11 route lookup oif 21 ike 0:toHub1: shortcut-reply received from 55.1.1.2:64916, local-nat=yes, peer-nat=yes ike 0:toHub1: NAT hole punching to peer at 55.1.1.2:64916 ike 0:toHub1: created connection: 0x5e71f58 6 12.1.1.2->55.1.1.2:64916. <==55.1.1.2:64916 this is UDP hole of NAT device ike 0:toHub1: adding new dynamic tunnel for 55.1.1.2:64916 ike 0:toHub1_0: added new dynamic tunnel for 55.1.1.2:64916 ike 0:toHub1_0:48: initiator: main mode is sending 1st message... ike 0:toHub1_0:48: cookie d3fdd1bfbc94caee/16a1eb5b0f37ee23 ike 0:toHub1_0:48: sent IKE msg (ident_i1send): 12.1.1.2:4500->55.1.1.2:64916, len=632, id=d3fdd1bfbc94caee/16a1eb5b0f37ee23 ike 0: comes 55.1.1.2:64916->12.1.1.2:4500,ifindex=6.... ike 0: IKEv1 exchange=Identity Protection id=d3fdd1bfbc94caee/16a1eb5b0f37ee23 len=252 ike 0:toHub1_0:48: initiator: main mode get 1st response... … … ike 0:toHub1_0:48: negotiation result ike 0:toHub1_0:48: proposal id = 1: ike 0:toHub1_0:48: protocol id = ISAKMP: ike 0:toHub1_0:48: trans_id = KEY_IKE. ike 0:toHub1_0:48: encapsulation = IKE/none ike 0:toHub1_0:48: type=OAKLEY_ENCRYPT_ALG, val=AES_CBC, key-len=128 ike 0:toHub1_0:48: type=OAKLEY_HASH_ALG, val=SHA2_256. ike 0:toHub1_0:48: type=AUTH_METHOD, val=PRESHARED_KEY. ike 0:toHub1_0:48: type=OAKLEY_GROUP, val=MODP2048. ike 0:toHub1_0:48: ISAKMP SA lifetime=86400 ike 0:toHub1_0:48: sent IKE msg (ident_i2send): 12.1.1.2:4500->55.1.1.2:64916, len=380, id=d3fdd1bfbc94caee/16a1eb5b0f37ee23 ike 0: comes 55.1.1.2:64916->12.1.1.2:4500,ifindex=6.... ike 0: IKEv1 exchange=Identity Protection id=d3fdd1bfbc94caee/16a1eb5b0f37ee23 len=380 ike 0:toHub1_0:48: initiator: main mode get 2nd response... … … ike 0:toHub1_0:48: add INITIAL-CONTACT ike 0:toHub1_0:48: add INTERFACE-ADDR4 10.10.1.100 ike 0:toHub1_0:48: sent IKE msg (ident_i3send): 12.1.1.2:4500->55.1.1.2:64916, len=140, id=d3fdd1bfbc94caee/16a1eb5b0f37ee23 ike 0: comes 55.1.1.2:64916->12.1.1.2:4500,ifindex=6.... ike 0: IKEv1 exchange=Identity Protection id=d3fdd1bfbc94caee/16a1eb5b0f37ee23 len=124 ike 0:toHub1_0:48: initiator: main mode get 3rd response... ike 0:toHub1_0:48: received p1 notify type INTERFACE-ADDR4 ike 0:toHub1_0:48: INTERFACE-ADDR4 10.10.1.102 ike 0:toHub1_0:48: peer identifier IPV4_ADDR 14.1.1.3 ike 0:toHub1_0:48: PSK authentication succeeded ike 0:toHub1_0:48: authentication OK ike 0:toHub1_0:48: established IKE SA d3fdd1bfbc94caee/16a1eb5b0f37ee23 ike 0:toHub1_0:48: auto-discovery receiver ike 0:toHub1_0:48: auto-discovery 2 ike 0:toHub1_0: add R/32 route 10.10.1.102 via 10.10.1.102, intf=toHub1(22) ike 0:toHub1_0: add peer route 10.10.1.102 ike 0:toHub1: schedule auto-negotiate ike 0:toHub1_0:48: no pending Quick-Mode negotiations ike 0:toHub1_0:toHub1: IPsec SA connect 6 12.1.1.2->55.1.1.2:64916 ike 0:toHub1_0:toHub1: using existing connection ike 0:toHub1_0:toHub1: traffic triggered, serial=1 1:10.1.100.11:2048->1:192.168.4.33:0 ike 0:toHub1:toHub1: config found ike 0:toHub1_0:toHub1: IPsec SA connect 6 12.1.1.2->55.1.1.2:64916 negotiating ike 0:toHub1_0:48: cookie d3fdd1bfbc94caee/16a1eb5b0f37ee23:8465e467 ike 0:toHub1_0:48:toHub1:109: natt flags 0x1f, encmode 1->3 ike 0:toHub1_0:48:toHub1:109: initiator selectors 0 0:0.0.0.0/0.0.0.0:0:0->0:0.0.0.0/0.0.0.0:0:0 ike 0:toHub1_0:48: sent IKE msg (quick_i1send): 12.1.1.2:4500->55.1.1.2:64916, len=620, id=d3fdd1bfbc94caee/16a1eb5b0f37ee23:8465e467 ike 0: comes 55.1.1.2:64916->12.1.1.2:4500,ifindex=6.... ike 0: IKEv1 exchange=Quick id=d3fdd1bfbc94caee/16a1eb5b0f37ee23:8465e467 len=444 ike 0:toHub1_0:48:toHub1:109: responder selectors 0:0.0.0.0/0.0.0.0:0->0:0.0.0.0/0.0.0.0:0 ike 0:toHub1_0:48:toHub1:109: my proposal: … … ike 0:toHub1_0:48:toHub1:109: add IPsec SA: SPIs=79654cf1/5e9936a5 ike 0:toHub1_0:48:toHub1:109: IPsec SA dec spi 79654cf1 key 16:5E21180992B8892DE5142E1F53ABD29E auth 20:49AA4AE14994A39A138392AC517B6E79D98CA673 ike 0:toHub1_0:48:toHub1:109: IPsec SA enc spi 5e9936a5 key 16:BE16B8EF4E75F7B3CF97A1D58D996890 auth 20:2F46B57CAC6F3185BB182F9280312263325F6BAF ike 0:toHub1_0:48:toHub1:109: added IPsec SA: SPIs=79654cf1/5e9936a5 ike 0:toHub1_0:48:toHub1:109: sending SNMP tunnel UP trapp
To verify the spoke-to-spoke IPsec phase 1 tunnel shortcut is established:
# diagnose vpn ike gateway list vd: root/0 name: toHub1 version: 1 interface: wan2 6 addr: 12.1.1.2:4500 -> 22.1.1.1:4500 created: 503s ago assigned IPv4 address: 10.10.1.100/255.255.255.0 nat: me auto-discovery: 2 receiver IKE SA: created 1/1 established 1/1 time 0/0/0 ms IPsec SA: created 1/3 established 1/3 time 0/0/0 ms id/spi: 35 3c10fb6a76f1e264/6c7b397100dffc63 direction: initiator status: established 503-503s ago = 0ms proposal: aes128-sha256 key: 7fca86063ea2e72f-4efea6f1bec23948 lifetime/rekey: 86400/85596 DPD sent/recv: 00000000/00000000 vd: root/0 name: toHub1_0 version: 1 interface: wan2 6 addr: 12.1.1.2:4500 -> 55.1.1.2:64916 created: 208s ago nat: me peer auto-discovery: 2 receiver IKE SA: created 1/1 established 1/1 time 20/20/20 ms IPsec SA: created 1/1 established 1/1 time 10/10/10 ms id/spi: 48 d3fdd1bfbc94caee/16a1eb5b0f37ee23 direction: initiator status: established 208-208s ago = 20ms proposal: aes128-sha256 key: 9bcac400d8e14e11-fffde33eaa3a8263 lifetime/rekey: 86400/85891 DPD sent/recv: 0000000a/00000000