IPSec Client
Tutoriel
IPSec client IKEv2 et L2TP
version 1.1
Créé le 15 Janvier 2026
Mise en ligne 23 Juillet 2026.
Mise à jour le 23 Juillet 2026.
Auteur
José Mans
Présentation d'IPSec
IPSec est une norme permettant de créer une connexion sécurisée dotées d'algorithme les plus évolués et récents. A la base prévu pour sécurisé des connexions IPv6 il prends en charge l'ipv4.
La séparation de chiffrement (cryptage), identification utilisateur et transports de données en font un outils très modulaire comparé à d'autre outils gérant un VPN.
Un tunnel IPSec peut gérer des connexions sécurisées comme un switch (hub) ou routeur. On parle alors de couche ISO2 (ARP) et ISO3 (TCP/IP).
Il est idéal pour les smartphones et les tablettes, ces derniers ayant souvent 2 connexions réseaux : wifi et mobile (data).
Contrairement à de nombreuses autres normes, le changement de réseau n'interromps pas la liaison sécurisée.
Une fois le tunnel activé, si une des connexion devient inutilisable il continue à émettre sur le 2e réseau, on parle alors de réseau MOBIKE.
Méthode / Organisation =
Il est important de bien comprendre l'utilisation d'algorithmes de chiffrement (ou cryptage) dans l'usage d'un VPN. C'est pourquoi ce document débute par des informations les concernant.
Le déploiement de clients IKEv2 ou L2PTP se fait via un script (ou lignes de commandes) en Powershell pouvant être réutilisé dans une GPO d'entreprise.
On pourra trouver des références sur les codes erreurs, an annexe.
Type de tunnel
IKEv2 (Internet Key Exchange)
Est à priorisé parce que plus récent et possède des mécanismes plus robustes.
S'adapte parfaitement à des connexions Wifi et Cellulaires en simultané. Les paquets IP (header/donné) peuvent être envoyés via plusieurs réseau car ils sont encapsulés dans d'autres paquent IP servant de couche de transport (MOBIKE)
Gère l'authentification entre deux point (client/serveur)
EAP-MSCHAPv2 (chiffrement)
L2TP
De niveau 2 (OSI), peut transporter de l'ethernet pour sa version 3 (L2TPv3)
Tech: xl2tpd prends en charge les connexion L2TP et envoi à PPP pour l'identification et la gestion réseau.
IPSec
De niveau 3 OSI, il permet deux mode :
- Tunnel
- Utilisé pour créer un VPN
- Transport
- Ne chiffre que les données, ne permet pas le routage des ses paquets sans compromettre le AH IP forçant l'utilisation de NAT-T.
Globalement il gère le chiffrement et vérification de l'authenticité des paquets.
Gère l'authentification entre deux point (client/serveur)
MS Chap v2
Remarque
Sous windows on peut employer EAP-MSCHAPv2 ou juste MSCHAPv2 avec IKEv2 ou Ipsec/L2TP, cependant ce n'est prévu selon mes recherches.
Conseil, EAP-MSCHAPv2 qu'avec IKEv2 et MSCHAPv2 qu'avec Ipsec/L2TP.
Protocoles d'identifications
Géré avec FreeRadius 3.0
Le service FreeRadius est configuré pour gérer les identifications avec l'annuaire LDAP. Lequel stock les mot de passe avec SSHA. C'est pourquoi il n'est pas possible d'accepter certaines méthodes d'échanges d'identifiants comme CHAP.
Le client peut envoyer le mot de passe utilisateur avec un Hash-NT ou, au pire, en clair via la connexion securisée donc déjà chiffrée avec des algos robustes.
| MSCHAPv2 | hash NT (NTLM) | MD4 codé Unicode (UTF-16-LE) |
| PAP | en clair | |
| La comparaison du mot de passe client (CHAP-Password:) et celle de LDAP (SSHA) n'est simplement pas possible sans devoir ajouter des procédures pour coder CHAP-Password en SSHA... | ||
| PSK Clé partagé |
Sécurité
La négociation d'un tunnel moderne s'effectue en deux phases.
La première phase utilise un certificats SSL/TLS (public ou auto-signé ) ou une clef partagée (PSK).
La gestion des certificats est assez complexe à détailler pour Windows 10 et 11. C'est la raison de l'usage d'une clé partagée même si cette méthode, tout comme les certificats auto-signés, peut-être chronophage dans le "cas où elle est compromise", car son déploiement, sur les postes clients, ne dépend que d'une connexion locale. Les postes distant seront dans l'incapacités d'avoir la nouvelle clef et devront contacter leur support...
Termes employés dans les services et communautés
Légende :
- IKEv2 : Chiffrement / Intégrité / Fonction traitement / échange de clefs
- L2TP : Chiffrement / Intégrité / échange de clefs
- pas de GCM
IKE
Pour la partie IKE, négociation de l'authentification et création du tunnel.
Algorithmes de chiffrement (avec ou sans AEAD) / Algorithmes d'intégrité / Fonction de dérivation (PRF) optionnelle / Méthodes d'échange de clés (DH)
* si AEAD, prf obligatoire, voir explications...
ESP
Algorithmes de chiffrement / Algorithmes d'intégrité / PFS optionnel (DH)
Pour prendre un exemple :
- ike=aes256ccm64-sha256-prfsha256-modp2048
- esp=aes256ccm64-modp2048
RFC 7321
PRF
Perfect Forwarding Secrecy
PFS
Perfect Forwarding Secrecy
Exemple sous forme de tableau
Chiffrement
Algorithme de chiffrement |
Intégrité
Algorithme d'intégrité/HMAC |
Fonction de dérivation
PRF (Pseudo-Random Function) |
échange de clefs
Groupe Diffie-Hellman |
| aes256ccm64 (AEAD) | SHA 256 | PRF SHA256 | MODP 2048 |
Les pires choix
- IKE:3DES_CBC/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024,
- IKE:3DES_CBC/HMAC_MD5_96/PRF_HMAC_MD5/MODP_1024,
- IKE:DES_CBC/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024,
- IKE:DES_CBC/HMAC_MD5_96/PRF_HMAC_MD5/MODP_1024,
- IKE:3DES_CBC/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_768,
- IKE:3DES_CBC/HMAC_MD5_96/PRF_HMAC_MD5/MODP_768,
- IKE:DES_CBC/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_768,
- IKE:DES_CBC/HMAC_MD5_96/PRF_HMAC_MD5/MODP_768
Soit option ike et esp :
ike=3des-md5-prfmd5-modp768,3des-md5-prfmd5-modp1024,3des-sha1-prfsha1-modp768,3des-sha1-prfsha1-modp1024,des-md5-prfmd5-modp768,des-md5-prfmd5-modp1024,des-sha1-prfsha1-modp768,des-sha1-prfsha1-modp1024esp=3des-md5,3des-sha1,des-md5,des-sha1
Les admins de serveur VPN IKE2/IPSec verront des tentatives de connexion avec ces choix. Il s'agit à 99% d'une tentative d'attaque. Le bot cherche les failles... !
Notion algorithmique
Créer un VPN avec les options par défaut de windows 10 est purement hasardeux, car la qualité de sécurité de la liaison dépendra des réglages du serveur.
Donc si vous voulez garantir une connexion sécurisée, il faut bannir les algorithmes en rouge ou orange et donc privilégier ceux en vert du tableau ci-dessous.
Options windows 10/11 pour :
| Options | Chiffrement
Algorithme de chiffrement Valeurs acceptées : DES, DES3, AES128, AES192, AES256, GCMAES128, GCMAES256 |
Intégrité
Algorithme d'intégrité/HMAC Valeurs acceptée : MD5, SHA1, SHA256, SHA384 |
Fonction traitement
PRF (Pseudo-Random Function) |
échange de clefs
Groupe Diffie-Hellman Valeurs acceptées : None, Group1, Group2, Group14, ECP256, ECP384, Group24 |
| Powershell | -EncryptionMethod (ike) | -IntegrityCheckMethod | Non paramétrable,
mais déduit par le client. |
-DHGroup |
| -CipherTransformConstants (esp) | -AuthenticationTransformConstants | -PfsGroup | ||
| strongswan | aes256 | sha256 | prfsha256 | modp2048 |
| win10 | Group14 | |||
| AES128
Faible |
SHA1 | None | ||
| AES192
Peu employé, mieux vaut utiliser AES256 |
MD5 | Group1
(équiv. modp768) | ||
| AES256
Bon si utilisé avec HMAC SHA-2 SHA256, soit l'option SHA256128 RFC 8247 |
SHA256 (SHA-2)
Recommandé par ANSSI |
Group2
(equiv. modp1024) | ||
| GCMAES128
Sûre equiv. aes128gcm16 |
SHA384
clefs interne plus grande |
Group14
(équiv. modp2048) pour compatibilité seulement | ||
| GCMAES256
Meilleurs choix équiv. aes256gcm16 RFC 8247 |
ECP256
courbe elliptique bon pour Windows 10+, iOS 11+, Android 8+ | |||
| DES
Obsolète |
ECP384
Idem P-256, selon NSA => TopSecret! Plus lent que ECP256 | |||
| DES3
Obsolète |
Group24
(équiv. modp1024s256) Vitesse moyenne | |||
| ECP521
non compatible Win10 | ||||
Statistique des groupes
| Group DH | Sécurité | Équivalent RSA | Vitesse | Compatibilité | |
| None | Nulle | Rapide | Windows 7 | ||
| Group1 | Très faible | 768 bits | Rapide | Windows 7 | |
| Group2 | Faible | 1024 bits | Rapide | L2TP/Ipsec | Windows 7,Windows 10+
Android < 8 IOS < 11 |
| Group14 | Bonne | 2048 bits | Moyenne | L2TP/Ipsec | Windows 10+
Android < 8 IOS < 11 |
| ECP256 | Très bonne | 3072 bits | Rapide | Windows 10+ | |
| ECP384 | Excellente | 7680 bits | Plus lent qu'ECP256 | Windows 10+ | |
| Group24 | Bonne ++ | 2048 bits | Moyenne | Windows |
Option idéale : -DHGroup ECP256 ou Group14
Au pire : -DHGroup Group14 ou Group2
Les autres étant totalement déclassé, car "cassable" rapidement.
Client windows
L'ajout d'une connexion VPN se fait par l'interface graphique et pour garder un semblent d'universalité l'ajout se fera par des commandes PowerShell.
NAT
Pour permettre à windows d'associer certains protocoles de sécurité il faut modifier la base de registre comme suivant :
- Chemin : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent\
- Pour XP : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPSec\
- Nouvelle valeur DWORD (32bits) : AssumeUDPEncapsulationContextOnSendRule
- Contenu de cette nouvelle valeur : 2
- plus de détails
Powershell
$Chemin = 'HKLM:\SYSTEM\CurrentControlSet\Services\PolicyAgent\'
New-ItemProperty -Path "$Chemin" -Name 'AssumeUDPEncapsulationContextOnSendRule' -PropertyType 'Dword' -Value '0x2' -Force
DOS
reg add "HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent\" /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d 2 /f
Routage Ipv6
Sur les versions antérieur à windows 10 et windows serveur 2008, le routage ipv6 peut poser des problèmes lors de la mise en place du réseau ou des résolutions de domaine.
Si vous rencontrez des soucis de routage une modification dans le registre peut résoudre le problème.
Voir la doc FR ou EN sur le sujet.
Powershell
$Chemin = 'HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\'
New-ItemProperty -Path "$Chemin" -Name 'DisabledComponents' -PropertyType 'Dword' -Value '0x20' -Force
DOS
reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\" /v DisabledComponents /t REG_DWORD /d 0x20 /f
Ajout de clients
L'interface graphique de Windows permet d'ajouter facilement un VPN. Cependant tel quel les paramètres de sécurité, par défaut, sont hautement déclassés.
C'est pourquoi je vous propose d'effectuer ces étapes en Powershell ; la création et réglage de sécurité optimal.
De plus, les lignes suivantes, proviennent de scripts déployés par la GPO du réseau, lesquels sont adaptables sur des environnements différents. C'est la raison pour laquelle l'emploie de variable est utilisé pour les noms des VPNs et paramètres.
Valeurs globales
$HostDST = "applireseau.com"
$PSK = "cocololo2"
Ajout du VPN IKEv2
- $VPNName = "VPN-sécurisé IKEv2"
- Add-VpnConnection -Name $VPNName -ServerAddress "$HostDST" -TunnelType Ikev2 -RememberCredential:$true
<!> L'option -EncryptionLevel Maximum est ignorée en avec l'emploie de IKEv2, car elle demande l'emploie d'algos comme mppe, ce qui est inutile puisque IKEv2 gère l'équivalent.
- $Ipsec = @{
Ike = @{
Encryption = "GCMAES256" #GCMAES256/SHA384/Group14 - GCMAES256/SHA384/ECP384 - GCMAES256/SHA256/ECP384 - GCMAES256/SHA256/ECP256
Integrity = "SHA384"
DhGroup = "ECP384"
}
Esp = @{
Encryption = "GCMAES256"
Integrity = "GCMAES256"
PfsGroup = "None"
}
}
- Add-VpnConnection -Name $VPNName -ServerAddress "$HostDST" -TunnelType Ikev2 -RememberCredential:$true -SplitTunneling
Ajout VPN Ipsec/L2TP
- $VPNName = "VPN-sécurisé L2TP"
- $Ipsec = @{
Ike = @{
Encryption = "AES256" # AES256/SHA384/Group14
Integrity = "SHA384"
DhGroup = "Group14"
}
Esp = @{
Encryption = "AES256" # AES256 OK
Integrity = "SHA256128" # SHA196 -> AES256/GCM
PfsGroup = "None"
}
}
- MSCHAPv2 seulement
<!> L'option -EncryptionLevel Maximum peut-être nécessaire si le serveur "impose" l'emploie de mppe.
MPPE n'est pas pertinent avec les algo utilisés, car il ne fait qu'ajouter une énième couche de cryptage dans la partie CHILD_SA alourdissant la taille des paquets.
- Add-VpnConnection -Name $VPNName -ServerAddress $HostDST -TunnelType L2tp -EncryptionLevel Optional -L2tpPsk "$PSK" -AuthenticationMethod MSCHAPV2 -SplitTunneling -Force
Pour tous le utilisateurs
L'ajout du VPN et réglage des paramètres est lié au compte courant. Pour rendre ces opérations utilisables à l'ensemble des utilisateurs utiliser l'option -AllUserConnection :
- Ajouter l'option -AllUserConnection à "Add-VpnConnection"
Pour utiliser le tunnel uniquement sur votre réseau privé (ou de l'entreprise)
- Ajouter l'option -SplitTunneling
- Ceci aura pour effet de ne pas ajouter de route par défaut
- Les accès à internet ne passeront pas par le VPN.
Remarque sur la sécurité L2TP
L2TP/Ipsec n'accepte pas les derniers algorithmes et Windows Downgrade les valeurs par défaut précédemment renseignées.
Pour réduire l'usage des algorithmes déclassés, on impose le plus robuste d'entre eux à savoir :
Chiffrement = 'AES256'
Intégrité = 'SHA384'
Esp = Chiffrement
Emploi MPPE
De l'option -EncryptionLevel avec Required ou Maximum
L'usage de mppe avec AES-256 est inutile d'un point de vu efficacité, car les paquets, entre x2ltp et pppd, sont déjà cryptés et dans la majorité des cas ces deux services sont hébergés sur le même serveur et n'ont nullement besoin de chiffrer leurs échanges.
Cependant certains audites exigent son emploi c'est pourquoi l'option -EncryptionLevel est réglée sur "Optional" et non "NoEncryption". Si votre serveur exige mppe il sera employé, sinon ignoré.
Réglage sécurité
C'est avec la commande Set-VpnConnectionIPsecConfiguration qu'il est possible de forcer l'usage d'algorithmes solides :
- Set-VpnConnectionIPsecConfiguration -ConnectionName $VPNName -EncryptionMethod $Ipsec.Ike.Encryption -IntegrityCheckMethod $Ipsec.Ike.Integrity -DHGroup $Ipsec.Ike.DhGroup -CipherTransformConstants $Ipsec.Esp.Encryption -AuthenticationTransformConstants $Ipsec.Esp.Integrity -PfsGroup $Ipsec.Esp.PfsGroup -Force
Liste des options de chiffrements
Pour connaitre la liste des autres possibilités Microsoft met à disposition cette fiche technique :
https://learn.microsoft.com/en-us/powershell/module/vpnclient/set-vpnconnectionipsecconfiguration?view=windowsserver2025-ps
Cependant attention ! il s'agit des possibilités, ne mettez pas un algo comme GCMAES-256 à une connexion L2TP, ca ne fonctionnera pas ;)
Liste des codes erreurs de connexion VPN windows client
https://learn.microsoft.com/fr-fr/troubleshoot/windows-client/networking/error-codes-for-dial-up-vpn-connection
Mémorisation identifiant
Valable que sur des version de windows ancienne, utiliser le Gestionnaire d'identification, le coffre, comme certains l'appels.
# Stocker les credentials dans le Windows Credential Store
- cmdkey /add:"$HostDST" /user:"$userVPN" /pass:"$pwdVPN"
PS: ne fonctionnera pas dans windows 10 dernière MAJ, ni win2016/2025 server.
Déterminer la route par défaut (gateway) ipv6
On évoque ici que la version de tunnel utilisant l'IPv6, car le serveur et client savent échanger les routes ipv4 pendant la négociation du tunnel. En IPv6 cela est géré différemment.
Reste à déterminer ce qui est permis par les clients possédant une connexion ipv6 avec votre serveur.
Les deux chapitres suivant donne la marche à suivre si l'on souhaitie donner accès qu'un réseau d'entreprise ou à tout internet.
Bien entendu votre pare-feu devra être paramétré pour autoriser l'une ou l'autre méthode...
Accès uniquement local
Nous attendons "local" pour nos filiales distantes de plusieurs milliers de kilomètres possédant tout la même source d'ip soit 2001:db8:/32, lesquelles sont scindées en plusieurs groupes.
- Add-VpnConnectionRoute -Name $VPNName 2001:db8:/32
Accès total à internet
D'après la RFC5739 et une discution sur le wiki de Strongswan, il n'est pas possible d'échanger la route par défaut au client par le serveur. Ceci même en employant radvd pour gérer les routes avec les Route Advertissement à moins de patcher...
Ni même espérer que le client Microsoft fasse une recherche RA (propre à IPv6). Une fois la connexion virtuelle ipv6 établi, le client n'envoi jamais de RA. Il peut cependant en recevoir et répondre, mais cela n'est pas conforme aux règles de sécurités.
Aussi, comme nous ajoutons les VPNs, des postes clients, via un script powershell lancé par la GPO de Windows server, le problème de route n'est qu'une option de plus à ajouter au client fraîchement créé.
Pour que le client choisisse de faire passer tout le trafic IPv6 par le nouveau tunnel on emploi Add-VpnConnectionRoute de Microsoft comme ceci :
- Add-VpnConnectionRoute -Name $VPNName ::/1
Dès que la connexion est établie, la route ::/1 est ajoutée dans l'interface du VPN, un route print donnerait quelque chose comme :
IPv6 Table de routage
=================================================
Itinéraires actifs :
If Metric Network Destination Gateway
NoInterFace1 26 ::/1 On-link
1 331 ::1/128 On-link
* NoInterFace1 est le N° de l'interface du VPN établi.
Activer le VPN
Pour connecter votre PC au VPN l'interface graphique suffit amplement. Mais pour des essais le mode commande peut s'avérer moins chronophage et moins usant pour notre "mulot" :D
Voilà ce qui remplace le traditionnel click : Depuis Paramètre, Réseau et Internet, VPN, Se connecter, ...
En mode commande
Petit rappelle, lancer cmd.exe ou powershell :
- En admin si le VPN est accessible à tous les utilisateurs
- Si ce n'est pas le cas il important de se placer en mode user...
Lancer la connexion :
- rasdial "$HostDST
S'il faut saisir des identifiants, login et MdP doivent être remplacés :
- rasdial "$HostDST" login MdP
Annexes
Tuto client
- AssumeUDPEncapsulationContextOnSendRule
- DisableIKENameEkuCheck
- voir aussi partie certificat et propriétés VPN
Certificats SSL
La connexion IPSEC ne sait pas aller vérifier un certificat comme le ferait un navigateur. Elle se base sur la magasin du gestionnaire de certificat de l'ordinateur. Si celui-ci n'est pas à jour, ne contient pas le RootCA de votre certificat, la connexion en IKEv2 ou autre avec certificat ne sera pas possible.
Ce qui nécessite l'ajout manuellement ou à l'aide d'un script comme décrit ci-dessous.
Example avec Lets'Encrypt :
Manuellement
Consultez le site officiel de Lets'Encrypt et récupérer tous les ROOTCas au format ".der".
- nullement besoin de récupérer les certificats intermédiaires -
via Certlm.exe
Placer la souris sur "Sélectionner Autorités de certification racines de confiance"
puis "click droit, "Toutes les tâches", Importer..
Puis choisir "*.*", et aller dans le dossier où se trouvent vos certificats précédemment téléchargés.
via Powershell
- Import-Certificate -FilePath Certificat-Téléchargé.der -CertStoreLocation Cert:\LocalMachine\Root
Automatiquement
Les méthodes suivantes ajoutent ces certificats à l'aide de powershell. Ces commandes devraient être remontées par GPO dans le cas d'un réseau d'entreprise c'est pourquoi ce script a été développé.
Téléchargez et décompressez le script : CertRootToolsLetsEncrypt.7z
Voici quelques syntaxe pour ajouter, visionner les certificats Root de Let'Encrypt
Donne un état de ce qui existe dans l'ordinateur
- .\CertRootToolsLetsEncrypt.ps1 -verbose
Importer les certificats non présent.
- .\CertRootToolsLetsEncrypt.ps1 -verbose -import
Supprime les certificats ajoutés, excepté celui ajouté par Microsoft
- .\CertRootToolsLetsEncrypt.ps1 -verbose -revoke
QA
Q: "Les informations d'authentification IKE ne sont pas acceptables"
" IKE authentication credentials are unacceptable"
Les conditions :
- Votre $HostDST correspond au CN du certificat
- Les logs montrent :
- CoID={*-*-*-*-*} : L’utilisateur HOST\User a composé le numéro de la connexion VPN-sécurisé IKEv2. La connexion a échoué. Code d’erreur retourné : 13801.
- Le certificat du serveur n'est pas expiré (donc valide) ou vient d'être renouveler. Il fonctionne correctement avec un navigateur en HTTPS.
A: Si votre certificat est valide, vous devez vérifier dans certlm.exe la présence de sont RootCA (Certificat racine de confiance)
Si non présent, l'ajouter comme décrit dans la section "Certificats SSL"
Codes erreur VPN pour Windows
EN: https://learn.microsoft.com/en-us/troubleshoot/windows-server/networking/troubleshoot-always-on-vpn#error-code-13801
FR: https://learn.microsoft.com/fr-fr/troubleshoot/windows-server/networking/troubleshoot-always-on-vpn#error-code-13801
Restart-Service IKEEXT -Force
Modification VPN par l'utilisateur.
Afin d'éviter toute modification du VPN par l'utilisateur, créer le tunnel en mode admin avec l'option -AllUserConnection de la commande "Add-VpnConnection".
L'utilisateur ne pourra qu'effacer les données de connexion.
L2TP valeur par défaut
Le KB325158 indique les valeurs par défaut de l'usage de L2TP. Il est possible de changer les algorithmes de chiffrement, intégrité et groupes mais cela génère des erreurs sur les serveurs VPN L2TP.
