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
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
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 »
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.
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 :
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 :
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; };
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 ».
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.
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.
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.
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.
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
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.
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 :
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 ».