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 à usage général pour fonctionner sur des interfaces embarquées et des superordinateurs et fonctionne sur Linux, Windows, macOS, iOS, Android, BSD et diverses autres plates-formes.
Ce didacticiel explique comment installer Wireguard VPN sur un serveur basé sur CentOS 8 et s'y connecter à l'aide d'un client Linux (CentOS/Fedora/Ubuntu).
Étape 1 - Mettre à jour le système
Avant d'aller plus loin, il est impératif de mettre à jour votre système pour installer les dernières mises à jour.
$ sudo dnf update
Étape 2 - Installer et activer le référentiel EPEL
Les packages Wireguard requis se trouvent dans le référentiel EPEL, nous devons donc l'installer et l'activer.
$ sudo dnf install epel-release
$ sudo dnf config-manager --set-enabled PowerTools
Nous avons également activé le référentiel PowerTools puisque les packages EPEL en dépendent.
Étape 3 - Installer Wireguard
Activez le référentiel Wireguard.
$ sudo dnf copr enable jdoss/wireguard
Installez 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éez 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
fichier dans le /etc/wireguard
répertoire.
Ensuite, créez 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 à la fois une clé publique et une clé privée pour le Wireguard et les écrit dans les fichiers respectifs.
Affichez la clé privée que nous venons de créer.
$ sudo cat privatekey
Notez la clé et copiez-la car nous en aurons besoin pour configurer Wireguard.
Ensuite, modifiez le fichier de configuration.
$ sudo nano /etc/wireguard/wg0.conf
Ajoutez 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 a une section appelée [Interface]
où la partie serveur est définie.
Il 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 définissons également SaveConfig
à true
. Cela indiquera au service Wireguard d'enregistrer automatiquement sa configuration active dans ce fichier à l'arrêt.
Appuyez sur Ctrl + W pour fermer le fichier et saisissez Y lorsque vous êtes invité à 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 cela, créez un fichier wireguard.xml
avec l'éditeur Nano.
$ sudo nano /etc/firewalld/services/wireguard.xml
Collez 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>
Appuyez sur Ctrl + W pour fermer le fichier et saisissez Y lorsque vous êtes invité à enregistrer le fichier.
Ensuite, activez le service Wireguard dans le pare-feu.
$ sudo firewall-cmd --permanent --add-service=wireguard
Activez le masquage pour que tout le trafic entrant et sortant de 192.168.10.0/24 routé via notre adresse IP publique du serveur 203.1.114.98/24 .
$ sudo firewall-cmd --permanent --add-masquerade
Enfin, rechargez le pare-feu pour activer les règles.
$ sudo firewall-cmd --reload
Répertoriez les règles de pare-feu actuelles à 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 le transfert IPv4
Créez /etc/sysctl.d/99-custom.conf
fichier.
$ sudo nano /etc/sysctl.d/99-custom.conf
Collez 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
Appuyez sur Ctrl + W pour fermer le fichier et saisissez Y lorsque vous êtes invité à enregistrer le fichier.
La portée du code dans le fichier ci-dessus est en dehors de la portée de ce didacticiel, donc pour l'instant, utilisez-le tel quel.
Rechargez les modifications.
$ sudo sysctl -p /etc/sysctl.d/99-custom.conf
Par défaut, le pare-feu ne laissera pas wg0
et eth0
les interfaces communiquent entre elles. Nous devons donc ajouter l'interface Wireguard au réseau interne et activer le masquage.
$ sudo firewall-cmd --add-interface=wg0 --zone=internal
$ sudo firewall-cmd --permanent --zone=internal --add-masquerade
Étape 7 - Activer et démarrer le service Wireguard
Ensuite, nous devons activer et démarrer le service Wireguard.
$ sudo systemctl enable [email protected]
$ sudo systemctl start [email protected]
Vous pouvez vérifier si l'interface Wireguard, wg0
est opérationnel à l'aide de 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
Vous pouvez trouver les instructions d'installation du client Wireguard pour votre distribution Linux sur leur page d'installation officielle.
Une fois le client installé, vous devez 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
Notez la clé privée que vous obtenez à la fin. Ensuite, nous devons modifier le fichier de configuration que nous venons de créer.
$ sudo nano /etc/wireguard/wg0.conf
Ajoutez 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
Notez 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.
Le [Peer]
est l'endroit où vous entrez la configuration du serveur auquel le client se connectera. Ici, nous avons ajouté la clé publique, l'adresse IP publique et un ensemble d'adresses IP autorisées contenant l'adresse IP privée de notre serveur. PersistentKeepalive
indique à WireGuard d'envoyer un paquet UDP toutes les 15 secondes, ceci est utile si vous êtes derrière un NAT et que vous souhaitez maintenir la connexion active.
Appuyez sur Ctrl + W pour fermer le fichier et saisissez Y lorsque vous êtes 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 ajouter à nouveau la configuration du client au serveur pour lui faire connaître le client.
Arrêtez d'abord le service Wireguard.
$ sudo systemctl stop [email protected]
Ouvrez le fichier wg0.conf pour le modifier.
$ sudo nano /etc/wireguard/wg0.conf
Ajoutez 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
Appuyez sur Ctrl + W pour fermer le fichier et saisissez Y lorsque vous êtes invité à enregistrer le fichier.
Le [Peer]
les sections définissent les autres membres du réseau VPN. Vous pouvez en ajouter autant que nécessaire.
Ils contiennent leur clé publique, qui doit correspondre à la clé privée des pairs dans son [Interface]
rubrique.
Notez que toute connexion entrante est d'abord authentifiée par 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. Étant donné que 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é aux étrangers.
Redémarrez le service Wireguard.
$ sudo systemctl start [email protected]
Étape 10 - Tester
Vérifions si le client et le serveur sont connectés en toute sécurité à l'aide du VPN. Pour tester la connexion, exécutez les commandes suivantes sur votre 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 dans ce tutoriel. Vous devriez maintenant avoir un serveur VPN basé sur Wireguard basé sur un serveur CentOS 8. Si vous avez des questions, posez-les dans les commentaires ci-dessous.