Comment configurer le VPN Wireguard sur CentOS 8

Wireguard est une implémentation VPN multiplateforme open-source qui utilise une cryptographie de pointe. Il est plus rapide, plus simple et plus fonctionnel que les protocoles IPSec et OpenVPN. Il est conçu comme un VPN polyvalent pour fonctionner sur des interfaces embarquées et des superordinateurs et fonctionne sur Linux, Windows, macOS, iOS, Android, BSD et diverses autres plateformes.

Ce tutoriel explique comment installer Wireguard VPN sur un serveur basé sur CentOS 8 et comment s’y connecter à l’aide d’un client Linux(CentOS/Fedora/Ubuntu).

Étape 1 – Mise à jour du système

Avant d’aller plus loin, il est impératif de mettre à jour ton système pour installer les dernières mises à jour.

$ sudo dnf update

Étape 2 - Installe et active le repo EPEL

Les paquets Wireguard requis se trouvent dans le dépôt EPEL, nous devons donc les installer et les activer.

$ sudo dnf install epel-release
$ sudo dnf config-manager --set-enabled PowerTools

Nous avons également activé le référentiel PowerTools car les paquets EPEL en dépendent.

Étape 3 - Installer Wireguard

Active le référentiel Wireguard.

$ sudo dnf copr enable jdoss/wireguard

Installe Wireguard.

$ sudo dnf install wireguard-dkms wireguard-tools

Cette étape installe également le compilateur GNU GCC nécessaire pour construire les modules du noyau Linux.

Étape 4 - Configurer le serveur Wireguard

Crée un fichier de configuration vide sur le serveur pour les paramètres Wireguard avec les autorisations appropriées.

$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'

La commande Touch crée le fichier wg0-server.conf dans le répertoire /etc/wireguard.

Ensuite, crée une paire de clés privée/publique pour le serveur Wireguard.

$ cd /etc/wireguard
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'

Cela crée une clé publique et une clé privée pour le Wireguard et les écrit dans les fichiers respectifs.

Affiche la clé privée que nous venons de créer.

$ sudo cat privatekey

Note la clé et copie-la car nous en aurons besoin pour configurer Wireguard.

Ensuite, édite le fichier de configuration.

$ sudo nano /etc/wireguard/wg0.conf

Ajoute le code suivant.

[Interface]
## VPN server private IP address ##
Address = 192.168.10.1/24
 
## VPN server port - You can choose any port ##
ListenPort = 37822
 
## VPN server's private key i.e. /etc/wireguard/privatekey - the one from above ##
PrivateKey = GCEXafeZKqSsuLfvuHE+zLzMYwoH4qQyBh7MZ4f/3kM=
 
## Save and update this config file when a new peer (vpn client) added ##
SaveConfig = true

Chaque configuration comporte une section appelée [Interface] où la partie serveur est définie.

Elle contient la clé privée du serveur WireGuard local, le port UDP qu'il doit écouter pour les connexions entrantes et ses propres adresses IP VPN.

Nous avons également défini SaveConfig sur true. Cela indiquera au service Wireguard d'enregistrer automatiquement sa configuration active dans ce fichier à l'arrêt.

Appuie sur Ctrl + W pour fermer le fichier et entre Y lorsqu'on te demande d'enregistrer le fichier.

Étape 5 - Configurer le pare-feu

Nous devons ouvrir le port que nous avons choisi pour Wireguard.

Tout d'abord, nous devons définir le service Wireguard pour le pare-feu. Pour ce faire, crée un fichier wireguard.xml avec l'éditeur Nano.

$ sudo nano /etc/firewalld/services/wireguard.xml

Colle le code suivant dans le fichier.

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>wireguard</short>
  <description>WireGuard open UDP port 37822 for client connections</description>
  <port protocol="udp" port="37822"/>
</service>

Appuie sur Ctrl + W pour fermer le fichier et entre Y lorsqu'on te demande d'enregistrer le fichier.

Ensuite, active le service Wireguard dans le pare-feu.

$ sudo firewall-cmd --permanent --add-service=wireguard

Active le masquerading pour que tout le trafic entrant et sortant de 192.168.10.0/24 soit acheminé via notre adresse IP publique du serveur 203.1.114.98/24.

$ sudo firewall-cmd --permanent --add-masquerade

Enfin, recharge le pare-feu pour activer les règles.

$ sudo firewall-cmd --reload

Fais une liste des règles actuelles du pare-feu pour confirmer.

$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: wireguard ssh
  ports: 
  protocols: 
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

Étape 6 - Activer la redirection IPv4

Crée le fichier /etc/sysctl.d/99-custom.conf.

$ sudo nano /etc/sysctl.d/99-custom.conf

Colle le code suivant dans le fichier.

## Turn on bbr ##
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
 
## for IPv4 ##
net.ipv4.ip_forward = 1
 
## Turn on basic protection/security ##
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1

## for IPv6 ##
net.ipv6.conf.all.forwarding = 1

Appuie sur Ctrl + W pour fermer le fichier et entre Y lorsque tu es invité à enregistrer le fichier.

La portée du code dans le fichier ci-dessus sort du cadre de ce tutoriel, alors pour l'instant, utilise-le tel quel.

Recharge les modifications.

$ sudo sysctl -p /etc/sysctl.d/99-custom.conf

