Installez le VPN « WireGuard » sur votre serveur sous Ubuntu

Ce tutoriel va vous montrer comment installer sur votre serveur / VPS votre propre VPN WireGuard afin de sécuriser vos connections.

WireGuard est un logiciel qui permet de créer des tunnels VPN rapides, modernes et sécurisés.

Ce tutoriel est une traduction et une adaptation de celui publié sur le génialissime site internet « LinuxBabe« .


Pourquoi utiliser un VPN sur un serveur / VPS ?

Il y a plusieurs importantes raisons pour utiliser un VPN (Virtual Private Network) sur un serveur ou VPS (Virtual Private Server):

  • 1. Sécurité: Un VPN permet de chiffrer les données transférées entre le serveur et l’utilisateur, ce qui empêche les tiers malveillants d’intercepter et de lire ces informations. Cela permet de protéger votre vie privée que ce soit contre des Fournisseur d’Accès à Internet qui peuvent techniquement fouiller dans votre trafic et vos intérêts ou contre certaines méthodes de piratages ou espionnage. Gage de sérieux, une version modifiée de WireGuard est utilisée par NordVPN
  • 2. Confidentialité: En utilisant un VPN, l’adresse IP réelle du serveur est masquée, ce qui permet de protéger son emplacement et de préserver l’anonymat (un peu) de l’utilisateur.
  • 3. Accès à distance: Un VPN permet aux utilisateurs d’accéder au serveur depuis n’importe où dans le monde, ce qui est particulièrement utile pour les entreprises ayant des employés travaillant à distance ou des bureaux dans différents pays.
  • 4. Contournement de la censure: Dans certains pays, l’accès à certaines ressources en ligne est restreint ou censuré. En utilisant un VPN, les utilisateurs peuvent contourner ces restrictions et accéder aux ressources qu’ils souhaitent.
  • 5. Protection contre les attaques DDoS: Les serveurs sont souvent la cible d’attaques DDoS (Distributed Denial of Service). En utilisant un VPN, les utilisateurs peuvent protéger leur serveur contre ces attaques en masquant son adresse IP et en dispersant le trafic entrant.
  • 6. Conformité: Dans certains secteurs réglementés, l’utilisation d’un VPN est obligatoire pour se conformer aux exigences de confidentialité et de sécurité des données.
  • 7. Amélioration des performances: Un VPN peut améliorer les performances du serveur en réduisant la latence et en augmentant la vitesse de transfert des données, ce qui est particulièrement utile pour les applications en temps réel telles que le streaming vidéo ou les jeux en ligne.

Avantages de WireGuard par rapport aux autres VPN :
  • Il est basé sur le noyau, d’où des performances améliorées
  • Établit des connexions en moins de 100 ms
  • Faible encombrement: peut être exécuté dans pratiquement n’importe quel appareil, même embarqué
  • Facile à configurer et à déployer en tant que SSH
  • Réduit la surface d’attaque puisqu’il y a moins de complexité
  • Utilise des normes cryptographiques modernes et améliorées
  • Prise en charge de l’itinérance IP: vous pouvez changer de réseau wifi ou vous déconnecter du wifi sans perdre la connexion au tunnel VPN
  • Facile à utiliser : Il suffit de spécifier sa propre adresse IP publique, l’IP publique de son homologue, les sous-réseaux que l’on souhaite mettre à disposition de chaque côté, et une clé pré-partagée. Après cela, le VPN est compatible avec tous les fournisseurs qui existent.

Caractéristiques du VPN WireGuard :

– Léger et très rapide, il surpasseun autre VPN bein connu : OpenVPN.
– Multiplateforme. WireGuard peut fonctionner sur Linux, BSD, macOS, Windows, Android, iOS et OpenWRT.
– L’authentification de l’utilisateur se fait par l’échange de clés publiques, similaires aux clés SSH.
– Il attribue des adresses IP de tunnel statiques aux clients VPN. Certains ne l’apprécient pas, mais cela peut être très utile dans certains cas.
– Les appareils mobiles peuvent passer du Wi-Fi au réseau mobile sans interruption de la connectivité.
– Il vise à remplacer OpenVPN et IPSec dans la plupart des cas d’utilisation.

Ce tutoriel est rédigé selon que le serveur VPN et le client VPN fonctionnent tous deux sous Ubuntu. Cependant le client VPN peut évidemment être installé sous Mac, Windows…etc.



Etape 1 : Installer WireGuard sur le serveur et le bureau Ubuntu

Connectez-vous à votre serveur Ubuntu, puis exécutez les commandes suivantes pour installer WireGuard.

Ubuntu 24.04/22.04/20.04 est livré avec un noyau Linux qui possède un module WireGuard intégré, il suffit donc d’exécuter les commandes suivantes.

sudo apt update && sudo apt install wireguard wireguard-tools

Installez WireGuard sur l’ordinateur « client » :

Utilisez ensuite les mêmes commandes pour installer WireGuard sur votre ordinateur Ubuntu local (le client VPN). Notez que vous devez également installer le paquet openresolv sur le client pour configurer le serveur DNS.

sudo apt install openresolv

Si votre ordinateur est sous windows, téléchargez le logiciel suivant : https://download.wireguard.com/windows-client/wireguard-installer.exe

Si vous avez un mac, téléchargez le logiciel suivant : https://itunes.apple.com/us/app/wireguard/id1451685025?ls=1&mt=12

Si votre smartphone est sous android, téléchargez le logiciel suivant : https://play.google.com/store/apps/details?id=com.wireguard.android

