IPSec Client

De Site à José Mans


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
CHAP 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-modp1024
    • esp=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.