[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.

Le logo de WireGuard

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
Installation du package serveur WireGuard
Installation du package serveur 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
Activation de l'IP forwarding sur le serveur
Activation de l'IP forwarding sur le serveur

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
Création d'une règle firewall pour WireGuard
Création d'une règle firewall pour WireGuard

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
Afficher les informations réseau avec "ip addr"
Afficher les informations réseau avec "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 :

Activation de l'IP masquerade
Activation de l'IP masquerade

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
Ajout des règles firewall de FORWARD
Ajout des règles firewall de FORWARD

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
Création des 2 clés (privée et publique)
Création des 2 clés (privée et publique)

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
Récupération de la clé privée
Récupération de la clé privée

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 :

Le fichier de configuration de l'interface VPN WireGuard
Le fichier de configuration de l'interface VPN WireGuard

Après avoir enregistré les modifications du fichier, il convient de démarrer l'interface via la commande suivante :

# wg-quick up wg0
La commande 'wg-quick up' permet de démarrer une interface WireGuard
La commande 'wg-quick up' permet de démarrer une interface WireGuard

Et on peut ensuite vérifier l'état de notre interface :

# wg show wg0
la commande 'wg show' permet d'obtenir des infos sur une interface
la commande 'wg show' permet d'obtenir des infos sur une interface

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.

Télécharger le client WireGuard qui vous convient depuis le site officiel
Télécharger le client WireGuard qui vous convient depuis le site officiel

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.

WireGuard Client pour Windows : ajouter un nouveau tunnel
WireGuard Client pour Windows : ajouter un nouveau tunnel

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].

WireGuard Client pour Windows : renseigner les infos de l'interface et du pair
WireGuard Client pour Windows : renseigner les infos de l'interface et du pair

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 :

Le fichier de configuration de l'interface WireGuard avec un client
Le fichier de configuration de l'interface WireGuard avec un client

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 🙂

WireGuard client connecté
WireGuard client connecté

Vous pouvez aussi vérifier l'état de la connexion depuis le serveur en utilisant la commande wg show :

Affichage du statut de l'interface WireGuard
Affichage du statut de l'interface WireGuard

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 !

Sandstorm

Ingénieur Systèmes passionné d'informatique et de High-Tech, Sandstorm a créé JusteGeek.fr en 2013. Il aime les geekeries en tout genre. "Si un produit s'allume c'est un bon point. S'il est connecté, c'est encore mieux !"

Vous aimerez aussi...

2 réponses

  1. marc dit :

    Petit erreur de frappe dans ListenPort

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.