Guide des technologies

Installer WireGuard sur CentOS 8 — tutoriel pas à pas

7 min read Sécurité réseau Mis à jour 25 Sep 2025
WireGuard sur CentOS 8 — guide complet
WireGuard sur CentOS 8 — guide complet

Serveur CentOS avec schéma de connexion WireGuard

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

  1. Générer une paire de clés sur le client (umask 077).
  2. Créer la section [Peer] côté serveur avec AllowedIPs en /32.
  3. Ajouter la section [Peer] côté client avec la clé publique serveur et Endpoint.
  4. Redémarrer wg-quick@wg0 sur le serveur.
  5. Vérifier handshake et ping interne.
  6. 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

  1. Générer clés sur client: wg genkey | tee privatekey | wg pubkey > publickey
  2. Capter la clé publique du client et l’ajouter au serveur (wg0.conf -> [Peer]).
  3. sudo systemctl restart wg-quick@wg0 sur serveur.
  4. 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.

Auteur
Édition

Matériaux similaires

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

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

Installer CyanogenMod 12.1 sur Lenovo A2010
Android

Installer CyanogenMod 12.1 sur Lenovo A2010

Animer textes et emojis dans Messages iPhone
Tutoriels

Animer textes et emojis dans Messages iPhone

PWAs dans Firefox : activer et utiliser
Navigateurs

PWAs dans Firefox : activer et utiliser

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

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

WireGuard sur CentOS 8 — guide complet
Sécurité réseau

WireGuard sur CentOS 8 — guide complet