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§
| Protocole | Couche OSI | Chiffrement | Performance | Complexité | Usage principal |
|---|---|---|---|---|---|
| WireGuard | 3 (IP) | ChaCha20-Poly1305 | Excellent | Faible | VPN moderne, usage perso |
| OpenVPN | 3/4 (TUN/TAP) | AES-256-GCM | Bon | Modérée | Entreprise, routage flexible |
| IPSec/IKEv2 | 3 (IP) | AES-256-GCM | Très bon | Élevée | Site-to-site, mobiles Apple |
| L2TP/IPSec | 2 + 3 | AES-256 | Moyen | Modérée | Héritage, support natif OS |
| PPTP | 2 | MPPE (RC4) | Excellent | Faible | Obsolète, non sécurisé |
| SSTP | 4 (TLS) | AES-256 | Bon | Faible | Windows 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§
- Protocole IP numéro 47
- Supporte l’encapsulation de tous les protocoles de couche 3
- Stateless, sans mécanisme de contrôle de flux
- Pas de sécurité intégrée (nécessite IPSec pour le chiffrement)
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§
| Type | Usage |
|---|---|
| Site-to-Site | Connexion permanente entre deux sites distants (siège ↔ agence) |
| Remote Access | Connexion individuelle depuis n’importe où (télétravail) |
| GRE Tunnel | Tunnel multi-protocoles, souvent combiné avec IPSec |
| IPSec VPN | VPN sécurisé site-à-site avec chiffrement complet |
Avantages du VPN en entreprise§
- Bonne scalabilité
- Compatible avec les technologies broadband
- Niveau de sécurité élevé
- Réduit le coût des lignes dédiées (WAN)
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)
Commentaires