I was able to follow this tutorial but had to make a few adjustments. The main one is to configure the public IP address in the IKEv2 profile (see step 3 below).
Remember of course that the router will need UDP ports 500 & 4500 forwarded by the firewall, which also must support ESP passthrough.
1) Configure a global IKEv2 proposal and policy.
crypto ikev2 proposal MY_IKEV2_PROPOSAL encryption aes-cbc-256 aes-cbc-192 aes-cbc-128 integrity sha512 sha384 sha256 group 24 16 14 ! crypto ikev2 policy MY_IKEV2_POLICY proposal MY_IKEV2_PROPOSAL
2) And add the peer to the keyring:
crypto ikev2 keyring MY_KEYRING peer gcp1 address 35.212.226.126 pre-shared-key abcdef1234567890
3) Create a custom IKEv2 profile. Note the highlighted public IP address and also the lifetime and DPD interval settings.
crypto ikev2 profile GCP_IKEV2_PROFILE match address local interface GigabitEthernet0 match identity remote address 0.0.0.0 ! If router is behind NAT, set this to the public IP identity local address 203.0.113.222 authentication remote pre-share authentication local pre-share keyring local MY_KEYRING lifetime 36000 ! 10 hour SA lifetime dpd 60 5 periodic ! 1 minute keepalives !
4) Configure a custom IPSec transform set and profile. This is 128-bit AES encryption with SHA-256 integrity:
! IPsec Settings crypto ipsec transform-set ESP_AES128_SHA256 esp-aes esp-sha256-hmac ! crypto ipsec profile GCP_IPSEC_PROFILE set security-association lifetime kilobytes disable set security-association lifetime seconds 10800 set transform-set ESP_AES128_SHA256 set pfs group14 ! 2048-bit set ikev2-profile GCP_IKEV2_PROFILE !
5) Finally, create the tunnel interface. Unlike the IKEv2 profile, this simply references the External interface, not the public IP:
interface Tunnel1 ip address 169.254.0.2 255.255.255.252 ip mtu 1460 ip virtual-reassembly in ip tcp adjust-mss 1420 tunnel source GigabitEthernet0 tunnel mode ipsec ipv4 tunnel destination 35.212.226.126 tunnel protection ipsec profile GCP_IPSEC_PROFILE !
Troubleshooting
The SAs should look like this:
Router#show crypto ikev2 sa
IPv4 Crypto IKEv2 SA
Tunnel-id Local Remote fvrf/ivrf Status
2 192.168.1.123/4500 35.212.226.126/4500 none/none READY
Encr: AES-CBC, keysize: 128, Hash: SHA256, DH Grp:14, Auth sign: PSK, Auth verify: PSK
Life/Active Time: 36000/1226 sec
Router#show crypto ipsec sa peer 35.212.226.126
interface: Tunnel1
Crypto map tag: Tunnel1-head-0, local addr 192.168.1.123
protected vrf: (none)
local ident (addr/mask/prot/port): (0.0.0.0/0.0.0.0/0/0)
remote ident (addr/mask/prot/port): (0.0.0.0/0.0.0.0/0/0)
current_peer 35.212.226.126 port 4500
PERMIT, flags={origin_is_acl,}
#pkts encaps: 45, #pkts encrypt: 45, #pkts digest: 45
#pkts decaps: 58, #pkts decrypt: 58, #pkts verify: 58
#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.: 192.168.1.123, remote crypto endpt.: 35.212.226.126
path mtu 1500, ip mtu 1500, ip mtu idb GigabitEthernet0
current outbound spi: 0x962EDB69(2519653225)
PFS (Y/N): N, DH group: none
inbound esp sas:
spi: 0x10B829B(17531547)
transform: esp-aes esp-sha-hmac ,
in use settings ={Tunnel UDP-Encaps, }
conn id: 5, flow_id: Onboard VPN:5, sibling_flags 80000040, crypto map: Tunnel1-head-0
sa timing: remaining key lifetime (sec): (14259)
Kilobyte Volume Rekey has been disabled
IV size: 16 bytes
replay detection support: Y replay window size: 1024
Status: ACTIVE(ACTIVE)
inbound ah sas:
inbound pcp sas:
outbound esp sas:
spi: 0x962EDB69(2519653225)
transform: esp-aes esp-sha-hmac ,
in use settings ={Tunnel UDP-Encaps, }
conn id: 6, flow_id: Onboard VPN:6, sibling_flags 80000040, crypto map: Tunnel1-head-0
sa timing: remaining key lifetime (sec): (14259)
Kilobyte Volume Rekey has been disabled
IV size: 16 bytes
replay detection support: Y replay window size: 1024
Status: ACTIVE(ACTIVE)
outbound ah sas:
outbound pcp sas: