P07 - Les VPN : WireGuard, IPsec, OpenVPN
1. Principe
Un VPN (Virtual Private Network) crée un tunnel chiffré à travers un réseau non sûr (Internet).
flowchart LR subgraph S2S["Site à site"] A["LAN Nantes<br/>192.168.10.0/24"] --- FA{{"Pare-feu A"}} FA ===|"tunnel IPsec / WireGuard"| FB{{"Pare-feu B"}} FB --- B["LAN Rennes<br/>192.168.20.0/24"] end subgraph NOM["Nomade (road warrior)"] L["💻 Portable en télétravail"] ===|"tunnel"| FC{{"Pare-feu de l'entreprise"}} FC --- C["LAN entreprise"] end
| Protocole | Points forts | Points faibles | Port |
|---|---|---|---|
| IPsec (IKEv2) | Standard, interopérable (tous constructeurs) | Configuration complexe (phases 1 et 2) | UDP 500/4500 |
| OpenVPN | Très flexible, passe partout (TCP 443 possible), certificats | Plus lent, logiciel client | UDP 1194 |
| WireGuard | Très simple, rapide, code minimal, dans le noyau Linux | Moins de fonctions d’entreprise natives | UDP 51820 |
2. WireGuard entre deux machines Linux
sudo apt install wireguard # Arch : sudo pacman -S wireguard-tools
wg genkey | tee prive.key | wg pubkey > public.key # sur CHAQUE machine
chmod 600 prive.key/etc/wireguard/wg0.conf sur le serveur (IP publique ou joignable) :
[Interface]
Address = 10.200.0.1/24
ListenPort = 51820
PrivateKey = <clé privée du serveur>
[Peer]
PublicKey = <clé publique du client>
AllowedIPs = 10.200.0.2/32/etc/wireguard/wg0.conf sur le client :
[Interface]
Address = 10.200.0.2/24
PrivateKey = <clé privée du client>
[Peer]
PublicKey = <clé publique du serveur>
Endpoint = serveur.exemple.fr:51820
AllowedIPs = 10.200.0.0/24
PersistentKeepalive = 25sudo wg-quick up wg0 # démarrer
sudo systemctl enable wg-quick@wg0 # au démarrage
sudo wg show # état, dernier « handshake »
ping 10.200.0.1AllowedIPs = quels réseaux passent dans le tunnel (0.0.0.0/0 = tout le trafic Internet).
3. Sur pfSense
OpenVPN (assistant + export client), IPsec (phases 1/2), WireGuard (paquet) → S02 - pfSense. Tailscale = WireGuard « automatique » en maillage → O08 - Tailscale.