WireGuard

Updated 27 Septembre 2021

WireGuard

WireGuard est un VPN extrêmement simple mais performant, qui utilise les algorithmes de cryptage des plus efficaces. Il a été conçu pour être plus rapide, plus facile à utiliser et plus performant que IPsec et OpenVPN, tout en offrant plus de fonctionnalités. WireGuard a été conçu à l'origine comme un VPN tout-en-un pour fonctionner à la fois sur des interfaces intégrées et sur des superordinateurs adaptés à une grande diversité de tâches. WireGuard était initialement un composant du noyau Linux. Depuis, il est devenu multiplateforme et est pris en charge par Windows, macOS, BSD, iOS et les appareils Android.

WireGuard a vocation à être facile à installer et à configurer. Il peut être facilement implémenté en quelques lignes de code et tout aussi facilement analysé pour détecter d'éventuels problèmes de sécurité. Contrairement à des monstres tels que Swan/IPsec et OpenVPN/OpenSSL, dont l'analyse du code est hors de portée des experts en sécurité, n'importe qui peut analyser le code de WireGuard par ses propres moyens. WireGuard utilise les meilleurs protocoles de chiffrement, tels que Noise, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF. En associant des algorithmes de chiffrement ultrarapides à l'intégration dans le noyau Linux, on obtient un réseau sécurisé très performant. Référez-vous à la documentation fournie pour obtenir des informations détaillées sur ce protocole : PDF.

Configuration du serveur

Installation

Installez les outils nécessaires au bon fonctionnement de WireGuard :

emerge -a net-vpn/wireguard-tools

Création de clés

Créez des clés publique et privée :

cd /etc/wireguard

umask 077

wg genkey > privatekey

wg pubkey < privatekey > publickey

Afficher les deux clés, publique et privée :

tail publickey privatekey
==> publickey <==
ACMHojZjwV616cIsToFrQowXMJRxwEThFoEsvJnL/QM=

==> privkey <==
UBrksRvBtaRz0X33E7fvNd43eXC/SpwNsA8wKATVA3w= 

Configuration du tunnel