Par défaut, le pare-feu ne laisse pas les interfaces wg0 et eth0 se parler entre elles. Nous devons donc ajouter l'interface Wireguard au réseau interne et activer le masquerading.

$ sudo firewall-cmd --add-interface=wg0 --zone=internal
$ sudo firewall-cmd --permanent --zone=internal --add-masquerade

Étape 7 - Active et démarre le service Wireguard

Ensuite, nous devons activer et démarrer le service Wireguard.

$ sudo systemctl enable [email protected]
$ sudo systemctl start [email protected]

Tu peux vérifier si l'interface Wireguard, wg0, est opérationnelle en utilisant la commande suivante.

$ sudo wg
interface: wg0
  public key: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
  private key: (hidden)
  listening port: 37822

$ sudo ip a show wg0
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 192.168.10.1/24 scope global wg0
       valid_lft forever preferred_lft forever

Étape 8 - Installer et configurer le client WireGuard

Tu peux trouver les instructions d'installation du client Wireguard pour ta distribution Linux sur leur page d'installation officielle.

Une fois que tu as installé le client, tu dois créer le fichier de configuration du client.

$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'
$ cd /etc/wireguard/
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'
$ sudo cat privatekey

Note la clé privée que tu obtiens à la fin. Ensuite, nous devons modifier le fichier de configuration que nous venons de créer.

$ sudo nano /etc/wireguard/wg0.conf

Ajoute les directives suivantes au fichier.

[Interface]
## client private key ##
PrivateKey = OEM6D/zt2fVWOepVv3iEDD430V0gAshKp4+5oVVt5EE=
 
## client ip address ##
Address = 192.168.10.2/24
 
[Peer]
## CentOS 8 server public key ##
PublicKey = VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
 
## set ACL ##
AllowedIPs = 192.168.10.0/24
 
## Your CentOS 8 server's public IPv4/IPv6 address and port ##
Endpoint = 203.1.114.98:37822
 
##  Key connection alive ##
PersistentKeepalive = 15

Note que nous avons attribué l'IP privée 192.168.10.1 au serveur et 192.168.10.2 au client. Nous avons également ajouté la clé privée du client au fichier.

La section [Peer] est l'endroit où tu entres la configuration du serveur auquel le client se connectera. Ici, nous avons ajouté la clé publique, l'IP publique et un ensemble d'IP autorisées qui contient l'IP privée de notre serveur. PersistentKeepalive indique à WireGuard d'envoyer un paquet UDP toutes les 15 secondes, ce qui est utile si tu es derrière un NAT et que tu veux garder la connexion vivante.

Appuie sur Ctrl + W pour fermer le fichier et entre Y lorsque tu es invité à enregistrer le fichier.

Il est maintenant temps d'activer et de démarrer le client VPN.

$ sudo systemctl enable [email protected]
$ sudo systemctl start [email protected]
$ sudo systemctl status [email protected]

Étape 9 - Configurer le serveur pour ajouter le client

Maintenant, nous devons à nouveau ajouter la configuration du client au serveur pour qu'il sache qu'il existe un client.

Arrête d'abord le service Wireguard.

$ sudo systemctl stop [email protected]

Ouvre le fichier wg0.conf pour le modifier.

$ sudo nano /etc/wireguard/wg0.conf

Ajoute le code suivant à la fin du fichier.

[Peer] 
## client VPN public key ## 
PublicKey = dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA=  

## client VPN IP address (note /32 subnet) ## 
AllowedIPs = 192.168.10.2/32

Appuie sur Ctrl + W pour fermer le fichier et saisis Y lorsque tu es invité à enregistrer le fichier.

Les sections [Peer] définissent les autres membres du réseau VPN. Tu peux en ajouter autant que nécessaire.

Elles contiennent leur clé publique, qui doit correspondre à la clé privée du pair dans sa section [Interface].

Note que toute connexion entrante est d'abord authentifiée par rapport à l'une des clés publiques. Si la connexion ne provient pas d'un pair vérifié, les paquets entrants sont simplement ignorés en silence. Puisque les connexions des hôtes qui ne possèdent pas de clé privée correspondante ne reçoivent aucune réponse, un VPN WireGuard ne fournit pas seulement une communication cryptée, il reste également caché des personnes extérieures.

Redémarre le service Wireguard.

$ sudo systemctl start [email protected]

Étape 10 - Test

Vérifions si le client et le serveur sont connectés en toute sécurité grâce au VPN. Pour tester la connexion, exécute les commandes suivantes sur ton client.

$ ping -c 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=44.2 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=45.8 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=64 time=46.7 ms
64 bytes from 192.168.10.1: icmp_seq=4 ttl=64 time=44.1 ms

--- 192.168.10.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2800ms
rtt min/avg/max/mdev = 41.729/47.829/48.953/5.046 ms

$ sudo wg
interface: wg0
  public key: dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA= 
  private key: (hidden)
  listening port: 
 
peer: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
  endpoint: 203.1.114.98:37822
  allowed ips: 192.168.10.0/24
  latest handshake: 1 minute, 40 seconds ago
  transfer: 938 B received, 45.67 KiB sent
  persistent: keepalive: every 15 seconds

Conclusion

C'est tout ce qu'il y a à dire sur ce tutoriel. Tu devrais maintenant avoir un serveur VPN basé sur Wireguard à partir d'un serveur CentOS 8. Si tu as des questions, pose-les dans les commentaires ci-dessous.

Vous aimerez aussi...