Skip to content

IPsec IKEv2 Site-to-Site VPN

For the impatient: basic site-to-site IPsec VPN.

Site A (10.1.0.0/24) → Site B (10.2.0.0/24)

# Site A (initiator)
/ip ipsec peer add address=203.0.2.1/32 exchange-mode=ike2 name=site-b
/ip ipsec identity add peer=site-b secret=MySecretKey123 auth-method=pre-shared-key
/ip ipsec policy add src-address=10.1.0.0/24 dst-address=10.2.0.0/24 tunnel=yes peer=site-b
/ip firewall nat add chain=srcnat action=accept src-address=10.1.0.0/24 dst-address=10.2.0.0/24 place-before=0

Verify:

/ip ipsec active-peers print
/ip ipsec policy print detail
Overview diagram

What this does: IPsec creates encrypted tunnels between geographically separated networks over the public internet, enabling secure branch-to-headquarters connectivity.

When to use this:

  • Branch office connectivity
  • Secure inter-site communication
  • Compliance requirements for encrypted data-in-transit
  • Connecting cloud VPCs to on-premises networks

IPsec Components:

Overview - IPsec Components diagram
ComponentPurpose
PeerRemote VPN endpoint configuration
IdentityAuthentication credentials (PSK or certificate)
PolicyTraffic selectors (what to encrypt)
ProfilePhase 1 (IKE_SA) parameters
ProposalPhase 2 (CHILD_SA) parameters

Prerequisites:

  • Public IP addresses on both endpoints (or NAT-T)
  • UDP ports 500 and 4500 open
  • Matching encryption settings on both sides
Configuration Steps diagram
/ip ipsec peer add address=203.0.2.1/32 exchange-mode=ike2 name=site-b
/ip ipsec identity add peer=site-b secret=MySecretKey123 auth-method=pre-shared-key
/ip ipsec policy add src-address=10.1.0.0/24 dst-address=10.2.0.0/24 tunnel=yes peer=site-b

Place this rule BEFORE any masquerade rules:

/ip firewall nat add chain=srcnat action=accept src-address=10.1.0.0/24 dst-address=10.2.0.0/24 place-before=0

Mirror the configuration with reversed addresses:

/ip ipsec peer add address=203.0.1.1/32 exchange-mode=ike2 name=site-a passive=yes
/ip ipsec identity add peer=site-a secret=MySecretKey123 auth-method=pre-shared-key
/ip ipsec policy add src-address=10.2.0.0/24 dst-address=10.1.0.0/24 tunnel=yes peer=site-a
/ip firewall nat add chain=srcnat action=accept src-address=10.2.0.0/24 dst-address=10.1.0.0/24 place-before=0
/ip ipsec profile add name=strong-profile \
dh-group=modp2048,modp1024 \
enc-algorithm=aes-256,aes-128 \
hash-algorithm=sha256
/ip ipsec proposal add name=strong-proposal \
enc-algorithms=aes-256-cbc,aes-128-cbc \
auth-algorithms=sha256,sha1 \
pfs-group=modp2048
/ip ipsec peer set site-b profile=strong-profile
/ip ipsec policy set [find peer=site-b] proposal=strong-proposal

For additional session security:

/ip ipsec peer set site-b tcp-md5-key="auth-key-here"

Both peers must use identical keys.

When either endpoint is behind NAT:

/ip ipsec profile set [find] nat-traversal=yes
# Phase 1 status
/ip ipsec active-peers print
# Expected: STATE=established
# Phase 2 status
/ip ipsec policy print detail
# Expected: ph2-state=established
# Active security associations
/ip ipsec installed-sa print
# Look for: hw-aead=yes (hardware acceleration)
# Traffic statistics
/ip ipsec statistics print
SymptomCauseSolution
Phase 1 fails “no proposal”Algorithm mismatchAlign profile settings on both ends
Phase 1 OK, no trafficPolicy mismatch or missing NAT bypassCheck src/dst addresses mirror, add NAT bypass
Tunnel works then stopsNAT mapping timeoutEnable NAT-T: nat-traversal=yes
”No matching identity”Identity mismatchVerify peer names and secrets match
Slow performanceSoftware encryptionUse AES-GCM, verify hw-aead=yes
FastTrack bypasses IPsecFastTrack processes firstAdd accept before FastTrack for VPN traffic

Common Mistakes

  • Don’t forget NAT bypass rule BEFORE masquerade
  • Don’t mismatch src/dst addresses between sites (they must mirror)
  • Don’t use weak encryption (avoid 3DES, MD5)

For additional MikroTik IPsec documentation, visit help.mikrotik.com