Installer WireGuard sur CentOS 8 — tutoriel pas à pas

TL;DR
Ce guide explique comment installer et configurer un serveur WireGuard sur CentOS 8, configurer le pare-feu, activer le routage IPv4/IPv6 et ajouter un client Linux. Inclut checklist de sécurité, dépannage et bonnes pratiques pour la production.
Introduction
WireGuard est une implémentation VPN open source multiplateforme qui utilise une cryptographie moderne. Il est plus rapide, plus simple et souvent plus facile à administrer que les solutions IPSec ou OpenVPN. WireGuard peut fonctionner sur des dispositifs embarqués comme sur des supercalculateurs et prend en charge Linux, Windows, macOS, iOS, Android, BSD et d’autres plateformes.
Ce tutoriel couvre l’installation d’un serveur WireGuard sur CentOS 8 et la connexion depuis un client Linux (CentOS/Fedora/Ubuntu). Il suppose un accès root ou sudo sur le serveur et le client.
Étape 1 - Mettre à jour le système
Avant de poursuivre, mettez à jour votre système pour installer les paquets les plus récents.
$ sudo dnf update
Important: installez les mises à jour de sécurité avant d’exposer un VPN public.
Étape 2 - Installer et activer le dépôt EPEL
Les paquets WireGuard nécessaires se trouvent dans le dépôt EPEL. Installez-le et activez le dépôt PowerTools si nécessaire.
$ sudo dnf install epel-release
$ sudo dnf config-manager --set-enabled PowerTools
Nous avons aussi activé PowerTools car certains paquets EPEL en dépendent.
Étape 3 - Installer WireGuard
Activez le dépôt Copr pour WireGuard puis installez les paquets nécessaires.
$ sudo dnf copr enable jdoss/wireguard
Puis installez WireGuard et les outils de compilation requis.
$ sudo dnf install wireguard-dkms wireguard-tools
Cette étape installe également le compilateur GCC nécessaire pour construire les modules du noyau.
Étape 4 - Configurer le serveur WireGuard
Créez le répertoire de configuration et un fichier de configuration vide avec les permissions correctes.
$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'
Générez la paire de clés privée/publique du serveur.
$ cd /etc/wireguard
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'
Affichez la clé privée (conservez-la en sécurité).
$ sudo cat privatekey
Éditez le fichier de configuration.
$ sudo nano /etc/wireguard/wg0.conf
Ajoutez le contenu suivant (adaptez l’adresse et le port à votre réseau).
[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
Explications rapides:
- [Interface] contient la clé privée du serveur, le port UDP d’écoute et l’adresse IP VPN du serveur.
- SaveConfig = true permet à WireGuard d’écrire la configuration active sur arrêt.
Appuyez sur Ctrl + W pour fermer nano et tapez Y pour sauvegarder.
Étape 5 - Configurer le pare-feu (firewalld)
Ouvrez le port UDP que vous avez choisi pour WireGuard. Déclarez d’abord un service firewalld pour WireGuard.
$ sudo nano /etc/firewalld/services/wireguard.xml
Collez ce contenu (conservez le port choisi précédemment).
wireguard
WireGuard open UDP port 37822 for client connections
Appuyez sur Ctrl + W pour fermer et sauvegarder.
Activez le service WireGuard dans firewalld:
$ sudo firewall-cmd --permanent --add-service=wireguard
Activez le masquerading (NAT) pour que le trafic du réseau VPN soit routé via l’adresse publique du serveur.
$ sudo firewall-cmd --permanent --add-masquerade
Rechargez le pare-feu pour appliquer les règles.
$ sudo firewall-cmd --reload
Vérifiez les règles actuelles:
$ 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:
Note: adaptez l’interface réseau (eth0) si votre interface publique a un autre nom (par ex. ens3, enp0s3).
Étape 6 - Activer le routage IPv4 et paramètres système
Créez un fichier sysctl pour activer le routage et quelques optimisations de base.
$ sudo nano /etc/sysctl.d/99-custom.conf
Collez ce contenu.
## 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
Appuyez sur Ctrl + W et sauvegardez. Rechargez les paramètres:
$ sudo sysctl -p /etc/sysctl.d/99-custom.conf
Ajoutez l’interface WireGuard à la zone interne et activez le masquerading permanent pour cette zone:
$ sudo firewall-cmd --add-interface=wg0 --zone=internal
$ sudo firewall-cmd --permanent --zone=internal --add-masquerade
Important: sans ces étapes, le trafic entre wg0 et eth0 peut être bloqué par firewalld.
Étape 7 - Activer et démarrer le service WireGuard
Activez et démarrez le service système géré par wg-quick.
$ sudo systemctl enable wg-quick@wg0
$ sudo systemctl start wg-quick@wg0
Vérifiez l’interface WireGuard et les clés:
$ sudo wg
interface: wg0
public key: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
private key: (hidden)
listening port: 37822
$ sudo ip a show wg0
3: wg0: 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 (Linux)
Installez le client WireGuard depuis les sources officielles pour votre distribution, puis créez la configuration 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
Éditez /etc/wireguard/wg0.conf et ajoutez:
[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
Démarrez le client WireGuard:
$ sudo systemctl enable wg-quick@wg0
$ sudo systemctl start wg-quick@wg0
$ sudo systemctl status wg-quick@wg0
Étape 9 - Ajouter le client côté serveur
Pour que le serveur accepte les connexions du client, ajoutez la section [Peer] correspondante dans /etc/wireguard/wg0.conf sur le serveur.
Arrêtez le service, modifiez le fichier puis redémarrez.
$ sudo systemctl stop wg-quick@wg0
$ sudo nano /etc/wireguard/wg0.conf
Ajoutez à la fin:
[Peer]
## client VPN public key ##
PublicKey = dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA=
## client VPN IP address (note /32 subnet) ##
AllowedIPs = 192.168.10.2/32
Sauvegardez et redémarrez le service:
$ sudo systemctl start wg-quick@wg0
Remarque: WireGuard n’initie pas d’authentification par mot de passe. Les pairs sont authentifiés par leurs clés publiques; toute connexion sans paire de clés valide est ignorée silencieusement.
Étape 10 - Tester la connexion
Sur le client, testez la connectivité et vérifiez l’état WireGuard.
$ 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
Sécurité et durcissement recommandés
Important: voici des mesures complémentaires à appliquer avant de mettre un VPN en production.
- Rotation des clés: planifiez la rotation régulière des paires de clés et conservez une procédure de remplacement.
- Permissions: conservez /etc/wireguard et les fichiers de clés en 600 (root seulement).
- Limitations de portée: utilisez des AllowedIPs minimales par pair (ex: /32 pour un client unique).
- Journalisation: activez une journalisation limitée pour identifier les erreurs, mais ne loggez jamais les clés privées.
- Audit réseau: vérifiez les règles NAT et les routes pour éviter les fuites DNS ou IP.
- Accès administratif: limitez l’accès SSH et privilégiez l’authentification par clé publique.
Checklist par rôle
Administrateur réseau:
- Mettre à jour le système et les paquets WireGuard.
- Vérifier le pare-feu et le NAT.
- Tester le routage entre wg0 et eth0.
Ops / SRE:
- Automatiser la génération et l’ajout de pairs via scripts idempotents.
- Implémenter sauvegarde chiffrée des clés privées.
- Mettre en place des contrôles SLO/alertes si la connexion tombe.
Support / Helpdesk:
- Collecter le fichier wg show et les sorties ip a avant d’escalader.
- Demander la version WireGuard et le journal systemd du service.
Mini-méthodologie: ajouter un client en production
- Générer une paire de clés sur le client (umask 077).
- Créer la section [Peer] côté serveur avec AllowedIPs en /32.
- Ajouter la section [Peer] côté client avec la clé publique serveur et Endpoint.
- Redémarrer wg-quick@wg0 sur le serveur.
- Vérifier handshake et ping interne.
- Automatiser et consigner l’opération dans un contrôle de version sécurisé.
Dépannage rapide
Symptômes courants et actions:
- Pas de handshake: vérifier Endpoint (IP/port) et règles NAT/pare-feu.
- Paquets reçus mais pas de réponse: vérifier AllowedIPs sur les deux côtés.
- Perte de connexion derrière NAT: utiliser PersistentKeepalive = 15 sur le client.
- Interface wg0 absente: vérifier les logs systemd (sudo journalctl -u wg-quick@wg0).
Commandes utiles
- sudo wg pour état des clés et handshakes
- sudo ip a show wg0 pour vérifier l’adresse IP
- sudo firewall-cmd –list-all pour l’état du pare-feu
- sudo journalctl -u wg-quick@wg0 -e pour logs récents
Compatibilité et migration
- WireGuard fonctionne sur la plupart des distributions Linux et sur d’autres OS; adaptez les chemins de configuration selon la plateforme.
- Si vous migrez depuis OpenVPN/IPSec: la logique de périphérie change (pairs par clé), prévoyez une fenêtre de migration et tests de routage.
Fiche technique rapide
- Port UDP utilisé: 37822 (exemple configurable)
- Plage VPN utilisée dans ce tutoriel: 192.168.10.0/24
- Adresse serveur VPN: 192.168.10.1
- Exemple d’adresse client: 192.168.10.2 (/32 côté serveur)
- PersistentKeepalive recommandé: 15s pour NAT
Tests d’acceptation simplifiés
- Le client ping 192.168.10.1 avec succès.
- sudo wg montre un latest handshake récent et transfert de données.
- Le trafic sortant du réseau 192.168.10.0/24 est NATé via l’IP publique du serveur.
Modèle mental
WireGuard est un VPN basé sur des paires de clés asymétriques; pensez chaque pair comme un “identifiant cryptographique” qui autorise le trafic entre IPs privées définies dans AllowedIPs.
Glossaire en une ligne
- Peer: un pair WireGuard (client ou autre serveur) identifiable par une clé publique.
- AllowedIPs: plage(s) IP autorisées pour ce peer, utilisée aussi comme route.
- Endpoint: adresse publique et port à atteindre pour initier une connexion.
Exemple de playbook minimal pour ajouter un client
- Générer clés sur client: wg genkey | tee privatekey | wg pubkey > publickey
- Capter la clé publique du client et l’ajouter au serveur (wg0.conf -> [Peer]).
- sudo systemctl restart wg-quick@wg0 sur serveur.
- Démarrer client et vérifier handshake.
Résumé
Vous devriez maintenant disposer d’un serveur WireGuard opérationnel sur CentOS 8 et d’un client Linux configuré pour s’y connecter. Appliquez les durcissements et tests décrits avant d’ouvrir le service en production.
Important: conservez toujours vos clés privées hors des sauvegardes non chiffrées et documentez la procédure de rotation des clés.
Si vous avez des questions spécifiques sur une étape, fournissez les logs (sudo wg, journalctl du service) et l’état du pare-feu pour un diagnostic plus précis.
Matériaux similaires

Créer un pool Btrfs et activer le miroir sur Linux

Installer CyanogenMod 12.1 sur Lenovo A2010

Animer textes et emojis dans Messages iPhone

PWAs dans Firefox : activer et utiliser

Libérer de l'espace iPhone sans supprimer d'apps
