WireGuard est une technologie VPN (Virtual Private Network) moderne avec une cryptographie de pointe. Comparé à d'autres solutions similaires, telles que IPsec et OpenVPN, WireGuard est plus rapide, plus facile à configurer et plus performant. Il s'agit d'une plateforme multiplateforme et peut fonctionner presque n'importe où, y compris Linux, Windows, Android et macOS. Wireguard est un VPN peer-to-peer; il n'utilise pas le modèle client-serveur. Selon sa configuration, un pair peut agir comme un serveur ou un client traditionnel.
WireGuard fonctionne en créant une interface réseau sur chaque appareil pair qui agit comme un tunnel. Les pairs s'authentifient en échangeant et en validant des clés publiques, imitant le modèle SSH. Les clés publiques sont mappées avec une liste d'adresses IP autorisées dans le tunnel. Le trafic VPN est encapsulé dans UDP.
Dans ce tutoriel, nous allons configurer WireGuard sur une machine Ubuntu 18.04 qui agira comme un serveur VPN. Nous vous montrerons également comment configurer WireGuard en tant que client. Le trafic du client sera acheminé via le serveur Ubuntu 18.04.
Cette configuration peut être utilisée comme protection contre les attaques Man in the Middle, surfer sur le Web de manière anonyme, contourner le contenu géo-restreint ou permettre à vos collègues de se connecter en toute sécurité au réseau de l'entreprise lorsqu'ils travaillent à distance.
Prérequis #
Vous aurez besoin d'un serveur Ubuntu 18.04 auquel vous pouvez accéder en tant que root ou compte avec les privilèges sudo.
Configuration du serveur WireGuard #
Dans cette section, nous allons installer WireGuard sur la machine Ubuntu et le configurer pour qu'il agisse en tant que serveur. Nous configurerons également le système pour y acheminer le trafic des clients.
Installation de WireGuard sur Ubuntu 18.04 #
WireGuard est inclus dans les référentiels Ubuntu par défaut. Pour l'installer, exécutez les commandes suivantes :
sudo apt update
sudo apt install wireguard
WireGuard s'exécute en tant que module de noyau, qui est compilé en tant que module DKMS. En cas de succès, vous verrez le résultat suivant :
wireguard:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/4.15.0-88-generic/updates/dkms/
depmod...
DKMS: install completed.
Lorsque vous mettez à jour le noyau, le module WireGuard sera compilé avec le nouveau noyau.
Configuration de WireGuard #
WireGuard est livré avec deux outils de ligne de commande nommés wg
et wg-quick
qui vous permettent de configurer et de gérer les interfaces WireGuard.
Exécutez la commande suivante pour générer les clés publique et privée :
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
Les fichiers seront générés dans le /etc/wireguard
annuaire. Vous pouvez afficher les fichiers avec cat
ou less
. La clé privée ne doit jamais être partagée avec qui que ce soit.
Maintenant que les clés sont générées, nous devons configurer le périphérique de tunnel qui acheminera le trafic VPN.
L'appareil peut être configuré soit à partir de la ligne de commande en utilisant le ip
et wg
ou en créant le fichier de configuration avec un éditeur de texte.
Créez un nouveau fichier nommé wg0.conf
et ajoutez le contenu suivant :
sudo nano /etc/wireguard/wg0.conf
/etc/wireguard/wg0.conf[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
L'interface peut porter n'importe quel nom, mais il est recommandé d'utiliser quelque chose comme wg0
ou wgvpn0
. Les paramètres de la section interface ont la signification suivante :
-
Adresse - une liste d'adresses IP v4 ou v6 séparées par des virgules pour le
wg0
interface. Utilisez des adresses IP d'une plage réservée aux réseaux privés (10.0.0.0/8, 172.16.0.0/12 ou 192.168.0.0/16). -
ListenPort - le port sur lequel WireGuard acceptera les connexions entrantes.
-
PrivateKey - une clé privée générée par le
wg genkey
commande. (Pour voir le contenu du fichier, lancez :sudo cat /etc/wireguard/privatekey
) -
SaveConfig - lorsqu'il est défini sur true, l'état actuel de l'interface est enregistré dans le fichier de configuration lors de l'arrêt.
-
PostUp - commande ou script qui est exécuté avant d'afficher l'interface. Dans cet exemple, nous utilisons iptables pour activer le masquage. Cela permettra au trafic de quitter le serveur, donnant aux clients VPN un accès à Internet.
Assurez-vous de remplacer
ens3
après-A POSTROUTING
pour correspondre au nom de votre interface réseau publique. Vous pouvez facilement trouver l'interface en exécutant la commande suivante :ip -o -4 route show to default | awk '{print $5}'
-
PostDown - commande ou script qui est exécuté avant d'arrêter l'interface. Les règles iptables seront supprimées une fois l'interface arrêtée.
Le wg0.conf
et privatekey
les fichiers ne doivent pas être lisibles par les utilisateurs normaux. Utilisez chmod
pour définir les autorisations sur 600
:
sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}
Une fois fait, apportez le wg0
interface en utilisant les attributs spécifiés dans le fichier de configuration :
sudo wg-quick up wg0
La commande produira une sortie semblable à la suivante :
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
Exécutez wg show wg0
pour vérifier l'état et la configuration de l'interface :
sudo wg show wg0
interface: wg0
public key: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
private key: (hidden)
listening port: 51820
Vous pouvez également exécuter ip a show wg0
pour vérifier l'état de l'interface :
ip a show wg0
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.0.0.1/24 scope global wg0
valid_lft forever preferred_lft forever
Pour amener l'interface WireGuard au démarrage, exécutez la commande suivante :
sudo systemctl enable wg-quick@wg0
Configuration de la mise en réseau du serveur et du pare-feu #
Pour que NAT fonctionne, nous devons activer le transfert IP. Ouvrez le /etc/sysctl.conf
fichier et ajoutez ou décommentez la ligne suivante :
sudo nano /etc/sysctl.conf
/etc/sysctl.confnet.ipv4.ip_forward=1
Enregistrez le fichier et appliquez la modification :
sudo sysctl -p
net.ipv4.ip_forward = 1
Si vous utilisez UFW pour gérer votre pare-feu, vous devez ouvrir le trafic UDP sur le port 51820
:
sudo ufw allow 51820/udp
C'est ça. Le pair Ubuntu qui agira en tant que serveur a été configuré.
Configuration des clients Linux et macOS #
Les instructions d'installation pour toutes les plates-formes prises en charge sont disponibles sur https://wireguard.com/install/. Sur les systèmes Linux, vous pouvez installer le package à l'aide du gestionnaire de packages de distribution et sur macOS avec brew
. Une fois que vous avez installé WireGuard, suivez les étapes ci-dessous pour configurer le périphérique client.
Le processus de configuration d'un client Linux et macOS est à peu près le même que pour le serveur. Commencez par générer les clés publiques et privées :
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
Créez le fichier wg0.conf
et ajoutez le contenu suivant :
sudo nano /etc/wireguard/wg0.conf
/etc/wireguard/wg0.conf[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0
Les paramètres de la section interface ont la même signification que lors de la configuration du serveur :
- Adresse :une liste d'adresses IP v4 ou v6 séparées par des virgules pour le
wg0
interface. - PrivateKey - Pour voir le contenu du fichier sur la machine cliente, exécutez :
sudo cat /etc/wireguard/privatekey
La section pair contient les champs suivants :
- PublicKey - une clé publique du pair auquel vous souhaitez vous connecter. (Le contenu du serveur
/etc/wireguard/publickey
fichier). - Endpoint :une adresse IP ou un nom d'hôte du pair auquel vous souhaitez vous connecter suivi de deux-points, puis d'un numéro de port sur lequel le pair distant écoute.
- AllowedIPs - une liste séparée par des virgules d'adresses IP v4 ou v6 à partir desquelles le trafic entrant pour le pair est autorisé et vers lesquelles le trafic sortant pour ce pair est dirigé. Nous utilisons 0.0.0.0/0 car nous acheminons le trafic et souhaitons que l'homologue du serveur envoie des paquets avec n'importe quelle adresse IP source.
Si vous devez configurer des clients supplémentaires, répétez simplement les mêmes étapes en utilisant une adresse IP privée différente.
Configuration des clients Windows #
Téléchargez et installez le package Windows msi à partir du site Web de WireGuard.
Une fois installé, ouvrez l'application WireGuard et cliquez sur "Ajouter un tunnel" -> "Ajouter un tunnel vide…" comme indiqué sur l'image ci-dessous :
Une paire de clés publiques est automatiquement créée et affichée à l'écran.
Saisissez un nom pour le tunnel et modifiez la configuration comme suit :
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0
Dans la section interface, ajoutez une nouvelle ligne pour définir l'adresse du tunnel client.
Dans la section pair, ajoutez les champs suivants :
- PublicKey - la clé publique du serveur Ubuntu (
/etc/wireguard/publickey
fichier). - Endpoint - l'adresse IP du serveur Ubuntu suivie de deux-points et du port WireGuard (51820).
- IP autorisées - 0.0.0.0/0
Une fois terminé, cliquez sur le bouton "Enregistrer".
Ajouter le pair client au serveur #
La dernière étape consiste à ajouter la clé publique et l'adresse IP du client au serveur :
sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2
Assurez-vous de changer le CLIENT_PUBLIC_KEY
avec la clé publique que vous avez générée sur la machine cliente (sudo cat /etc/wireguard/publickey
) et ajustez l'adresse IP du client si elle est différente. Les utilisateurs Windows peuvent copier la clé publique depuis l'application WireGuard.
Une fois cela fait, retournez sur la machine cliente et affichez l'interface de tunnellisation.
Clients Linux et macOS #
Sur les clients Linux, exécutez la commande suivante pour afficher l'interface :
sudo wg-quick up wg0
Vous devez maintenant être connecté au serveur Ubuntu et le trafic de votre machine cliente doit y être acheminé. Vous pouvez vérifier la connexion avec :
sudo wg
interface: wg0
public key: sZThYo/0oECwzUsIKTa6LYXLhk+Jb/nqK4kCCP2pyFg=
private key: (hidden)
listening port: 48052
fwmark: 0xca6c
peer: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
endpoint: XXX.XXX.XXX.XXX:51820
allowed ips: 0.0.0.0/0
latest handshake: 1 minute, 22 seconds ago
transfer: 58.43 KiB received, 70.82 KiB sent
Vous pouvez également ouvrir votre navigateur, taper « quelle est mon adresse IP », et vous devriez voir l'adresse IP de votre serveur Ubuntu.
Pour arrêter le tunneling, abaissez le wg0
interface :
sudo wg-quick down wg0
Numéro de client Windows
Si vous avez installé WireGuard sous Windows, cliquez sur le bouton "Activer". Une fois les pairs connectés, le statut du tunnel passera à Actif :