Garden of KnowledgeApplied Sciences › Computer Science › Software › Security › Networking › Fundamentals
March 22, 2026

VPN Protocols

Un VPN (Virtual Private Network) crée un tunnel chiffré entre deux points sur un réseau public. Le choix du protocole détermine les performances, la sécurité et la compatibilité.

Comparaison générale§

ProtocoleCouche OSIChiffrementPerformanceComplexitéUsage principal
WireGuard3 (IP)ChaCha20-Poly1305ExcellentFaibleVPN moderne, usage perso
OpenVPN3/4 (TUN/TAP)AES-256-GCMBonModéréeEntreprise, routage flexible
IPSec/IKEv23 (IP)AES-256-GCMTrès bonÉlevéeSite-to-site, mobiles Apple
L2TP/IPSec2 + 3AES-256MoyenModéréeHéritage, support natif OS
PPTP2MPPE (RC4)ExcellentFaibleObsolète, non sécurisé
SSTP4 (TLS)AES-256BonFaibleWindows only

WireGuard§

Protocole moderne (2018) à la base de code réduite (~4000 lignes vs ~600 000 pour OpenVPN). Intégré au noyau Linux depuis 5.6.

Primitives cryptographiques§

Chiffrement symétrique : ChaCha20-Poly1305 (AEAD)
Échange de clés        : Curve25519 (ECDH)
Hachage                : BLAKE2s
MAC                    : HMAC
Handshake              : Noise Protocol Framework (IKpsk2)
Perfect Forward Secrecy : oui (clés de session éphémères)

Configuration§

# Serveur — /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <clé_privée_serveur>
Address = 10.0.0.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = <clé_publique_client>
AllowedIPs = 10.0.0.2/32  # Seule IP autorisée pour ce peer
# Client — /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <clé_privée_client>
Address = 10.0.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = <clé_publique_serveur>
Endpoint = serveur.example.com:51820
AllowedIPs = 0.0.0.0/0   # Tout le trafic passe par le VPN
PersistentKeepalive = 25  # Maintenir la connexion derrière NAT
# Générer une paire de clés
wg genkey | tee private.key | wg pubkey > public.key

# Démarrer / arrêter
wg-quick up wg0
wg-quick down wg0
wg show              # État des connexions, trafic

Avantages et limites§

