Comment installer et configurer WireGuard sur Debian / Ubuntu

installation et configuration WireGuard sur Debian 9+ / Ubuntu 18.04+

Introduction

WireGuard est un protocole de tunnel VPN moderne, rapide et sécurisé qui peut être utilisé pour établir des tunnels chiffrés entre des machines afin de créer des réseaux privés. Il vise à être plus simple, plus léger et plus performant que les anciens protocoles VPN comme IPsec et OpenVPN.

Dans ce guide, nous allons passer en revue le processus complet de configuration de WireGuard sur des serveurs Linux Debian ou Ubuntu. Cela vous permettra de créer des connexions chiffrées entre des serveurs, d’acheminer le trafic via des tunnels VPN et essentiellement de créer un réseau privé virtuel.

Nous aborderons :

  • Installation de WireGuard
  • Génération de clés et configuration
  • Création d’interfaces et de peers
  • Acheminement du trafic via le tunnel VPN
  • Adressage IP permanent
  • Activation du transfert IP
  • NAT pour autoriser les connexions depuis des peers distants
  • Intégration systemd et démarrage au boot

A la fin, vous devriez avoir une configuration WireGuard totalement opérationnelle sur Debian ou Ubuntu qui peut tunneler en toute sécurité le trafic entre les serveurs.

Conditions préalables

Avant de commencer, voici quelques conditions préalables :

  • Debian 10 ou supérieur, ou Ubuntu 18.04 ou supérieur sur toutes les machines
  • Accès root (privilèges sudo) sur toutes les machines
  • Une compréhension de base du réseau Linux (adresses IP, sous-réseaux, routage, etc.)

La configuration sera effectuée sur deux machines ou plus qui peuvent communiquer via un réseau. À des fins de test, vous pouvez utiliser des VM locales, des serveurs ou des machines cloud.

Les instructions fonctionneront pour la configuration de WireGuard entre n’importe quels points de terminaison – il ne doit pas s’agir uniquement de serveurs Debian/Ubuntu. Des clients WireGuard sont disponibles pour toutes les principales plateformes.

Installation de WireGuard

La première étape consiste à installer le paquet WireGuard sur toutes les machines qui feront partie du tunnel VPN.

Sur Debian

$ sudo apt update
$ sudo apt install wireguard

Sur Ubuntu

$ sudo apt update
$ sudo apt install wireguard

Cela installera le module WireGuard et les outils utilisateur comme wg et wg-quick.

Génération de clés et configuration

Maintenant, nous devons générer les paires de clés publiques/privées qui seront utilisées par WireGuard pour établir les tunnels chiffrés. Chaque machine participant au VPN aura besoin de sa propre clé privée et d’une clé publique correspondante.

Générez la clé privée avec :

$ wg genkey > privatekey

Cela créera une nouvelle clé privée et l’enregistrera dans privatekey.

Ensuite, générez la clé publique :

$ wg pubkey < privatekey > publickey 

Faites cela pour chaque serveur qui fera partie du VPN. Assurez-vous de stocker en toute sécurité le fichier de clé privée sur chaque machine. La clé publique peut être librement partagée.

Ensuite, nous devons générer un fichier de configuration qui spécifie l’interface, les pairs/points de terminaison et les clés.

Créez un fichier appelé wg0.conf :

$ sudo nano /etc/wireguard/wg0.conf

Ajoutez le contenu suivant, en remplaçant PublicKey et PrivateKey par les vôtres pour chaque serveur :

[Interface]
Address = 10.0.0.1/24  
ListenPort = 51820
PrivateKey = SERVER1_PRIVATE_KEY
[Peer] 
PublicKey = SERVER2_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32

Donc pour deux serveurs, vous pouvez avoir :

Serveur 1 :

[Interface] 
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = SERVER1_PRIVATE_KEY  
[Peer]
PublicKey = SERVER2_PUBLIC_KEY  
AllowedIPs = 10.0.0.2/32

Serveur 2 :

[Interface]
Address = 10.0.0.2/24  
ListenPort = 51820
PrivateKey = SERVER2_PRIVATE_KEY
[Peer]
PublicKey = SERVER1_PUBLIC_KEY
AllowedIPs = 10.0.0.1/32

Les paramètres Address et AllowedIPs configurent les adresses IP utilisées par l’interface du tunnel VPN. Assurez-vous que les adresses IP utilisées n’entrent pas en conflit avec votre réseau existant.

Les paramètres ListenPort et PrivateKey sont requis dans la section [Interface]. Ajoutez ensuite une section [Peer] pour chaque serveur auquel vous souhaitez vous connecter, en utilisant sa PublicKey.

Vous pouvez ajouter plus de peers en ajoutant des sections [Peer] supplémentaires. N’oubliez pas d’ajouter également l’adresse IP du peer à AllowedIPs.

Enregistrez le fichier de configuration et activez le transfert IP (expliqué ci-dessous).

Création des interfaces et des peers

La configuration étant en place, nous pouvons maintenant créer l’interface et établir les connexions peer :

$ sudo wg-quick up wg0 

Cela configurera l’interface wg0 en utilisant les détails de wg0.conf.

Exécutez la même commande wg-quick sur chaque serveur pour activer leurs interfaces VPN. Les peers se connecteront à l’aide des clés publiques et commenceront à tunneliser le trafic.

