ipsecvpnsite-to-site
MDstable
NoteSnippetChecklistPlaybook
IPsec — VPN Site-à-Site
Configurer un VPN IPsec site-à-site sur Cisco IOS et strongSwan Linux
snippetadvanced 2025-05-14 6 min read
ipsecvpnsite-to-siteciscostrongswanikev2esptunnel
Concepts fondamentaux
IPsec suite de protocoles pour scuriser les communications IP RFC 4301ProtocolesAH Authentication Header intgrit authentification pas de chiffrementESP Encapsulating Security Payload chiffrement intgrit authentificationModesTransport chiffre seulement le payload IP host-to-host)Tunnel chiffre le paquet IP complet nouvel en-tête IP site-to-site)Phases IKEIKE Phase 1 ISAKMP SAAuthentification des pairs PSK ou certificatsNgociation de lalgorithme de chiffrement du channel de contrlechange Diffie-Hellman pour driver les clsPort UDP 500 ou 4500 si NAT-T dtectModes Main Mode 6 messages ou Aggressive Mode 3 messages moins scurisIKE Phase 2 IPsec SANgociation des transform sets chiffrement hashDrivation des cls de session ESP/AHRsultat tunnel de donnes chiffrIKEv2 RFC 7296 remplace IKEv1 plus simple plus scuris moins de messages
Cisco IOS — IKEv1 / Crypto Map (classique)
Site A — Configuration complète
text
Variables
{{PSK_KEY}}
{{SITE_B_IP}}
{{SITE_A_LAN}}
{{SITE_A_WILDCARD}}
{{SITE_B_LAN}}
{{SITE_B_WILDCARD}}
{{SITE_A_IP}}
{{WAN_MASK}}
conf t! ── Phase 1 : ISAKMP Policy ──────────────────────────────crypto isakmp policy 10encr aes 256hash sha256authentication pre-sharegroup 14 ! DH group 14 (2048-bit) minimum recommandélifetime 86400 ! 24 heures! Clé pré-partagée pour le peer distantcrypto isakmp key {{PSK_KEY}} address {{SITE_B_IP}}! ── Phase 2 : Transform Set ──────────────────────────────crypto ipsec transform-set TS_AES256 esp-aes 256 esp-sha256-hmacmode tunnel ! défaut! Durée de vie de la SA Phase 2crypto ipsec security-association lifetime seconds 3600 ! 1 heure! ── ACL intéressante (trafic à chiffrer) ──────────────────ip access-list extended ACL_IPSEC_SITE_Apermit ip {{SITE_A_LAN}} {{SITE_A_WILDCARD}} {{SITE_B_LAN}} {{SITE_B_WILDCARD}}! ── Crypto Map ────────────────────────────────────────────crypto map CMAP_SITE_B 10 ipsec-isakmpset peer {{SITE_B_IP}}set transform-set TS_AES256set pfs group14 ! Perfect Forward Secrecymatch address ACL_IPSEC_SITE_A! ── Appliquer sur l'interface WAN ─────────────────────────interface GigabitEthernet0/0description ** WAN **ip address {{SITE_A_IP}} {{WAN_MASK}}crypto map CMAP_SITE_Bno shutdown
Site B — Configuration miroir
text
Variables
{{PSK_KEY}}
{{SITE_A_IP}}
{{SITE_B_LAN}}
{{SITE_B_WILDCARD}}
{{SITE_A_LAN}}
{{SITE_A_WILDCARD}}
conf tcrypto isakmp policy 10encr aes 256hash sha256authentication pre-sharegroup 14lifetime 86400crypto isakmp key {{PSK_KEY}} address {{SITE_A_IP}}crypto ipsec transform-set TS_AES256 esp-aes 256 esp-sha256-hmacmode tunnelip access-list extended ACL_IPSEC_SITE_Bpermit ip {{SITE_B_LAN}} {{SITE_B_WILDCARD}} {{SITE_A_LAN}} {{SITE_A_WILDCARD}}crypto map CMAP_SITE_A 10 ipsec-isakmpset peer {{SITE_A_IP}}set transform-set TS_AES256set pfs group14match address ACL_IPSEC_SITE_Binterface GigabitEthernet0/0crypto map CMAP_SITE_A
Cisco IOS — IKEv2 (moderne, recommandé)
text
Variables
{{SITE_B_IP}}
{{PSK_KEY}}
conf t! ── IKEv2 Proposal ────────────────────────────────────────crypto ikev2 proposal PROP_IKEv2encryption aes-cbc-256integrity sha256group 14! ── IKEv2 Policy ──────────────────────────────────────────crypto ikev2 policy POLICY_IKEv2proposal PROP_IKEv2! ── IKEv2 Keyring (PSK) ───────────────────────────────────crypto ikev2 keyring KR_SITESpeer SITE_Baddress {{SITE_B_IP}}pre-shared-key {{PSK_KEY}}! ── IKEv2 Profile ─────────────────────────────────────────crypto ikev2 profile PROF_SITE_Bmatch identity remote address {{SITE_B_IP}} 255.255.255.255authentication remote pre-shareauthentication local pre-sharekeyring local KR_SITES! ── Transform Set ─────────────────────────────────────────crypto ipsec transform-set TS_IKEv2 esp-aes 256 esp-sha256-hmacmode tunnel! ── Crypto Map ────────────────────────────────────────────crypto map CMAP_IKEv2 10 ipsec-isakmpset peer {{SITE_B_IP}}set transform-set TS_IKEv2set ikev2-profile PROF_SITE_Bset pfs group14match address ACL_IPSEC_SITE_Ainterface GigabitEthernet0/0crypto map CMAP_IKEv2
GRE over IPsec
text
Variables
{{TUNNEL_IP_A}}
{{TUNNEL_MASK}}
{{SITE_B_IP}}
{{SITE_A_IP}}
! GRE = tunnel non chiffré (permet multicast, routage dynamique)! GRE over IPsec = GRE chiffré avec IPsecconf t! 1. Créer l'interface tunnel GREinterface Tunnel0description ** GRE Tunnel vers Site B **ip address {{TUNNEL_IP_A}} {{TUNNEL_MASK}}tunnel source GigabitEthernet0/0 ! interface WAN localetunnel destination {{SITE_B_IP}}tunnel mode gre ip! OSPF ou autre protocole de routage peut tourner sur le tunnelip ospf 1 area 0! 2. Protéger le trafic GRE avec IPsecip access-list extended ACL_GREpermit gre host {{SITE_A_IP}} host {{SITE_B_IP}}crypto map CMAP_GRE 10 ipsec-isakmpset peer {{SITE_B_IP}}set transform-set TS_AES256match address ACL_GREinterface GigabitEthernet0/0crypto map CMAP_GRE
strongSwan Linux — /etc/ipsec.conf (IKEv2)
bash
Variables
{{LOCAL_WAN_IP}}
{{LOCAL_LAN}}
{{LOCAL_PREFIX}}
{{REMOTE_WAN_IP}}
{{REMOTE_LAN}}
{{REMOTE_PREFIX}}
# /etc/ipsec.confconfig setupcharondebug"ike 1, knl 1, cfg 0" # 0=silent, 1=info, 2=debuguniqueidsnoconn site-to-site# Paramètres générauxautostart # monter automatiquement au démarragetypetunnelkeyexchangeikev2# Phase 1 (IKE)ikeaes256-sha256-modp2048! # ! = exact match uniquementikelifetime# Phase 2 (ESP)espaes256-sha256-modp2048!lifetimemargintimerekeyfuzz100# PFSdpdactionrestart # Dead Peer Detectiondpddelaydpdtimeout# Site localleft{{LOCAL_WAN_IP}}leftsubnet{{LOCAL_LAN}}{{LOCAL_PREFIX}}leftid{{LOCAL_WAN_IP}}# Site distantright{{REMOTE_WAN_IP}}rightsubnet{{REMOTE_LAN}}{{REMOTE_PREFIX}}rightid{{REMOTE_WAN_IP}}# Authentificationauthbypsk
bash
Variables
{{LOCAL_WAN_IP}}
{{REMOTE_WAN_IP}}
{{PSK_KEY}}
# /etc/ipsec.secrets# Format : left right : PSK "clé"{{LOCAL_WAN_IP}} {{REMOTE_WAN_IP}} PSK "{{PSK_KEY}}"# Avec certificats# : RSA /etc/ipsec.d/private/site-a.key
bash
# Démarrer et gérer strongSwansystemctl start strongswansystemctl enable strongswan# Monter/démonter un tunnelipsec up site-to-siteipsec down site-to-siteipsec restart# Recharger la configuration sans restartipsec reload
Vérifications Cisco
text
Variables
{{PEER_IP}}
! Phase 1 — Sessions ISAKMP/IKEshow crypto isakmp sashow crypto ikev2 sa! Exemple sortie show crypto isakmp sa :! IPv4 Crypto ISAKMP SA! dst src state conn-id status! 203.0.113.2 198.51.100.1 QM_IDLE 1001 ACTIVE ← Phase 1 OK! Phase 2 — Sessions IPsecshow crypto ipsec sashow crypto ipsec sa peer {{PEER_IP}}! Compteurs de paquets chiffrés/déchiffrésshow crypto ipsec sa | include pkts! Transform sets configurésshow crypto ipsec transform-set! IKEv2show crypto ikev2 sa detailedshow crypto ikev2 stats
Vérifications Linux (strongSwan)
bash
# Vue globale de toutes les SAsipsec statusallipsec status# XFRM (kernel IPsec)ip xfrm state # Security Associations (SA)ip xfrm policy # Security Policies (SP)ip xfrm monitor # events en temps réel# Compteursip -s xfrm state# Logsjournalctl -u strongswan -ftail -f /var/log/daemon.log | grep charon
Troubleshooting
text
Problèmes Phase 1 courants :- Encryption/Hash mismatch → comparer les proposals IKE des deux côtés- DH Group mismatch → group 14 minimum (group 1/2/5 = obsolètes)- Lifetime mismatch → le plus court des deux sera utilisé (IKEv1)- PSK différente → vérifier caractère par caractère- NAT-T non activé → UDP 4500 bloqué par firewall intermédiaire- Port UDP 500 bloqué → vérifier ACLs sur les interfaces WANProblèmes Phase 2 courants :- ACL intéressante asymétrique → les deux côtés doivent avoir ACLs miroir- Transform set mismatch → comparer esp encryption/hash- Overlapping proxy-IDs → vérifier subnets LANCisco debug :debug crypto isakmp ! Phase 1 eventsdebug crypto ipsec ! Phase 2 eventsdebug crypto ikev2 ! IKEv2 eventsundebug all
💡 Tip —
Pour le NAT traversal, IKE utilise le port UDP 4500 après avoir détecté du NAT (au lieu du port 500 standard). S'assurer que UDP 4500 est ouvert dans les deux sens sur tous les firewalls intermédiaires. Sur Cisco IOS, NAT-T est activé automatiquement ; sur strongSwan, il est activé par défaut. Si le tunnel monte mais que le trafic ne passe pas, vérifier aussi que le protocole ESP (IP protocol 50) n'est pas bloqué, ou que UDP 4500 est utilisé pour encapsuler ESP en cas de NAT.
OPS·BRAIN v1.027 notes · Networklocal