Modifiez le fichier de configuration sur le serveur, en y ajoutant ce qui suit :

  • IP de l'interface réseau du serveur
  • port de connexion
  • clé privée créée du côté du serveur (c'est-à-dire son contenu) :

Par exemple, l'IP de votre serveur peut être 192.168.50.1, et votre port de connexion 51820. Pour ces derniers, le fichier de configuration ressemblera à ceci :

/etc/wireguard/wg 0.conf

[Interface]
# WireGuard network address
Address = 192.168.50.1/24
# Expected connection port
ListenPort = 51820
# Private key for server
PrivateKey = UBrksRvBtaRz0X33E7fvNd43eXC/SpwNsA8wKATVA3w=

Important

Si le serveur utilise un pare-feu, modifiez ses paramètres pour autoriser une connexion via le port spécifié.

Configurez les droits d'accès au fichier de configuration :

chmod 600 wg0.conf

Configuration de l'envoi

Pour configurer le transfert de données entre les interfaces du serveur, ajoutez les lignes suivantes :

/etc/sysctl.conf

net.ipv4.ip_forward=1
net.ipv4.conf.all.forwarding=1
net.ipv6.conf.all.forwarding=1

Validez les modifications :

sysctl -p /etc/sysctl.conf

Configuration du routage avec Iptables

Le serveur doit être configuré pour traiter ce flux, pour l'envoyer par NAT, par exemple. Pour acheminer le trafic du client vers Internet via NAT, exécutez :

iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o eth0 -j MASQUERADE

Remplacer eth0 par l'interface de votre réseau local de votre serveur.

Enregistrez les règles de routage et ajoutez-les à la liste de démarrage automatique :

/etc/init.d/iptables save

rc-update add iptables

Configuration du routage avec Shorewall

Pour utiliser Shorewall, suivez la procédure de configuration décrite dans le manuel.

Démarrage de serveur

Ajoutez WireGuard à la liste de démarrage automatique :

rc-update add wireguard

Lancez le serveur :

/etc/init.d/wireguard start

Ajouter le client aux paramètres des serveurs

Ajoutez les données du client aux paramètres de WireGuard en indiquant l'IP de WireGuard et la clé publique du client :

/etc/wireguard/wg 0.conf

[Peer]
# Public key for the client
PublicKey = rT9yZRcg2pscyGkder/xTGds5/sy+mX0+Z/yq2RM4HU=
AllowedIPs = 192.168.50.2

Redémarrez WireGuard sur le serveur :

/etc/init.d/wireguard restart

Configuration client

Installation

Installez les outils nécessaires au bon fonctionnement de WireGuard :

emerge -a net-vpn/wireguard-tools

Création d'une clé

Créez des clés publique et privée :

cd /etc/wireguard

umask 077

wg genkey > privatekey

wg pubkey < privatekey > publickey

Afficher les deux clés, publique et privée :

tail publickey privkey
==> publickey <==
rT9yZRcg2pscyGkder/xTGds5/sy+mX0+Z/yq2RM4HU=

==> privkey <==
gFDdeXHCIFEY5t4Tn3ETiZba/ElCxEIj1W8wX/YFVE4=

Configuration du tunnel

Modifiez le fichier de configuration sur le client, en indiquant notamment :

  • IP de l'interface réseau client
  • port de connexion
  • clé privée créée du côté du client (c'est-à-dire son contenu) :

Par exemple, adresse IP 192.168.50.2, port de connexion 51820. Pour ces derniers, le fichier de configuration ressemblera à ceci :

/etc/wireguard/wg 0.conf

[Interface]
Address = 192.168.50.2/24
# Private key for the client
PrivateKey = gFDdeXHCIFEY5t4Tn3ETiZba/ElCxEIj1W8wX/YFVE4=
DNS = 8.8.8.8

[Peer]
# Public key for the server
PublicKey = ACMHojZjwV616cIsToFrQowXMJRxwEThFoEsvJnL/QM=
AllowedIPs = 0.0.0.0/0
# External IP and connection port for the server
Endpoint = wg.example.org:51820
PersistentKeepalive = 20
Exclure les réseaux privés

Pour exclure les réseaux privés du routage via le tunnel, définissez les valeurs suivantes dans AllowedIPs au lieu de ~0.0.0.0/0 :

0.0.0.0/5, 8.0.0.0/7, 11.0.0.0/8, 12.0.0.0/6, 16.0.0.0/4, 32.0.0.0/3, 64.0.0.0/2, 128.0.0.0/3, 160.0.0.0/5, 168.0.0.0/6, 172.0.0.0/12, 172.32.0.0/11, 172.64.0.0/10, 172.128.0.0/9, 173.0.0.0/8, 174.0.0.0/7, 176.0.0.0/4, 192.0.0.0/9, 192.128.0.0/11, 192.160.0.0/13, 192.169.0.0/16, 192.170.0.0/15, 192.172.0.0/14, 192.176.0.0/12, 192.192.0.0/10, 193.0.0.0/8, 194.0.0.0/7, 196.0.0.0/6, 200.0.0.0/5, 208.0.0.0/4, 8.8.8.8/32

Configurez les droits d'accès au fichier de configuration :

chmod 600 wg0.conf

Tunnelisation

Ajoutez WireGuard à la liste de démarrage automatique :

rc-update add wireguard

Démarrez WireGuard :

/etc/init.d/wireguard start

Vous pouvez contrôler la connexion du côté client avec la commande route, ou vérifier l'adresse IP externe à partir de l'hôte client :

dig +short myip.opendns.com @resolver1.opendns.com

Pour surveiller la connexion, exécutez :

wg
interface: wg0
public key: 6BfFNvPQbHKKDENJMRGXu0vVYaOsfEBxFpweNGLvU3Q=
  private key: (hidden)
  listening port: 45741
  fwmark: 0xca6c

peer: EDECjzNvTRsuuxiPD8VTS7N8cmcJ1fUIaANUdrOnbXM=
  endpoint: 1.2.3.4:51820
  allowed ips: 0.0.0.0/0
  latest handshake: 1 minute, 40 seconds ago
  transfer: 2.37 MiB received, 833.84 KiB sent
  persistent keepalive: every 20 seconds

Configurer votre appareil Android

Configuration du tunnel

Installer la bibliothèque permettant de chiffrer les données dans un code QR :

emerge -a media-gfx/qrencode

Installer la bibliothèque permettant de chiffrer les données dans un code QR :

qrencode -t ansiutf8 < wg0.conf
█████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████
████ ▄▄▄▄▄ █ ▀▀    █▄█▄  ▀▀█▄▄ ▀▄▀ ▄ ▀█▀▀▄ █    ▀▄▀▀ █▀▄▄▄▀▄▀▄ ▀▀  █▄█ ▄▄▄▄▄ ████
████ █   █ █ █▄▀▄█  █ ▀█▀█▀▄█▀▄▀█ █▄▄█▀▀▄▄▄█ ▀▀ ▄▀▀█▄ ▀█ ▀▀▀ █ ▄█ ▀▀██ █   █ ████
████ █▄▄▄█ █▀▀▄▄▀▄█  ▀▄ █▀▄  ▄▄▄ █  ██▀█  █ ▄█ ▀ ▄▄▄  ▀▀ ▄█ █▀█▀ ▀▀▄▄█ █▄▄▄█ ████
████▄▄▄▄▄▄▄█▄█ ▀ ▀ █▄█▄▀▄▀ █ █▄█ █ █▄▀▄█ ▀▄█ █▄█ █▄█ █▄▀ █▄▀▄█▄▀ █ ▀ █▄▄▄▄▄▄▄████
████ ▄▀█▄▄▄█▀▀▄▄ █▀▀▀▄ ▄ █▄▄ ▄ ▄ █ ▀██▄▀██▀█▀ ▀▄ ▄▄▄ ▀▀▀█▀▀▀ ▀▄██▀  █▀█ ▀▄  ▄████
████▀▀▀█▀▄▄ ▀▄▀█▀▀▄█▀█▀▄▄ ▄ ▀▀██▀ ▄▄▄▀█▀█▄▀ ▀▀▀█▀█▄██▀▀█  █▀██▄ ▄▄▄▄ ▀▀▄██  ▀████
████▄▄ ▄ ▀▄█ ▀ █ █▀▀▄ ▄▄▀██ ▄▄ ▀▀█ █ █▄▀▀ ▀█ █▀ ▀█▀ █▀▀▄▀▄█ █▀▀▀█▄██▀▀▀ █▀ ██████
█████▄█ █▀▄ ▄▄▄▄███▀▄██  █  ▀▄█▄█▀▀█▀▀▄█▄ ███▀ ▄▀  ▄▄█▄▀ ▄█▄█▄▀ ▀ ▄█▄ ▀▀   ▀▀████
█████   ▄▀▄█████▀ ▄▄ ▀ ▀ ███   ▄██▀  █▄█▄▀▀▀ █▀█ █▀▀█ ▀█▀▀█▀█▀▀█▀█ ▄▄▀█▄██ ▄▀████
████ █▄▄▀█▄█  ▀▄▀█▀█▀█  █ ▀ █ ▄ ██ ▀▀█▄▄  ▀█ ▀██▀ ▀  ▀█▄ █▄▄█  ▀▀▀█ █ ██  █▀█████
████▄ ▄▀█▄▄▄█ ▀ ▀ ▀  ▄▄ ██▄▄▀ ▄▀█▀█ █▀ █▄█▄█▀  ▄██▀▀█ ▀▄▀ ▀▄█▀▀█▀▀ ▄█▄▄ ▄██▄▀████
█████▀▄ █▀▄ ▄▀▄██  ▀▀▀▀ █▀▀ ██ ▄▄▄▀▄▀  ▄▄█▀▄▀ ▀█▀ █▀▀ ███ ██ █▀ ▄▄▀█ ▄▄▀▄█▄█▀████
████▄▄ ▄ ▄▄▄ █  ██▀ ▄▄█▄ ▀▀▀ ▄▄▄ ██▄ ▀██▄ ▀███▀▄ ▄▄▄ ▀  ██   ▄ ▄▀ █  ▄▄▄ ▀ ▀█████
████▀██▀ █▄█ ▄ ▀  █▄▄██  ▀   █▄█  ▀▄▄█    █▀▄▀█▄ █▄█ ▀▀ ▄▀▀ ▀█▀ ▄  ▀ █▄█ ▄▀█▀████
████ ▀▀  ▄▄  ▄▀██▀▄▀▀▄▄ ▄▀█▄▄  ▄▄█▀ ▄█ █ █▀▄▀▀      ▄█▄▄ ▀█▀█▄█▀ ▀▄    ▄  ▄▄▄████
████▄▀▀ ▀▄▄▀ ▀██ █▄█▄ ██▀▄▄▄▀ ▀  ▀█ ▀█▀█▄▄ █▀███▄█▀ ▄▄█▄▄▄▄ █▀▀▀▀ █▄███▀██▄▄█████
████▄█▀▀▀█▄█   ▀ ▀▀▀██▄▄██▄▀▄▄█ ██  ▄█ █  ▀█▀▄█ ▄▀▄█▄▀▀▀▀ ▀  ▀  ▄ █▀  ▄██▀ █▀████
████▄▀▀█▄▀▄█ ▄█▄▀▀█▀▀ █▄▄█▄▄ ▀▀▄ ▀▄▀▄█▄██ ▀▄▀▀ ▄ █▀▀ ▀█▀ ▀▄▄▀▀▀████▄▀██▄▀█▄█▀████
█████ █▄▄ ▄ █▄█ █ ▄▄▀█▀ █▄▀▄ ▄▄▀█▄  ▄█▀█  ████▀  ▄██ ▄█▀██▀▀██▀ █▄ ▀██▄█▀▀▄▀▀████
████ ▄▀█▀▀▄█▀█▄▄▀▄▀█▀▄ ▀▄▀   ▀   █▀█▄ ██▀▀█▀▄▄██ █▄▄▀▄█▀▀ ███ ▀▄█▄ █▀▀▀▄▄  ██████
████▄██▄▄▄▄ █  █ ▄▄▀▄▀▄█ ▀▄█▀▄ █▀█▄▀▄█▄███▀▄▄ ▀  ▄██▀▀█▀██▄ █▄▀█ ▀▄ ▄██▄▄ █  ████
████▀▀▀█▄ ▄█ ▄█▀▀▄▀█▄▄▀▄▄▀ █ ▀▄ █▄▄▄▄▀▄▀█▄  ▄▀ ██ ▄▄██ █▄ ███▀ ▄▄     ▄▄ ▄  ▀████
████ ▀ ▀ ▄▄▄ ▀▀▄█ ▄▀ ▄▄▄▀▀▀█ ▄▄▄ █▀▀▄█▄█▄ ▀▀██▀▀ ▄▄▄  ▄▄▀▄█▄▄█▄ █▄   ▄▄▄ █ ██████
████  ▀▄ █▄█ ▄██▄▄ ▀  ▀   ▄▄ █▄█  ▀ ▀▀█▀▄ ▄█▀▀ ▀ █▄█ █▄▀ ▄█▄▀▄ ▄▀▀▄█ █▄█  ▄▀█████
████▀▄▄  ▄▄▄▄▀▀█▄▄▀▄▄█   ███▄ ▄  █▀ ██▄█▄▀▀▀██▀█    ▄▄█▀█▀▀ ▀▄█▀▄▄ █▄  ▄ █ ▄█████
████▄▄█   ▄ ▄█ █▀▄█▀▄█  █ ▀▀▄▀  ▀█▀ ██▀▀ █  ▄█▀█▄  ▀█▀▄█▄▀████ ▀█▀▄▄██▄▀▄▄▄▄█████
█████▀ █▄▀▄ ▀▄ ▄  ██ ▄▄███▄█▀▄   ▀█▀▄██▄▀█ ▀▀█▄▄▀▀▀  ▀▀▀▄ █▄█▀█ ▄▀ ▀▀█ ▀ █▀ ▀████
█████ ▀ ██▄█ █▄▄▀█▀▀█▀█▀▄▀▀ ▄▀█▄▄ ▀▄█▄ ▄██ █▄  ▀▄ ███▀█▀▀▀██▄▀ ▄██▀ ▀▀▀█  ▀ █████
████▀ █▄▀ ▄ ▄█ █ █ ▄   ▀▄▄▀█  ▀▀    ▄█▄█▄ ▀█▀█▀▄ ██▀▀▀ █▀█▄ ▄ ███▀▄█▄█▄ ▀ █▀ ████
████▀▀▄▄█▄▄▄ █ ▄ ▀▄▀▄▄▀ ▀▀ ▄█▄▄▀▀ ▄█▄    ▄█ █▀▄▄▄▄█▄ ▄▀▄▄ ▄▄█ █▀▄ █▄ ▄▄█ █   ████
████   ▀▄ ▄▄█▄▄█ █▀▀█▀  ▄ ▄▄▄▄▀█     ███▀█▄▄▀   █▀ ██ ▀ ▀█▄▀▄  ▀ █ ▄▀▄ ▄▀  ▄ ████
████▄▄█ ▀▄▄ ▄  █▄▄██████▀█ ▀█▄▀  ▄█ █▀ ▀  ████▄▄█ █ █▄▄█ ▄▄ ██ ██▀▄▄ █▀█▀▀▄▀ ████
████▄███▄█▄█▀▄▀ █▄▀▀ █ ████▄ ▄▄▄ ██ ▄██▀   █▀██▄ ▄▄▄ ▀▀█▄▀▀██▀▀▄ ▄█▄ ▄▄▄ ▀▀▄ ████
████ ▄▄▄▄▄ █▀▄█▀▄█  ▀ ▄▄▄██  █▄█ ▀▄▀▄█ █ ▀▀▄▀█ ▀ █▄█ ▀█▀▄ ████ ██▄▄█ █▄█ ▄▀  ████
████ █   █ █▄▀▀▀  ██▀█▀ ▄▄▀▄  ▄▄ ▄  ▄▄ █▄ ▄█▀▀▀▄ ▄ ▄▄▄██▄█▀ ▄▀ ▄ █▀▄    ▄▀██▀████
████ █▄▄▄█ █▀██▀▀██ ▀█ ▀█▀ ▀ █▄ ██▀█▄ ▀▄▄▀▄▄▀ █ ▀ ▄ ▄██▄▄ ██▄▄▀█▄▄▀ ▀▀▀▄▀██ █████
████▄▄▄▄▄▄▄█▄▄▄▄████▄▄▄█▄▄█▄████▄█▄█▄▄██▄██▄▄▄▄▄▄█▄█▄▄▄███████▄█▄▄▄▄███▄▄▄▄▄▄████
█████████████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████████████

Installez l'application officielle WireGuard pour Android ou iPhone.

Lancez l'application et sélectionnez Créer à partir d'un code QR.

Capture d'écran

Vérification

Vous aurez besoin d'un terminal pour vérifier la connexion, une fois que la tunnellisation aura commencé. [Terminal Emulator] (https://f-droid.org/en/packages/com.termoneplus/) peut être un bon choix.

Capture d'écran