Table des matières

Wireguard

Installer le paquet wireguard.

Topologie avec un serveur central

Wireguard: hub-and-spoke configuration

A et B sont tous les deux derrière un NAT et un pare-feu et ont une adresse IP publique dynamique. Ils vont communiquer via Wireguard par le biais d'un serveur C, accessible publiquement, avec une adresse IP fixe.

Génération des clés

Sur chaque machine, générer une paire de clés publique/privée:

(umask 077; wg genkey > endpoint-a.key)
wg pubkey < endpoint-a.key > endpoint-a.pub

Les fichiers ne sont pas nécessaires, c'est ce qu'ils contiennent qui va être nécessaire dans les fichiers de configuration.

Configuration

Sur le serveur C:

/etc/wireguard/wg0.conf
# la configuration de C, le serveur
[Interface]
PrivateKey = <la clé privée de C>
Address = 10.0.0.1/32
ListenPort = 51823
 
# la configuration de A, un client
[Peer]
PublicKey = <la clé publique de A>
AllowedIPs = 10.0.0.2/32
 
# la configuration de B, un autre client
[Peer]
PublicKey = <la clé publique de B>
AllowedIPs = 10.0.0.3/32

Ajouter net.ipv4.ip_forward=1 à /etc/sysctl.conf.

Sur le client A:

/etc/wireguard/wg0.conf
# la configuration de A, un client
[Interface]
PrivateKey = <la clé privée de A>
Address = 10.0.0.2/32
ListenPort = 51823
 
# la configuration de C, le serveur
[Peer]
PublicKey = <la clé publique de C>
Endpoint = 192.168.1.100:51823
AllowedIPs = 10.0.0.1/32, 10.0.0.3/32
PersistentKeepalive = 25

Adapter pour le client B.

Démarrage

Sur toutes les machines:

sudo systemctl enable wg-quick@wg0.service
sudo systemctl start wg-quick@wg0.service
sudo journalctl -u wg-quick@wg0.service

Derrière un NAT

Objectif : que deux machines chacune derrière leur NAT puisse établir un tunnel sans faire passer tout le trafic par un serveur central (on a besoin d'un serveur central servant de point de rencontre pour partager les informations de connexion).

Une solution est de faire du NAT-hole-punching :