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 wg-quick@wg0
$ sudo systemctl start wg-quick@wg0
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 wg-quick@wg0
$ sudo systemctl start wg-quick@wg0
$ sudo systemctl status wg-quick@wg0
É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 wg-quick@wg0
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 wg-quick@wg0
É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.