+ Très rapide (performances noyau, ChaCha20 optimisé)
+ Code minimal = surface d'attaque réduite = audits faciles
+ Roaming natif (changement d'IP sans reconnecter)
+ Stateless par conception (pas de négociation complexe)

- Pas de masquage : les paquets WireGuard sont identifiables (UDP port 51820)
- Identité permanente : les IPs sont fixes dans la config (problème vie privée)
- Pas de TCP natif (peut être bloqué dans des environnements restrictifs)
- WireGuard over TCP : via udp2raw ou obfuscation supplémentaire

OpenVPN§

Protocole mature (2001) utilisant TLS pour la couche de contrôle et OpenSSL pour le chiffrement.

Architecture§

Canal de contrôle (TLS) : authentification, échange de clés, paramètres
Canal de données (chiffrement symétrique) : tunneling du trafic réel

Mode TUN (couche 3) : tunnel IP — routage
Mode TAP (couche 2) : tunnel Ethernet — bridging (LAN virtuel)

Configuration serveur§

# /etc/openvpn/server.conf
port 1194
proto udp
dev tun

ca      /etc/openvpn/ca.crt
cert    /etc/openvpn/server.crt
key     /etc/openvpn/server.key
dh      /etc/openvpn/dh.pem
tls-auth /etc/openvpn/ta.key 0  # Protection anti-DDoS sur le handshake

server 10.8.0.0 255.255.255.0   # Plage d'adresses clients
push "redirect-gateway def1"    # Router tout le trafic client
push "dhcp-option DNS 1.1.1.1"

cipher AES-256-GCM
auth SHA256
tls-version-min 1.2

keepalive 10 120
user nobody
group nogroup
persist-key
persist-tun
# Générer l'infrastructure PKI avec easy-rsa
make-cadir ~/openvpn-ca && cd ~/openvpn-ca
./easyrsa init-pki
./easyrsa build-ca
./easyrsa gen-dh
./easyrsa build-server-full server nopass
./easyrsa build-client-full client1 nopass
openvpn --genkey secret ta.key

Avantages et limites§

+ Protocole mature avec large écosystème
+ Supporte TCP (port 443 → difficile à bloquer)
+ PKI complète avec révocation de certificats (CRL)
+ Mode TAP pour ponter des réseaux entiers
+ Supporte plusieurs méthodes d'authentification (certs, MFA, LDAP)

- Performance inférieure à WireGuard
- Configuration complexe
- Code large (~600k lignes)
- Dépendance à OpenSSL

IPSec / IKEv2§

IPSec opère au niveau IP et est souvent utilisé pour les VPN site-to-site en entreprise. IKEv2 est le protocole de négociation de clés (phase de handshake).

Composants IPSec§

IKE (Internet Key Exchange) : Protocole de négociation des SA (Security Associations)
AH (Authentication Header)  : Intégrité et authentification (pas de chiffrement)
ESP (Encapsulating Security Payload) : Chiffrement + intégrité (utilisé en pratique)

Modes IPSec :
Transport : chiffre uniquement le payload IP (en-tête IP visible)
Tunnel    : chiffre le paquet IP entier (en-tête IP original caché dans un nouveau paquet)

IKEv2 — phases de négociation§

Phase 1 — IKE_SA_INIT :
  Échange DH → secret partagé
  Génération des clés de session IKE

Phase 2 — IKE_AUTH :
  Authentification mutuelle (certificats ou PSK)
  Négociation de la Child SA (pour ESP)

Phase 3 — CREATE_CHILD_SA :
  Renouvellement des clés (PFS — Perfect Forward Secrecy)

Configuration strongSwan (IKEv2)§

# /etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    ike=aes256gcm16-prfsha256-ecp256!
    esp=aes256gcm16-ecp256!
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    [email protected]
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=1.1.1.1
    rightsendcert=never
    eap_identity=%identity

Avantages et limites§

+ Intégré nativement dans iOS, macOS, Windows
+ Très performant (implémentations kernel)
+ Robuste pour les connexions mobiles (MOBIKE — changement d'IP)
+ Standard IETF

- Configuration très complexe
- Potentiellement ciblé par des portes dérobées NSA (selon documents Snowden)
  → Utiliser des courbes EC non-NIST (Curve25519) si possible
- Négociation IKEv1 vulnérable (utiliser IKEv2 uniquement)

Sécurité VPN — considérations§

DNS leaks§

# Tester si le DNS fuit en dehors du tunnel
curl https://dnsleaktest.com/

# Protection : forcer le DNS à travers le tunnel
# WireGuard : DNS = 10.0.0.1 dans [Interface]
# OpenVPN   : push "dhcp-option DNS 10.8.0.1"
# Désactiver systemd-resolved / nsswitch en dehors du VPN

VPN kill switch§

# Empêcher tout trafic si le VPN se déconnecte
# WireGuard — via iptables
iptables -P FORWARD DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A OUTPUT -o wg0 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -p udp --dport 51820 -j ACCEPT  # Autoriser WireGuard lui-même
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT     # DNS initial (résolution du serveur)

# NetworkManager sur Linux — nmcli connection modify wg0 vpn.persistent yes

Audit d’implémentation VPN§

Points à vérifier :
✓ Algorithmes : AES-256-GCM, ChaCha20-Poly1305 (pas AES-CBC, pas RC4)
✓ DH : groupes ≥ 3072 bits ou Curve25519 (pas groupe 1/2/5 Oakley)
✓ Perfect Forward Secrecy activé
✓ Certificats : SHA-256+, clés RSA ≥ 2048 bits ou ECDSA P-256+
✓ TLS minimum 1.2 (si TLS utilisé)
✓ Authentification mutuelle (pas seulement clé pré-partagée en entreprise)
✓ Logs : sans connexion (no-log policy vérifiable pour VPN commerciaux)

GRE Tunnel§

GRE (Generic Routing Encapsulation) est une méthode de création de VPN site-à-site développée par Cisco (RFC 2784). GRE n’est pas chiffré par défaut — il encapsule simplement les paquets dans un nouvel en-tête IP.

Caractéristiques GRE§

GRE over IPSec§

La combinaison GRE + IPSec est courante en entreprise : GRE fournit le tunnel multi-protocoles, IPSec assure le chiffrement.

! Créer le tunnel GRE
interface Tunnel0
 ip address 10.0.0.1 255.255.255.252
 tunnel source GigabitEthernet0/0
 tunnel destination 203.0.113.2
 tunnel mode gre ip

! Chiffrer avec IPSec (mode transport recommandé pour GRE over IPSec)
crypto isakmp policy 10
 encryption aes 256
 hash sha256
 authentication pre-share
 group 14
!
crypto isakmp key MOT_DE_PASSE address 203.0.113.2
!
crypto ipsec transform-set TS esp-aes 256 esp-sha256-hmac
 mode transport
!
crypto map CMAP 10 ipsec-isakmp
 set peer 203.0.113.2
 set transform-set TS
 match address ACL_GRE
!
interface GigabitEthernet0/0
 crypto map CMAP

Types de VPN§

TypeUsage
Site-to-SiteConnexion permanente entre deux sites distants (siège ↔ agence)
Remote AccessConnexion individuelle depuis n’importe où (télétravail)
GRE TunnelTunnel multi-protocoles, souvent combiné avec IPSec
IPSec VPNVPN sécurisé site-à-site avec chiffrement complet

Avantages du VPN en entreprise§

Obfuscation (contournement de censure)§

# obfs4 — obfusque le trafic OpenVPN pour ressembler à du trafic aléatoire
# Utilisé avec Tor et OpenVPN dans des pays avec censure

# Shadowsocks — proxy SOCKS5 chiffré
# Stunnel — encapsule dans TLS
# v2ray/xray — frameworks de contournement avancés

# WireGuard over TCP via udp2raw
# Convertit les paquets UDP WireGuard en paquets TCP (voire ICMP)
—The Gardener