[Tuto] Créer un serveur VPN WireGuard sous Debian 11
Il y a quelques jours je vous ai présenté le VPN WireGuard. Aujourd'hui, on va aller un cran plus loin et je vais vous expliquer comment créer un serveur VPN WireGuard. Et vous allez le voir par vous même, c'est facile et rapide à faire.
Contexte
Pour réaliser ce tutoriel, j'ai utilisé un serveur fonctionnant sous Debian 11 et un PC sous Windows 10 pour le client. Le serveur Debian était dans un réseau local utilisant le sous-réseau 192.168.1.0/24, et le sous réseau 192.168.5.0/24 a été choisi comme réseau du tunnel VPN WireGuard, avec :
- 192.168.5.1 pour le serveur Debian
- 192.168.5.10 pour le client VPN
Pour le port utilisé par le VPN, j'ai choisi d'utiliser le 50443. Bien sûr, pour ce qui est adresses IP et port, vous pouvez choisir librement autre chose. Il faudra simplement adapter les instructions ci-après pour coller à votre contexte.
Installation du serveur WireGuard
C'est parti pour la création de notre serveur VPN WireGuard. On va donc commencer par rafraîchir un peu les sources de dépôts avec la commande suivante :
$ sudo apt update
Puis, on va simplement lancer l'installation de WireGuard et ses dépendances avec la commande ci-dessous :
$ sudo apt install wireguard
On répond simplement oui à la question, et puis on se prend un petit café le temps de l'installation... Non je plaisante, cela devrait être extrêmement rapide, donc pour la café, on verra plus tard.
Configuration réseau et firewall
Comme vous pouvez vous en douter, on va devoir faire quelques ajustements sur notre serveur Debian afin que tout fonctionne correctement. On a en effet quelques réglages à faire, notamment au niveau réseau et firewall. A partir d'ici, et pour plus de simplicité, je vais passer sous l'utilisateur root. Mes commandes ne seront donc plus précédées de sudo. A vous d'adapter en fonction de l'utilisateur que vous utilisez.
Premièrement on va activer l'ip forwarding afin que notre Debian soit en mesure de router les paquets réseaux entre ses différentes interfaces. Pour cela, on va utiliser la commande suivante :
# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
On va commencer par autoriser le trafic sur le port 50443 (pensez à adapter cette commande avec le port que vous avez défini plus haut).
Ensuite on va créer les règles firewall qui vont bien pour autoriser le trafic du VPN. Pour ma part j'utilise ufw mais si vous utilisez un autre outil pour gérer votre firewall, alors vous devrez adapter les commandes ci-dessous.
# ufw allow 50443/udp
Puis, on va activer l'IP masquerade et pour cela nous avons besoin du nom de l'interface réseau de notre serveur :
# ip addr
On constate dans la capture ci-dessus que dans notre cas, l'interface réseau se nomme ens33. On va ensuite modifier les règles du firewall comme suit :
# vi /etc/ufw/before.rules
Et on va ajouter les lignes suivantes :
#NAT
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.1.0/24 -o ens33 -j MASQUERADE
COMMIT
Bien sûr ici il faudra adapter l'adresse IP et le nom de l'interface réseau, mais cela ressemblera donc à ça :
Ensuite il est nécessaire de créer les règles firewall pour le trafic VPN. On va donc ajouter dans le même fichier les lignes qui suivent, dans la partie FORWARD (là encore, pensez à adapter les adresses IP) :
-A ufw-before-forward -s 192.168.1.0/24 -j ACCEPT
-A ufw-before-forward -d 192.168.1.0/24 -j ACCEPT
-A ufw-before-forward -s 192.168.5.0/24 -j ACCEPT
-A ufw-before-forward -d 192.168.5.0/24 -j ACCEPT
On sauvegarde le fichier et on redémarre ensuite ufw pour que les nouvelles règles soient prises en compte :
# systemctl restart ufw
Allez maintenant que notre serveur Linux est prêt, passons à la configuration WireGuard.
Configuration du serveur WireGuard
Une fois l'installation terminée, on va pouvoir générer notre clé publique et notre clé privée. Je vais commencer par me placer dans le répertoire de configuration de WireGuard :
# cd /etc/wireguard
On va ensuite exécuter les commandes ci-dessous pour créer les clés de notre serveur :
# wg genkey | tee myprivate.key | wg pubkey > mypublic.key
Je vais ensuite afficher ma clé privée car je vais devoir l'intégrer au fichier de configuration de mon interface WireGuard :
# cat myprivate.key
Puis on va créer le fichier de configuration de l'interface du VPN, que l'on va appeler wg0 (pour WireGuard0) :
# vi wg0.conf
On crée une section [Interface] dans laquelle on va renseigner :
- Address = l'adresse de notre interface VPN. Dans notre exemple : 192.168.5.1/24
- ListenPort = le port d'écoute du VPN. Vous êtes libres d'utiliser le port que vous souhaitez. Pour cet exemple, j'ai pris le 50443.
- PrivateKey = la clé privée que nous avons créée plus tôt et affichée avec la commande cat.
- SaveConfig = True
La dernière directive permet de protéger la configuration de l'interface tant que celle-ci est montée. Votre fichier devrait donc ressembler à ceci :
Après avoir enregistré les modifications du fichier, il convient de démarrer l'interface via la commande suivante :
# wg-quick up wg0
Et on peut ensuite vérifier l'état de notre interface :
# wg show wg0
Enfin, il y a de fortes chances pour que vous souhaitiez que l'interface s'active directement au démarrage de votre serveur. Pour cela, entrer la commande suivante :
# systemctl enable wg-quick@wg0.service
Configuration d'un client WireGuard sous Windows
Pour pouvoir terminer la configuration de notre serveur VPN, nous allons devoir configurer un client. La première étape ici consiste à se rendre sur le site officiel pour télécharger le client Windows. Rendez-vous donc sur cette page, et cliquez sur le bouton Download Windows Installer.
Exécuter le fichier téléchargé pour lancer l'application. Cliquer ensuite sur la petite flèche en bas à gauche, puis sur Ajouter un tunnel vide.
Une nouvelle fenêtre s'ouvre dans laquelle vous allez devoir renseigner l'adresse pour votre interface cliente WireGuard, ainsi que les infos du serveur dans une section [Peer].
Dans la capture ci-dessous, j'ai donc renseigné l'adresse de mon interface 192.168.5.10/24 et j'ai ajouté une section Peer contenant les infos suivantes relatives au serveur :
- PublicKey = la clé publique du serveur
- AllowedIPs = le sous réseau VPN et le sous réseau dans lequel se situe le serveur
- Endpoint = l'adresse IP publique du serveur VPN suivie par le port utilisé par ce serveur
Bon, on a terminé la configuration de ce côté là. Maintenant on va retourner sur notre serveur Debian pour déclarer notre client.
Finalisation côté serveur
Dernière étape, on va déclarer notre client dans le fichier de configuration de notre interface. Pour cela, on édite à nouveau le fichier wg0.conf :
# vi /etc/wireguard/wg0.conf
On ajoute, là aussi, une section [Peer] dans laquelle on déclare la clé publique de notre client et son IP dans le réseau du VPN :
Et voilà, notre VPN est prêt à entrer en action ! Il ne reste plus qu'à retourner sur le client et à cliquer sur le bouton Activer. Et si vous avez tout fait comme expliqué, cela devrait fonctionner 🙂
Vous pouvez aussi vérifier l'état de la connexion depuis le serveur en utilisant la commande wg show :
Ainsi s'achève ce tutoriel sur la création d'un serveur VPN WireGuard. J'espère qu'il vous a été utile. Dans quelques jours, je vous en proposerai un autre pour vous expliquer commet utiliser WireGuard avec un NAS Asustor !
Partager la publication "[Tuto] Créer un serveur VPN WireGuard sous Debian 11"
Petit erreur de frappe dans ListenPort
Merci Marc, c'est corrigé 🙂