Ce tutoriel va vous montrer comment configurer votre propre serveur VPN WireGuard sur Debian 11 bullseye et Debian 10 Buster. WireGuard est spécialement conçu pour le noyau Linux. Il s'exécute à l'intérieur du noyau Linux et vous permet de créer un tunnel VPN rapide, moderne et sécurisé.
Caractéristiques du VPN WireGuard
- Léger et super rapide, faisant sauter OpenVPN hors de l'eau.
- Multiplateforme. WireGuard peut fonctionner sous Linux, BSD, macOS, Windows, Android, iOS et OpenWRT.
- L'authentification des utilisateurs se fait en échangeant des clés publiques, similaires aux clés SSH.
- Il attribue des adresses IP de tunnel statiques aux clients VPN. Certaines personnes peuvent ne pas l'aimer, mais cela peut être utile dans certains cas.
- Les appareils mobiles peuvent basculer entre le Wi-Fi et le réseau mobile de manière transparente sans perdre de connectivité.
- Il vise à remplacer OpenVPN et IPSec dans la plupart des cas d'utilisation.
Exigences
Pour suivre ce tutoriel, vous aurez besoin d'un VPS (Virtual Private Server) pouvant accéder librement aux sites bloqués (Hors de votre pays ou système de filtrage Internet). Je recommande Kamatera VPS, qui comprend :
- 30 jours d'essai gratuit.
- À partir de 4 $/mois (1 Go de RAM)
- VPS basé sur KVM hautes performances
- 9 centres de données dans le monde, dont les États-Unis, le Canada, le Royaume-Uni, l'Allemagne, les Pays-Bas, Hong Kong et Israël
Suivez le tutoriel lié ci-dessous pour créer votre serveur Linux VPS chez Kamatera.
- Comment créer un serveur VPS Linux sur Kamatera
Une fois que vous avez un VPS exécutant Debian, suivez les instructions ci-dessous.
Ce tutoriel suppose que le serveur VPN et le client VPN exécutent tous les deux Debian système d'exploitation.
Étape 1 :Installez WireGuard sur le serveur et le bureau Debian
Connectez-vous à votre serveur Debian. WireGuard est inclus dans Debian 11 (Bullseye) référentiel, vous pouvez donc exécuter les commandes suivantes pour l'installer.
sudo apt updatesudo apt install wireguard wireguard-tools linux-headers-$(uname -r)
Debian 10 les utilisateurs doivent ajouter le référentiel backport avec la commande suivante.
echo "deb http://deb.debian.org/debian buster-backports main" | sudo tee /etc/apt/sources.list.d/buster-backports.list
Installez ensuite WireGuard.
sudo apt updatesudo apt -t buster-backports install wireguard wireguard-tools wireguard-dkms linux-headers-$(uname -r)
Utilisez les mêmes commandes pour installer WireGuard sur votre ordinateur Debian local (le client VPN). Notez que vous devez également installer le openresolv
package sur le client pour configurer le serveur DNS.
sudo apt install openresolv
Étape 2 :Générer une paire de clés publique/privée
Serveur
Exécutez la commande suivante sur le serveur Debian pour créer une paire de clés publique/privée, qui sera enregistrée sous /etc/wireguard/
répertoire.
wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key
Client
Exécutez la commande suivante pour créer une paire de clés publique/privée sur l'ordinateur Debian local (le client VPN).
wg genkey | sudo tee /etc/wireguard/client_private.key | wg pubkey | sudo tee /etc/wireguard/client_public.key
Étape 3 :Créer un fichier de configuration WireGuard
Serveur
Utilisez un éditeur de texte en ligne de commande comme Nano pour créer un fichier de configuration WireGuard sur le serveur Debian. 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 de serveur et votre clé publique client.
[Interface]Adresse =10.10.10.1/24ListenPort =51820PrivateKey =cD+ZjXiVIX+0iSX1PNijl4a+88lCbDgw7kO78oXXLEc=[Peer]PublicKey =AYQJf6HbkQ0X0Xyt+cTMTuJe3RFwbuCMF46LKgTwzz4=10.pre>
Où :
- Adresse :Spécifiez l'adresse IP privée du serveur VPN. Ici, j'utilise la plage de réseau 10.10.10.0/24, donc cela n'entrera pas en conflit avec la plage de votre 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.
- Clé privée :La clé privée du serveur VPN, qui se trouve dans le
/etc/wireguard/server_private.key
fichier sur le serveur. - ListenPort :Le serveur VPN WireGuard écoutera sur le port UDP 51820, qui est le port par défaut.
- Clé publique :La clé publique du client VPN, qui se trouve dans le
/etc/wireguard/client_public.key
fichier sur l'ordinateur client. - IP autorisées :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 appuyez sur Entrée pour confirmer. Appuyez sur Ctrl+X
pour quitter.)
Modifiez le mode d'autorisation des fichiers afin que seul l'utilisateur root puisse lire les fichiers.
sudo chmod 600 /etc/wireguard/ -R
Client
Utilisez un éditeur de texte en ligne de commande comme Nano pour créer un fichier de configuration WireGuard sur votre ordinateur Debian 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 client et votre clé publique serveur.
[Interface] Adresse =10.10.10.2/24DNS =10.10.10.1PrivateKey =COF + + x5UvHF a3xJ6enLatG + DoE3I5PhMgKrMKkUyXI =[Peer] PublicKey =kQvxOJI5Km4S1c7WXu2UZFpB8mHGuf3Gz8mmgTIF2U0 =AllowedIPs =0.0.0.0/0Endpoint =12.34.56.78:51820PersistentKeepalive =25Où :
- Adresse :Spécifiez l'adresse IP privée du client VPN.
- DNS :spécifiez 10.10.10.1 (le serveur VPN) comme serveur DNS. Il sera configuré via le
resolvconf
commande. Vous pouvez également spécifier plusieurs serveurs DNS pour la redondance comme ceci :DNS = 10.10.10.1 8.8.8.8
- Clé privée :La clé privée du client, qui se trouve dans le
/etc/wireguard/client_private.key
fichier sur l'ordinateur client. - Clé publique :La clé publique du serveur, qui se trouve dans le
/etc/wireguard/server_public.key
fichier sur le serveur. - IP autorisées :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 de terminaison :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é au pair toutes les 25 secondes pour maintenir la connexion active. 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
Étape 4 :Activer le transfert IP sur le serveur
Pour que le serveur VPN achemine les paquets entre les clients VPN et Internet, nous devons activer le transfert IP. Modifier sysctl.conf
fichier.
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 avec la commande ci-dessous. Le -p l'option chargera les paramètres sysctl depuis /etc/sysctl.conf dossier. Cette commande conservera 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 IP dans le pare-feu du serveur, afin que le serveur devienne un routeur virtuel pour les clients VPN. J'utiliserai UFW, qui est un frontal du pare-feu iptables. Installez UFW sur Debian avec :
sudo apt install ufw
Tout d'abord, vous devez autoriser le trafic SSH.
sudo ufw autorise 22/tcp
Ensuite, recherchez le nom de l'interface réseau principale de votre serveur.
adresse IP
Comme vous pouvez le voir, il s'appelle ens3
sur mon serveur Debian.
Pour configurer le masquage IP, nous devons ajouter la commande iptables dans un fichier de configuration UFW.
sudo nano /etc/ufw/before.rules
Par défaut, il existe des règles pour le filter
table. Ajoutez les lignes suivantes à la fin de ce fichier. Remplacer ens3
avec votre propre nom d'interface réseau.
# NAT table rules*nat:POSTROUTING ACCEPT [0:0]-A POSTROUTING -o ens3 -j MASQUERADE# Terminez chaque table avec la ligne 'COMMIT' ou ces règles ne seront pas traitéesCOMMIT
Dans l'éditeur de texte Nano, vous pouvez aller à la fin du fichier en appuyant sur Ctrl+W
, puis en appuyant sur Ctrl+V
.
Les lignes ci-dessus s'ajouteront (-A ) une règle à la fin de POSTROUTING chaîne de nat table. Il reliera votre réseau privé virtuel à Internet. Et cachez également votre réseau du monde extérieur. Ainsi, Internet ne peut voir que l'IP de votre serveur VPN, mais pas l'IP de votre client VPN, tout comme votre routeur domestique masque votre réseau domestique privé.
Par défaut, UFW interdit le transfert de paquets. Nous pouvons autoriser le transfert pour notre réseau privé. Trouvez le ufw-before-forward
chain 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 le 10.10.10.0/24
plage.
# autoriser le transfert pour le réseau de confiance-A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT-A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT
Enregistrez et fermez le fichier. Activez ensuite UFW.
activer sudo ufw
Si vous avez déjà activé UFW, vous pouvez utiliser systemctl pour redémarrer UFW.
sudo systemctl redémarrer 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 voir la règle de mascarade.
Étape 6 :Installez un résolveur DNS sur le serveur
Puisque nous avons spécifié 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émarrera automatiquement. Vous pouvez vérifier son statut avec :
état systemctl bind9
Exemple de sortie :
● named.service - Serveur de noms de domaine BIND chargé :chargé (/lib/systemd/system/named.service ; activé ; préréglage du fournisseur :activé) Actif :actif (en cours d'exécution) depuis le dim 2020-05-17 08:11 :26 UTC ; Il y a 37 s Docs :man:named(8) PID principal :13820 (nommé) Tâches :5 (limite :1074) Mémoire :14,3 Mo CGroup :/system.slice/named.service └─13820 /usr/sbin/named -f -u lier
S'il ne fonctionne pas, démarrez-le avec :
sudo systemctl start bind9
Modifiez 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. Redémarrez BIND9 pour que les modifications prennent effet.
sudo systemctl redémarrer bind9
Ensuite, vous devez exécuter la commande suivante pour autoriser les clients VPN à se connecter au port 53.
sudo ufw insert 1 autoriser à partir de 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 autorise 51820/udp
Étape 8 :Démarrer WireGuard
serveur
Exécutez la commande suivante sur le serveur pour démarrer WireGuard.
sudo wg-quick up /etc/wireguard/wg0.conf
Pour l'arrêter, exécutez
sudo wg-quick vers le bas /etc/wireguard/wg0.conf
Vous pouvez également utiliser le service systemd pour démarrer WireGuard.
sudo systemctl start [email protected]
Activez le démarrage automatique au démarrage du système.
sudo systemctl enable [email protected]
Vérifiez son état avec la commande suivante. Son statut doit être active (exited)
.
statut systemctl [protégé par e-mail]
Le serveur WireGuard est maintenant prêt à accepter les connexions client.
Client
Démarrez WireGuard.
sudo systemctl start [email protected]
Activez le démarrage automatique au démarrage du système.
sudo systemctl enable [email protected]
Vérifiez son état :
statut systemctl [protégé par e-mail]
Allez maintenant sur ce site :http://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.
boucle https://icanhazip.com
Conseils de dépannage
Test de ping
Vous pouvez envoyer un ping du serveur VPN au client VPN (ping 10.10.10.2
) pour voir si le tunnel fonctionne. Si vous voyez le message d'erreur suivant dans le ping,
ping :sendmsg :clé requise non disponible
il se peut que les AllowedIPs
paramètre est erroné, comme une faute de frappe.
Si le message d'erreur ping est
ping :sendmsg :adresse de destination requise
il se peut que la clé privée/publique soit erronée dans vos fichiers de configuration.
Impossible de naviguer sur Internet
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. J'ai eu une fois une faute de frappe dans le /etc/ufw/before.rules
fichier, ce qui a empêché mon ordinateur de naviguer sur Internet.
Notez que je ne recommande pas d'utiliser SaveConfig=true
dans l'[Interface]
section du fichier de configuration WireGuard. SaveConfig
indique à WireGuard d'enregistrer la configuration d'exécution à l'arrêt. Donc, si vous ajoutez des [Peer]
supplémentaires 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
Si vous utilisez le noyau Linux 5.6+, vous pouvez activer la journalisation de 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
sudo dmesg -wH
ou
sudo journalctl -kf
Redémarrer
Si votre VPN ne fonctionne toujours pas, essayez de redémarrer le serveur VPN.
sudo systemctl restart [email protected]
Arrêtez ensuite le client VPN.
sudo systemctl stop [email protected]
Et mettre à niveau les packages logiciels sur le client VPN.
mise à jour sudo apt ; mise à niveau sudo apt
Ensuite, redémarrez le client VPN.
sudo shutdown -r nowsudo systemctl start [email protected]
Ajout de clients VPN supplémentaires
WireGuard est conçu pour associer une adresse IP à un client VPN. Pour ajouter plus de clients VPN, 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] Adresse =10.10.10.1/24PrivateKey =UIFH + xxjj0g0uAzj6vpqsbb / o68Syvqdmyjpy / flgfa =écouter =51820 [peer] publicy =75Vnv7hqfh + 3qit5ohzkcjfbjx8tc6ck62. 1Z/3rtl0i7cJorcinB7T4UOIzScifPNEIESFD8=IP autorisées =10.10.10.3/32[Peer]PublicKey =EVstHZc6QamzPgefDGPLFEjGyedJk6SZbCJttpzcvC8=IP autorisées =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 [email protected]
Ajoutez ensuite la configuration WireGuard sur chaque client VPN comme d'habitude.
Politique de routage, tunneling fractionné et kill switch VPN
Je vais maintenant vous montrer comment utiliser le routage des règles , tunneling fractionné , et interrupteur d'arrêt VPN avec WireGuard VPN. Remarque qu'il n'est pas recommandé de les utiliser conjointement les uns avec les autres. Si vous utilisez le routage de stratégie, vous ne devez pas activer le split tunneling ou le kill switch VPN, et vice versa.
Routage des règles
Par défaut, tout le trafic sur le client VPN sera acheminé via le serveur VPN. Parfois, vous souhaiterez acheminer uniquement un type de trafic spécifique, en fonction du protocole de la couche transport et du port de destination. C'est ce qu'on appelle le routage de stratégie.
Le routage de stratégie est configuré sur l'ordinateur client et nous devons arrêter le processus client WireGuard.
sudo systemctl stop [email protected]
Modifiez ensuite le fichier de configuration du client.
sudo nano /etc/wireguard/wg-client0.conf
Par exemple, si vous ajoutez les 3 lignes suivantes dans le [interface]
section, 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 =1234PostUp =ip rule add ipproto tcp dport 25 table 1234PreDown =ip rule delete ipproto tcp dport 25 table 1234
Enregistrez et fermez le fichier. Ensuite, redémarrez le client WireGuard.
sudo systemctl start [email protected]
Tunneling fractionné
Par défaut, tout le trafic sur le client VPN sera acheminé via le serveur VPN. Voici comment activer le split tunneling, donc uniquement le trafic vers le 10.10.10.0/24
La plage IP sera tunnellisée via WireGuard VPN. Ceci est utile lorsque vous souhaitez créer un réseau privé pour plusieurs serveurs cloud, car les clients VPN s'exécuteront 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 du client.
sudo nano /etc/wireguard/wg-client0.conf
Modifier
IP autorisées =0.0.0.0/0
À
IP autorisées =10.10.10.0/24
Ainsi, le trafic sera acheminé via VPN uniquement lorsque l'adresse de destination se trouve dans la plage IP 10.10.10.0/24. Enregistrez et fermez le fichier. Redémarrez ensuite le client WireGuard.
sudo systemctl restart [email protected]
Commutateur d'arrêt VPN
Par défaut, votre ordinateur peut accéder à Internet via la passerelle normale lorsque la connexion VPN est interrompue. Vous pouvez activer la fonction 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 [email protected]
Modifiez le fichier de configuration du client.
sudo nano /etc/wireguard/wg-client0.conf
Ajoutez les deux lignes suivantes dans le [interface]
rubrique.
PostUp =iptables -I SORTIE ! -o %i -m marque ! --mark $(wg show %i fwmark) -m type_adresse ! --dst-type LOCAL -j REJECTPreDown =iptables -D OUTPUT ! -o %i -m marque ! --mark $(wg show %i fwmark) -m type_adresse ! --dst-type LOCAL -j REJETER
Comme ceci :
[Interface]Adresse =10.10.10.2/24DNS =10.10.10.1PrivateKey =cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=PostUp =iptables -I SORTIE ! -o %i -m marque ! --mark $(wg show %i fwmark) -m type_adresse ! --dst-type LOCAL -j REJECTPreDown =iptables -D OUTPUT ! -o %i -m marque ! --mark $(wg show %i fwmark) -m type_adresse ! --dst-type LOCAL -j REJETER [Peer]PublicKey =kQvxOJI5Km4S1c7WXu2UZFpB8mHGuf3Gz8mmgTIF2U0=IP autorisées =0.0.0.0/0Endpoint =12.34.56.78:51820PersistentKeepalive =25
Enregistrez et fermez le fichier. Démarrez ensuite le client WireGuard.
sudo systemctl start [email protected]
Installation du noyau Linux 5.x sur Debian 10
La version actuelle du noyau Linux sur Debian 10 est la 4.19. À l'étape 1, nous avons ajouté le dépôt backport sur Debian 10. Le dépôt backport inclut le noyau Linux 5.10, au moment de la rédaction de cet article. Vous savez probablement que le module wireguard est inclus dans le noyau Linux à partir de la version 5.4. Si nous installons le noyau Linux 5.10 sur Debian 10, nous n'avons pas besoin de construire le module wireguard lorsque le système met à jour le noyau Linux. En fait, mon serveur Debian 10 a déjà eu un problème lors de la construction du module wireguard avec wireguard-dkms.
Notez qu'au moment où vous lisez cet article, le référentiel de rétroportage Debian 10 peut avoir supprimé le noyau 5.10 et inclus le noyau 5.11. Remplacez simplement 5.8 par 5.9 dans les commandes suivantes.
Pour installer le noyau Linux 5.8 sur les serveurs cloud Debian 10, exécutez la commande suivante.
sudo apt install linux-image-5.10.0-0.bpo.7-cloud-amd64 linux-headers-5.10.0-0.bpo.7-cloud-amd64
Pour installer le noyau Linux 5.8 sur un PC Debian 10, exécutez la commande suivante.
sudo apt install linux-image-5.10.0-0.bpo.7-amd64 linux-headers-5.10.0-0.bpo.7-amd64
Redémarrez ensuite votre boîte Debian 10.
sudo shutdown -r now
Vérifiez votre version du noyau Linux.
uname -r
Exemple de sortie
5.10.0-0.bpo.7-cloud-amd64
Bien que nous n'ayons plus besoin du wireguard-dkms
package, c'est une dépendance pour le wireguard
package, nous ne pouvons donc pas le supprimer du système. Vous verrez probablement l'erreur suivante lors de la mise à niveau de wireguard
paquet.
Erreur ! Le fichier dkms.conf de ce module inclut une directive BUILD_EXCLUSIVE qui ne correspond pas à ce noyau/arch. Cela indique qu'il ne doit pas être construit
Cela indique wireguard-dkms
essaie de construire le wireguard
module dans le noyau Linux, mais Linux 5.10 inclut un wireguard
natif module, de sorte que l'opération de construction est empêchée et vous pouvez ignorer cette erreur.