Enfin, si vous avez un iphone, téléchargez le logiciel suivant : https://itunes.apple.com/us/app/wireguard/id1441195209?ls=1&mt=8


Étape 2 : Générer une paire de clés publique/privée

Coté Serveur :

Exécutez la commande suivante sur le serveur Ubuntu pour créer une paire de clés publique/privée, qui sera enregistrée dans le répertoire /etc/wireguard/.

wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key
https://www.linuxbabe.com/ubuntu/wireguard-vpn-server-ubuntu

Coté Client :

Exécutez la commande suivante pour créer une paire de clés publiques/privées sur l’ordinateur Ubuntu local (le client VPN).

wg genkey | sudo tee /etc/wireguard/client_private.key | wg pubkey | sudo tee /etc/wireguard/client_public.key

Etape 3 : Créer le fichier de configuration de WireGuard

Coté Serveur :

Utilisez un éditeur de texte en ligne de commande comme Nano pour créer un fichier de configuration WireGuard sur le serveur Ubuntu. wg0 sera le nom de l’interface réseau.

sudo nano /etc/wireguard/wg0.conf

Copiez le texte suivant et collez-le dans votre fichier de configuration. Vous devez utiliser votre propre clé privée pour le serveur et votre clé publique pour le client.

[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
PrivateKey = cD+ZjXiVIX+0iSX1PNijl4a+88lCbDgw7kO78oXXLEc=
[Peer]
PublicKey = AYQJf6HbkQ0X0Xyt+cTMTuJe3RFwbuCMF46LKgTwzz4=
AllowedIPs = 10.10.10.2/32
https://www.linuxbabe.com/ubuntu/wireguard-vpn-server-ubuntu

Explications :
– Adress : Indique l’adresse IP privée du serveur VPN. On utilise la plage de réseau « 10.10.10.0/24 », pour éviter tout conflit avec la plage de le réseau domestique. (La plupart des routeurs domestiques utilisent 192.168.0.0/24 ou 192.168.1.0/24). 10.10.10.1 est l’adresse IP privée du serveur VPN.
– PrivateKey : La clé privée du serveur VPN, qui peut être trouvée dans le fichier /etc/wireguard/server_private.key sur le serveur.
– ListenPort : Le serveur VPN WireGuard écoutera sur le port UDP 51820, qui est le port par défaut.
– PublicKey : La clé publique du client VPN, qui peut être trouvée dans le fichier /etc/wireguard/client_public.key sur l’ordinateur client.
– AllowedIPs : Adresses IP que le client VPN est autorisé à utiliser. Dans cet exemple, le client ne peut utiliser que l’adresse IP 10.10.10.2 à l’intérieur du tunnel VPN.

Enregistrez et fermez le fichier. (Pour enregistrer un fichier dans l’éditeur de texte Nano, appuyez sur Ctrl+O, puis sur Enter pour confirmer. Appuyez sur Ctrl+X pour quitter).

Modifiez le mode d’autorisation des fichiers de sorte que seul l’utilisateur root puisse lire les fichiers.

sudo chmod 600 /etc/wireguard/ -R

Coté Client :

Utilisez un éditeur de texte en ligne de commande comme Nano pour créer un fichier de configuration WireGuard sur votre ordinateur Ubuntu local. wg-client0 sera le nom de l’interface réseau.

sudo nano /etc/wireguard/wg-client0.conf

Copiez le texte suivant et collez-le dans votre fichier de configuration. Vous devez utiliser votre propre clé privée pour le client et votre clé publique pour le serveur.

[Interface]
Address = 10.10.10.2/24
DNS = 10.10.10.1
PrivateKey = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=
[Peer]
PublicKey = RaoAdsIEIwgV9DHNSubxWVG+nZ1GP/c3OU6A/efBJ0I=
AllowedIPs = 0.0.0.0/0
Endpoint = 12.34.56.78:51820
PersistentKeepalive = 25

Explications :
– Adress : Indique l’adresse IP privée du client VPN.
– DNS : spécifiez 10.10.10.1 (serveur VPN) comme serveur DNS. Il sera configuré via la commande resolvconf. Vous pouvez également spécifier plusieurs serveurs DNS pour la redondance comme ceci : DNS = 10.10.10.1 8.8.8.8
– PrivateKey : La clé privée du client, qui se trouve dans le fichier /etc/wireguard/client_private.key sur l’ordinateur du client.
– PublicKey : La clé publique du serveur, qui se trouve dans le fichier /etc/wireguard/server_public.key sur le serveur.
– AllowedIPs : 0.0.0.0/0 représente l’ensemble de l’Internet, ce qui signifie que tout le trafic vers l’Internet doit être acheminé via le VPN.
– Endpoint : L’adresse IP publique et le numéro de port du serveur VPN. Remplacez 12.34.56.78 par l’adresse IP publique réelle de votre serveur.
– PersistentKeepalive : Envoyer un paquet vide authentifié à l’homologue toutes les 25 secondes pour maintenir la connexion en vie. Si PersistentKeepalive n’est pas activé, le serveur VPN peut ne pas être en mesure d’envoyer un ping au client VPN.

Enregistrez et fermez le fichier.

Modifiez le mode de fichier afin que seul l’utilisateur root puisse lire les fichiers.

sudo chmod 600 /etc/wireguard/ -R

Etape 4 : Activer le transfert d’IP sur le serveur

Afin que le serveur VPN puisse acheminer les paquets entre les clients VPN et l’Internet, nous devons activer la redirection IP. Editez le fichier sysctl.conf.

sudo nano /etc/sysctl.conf

Ajoutez la ligne suivante à la fin de ce fichier.

net.ipv4.ip_forward = 1

Enregistrez et fermez le fichier. Appliquez ensuite les modifications à l’aide de la commande ci-dessous.

L’option -p chargera les paramètres sysctl du fichier /etc/sysctl.conf.

Cette commande préservera nos modifications lors des redémarrages du système.

sudo sysctl -p

Étape 5 : Configurer le masquage d’adresses IP sur le serveur

Nous devons configurer le masquage d’IP dans le pare-feu du serveur, afin que le serveur devienne un routeur virtuel pour les clients VPN. On va utiliser UFW, qui est un frontal pour le pare-feu iptables. Installez UFW sur Ubuntu avec :

sudo apt install ufw

Tout d’abord, vous devez autoriser le trafic SSH.

sudo ufw allow 22/tcp

Recherchez ensuite le nom de l’interface réseau principale de votre serveur.

ip -c a

Comme vous pouvez le voir dans l’exemple ci dessus, il s’appelle « enp3s0 » sur le serveur Ubuntu. Mais il peut également s’appeler « eth0 »

https://www.linuxbabe.com/ubuntu/wireguard-vpn-server-ubuntu

Pour configurer le masquage d’IP, nous devons ajouter la commande iptables dans le fichier de configuration de l’UFW.

sudo nano /etc/ufw/before.rules

Par défaut, il y a quelques règles pour la table de filtrage. Ajoutez les lignes suivantes à la fin de ce fichier. Remplacez enp3s0 par votre propre nom d’interface réseau.

# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.10.10.0/24 -o enp3s0 -j MASQUERADE
# End each table with the 'COMMIT' line or these rules won't be processed
COMMIT

Dans l’éditeur de texte Nano, vous pouvez aller à la fin du fichier en appuyant sur Ctrl+W, puis sur Ctrl+V.

https://www.linuxbabe.com/ubuntu/wireguard-vpn-server-ubuntu

Les lignes ci-dessus ajouteront (-A) une règle à la fin de la chaîne POSTROUTING de la table nat. Elle reliera votre réseau privé virtuel à l’internet. Et cachera également votre réseau du monde extérieur. Ainsi, Internet ne peut voir que l’IP de votre serveur VPN, mais ne peut pas voir l’IP de votre client VPN, tout comme votre routeur domestique cache votre réseau privé.

Assurez-vous qu’il n’y a pas d’espace au début de chaque ligne.

Par défaut, le par feu UFW interdit le transfert de paquets. Nous pouvons autoriser le transfert pour notre réseau privé. Trouvez la chaîne ufw-before-forward dans ce fichier et ajoutez les 3 lignes suivantes, qui accepteront le transfert de paquets si l’IP source ou l’IP destination se trouve dans la plage 10.10.10.0/24.

# allow forwarding for trusted network
-A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT

Résultat :

https://www.linuxbabe.com/ubuntu/wireguard-vpn-server-ubuntu

Enregistrez et fermez le fichier. Activez ensuite l’UFW.

sudo ufw enable

Si vous avez déjà activé UFW, vous pouvez utiliser systemctl pour redémarrer UFW.

sudo systemctl restart ufw

Maintenant, si vous listez les règles dans la chaîne POSTROUTING de la table NAT en utilisant la commande suivante :

sudo iptables -t nat -L POSTROUTING

Vous pouvez consulter la règle créeée :

https://www.linuxbabe.com/ubuntu/wireguard-vpn-server-ubuntu

Le par feu UFW peut mettre un certain temps à traiter les règles du pare-feu. Si la nouvelle règle n’apparaît pas, redémarrez UFW (sudo systemctl restart ufw).


Etape 6 : Installer un résolveur DNS sur le serveur

Puisque nous spécifions le serveur VPN comme serveur DNS pour le client, nous devons exécuter un résolveur DNS sur le serveur VPN. Nous pouvons installer le serveur DNS bind9.

sudo apt install bind9

Une fois installé, BIND démarre automatiquement. Vous pouvez vérifier son état avec :

systemctl status bind9

Résultat :

● named.service - BIND Domain Name Server
     Loaded: loaded (/lib/systemd/system/named.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2020-05-17 08:11:26 UTC; 37s ago
       Docs: man:named(8)
   Main PID: 13820 (named)
      Tasks: 5 (limit: 1074)
     Memory: 14.3M
     CGroup: /system.slice/named.service
           └─13820 /usr/sbin/named -f -u bind

S’il n’est pas en cours d’exécution, démarrez-le avec :

sudo systemctl start bind9

Editez le fichier de configuration du serveur DNS BIND.

sudo nano /etc/bind/named.conf.options

Ajoutez la ligne suivante pour permettre aux clients VPN d’envoyer des requêtes DNS récursives.

allow-recursion { 127.0.0.1; 10.10.10.0/24; };
https://www.linuxbabe.com/ubuntu/wireguard-vpn-server-ubuntu

Enregistrez et fermez le fichier. Editez ensuite les fichiers /etc/default/named.

sudo nano /etc/default/named

Ajoutez -4 aux OPTIONS pour vous assurer que BIND peut interroger les serveurs DNS racine.

OPTIONS="-u bind -4"

Sauvegardez et fermez le fichier.

Par défaut, BIND active DNSSEC, qui garantit que les réponses DNS sont correctes et ne sont pas falsifiées.

Cependant, il se peut que cela ne fonctionne pas d’emblée en raison du renouvellement de l’ancre de confiance et d’autres raisons.

Pour que cela fonctionne correctement, nous pouvons reconstruire la base de données des clés gérées à l’aide des commandes suivantes.

sudo rndc managed-keys destroy
sudo rndc reconfig

Redémarrez BIND9 pour que les modifications soient prises en compte.

sudo systemctl restart bind9

Vous devez ensuite exécuter la commande suivante pour permettre aux clients VPN de se connecter au port 53.

sudo ufw insert 1 allow in from 10.10.10.0/24

Étape 7 : Ouvrir le port WireGuard dans le pare-feu

Exécutez la commande suivante pour ouvrir le port UDP 51820 sur le serveur.

sudo ufw allow 51820/udp

Etape 8 : Démarrer WireGuard

Coté serveur :

Exécutez la commande suivante sur le serveur pour démarrer WireGuard.

sudo systemctl start wg******@wg*.service

Activez le démarrage automatique au démarrage du système.

sudo systemctl enable wg******@wg*.service

Vérifiez son état avec la commande suivante. Son statut doit être actif (quitté).

systemctl status wg******@wg*.service

Maintenant le serveur WireGuard est prêt à accepter les connexions des clients.


Coté Client :

Démarrez WireGuard.

sudo systemctl start wg******@wg********.service

Activer le démarrage automatique.

sudo systemctl enable wg******@wg********.service

Vérifiez le statut :

systemctl status wg******@wg********.service

Allez maintenant sur ce site web : https://icanhazip.com/ pour vérifier votre adresse IP publique. Si tout s’est bien passé, il devrait afficher l’adresse IP publique de votre serveur VPN au lieu de l’adresse IP publique de votre ordinateur client.

Vous pouvez également exécuter la commande suivante pour obtenir l’adresse IP publique actuelle.

curl https://icanhazip.com

Conseils de dépannage :

Wireguard ne fonctionne pas :

Vérifier si le port 51820 est ouvert

Tout d’abord, installez le scanner de port nmap sur le client VPN.

sudo apt install nmap

Et scannez le port UDP 51820 du serveur. Remplacez 12.34.56.78 par l’adresse IP publique réelle de votre serveur.

sudo nmap -sU -pU:51820 12.34.56.78

Si le serveur WireGuard est en cours d’exécution, le résultat du scan du port devrait être « ouvert » ou « open|filtered ».

https://www.linuxbabe.com/ubuntu/wireguard-vpn-server-ubuntu

Si le résultat du scan est « closed », alors le serveur WireGuard n’est pas en marche, ou vous n’avez pas ouvert le port UDP 51820 dans le pare-feu.

https://www.linuxbabe.com/ubuntu/wireguard-vpn-server-ubuntu

Vérifiez le journal du serveur WireGuard pour voir s’il y a un problème.

sudo journalctl -eu wg-quick@wg0

Résultat :

« Can’t ping »

Vous pouvez faire un ping du client VPN vers le serveur VPN (ping 10.10.10.1) pour voir si le tunnel fonctionne. Si vous voyez le message d’erreur suivant dans le ping,

ping: sendmsg: Required key not available

il se peut que le paramètre AllowedIPs soit erroné. Vérifiez que vous n’avez fait une faute de frappe.

Après avoir corrigé la faute de frappe éventuelle, redémarrez le serveur VPN et le client VPN.

Une autre raison pourrait être que vous avez oublié d’ajouter la ligne suivante dans le fichier de configuration du serveur :

ListenPort = 51820 

Erreur : L’adresse IP publique de WireGuard ne change pas

Si le tunnel VPN est établi avec succès, mais que l’adresse IP publique du client ne change pas, c’est parce que la règle de masquage ou de transfert dans votre fichier de configuration UFW ne fonctionne pas.

Si vous commettez une faute de frappe dans le fichier /etc/ufw/before.rules, cela peut empêcher votre ordinateur de naviguer sur Internet.

Il n’est pas recommandé d’utiliser « SaveConfig=true » dans la section [Interface] du fichier de configuration WireGuard.

la ligne « SaveConfig » indique à WireGuard d’enregistrer la configuration d’exécution à l’arrêt.

Ainsi, si vous ajoutez un [Peer] supplémentaire dans le fichier de configuration, puis redémarrez WireGuard, vos configurations nouvellement ajoutées seront écrasées.

Activer la journalisation du débogage dans le noyau Linux : vous pouvez activer la journalisation du débogage pour WireGuard avec la commande suivante.

sudo su -
echo module wireguard +p > /sys/kernel/debug/dynamic_debug/control

Ensuite, vous pouvez afficher les journaux de débogage avec la commande suivante :

sudo dmesg -wH | grep wireguard

ou la commande suivante :

sudo journalctl -kf | grep wireguard

Si vous voyez l’erreur suivante « Invalid handshake initiation », cela signifie que la clé publique est erronée.

Redémarrez alors le client Wireguard.

Si votre VPN ne fonctionne toujours pas, essayez de redémarrer le serveur VPN de votre serveur VPS.

sudo systemctl restart wg******@wg*.service

Arrêtez ensuite le client VPN.

sudo systemctl stop wg******@wg********.service

Et mettez à niveau les progiciels sur le client VPN.

sudo apt update && sudo apt upgrade

Ensuite, redémarrez le client VPN.

sudo shutdown -r now
sudo systemctl start wg******@wg********.service

Si votre VPN WireGuard ne peut fonctionner qu’après un redémarrage, pensez à ajouter une tâche cron pour redémarrer automatiquement le service.

sudo crontab -e

Ajoutez la ligne suivante dans ce fichier.

@daily systemctl restart wg******@wg*.service

Ajout de clients VPN supplémentaires

WireGuard est conçu pour associer une adresse IP à un client VPN. Pour ajouter plus de clients VPN (Windows, Android, iOS, etc.), vous devez créer une paire de clés privée/publique unique pour chaque client, puis ajouter la clé publique de chaque client VPN dans le fichier de configuration du serveur (/etc/wireguard/wg0. conf) comme ceci :

[Interface]
Address = 10.10.10.1/24
PrivateKey = UIFH+XXjJ0g0uAZJ6vPqsbb/o68SYVQdmYJpy/FlGFA=
ListenPort = 51820
[Peer]
PublicKey = 75VNV7HqFh+3QIT5OHZkcjWfbjx8tc6Ck62gZJT/KRA=
AllowedIPs = 10.10.10.2/32
[Peer]
PublicKey = YYh4/1Z/3rtl0i7cJorcinB7T4UOIzScifPNEIESFD8=
AllowedIPs = 10.10.10.3/32
[Peer]
PublicKey = EVstHZc6QamzPgefDGPLFEjGyedJk6SZbCJttpzcvC8=
AllowedIPs = 10.10.10.4/32

Chaque client VPN aura une adresse IP privée statique (10.10.10.2, 10.10.10.3, 10.10.10.4, etc.). Redémarrez le serveur WireGuard pour que les modifications prennent effet.

sudo systemctl restart wg******@wg*.service

Ajoutez ensuite la configuration WireGuard sur chaque client VPN comme d’habitude.


Configurer le client VPN sur iOS/Android

Si vous avez un iPhone, vous pouvez configurer le client WireGuard sur iOS de la manière suivante :  Installez l’application WireGuard depuis l’App Store.

Ensuite, ouvrez cette application et cliquez sur le bouton Ajouter un tunnel.

Vous disposez de 3 méthodes pour créer un nouveau tunnel WireGuard.
• créer à partir d’un fichier ou d’une archive
• créer à partir du code QR
• Créer à partir de zéro

…Choisissez la méthode du code QR, car c’est la plus simple.

Exécutez la commande suivante sur le serveur pour générer une clé publique/privée WireGuard pour le client iOS.

wg genkey | sudo tee /etc/wireguard/ios_private.key | wg pubkey | sudo tee /etc/wireguard/ios_public.key

Ensuite, créez un fichier de configuration WireGuard pour le client iOS.

sudo nano /etc/wireguard/ios.conf

Ajoutez les lignes suivantes.

[Interface]
Address = 10.10.10.3/24
DNS = 10.10.10.1
PrivateKey = mNiZvB+sASN/+ZiJkMyan1ZZOzCXkrjYPlbg7rZJ7Fc=
[Peer]
#VPN server
PublicKey = OMaXX7XD+wEYWfYyFcZZBN4vFSC16A1e8t80ONiJKWY=
AllowedIPs = 0.0.0.0/0
Endpoint = 12.34.56.78:51820
PersistentKeepalive = 25

Explications :
• Adresse : Indique l’adresse IP privée du client iOS.
• DNS : Indique 10.10.10.1 (le serveur VPN) comme serveur DNS. Vous pouvez également spécifier plusieurs serveurs DNS pour la redondance comme ceci : DNS = 10.10.10.1,8.8.8.8. Notez que l’application iOS ne prend pas en charge la syntaxe DNS = 10.10.10.1 8.8.8.8.
• PrivateKey : La clé privée du client iOS, qui se trouve dans le fichier /etc/wireguard/ios_private.key.
• PublicKey : La clé publique du serveur, qui se trouve dans le fichier /etc/wireguard/server_public.key sur le serveur.
• AllowedIPs : 0.0.0.0/0 représente l’ensemble d’Internet, ce qui signifie que tout le trafic vers Internet doit être acheminé via le VPN.
• Point final : l’adresse IP publique et le numéro de port du serveur VPN. Remplacez 12.34.56.78 par la véritable adresse IP publique de votre serveur.
• PersistentKeepalive : envoie un paquet vide authentifié / homologué toutes les 25 secondes pour maintenir la connexion active. Si PersistentKeepalive n’est pas activé, le serveur VPN ne pourra peut-être pas envoyer une requête ping au client VPN.

Enregistrez et fermez le fichier.

Exécutez ensuite la commande suivante sur le serveur VPN WireGuard pour générer un code QR à partir du fichier de configuration iOS.

sudo apt install qrencode
sudo cat /etc/wireguard/ios.conf | qrencode -t ansiutf8

Ensuite, scannez un code QR à partir de l’application iOS WireGuard afin que le contenu du fichier /etc/wireguard/ios.conf soit importé dans le client WireGuard iOS.

Une fois le tunnel ajouté sur le client iOS, nous devons également ajouter un [peer] dans le fichier de configuration du serveur WireGuard.

sudo nano /etc/wireguard/wg0.conf

de la manière suivante :

[Interface]
Address = 10.10.10.1/24
PrivateKey = UIFH+XXjJ0g0uAZJ6vPqsbb/o68SYVQdmYJpy/FlGFA=
ListenPort = 51820
[Peer]
PublicKey = 75VNV7HqFh+3QIT5OHZkcjWfbjx8tc6Ck62gZJT/KRA=
AllowedIPs = 10.10.10.2/32
[Peer]
# iOS client
PublicKey = YYh4/1Z/3rtl0i7cJorcinB7T4UOIzScifPNEIESFD8=
AllowedIPs = 10.10.10.3/32

Enregistrez et fermez le fichier. Redémarrez ensuite le serveur VPN WireGuard.

sudo systemctl restart wg******@wg*.service

Vous pouvez désormais établir une connexion VPN WireGuard à partir de l’application iOS.


Configurer le client Windows :

Téléchargez le programme d’installation de WireGuard pour Windows.

Une fois installé, démarrez le programme WireGuard. Vous devez cliquer avec le bouton droit sur la barre latérale gauche pour créer un nouveau tunnel vide. Il créera automatiquement une clé publique/privée pour le client Windows.

https://www.linuxbabe.com/ubuntu/wireguard-vpn-server-ubuntu

Vous devez maintenant ajouter d’autres informations. :

[Interface]
PrivateKey = mNiZvB+sASN/+ZiJkMyan1ZZOzCXkrjYPlbg7rZJ7Fc=
Address = 10.10.10.4/24
DNS = 10.10.10.1
[Peer]
# VPN server
PublicKey = OMaXX7XD+wEYWfYyFcZZBN4vFSC16A1e8t80ONiJKWY=
AllowedIPs = 0.0.0.0/0
Endpoint = 12.34.56.78:51820
PersistentKeepalive = 25

Explications :
• Adresse : Indique l’adresse IP privée du client Windows.
• DNS : Indique 10.10.10.1 (le serveur VPN) comme serveur DNS. Vous pouvez également spécifier plusieurs serveurs DNS pour la redondance comme ceci : DNS = 10.10.10.1,8.8.8.8. Notez que l’application Windows ne prend pas en charge la syntaxe DNS = 10.10.10.1 8.8.8.8.
• PrivateKey : la clé privée du client Windows, qui est automatiquement créée.
• PublicKey : La clé publique du serveur, qui se trouve dans le fichier /etc/wireguard/server_public.key sur le serveur.
• AllowedIPs : 0.0.0.0/0 représente l’ensemble d’Internet, ce qui signifie que tout le trafic vers Internet doit être acheminé via le VPN.
• Point final : l’adresse IP publique et le numéro de port du serveur VPN. Remplacez 12.34.56.78 par la véritable adresse IP publique de votre serveur.
• PersistentKeepalive : envoie un paquet vide authentifié toutes les 25 secondes pour maintenir la connexion active. Si PersistentKeepalive n’est pas activé, le serveur VPN ne pourra peut-être pas envoyer une requête ping au client VPN.


Sous Windows, vous pouvez utiliser le programme PowerShell. pour vous connecter en SSH à votre serveur Linux.

https://www.linuxbabe.com/ubuntu/wireguard-vpn-server-ubuntu

Enregistrez la configuration.

Une fois le tunnel ajouté sur le client Windows, nous devons également ajouter un [peer] dans le fichier de configuration du serveur WireGuard.

sudo nano /etc/wireguard/wg0.conf

de la manière suivante :

[Interface]
Address = 10.10.10.1/24
PrivateKey = UIFH+XXjJ0g0uAZJ6vPqsbb/o68SYVQdmYJpy/FlGFA=
ListenPort = 51820
[Peer]
PublicKey = 75VNV7HqFh+3QIT5OHZkcjWfbjx8tc6Ck62gZJT/KRA=
AllowedIPs = 10.10.10.2/32
[Peer]
# iOS client
PublicKey = YYh4/1Z/3rtl0i7cJorcinB7T4UOIzScifPNEIESFD8=
AllowedIPs = 10.10.10.3/32
[Peer]
# Windows client
PublicKey = wJpwC/gCWXZTGa5lQReKowRvymaaEUav0N1qeK74HlQ=
AllowedIPs = 10.10.10.4/32

Enregistrez et fermez le fichier. Redémarrez ensuite le serveur VPN WireGuard.

sudo systemctl restart wg******@wg*.service

Vous pouvez désormais établir une connexion VPN WireGuard sous Windows.

Redémarrage automatique lorsque la connexion VPN est interrompue

Parfois, la connexion VPN était interrompue pour diverses raisons. Vous pouvez exécuter la commande suivante pour vérifier si le client VPN peut envoyer une requête ping à l’adresse IP privée du serveur VPN (10.10.10.1).

ping -c9 10.10.10.1 > /dev/null || systemctl restart wg******@wg********.service

Le ping sera effectué 9 fois soit 9 secondes. Vous pouvez utiliser une boucle for dans le shell Bash pour exécuter la commande entière 6 fois, soit 54 secondes.

for ((i=1; i<=6; i++)) do (ping -c9 10.10.10.1 > /dev/null || systemctl restart wg******@wg********.service) done

Nous pouvons maintenant créer une tâche Cron pour automatiser cette tâche. Modifiez le fichier crontab de l’utilisateur root sur le client VPN.

sudo crontab -e

Bash n’est pas le shell par défaut dans Cron. Vous pouvez ajouter la ligne suivante au début du fichier Crontab pour en faire la ligne par défaut.

SHELL=/bin/bash

Ajoutez ensuite la ligne suivante à la fin de ce fichier.

* * * * * for ((i=1; i<=6; i++)) do (ping -c9 10.10.10.1 > /dev/null || systemctl restart wg******@wg********.service) done

Cette tâche Cron s’exécutera toutes les minutes et il y aura 6 vérifications toutes les minutes. Enregistrez et fermez le fichier.


Comment activer IPv6 dans WireGuard VPN ?

Modifiez le fichier de configuration du serveur WireGuard.

sudo nano /etc/wireguard/wg0.conf

Ajoutez une adresse IPv6 privée avec l’adresse IPv4.

[Interface]
Address = 10.10.10.1/24, fda9:4efe:7e3b:03ea::1/64
ListenPort = 51820
PrivateKey = cD+ZjXiVIX+0iSX1PNijl4a+88lCbDgw7kO78oXXLEc=
[Peer]
PublicKey = AYQJf6HbkQ0X0Xyt+cTMTuJe3RFwbuCMF46LKgTwzz4=
AllowedIPs = 10.10.10.2/32, fda9:4efe:7e3b:03ea::2/64

Enregistrez et fermez le fichier. Redémarrez le serveur WireGuard.

sudo systemctl restart wg-quick@wg0

Modifiez ensuite le fichier de configuration du client WireGuard.

sudo nano /etc/wireguard/wg-client0.conf

Ajoutez une adresse IPv6 privée avec l’adresse IPv4.

[Interface]
Address = 10.10.10.2/24, fda9:4efe:7e3b:03ea::2/64
DNS = 10.10.10.1
PrivateKey = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=
[Peer]
PublicKey = RaoAdsIEIwgV9DHNSubxWVG+nZ1GP/c3OU6A/efBJ0I=
AllowedIPs = 0.0.0.0/0, ::0/0
Endpoint = 12.34.56.78:51820
PersistentKeepalive = 25

Enregistrez et fermez le fichier. Redémarrez ensuite le client WireGuard.

sudo systemctl restart wg-quick@wg-client0

Si vous rencontrez l’erreur suivante,

RTNETLINK répond à l'autorisation refusée

Ensuite, vous devez activer IPv6 sur le client.

sudo nano /etc/sysctl.d/60-custom.conf

Ajoutez les lignes suivantes.

net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0

Enregistrez et fermez le fichier. Appliquez ensuite les modifications.

sudo sysctl -p /etc/sysctl.d/60-custom.conf

Activer le transfert IPv6 sur le serveur VPN :

Ensuite, nous devons activer le transfert IP pour IPv6 sur le serveur VPN. Modifiez le fichier sysctl.conf.

sudo nano /etc/sysctl.d/60-custom.conf

Ajoutez la ligne suivante dans ce fichier.

net.ipv6.conf.all.forwarding=1

Enregistrez et fermez le fichier. Appliquez ensuite les modifications avec la commande ci-dessous.

sudo sysctl -p /etc/sysctl.d/60-custom.conf

Configurer le masquage IPv6 sur le serveur

Ensuite, nous devons configurer le masquage IPv6 dans le pare-feu du serveur, afin que le serveur devienne un routeur virtuel pour les clients VPN.

sudo nano /etc/ufw/before6.rules

Par défaut, il existe certaines règles pour la table de filtrage. Ajoutez les lignes suivantes à la fin de ce fichier. Remplacez ens3 par votre propre nom d’interface réseau.

# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s fda9:4efe:7e3b:03ea::/64 -o ens3 -j MASQUERADE
# End each table with the 'COMMIT' line or these rules won't be processed
COMMIT

Dans l’éditeur de texte Nano, vous pouvez aller à la fin du fichier en appuyant sur Ctrl+W, puis en appuyant sur Ctrl+V.

https://www.linuxbabe.com/ubuntu/wireguard-vpn-server-ubuntu

Par défaut, UFW interdit le transfert de paquets. Nous pouvons autoriser le transfert pour notre réseau IPv6 privé.

Recherchez la chaîne ufw6-before-forward dans ce fichier et ajoutez les 3 lignes suivantes, qui accepteront le transfert de paquets si l’IP source ou l’IP de destination est dans la plage fda9:4efe:7e3b:03ea::/64.

# Allow IPv6 forwarding for VPN
-A ufw6-before-forward -s fda9:4efe:7e3b:03ea::/64 -j ACCEPT
-A ufw6-before-forward -d fda9:4efe:7e3b:03ea::/64 -j ACCEPT
https://www.linuxbabe.com/ubuntu/wireguard-vpn-server-ubuntu

Enregistrez et fermez le fichier. Redémarrez UFW pour que la modification prenne effet.

sudo systemctl restart ufw

Maintenant, si vous listez les règles dans la chaîne POSTROUTING de la table NAT en utilisant la commande suivante :

sudo ip6tables -t nat -L POSTROUTING

Vous pouvez voir la règle nouvellement crée.

https://www.linuxbabe.com/ubuntu/wireguard-vpn-server-ubuntu

Utilisation avancée :

On peut utiliser les fonctions split tunneling et kill switch VPN avec WireGuard VPN.

Notez qu’il n’est pas recommandé de les utiliser conjointement.

Cette section est destinée aux utilisateurs avancés. Si vous êtes un débutant WireGuard et que vous ne savez pas à quoi ils servent, n’appliquez pas les instructions de cette section.


Règles de routage / Policy Routing :

Par défaut, tout le trafic sur le client VPN sera acheminé via le serveur VPN. Parfois, vous souhaiterez peut-être acheminer uniquement un type spécifique de trafic, en fonction du protocole de couche transport et du port de destination. C’est ce qu’on appelle « Policy Routing ».

Le routage des politiques est configuré sur l’ordinateur client et nous devons d’abord arrêter la connexion VPN.

sudo systemctl stop wg******@wg********.service

Modifiez ensuite le fichier de configuration client.

sudo nano /etc/wireguard/wg-client0.conf

Par exemple, si vous ajoutez les 3 lignes suivantes dans la section [interface], alors WireGuard créera une table de routage nommée « 1234 » et ajoutera la règle IP dans la table de routage.

Dans cet exemple, le trafic sera acheminé via le serveur VPN uniquement lorsque TCP est utilisé comme protocole de couche de transport et que le port de destination est 25, c’est-à-dire lorsque l’ordinateur client envoie des e-mails.

Table = 1234
PostUp = ip rule add ipproto tcp dport 25 table 1234
PreDown = ip rule delete ipproto tcp dport 25 table 1234

Exemple :

https://www.linuxbabe.com/ubuntu/wireguard-vpn-server-ubuntu

Enregistrez et redémarrez le service :

sudo systemctl start wg******@wg********.service

Si vous souhaitez acheminer le trafic pour les ports TCP 80 et 443, utilisez la syntaxe suivante.

Table = 1234
PostUp = ip rule add ipproto tcp dport 80 table 1234; ip rule add ipproto tcp dport 443 table 1234
PreDown = ip rule delete ipproto tcp dport 80 table 1234; ip rule delete ipproto tcp dport 443 table 1234

N’oubliez pas que vous devez arrêter la connexion VPN WireGuard avant de modifier les règles de routage des stratégies.

Vous pouvez également spécifier une plage de ports comme ci-dessous (port TCP 26 vers port TCP 10240).

Table = 1234
PostUp = ip rule add ipproto tcp dport 26-10240 table 1234
PreDown = ip rule delete ipproto tcp dport 26-10240 table 1234

Si vous souhaitez spécifier à la fois les ports TCP et UDP, supprimez ipproto tcp.

Table = 1234
PostUp = ip rule add dport 26-10240 table 1234
PreDown = ip rule delete dport 26-10240 table 1234

Vous souhaiterez peut-être configurer le client VPN pour qu’il utilise le tunnel VPN uniquement lorsque le trafic est destiné à certaines adresses IP.

Vous pouvez le faire avec l’option suivante :

Table = 1234
PostUp = ip rule add to 10.0.0.0/24 table 1234
PreDown = ip rule delete to 10.0.0.0/24 table 1234

Split Tunneling :

Par défaut, tout le trafic sur le client VPN sera acheminé via le serveur VPN. Voici comment activer le tunneling fractionné, de sorte que seul le trafic vers la plage IP 10.10.10.0/24 soit tunnelisé via WireGuard VPN. Ceci est utile lorsque vous souhaitez créer un réseau privé pour plusieurs serveurs cloud, car les clients VPN fonctionneront sur des serveurs cloud et si vous utilisez un tunnel VPN complet, vous perdrez probablement la connexion aux serveurs cloud.

Modifiez le fichier de configuration client.

sudo nano /etc/wireguard/wg-client0.conf

Changez

AllowedIPs = 0.0.0.0/0

en :

AllowedIPs = 10.10.10.0/24

Ainsi, le trafic sera acheminé via VPN uniquement lorsque l’adresse de destination se situe dans la plage IP 10.10.10.0/24. Enregistrez et fermez le fichier. Redémarrez ensuite le client WireGuard.

sudo systemctl restart wg******@wg********.service

Vous pouvez également autoriser plusieurs plages IP. Supposons que le serveur VPN gère également le réseau 10.10.20.0/24, vous pouvez alors configurer les AllowedIPs sur le client VPN comme ceci :

AllowedIPs = 10.10.10.0/24, 10.10.20.0/24

Le client VPN peut ainsi accéder au réseau 10.10.20.0/24 via le serveur VPN, et vice versa.

Pour ajouter une seule adresse IP, utilisez la syntaxe suivante.

AllowedIPs = 10.10.10.0/24, 10.10.20.0/24, 8.8.8.8/32

Cela indique au client d’utiliser le serveur VPN lors de la communication avec 8.8.8.8.


VPN Kill Switch :

Par défaut, votre ordinateur peut accéder à Internet via la passerelle normale lorsque la connexion VPN est interrompue. Vous souhaiterez peut-être activer la fonctionnalité kill switch, qui empêche le flux de paquets non chiffrés via des interfaces non WireGuard.

Arrêtez le processus client WireGuard.

sudo systemctl stop wg******@wg********.service

Modifiez le fichier de configuration client.

sudo nano /etc/wireguard/wg-client0.conf

Ajoutez les deux lignes suivantes dans la section [interface].

PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT

de la manière suivante :

[Interface]
Address = 10.10.10.2/24
DNS = 10.10.10.1
PrivateKey = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=
PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
[Peer]
PublicKey = RaoAdsIEIwgV9DHNSubxWVG+nZ1GP/c3OU6A/efBJ0I=
AllowedIPs = 0.0.0.0/0
Endpoint = 12.34.56.78:51820
PersistentKeepalive = 25

Enregistrez et fermez le fichier. Démarrez ensuite le client WireGuard.

sudo systemctl start wg******@wg********.service

Avoir plusieurs adresses IP dans le VPN WireGuard :

WireGuard peut avoir / utiliser plusieurs adresses IP.

Par exemple, vous pouvez avoir deux adresses IP sur le client VPN.

[Interface]
Address = 10.10.10.2/24
Address = 10.10.10.3/24
....

Dans ce cas, vous devez autoriser plusieurs adresses IP sur le serveur VPN pour ce client particulier, sinon le client VPN pourrait ne pas pouvoir se connecter au serveur VPN.

[Peer]
...
AllowedIPs = 10.10.10.2/32, 10.10.10.3/32

Vous pouvez utiliser la commande suivante pour vérifier que les adresses IP appartiennent à une interface réseau.

ip -c a
Note :

• La commande ifconfig peut afficher uniquement l’adresse IP d’une interface réseau.
• Si vous configurez une autre interface WireGuard dans un nouveau fichier .conf, elle doit alors se lier à un port autre que 51820, sinon vous verrez l’erreur « Adresse déjà utilisée ».