Vous pouvez inspecter le statut de l’interface avec :

$ sudo wg show

Cela affichera des détails comme la clé publique, le port d’écoute et les peers pour l’interface.

A ce stade, votre tunnel VPN WireGuard est actif ! Le trafic circulera maintenant entre les serveurs pairés chiffrés via les tunnels.

Cependant, pour que le routage fonctionne correctement, nous devons activer le transfert IP sur chaque serveur.

Acheminement du trafic via le tunnel VPN

Avec le transfert IP activé, le trafic peut être envoyé entre les peers WireGuard et routé via le tunnel VPN chiffré.

Pour activer le transfert sur Debian/Ubuntu :

$ sudo sysctl -w net.ipv4.ip_forward=1

Pour que cela persiste après les redémarrages :

$ sudo nano /etc/sysctl.conf

Décommentez la ligne :

net.ipv4.ip_forward=1

Enregistrez le fichier et redémarrez ou exécutez sudo sysctl -p pour charger les nouveaux paramètres.

Maintenant, le trafic peut être routé entre les pairs VPN. Cependant, la connexion sera interrompue dès que vous redémarrerez le serveur car la configuration wg-quick n’est pas persistante.

Pour démarrer automatiquement le VPN au démarrage, nous devons intégrer WireGuard à systemd.

Intégration Systemd et démarrage au boot

Pour que WireGuard démarre au démarrage et persiste après les redémarrages, nous devons configurer un service systemd.

Créez un nouveau fichier de service systemd :

$ sudo nano /etc/systemd/system/[email protected] 

Collez ce qui suit :

[Unit]
Description=Tunnel VPN WireGuard pour %i  
After=network-online.target nss-lookup.target
Wants=network-online.target nss-lookup.target
[Service]  
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/wg-quick up %i
ExecStop=/usr/bin/wg-quick down %i
[Install]
WantedBy=multi-user.target

Cela démarrera et arrêtera le tunnel VPN à l’aide de wg-quick.

Maintenant, activez le service :

$ sudo systemctl enable wg-quick@wg0  

Cela créera un service systemd qui exécute wg-quick au démarrage.

Redémarrez vos serveurs et WireGuard devrait démarrer automatiquement ! Vérifiez avec wg show.

Adressage IP permanent

Par défaut, les pairs WireGuard utiliseront leur dernière adresse IP publique lors de l’établissement des connexions. Si vos serveurs ont des adresses IP dynamiques, cela peut poser problème.

Pour attribuer des adresses IP statiques permanentes utilisées uniquement pour les connexions VPN, ajoutez une option PersistentKeepalive aux sections des pairs :

[Peer]  
PublicKey = PEER_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32
Endpoint = PEER_PUBLIC_IP:51820  
PersistentKeepalive = 25

Cela enverra un ping au peer toutes les 25 secondes pour maintenir à jour l’adresse IP la plus récente.

Vous pouvez également définir explicitement l’adresse IP de point de terminaison comme ci-dessus si l’adresse IP publique ne change jamais.

NAT pour autoriser les connexions depuis des pairs distants

Dans la plupart des cas, vous voudrez autoriser les connexions à votre serveur VPN depuis des pairs/clients distants via Internet.

Cela signifie ouvrir et transférer le port d’écoute WireGuard (UDP 51820 par défaut).

Si derrière un pare-feu NAT, ajoutez ces règles de transfert de port :

# Transférer le port 51820 entrant vers le serveur WireGuard 
$ iptables -A INPUT -p udp --dport 51820 -j ACCEPT
$ iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT
# Transférer le trafic du serveur WireGuard vers Internet
$ iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Vous devrez également configurer des règles de transfert de port sur votre routeur pour envoyer le trafic UDP 51820 entrant à votre serveur WireGuard.

Maintenant, les pairs distants peuvent se connecter à l’adresse IP publique de votre serveur sur le port 51820 via Internet.

Configuration du client

Pour connecter des clients comme des appareils mobiles, il suffit d’installer une application WireGuard et d’utiliser l’adresse IP publique et la clé publique du serveur dans la configuration du client.

Voici un exemple de configuration de client mobile :

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.3 
[Peer]  
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_PUBLIC_IP:51820  
AllowedIPs = 0.0.0.0/0

Cela acheminera tout le trafic client via le tunnel VPN lors de la connexion.

Et cela couvre la configuration complète de WireGuard sur Debian et Ubuntu !

Conclusion

Vos serveurs Debian ou Ubuntu devraient maintenant avoir des tunnels WireGuard chiffrés entre eux. Le trafic transitera par les tunnels sécurisés par une cryptographie moderne.

WireGuard est rapide, simple et léger par rapport à des alternatives comme IPSec ou OpenVPN. Il constitue un VPN idéal pour connecter une infrastructure en toute sécurité via Internet.

Il existe de nombreuses options supplémentaires pour régler et développer votre configuration WireGuard également – reportez-vous à la documentation du projet pour plus de détails.

J’espère que ce guide vous a été utile pour configurer WireGuard sur vos systèmes Debian ou Ubuntu ! Faites-moi savoir si vous avez d’autres questions.

Laisser un commentaire