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 🙂