WireGuard est une application libre et un protocole qui implémente des techniques de réseau privé virtuel (VPN) pour créer des connexions point à point sécurisées dans des configurations routées ou pontées. WireGuard est exécuté comme un module à l’intérieur du noyau Linux et vise de meilleures performances que les protocoles de tunneling IPsec et OpenVPN.
https://en.wikipedia.org/wiki/WireGuard
Installation
Debian
Le paquet wireguard est disponible en unstable pour Jessie et Stretch :
echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable-wireguard.list
printf 'Package: *\nPin: release a=unstable\nPin-Priority: 90\n' > /etc/apt/preferences.d/limit-unstable*
apt update
apt install wireguard
https://wiki.debian.org/Wireguard
Ubuntu
Un paquet PPA est mis à disposition pour Ubuntu :
add-apt-repository ppa:wireguard/wireguard
apt-get update
apt-get install wireguard
https://launchpad.net/~wireguard/+archive/ubuntu/wireguard
Fedora
Les paquets sont nativement disponibles :
dnf install wireguard
Les paquets suivants sont installés: wireguard, wireguard-dkms, wireguard-tools
Configuration rapide en mode serveur
Nous utilisons la méthode avec wg-quick, on choisit 192.168.100.0 comme réseau pour le VPN.
Configuration du serveur
Dans le répertoire /etc/wireguard, nous générons une paire de clefs :
wg genkey | tee wg-private.key | wg pubkey > wg-public.key
Créer le fichier /etc/wireguard/wg0.conf :
[Interface]
#server
Address = 192.168.100.254
PrivateKey = <CONTENU DU FICHIER wg-private.key>
ListenPort = 4820
[Peer]
#client 1
PublicKey = <CLEF PUBLIQUE DU CLIENT 1>
AllowedIPs = 192.168.100.1
Sur le client 1
Dans le répertoire /etc/wireguard, nous générons une paire de clefs :
wg genkey | tee wg-private.key | wg pubkey > wg-public.key
Créer le fichier /etc/wireguard/wg0.conf :
[Interface]
#client 1
Address = 192.168.100.1
PrivateKey = <CONTENU DU FICHIER wg-private.key>
ListenPort = 4820
[Peer]
#client 1
PublicKey = <CLEF PUBLIQUE DU SERVEUR>
AllowedIPs = 192.168.100.0/24 (si 0.0.0.0/0 alors tout le traffic est routé dans le vpn)
Nous pouvons répéter l’opération sur autant de clients que souhaité. Il suffit d’ajouter un bloc [peer] correspondant dans le fichier de configuration du serveur.
Démarrer le VPN
Sur le serveur puis sur le client :
wg-quick up wg0
Pour connaître l’état du VPN :
wg show
Ajouter un client Android
Nous pouvons utiliser n’importe quelle machine qui a WireGuard d’installé.
Installer le programme qrencode (disponisble sous debian et fedora).
Créer un configuration comme n’importe quel autre client.
qrencode -t ansiutf8 < client.conf
Sur Android à l’aide du magasin d’application F-droid, installer WireGuard et ajouter un VPN, choisir « create from qrcode ».
https://f-droid.org/
J’ai fait les tests avec un serveur debian arm64 et des clients Ubuntu bionic, fedora 29, debian arm64, Android.
Il est possible de joindre chacun des clients depuis un autre client. J’ai ouvert un serveur Nginx sur une machine du VPN et j’ai visionné une vidéo sur mon téléphone à l’aide de VLC 🙂