Ce tutoriel va vous montrer comment configurer votre propre serveur VPN WireGuard sur CentOS/RHEL. WireGuard est spécialement conçu pour le noyau Linux. Il s'exécute à l'intérieur du noyau Linux et vous permet de créer un tunnel VPN rapide, moderne et sécurisé.
Caractéristiques du VPN WireGuard
- Léger et super rapide, faisant sauter OpenVPN hors de l'eau.
- Multiplateforme. WireGuard peut fonctionner sous Linux, BSD, macOS, Windows, Android, iOS et OpenWRT.
- L'authentification des utilisateurs se fait en échangeant des clés publiques, similaires aux clés SSH.
- Il attribue des adresses IP de tunnel statiques aux clients VPN. Certaines personnes peuvent ne pas l'aimer, mais cela peut être utile dans certains cas.
- Les appareils mobiles peuvent basculer entre le Wi-Fi et le réseau mobile de manière transparente sans perdre de connectivité.
- Il vise à remplacer OpenVPN et IPSec dans la plupart des cas d'utilisation.
Exigences
Pour suivre ce tutoriel, vous aurez besoin d'un VPS (Virtual Private Server) pouvant accéder librement aux sites bloqués (Hors de votre pays ou système de filtrage Internet). Je recommande Kamatera VPS, qui comprend :
- 30 jours d'essai gratuit.
- À partir de 4 $/mois (1 Go de RAM)
- VPS basé sur KVM hautes performances
- 9 centres de données dans le monde, dont les États-Unis, le Canada, le Royaume-Uni, l'Allemagne, les Pays-Bas, Hong Kong et Israël
Suivez le tutoriel lié ci-dessous pour créer votre serveur Linux VPS chez Kamatera.
- Comment créer un serveur VPS Linux sur Kamatera
Une fois que vous avez un VPS exécutant CentOS/Alma Linux/Rocky Linux, suivez les instructions ci-dessous.
Ce didacticiel suppose que le serveur VPN et le client VPN exécutent tous deux CentOS/RHEL système d'exploitation.
Étape 1 :Installez WireGuard sur le serveur et le bureau CentOS/RHEL
Connectez-vous à votre serveur CentOS/RHEL, puis exécutez les commandes suivantes pour installer WireGuard.
CentOS 8
sudo dnf install elrepo-release epel-release -ysudo dnf install kmod-wireguard wireguard-tools -y
RHEL 8
sudo dnf install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpmsudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest -8.noarch.rpmsudo dnf install kmod-wireguard wireguard-tools -y
CentOS/RHEL 7
sudo yum install epel-release https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpmsudo yum install yum-plugin-elreposudo yum install kmod-wireguard wireguard-tools -yUtilisez ensuite les mêmes commandes pour installer WireGuard sur votre ordinateur CentOS/RHEL local (le client VPN).
Étape 2 :Générer une paire de clés publique/privée
Serveur
Créez un répertoire pour WireGuard.
sudo mkdir -p /etc/wireguard/Exécutez la commande suivante sur le serveur CentOS/RHEL pour créer une paire de clés publique/privée, qui sera enregistrée sous
/etc/wireguard/
répertoire.wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key
Client
Créez un répertoire pour WireGuard.
sudo mkdir -p /etc/wireguard/Exécutez la commande suivante pour créer une paire de clés publique/privée sur l'ordinateur CentOS/RHEL local (le client VPN).
wg genkey | sudo tee /etc/wireguard/client_private.key | wg pubkey | sudo tee /etc/wireguard/client_public.keyÉtape 3 :Créer un fichier de configuration WireGuard
Serveur
Utilisez un éditeur de texte en ligne de commande comme Nano pour créer un fichier de configuration WireGuard sur le serveur CentOS/RHEL.
wg0
sera le nom de l'interface réseau.sudo dnf installer nanosudo nano /etc/wireguard/wg0.confCopiez le texte suivant et collez-le dans votre fichier de configuration. Vous devez utiliser votre propre clé privée de serveur et votre clé publique client.
[Interface]Adresse =10.10.10.1/24ListenPort =51820PrivateKey =cD+ZjXiVIX+0iSX1PNijl4a+88lCbDgw7kO78oXXLEc=[Peer]PublicKey =AYQJf6HbkQ0X0Xyt+cTMTuJe3RFwbuCMF46LKgTwzz4=10.pre>
Où :
- Adresse :Spécifiez l'adresse IP privée du serveur VPN. Ici, j'utilise la plage de réseau 10.10.10.0/24, donc cela n'entrera pas en conflit avec la plage de votre réseau domestique. (La plupart des routeurs domestiques utilisent 192.168.0.0/24 ou 192.168.1.0/24). 10.10.10.1 est l'adresse IP privée du serveur VPN.
- Clé privée :La clé privée du serveur VPN, qui se trouve dans le
/etc/wireguard/server_private.key
fichier sur le serveur. - ListenPort :Le serveur VPN WireGuard écoutera sur le port UDP 51820, qui est le port par défaut.
- Clé publique :La clé publique du client VPN, qui se trouve dans le
/etc/wireguard/client_public.key
fichier sur l'ordinateur client. - IP autorisées :adresses IP que le client VPN est autorisé à utiliser. Dans cet exemple, le client ne peut utiliser que l'adresse IP 10.10.10.2 à l'intérieur du tunnel VPN.
Enregistrez et fermez le fichier. (Pour enregistrer un fichier dans l'éditeur de texte Nano, appuyez sur Ctrl+O
, puis appuyez sur Entrée pour confirmer. Appuyez sur Ctrl+X
pour quitter.)
Modifiez le mode d'autorisation des fichiers afin que seul l'utilisateur root puisse lire les fichiers.
sudo chmod 600 /etc/wireguard/ -R
Client
Utilisez un éditeur de texte en ligne de commande comme Nano pour créer un fichier de configuration WireGuard sur votre ordinateur CentOS/RHEL local. wg-client0
sera le nom de l'interface réseau.
sudo nano /etc/wireguard/wg-client0.conf
Copiez le texte suivant et collez-le dans votre fichier de configuration. Vous devez utiliser votre propre clé privée client et votre clé publique serveur.
[Interface] Adresse =10.10.10.2/24DNS =10.10.10.1PrivateKey =COFA + X5UVHF + A3XJ6Enlatg + DoE3I5PHMGKRMKYXI =[Peer] PublicKe 51820PersistentKeepalive =25
Où :
- Adresse :Spécifiez l'adresse IP privée du client VPN.
- DNS :spécifiez 10.10.10.1 (le serveur VPN) comme serveur DNS. Il sera configuré via le
resolvconf
commande. Vous pouvez également spécifier plusieurs serveurs DNS pour la redondance comme ceci :DNS = 10.10.10.1 8.8.8.8
- Clé privée :La clé privée du client, qui se trouve dans le
/etc/wireguard/client_private.key
fichier sur l'ordinateur client. - Clé publique :La clé publique du serveur, qui se trouve dans le
/etc/wireguard/server_public.key
fichier sur le serveur. - IP autorisées :0.0.0.0/0 représente l'ensemble d'Internet, ce qui signifie que tout le trafic vers Internet doit être acheminé via le VPN.
- Point de terminaison :L'adresse IP publique et le numéro de port du serveur VPN. Remplacez 12.34.56.78 par la véritable adresse IP publique de votre serveur.
- PersistentKeepalive :envoie un paquet vide authentifié au pair toutes les 25 secondes pour maintenir la connexion active. Si PersistentKeepalive n'est pas activé, le serveur VPN peut ne pas être en mesure d'envoyer un ping au client VPN.
Enregistrez et fermez le fichier.
Modifiez le mode de fichier afin que seul l'utilisateur root puisse lire les fichiers.
sudo chmod 600 /etc/wireguard/ -R
Étape 4 :Activer le transfert IP sur le serveur
Pour que le serveur VPN achemine les paquets entre les clients VPN et Internet, nous devons activer le transfert IP. Modifier sysctl.conf
fichier.
sudo nano /etc/sysctl.conf
Ajoutez la ligne suivante à la fin de ce fichier.
net.ipv4.ip_forward =1
Enregistrez et fermez le fichier. Appliquez ensuite les modifications avec la commande ci-dessous. Le -p l'option chargera les paramètres sysctl depuis /etc/sysctl.conf dossier. Cette commande conservera nos modifications lors des redémarrages du système.
sudo sysctl -p
Étape 5 : Configurer le masquage d'adresses IP sur le serveur
Exécutez la commande suivante pour activer le masquage IP pour le 10.10.10.0/24
sous-réseau dans le pare-feu du serveur.
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.10.10.0/24" masquerade'sudo systemctl recharger firewalld
Cela cachera votre réseau VPN du monde extérieur. Ainsi, Internet ne peut voir que l'IP de votre serveur VPN, mais pas l'IP de votre client VPN, tout comme votre routeur domestique masque votre réseau domestique privé.
Si votre CentOS/RHEL ne trouve pas le firewall-cmd
commande, vous devez installer firewalld et démarrer le service.
sudo dnf install firewalldsudo systemctl start firewalld
Étape 6 :Installez un résolveur DNS sur le serveur
Puisque nous spécifions le serveur VPN comme serveur DNS pour le client, nous devons exécuter un résolveur DNS sur le serveur VPN. Nous pouvons installer le serveur DNS bind9.
liaison d'installation sudo dnf
Démarrez BIND 9 avec :
sudo systemctl start nommé
Et activez le démarrage automatique au démarrage :
sudo systemctl enable nommé
Vous pouvez vérifier son statut avec :
statut systemctl nommé
Exemple de sortie :
● named.service - Berkeley Internet Name Domain (DNS) Chargé :chargé (/usr/lib/systemd/system/named.service ; activé ; prédéfini par le fournisseur :désactivé> Actif :actif (en cours d'exécution) depuis Sun 2020-05 -17 11:07:34 EDT ; il y a 9 s Processus :7203 ExecStop=/bin/sh -c /usr/sbin/rndc stop> /dev/null 2>&1 || /bin/kill -TE> Processus :7218 ExecStart =/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited,> Process :7215 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" =="yes" ] ;> PID principal :7220 (named) Tâches :4 (limite :5045) Memory :55.5M CGroup :/system.slice/named.service └─7220 /usr/sbin/named -u named -c /etc/named.conf -4
Astuce :si la commande ci-dessus ne se ferme pas immédiatement, appuyez sur Q.
Editez le fichier de configuration principal de BIND /etc/named.conf
.
sudo nano /etc/named.conf
Dans les options
clause, vous pouvez trouver les deux lignes suivantes.
port d'écoute 53 { 127.0.0.1 ; };écoutez-sur-v6 port 53 { ::1; } ;
Cela rend named
écouter sur localhost uniquement. Si vous souhaitez autoriser les clients du même réseau à interroger les noms de domaine, commentez ces deux lignes. (ajoutez des doubles barres obliques au début de chaque ligne)
// port d'écoute 53 { 127.0.0.1; };// écoute sur le port 53 v6 { ::1; } ;
Trouvez la ligne suivante.
allow-query { localhost ; } ;
Ajoutez la plage réseau 10.10.10.0/24 afin que les clients VPN puissent envoyer des requêtes DNS. Notez que vous devez terminer chaque plage réseau par un point-virgule.
allow-query { localhost ; 10.10.10.0/24 ; } ;
Enregistrez et fermez le fichier. Redémarrez BIND9 pour que les modifications prennent effet.
sudo systemctl restart nommé
Ensuite, vous devez exécuter la commande suivante pour autoriser les clients VPN à se connecter au port 53.
sudo firewall-cmd --zone=public --permanent --add-rich-rule='rule family="ipv4" source address="10.10.10.0/24" accept'
Étape 7 :Ouvrir le port WireGuard dans le pare-feu
Exécutez la commande suivante pour ouvrir le port UDP 51820 sur le serveur.
sudo firewall-cmd --permanent --add-port=51820/udpsudo systemctl recharger firewalld
Étape 8 :Démarrer WireGuard
serveur
Exécutez la commande suivante sur le serveur pour démarrer WireGuard.
sudo wg-quick up /etc/wireguard/wg0.conf
Pour l'arrêter, exécutez
sudo wg-quick vers le bas /etc/wireguard/wg0.conf
Vous pouvez également utiliser le service systemd pour démarrer WireGuard.
sudo systemctl start [email protected]
Si le démarrage a échoué, vous devez consulter le journal pour savoir ce qui ne va pas.
sudo journalctl -eu [email protected]
Activez le démarrage automatique au démarrage du système avec la commande suivante.
sudo systemctl enable [email protected]
Vérifiez son état avec la commande suivante. Son statut doit être active (exited)
.
statut systemctl [protégé par e-mail]
Le serveur WireGuard est maintenant prêt à accepter les connexions client.
Client
Démarrez WireGuard.
sudo systemctl start [email protected]
Si le démarrage a échoué, vous devez consulter le journal pour savoir ce qui ne va pas.
sudo journalctl -eu [email protected]
Si vous voyez l'erreur suivante dans le journal, vous pouvez essayer de redémarrer le système d'exploitation.
RTNETLINK répond :opération non prise en charge
Activez le démarrage automatique au démarrage du système.
sudo systemctl enable [email protected]
Vérifiez son état :
statut systemctl [protégé par e-mail]
Allez maintenant sur ce site :http://icanhazip.com/
pour vérifier votre adresse IP publique. Si tout s'est bien passé, il devrait afficher l'adresse IP publique de votre serveur VPN au lieu de l'adresse IP publique de votre ordinateur client.
Vous pouvez également exécuter la commande suivante pour obtenir l'adresse IP publique actuelle.
boucle https://icanhazip.com
Conseils de dépannage
Vous pouvez envoyer un ping du serveur VPN au client VPN (ping 10.10.10.2
) pour voir si le tunnel fonctionne. Si vous voyez le message d'erreur suivant dans le ping,
ping :sendmsg :clé requise non disponible
il se peut que les AllowedIPs
paramètre est erroné, comme une faute de frappe.
Si le tunnel VPN est établi avec succès, mais que l'adresse IP publique du client ne change pas, c'est parce que le masquage dans le pare-feu ne fonctionne pas. Une fois, j'ai eu une faute de frappe dans les règles du pare-feu, ce qui a empêché mon ordinateur de naviguer sur Internet.
Notez que je ne recommande pas d'utiliser SaveConfig=true
dans l'[Interface]
section du fichier de configuration WireGuard. SaveConfig
indique à WireGuard d'enregistrer la configuration d'exécution à l'arrêt. Donc, si vous ajoutez des [Peer]
supplémentaires dans le fichier de configuration, puis redémarrez WireGuard, vos configurations nouvellement ajoutées seront écrasées.
Si votre VPN ne fonctionne toujours pas, essayez de redémarrer le serveur VPN.
sudo systemctl restart [email protected]
Arrêtez ensuite le client VPN.
sudo systemctl stop [email protected]
Et mettre à niveau les packages logiciels sur le client VPN.
mise à jour sudo dnf
Ensuite, redémarrez le client VPN.
sudo shutdown -r nowsudo systemctl start [email protected]
Ajout de clients VPN supplémentaires
WireGuard est conçu pour associer une adresse IP à un client VPN. Pour ajouter plus de clients VPN, vous devez créer une paire de clés privée/publique unique pour chaque client, puis ajouter la clé publique de chaque client VPN dans le fichier de configuration du serveur (/etc/wireguard/wg0.conf
) comme ceci :
[Interface] Adresse =10.10.10.1/24PrivateKey =UIFH + xxjj0g0uAzj6vpqsbb / o68Syvqdmyjpy / flgfa =écouter =51820 [peer] publicy =75Vnv7hqfh + 3qit5ohzkcjfbjx8tc6ck62. 1Z/3rtl0i7cJorcinB7T4UOIzScifPNEIESFD8=IP autorisées =10.10.10.3/32[Peer]PublicKey =EVstHZc6QamzPgefDGPLFEjGyedJk6SZbCJttpzcvC8=IP autorisées =10.10.10.4/32
Chaque client VPN aura une adresse IP privée statique (10.10.10.2, 10.10.10.3, 10.10.10.4, etc.). Redémarrez le serveur WireGuard pour que les modifications prennent effet.
sudo systemctl restart [email protected]
Ajoutez ensuite la configuration WireGuard sur chaque client VPN comme d'habitude.
Politique de routage, tunneling fractionné et kill switch VPN
Je vais maintenant vous montrer comment utiliser le routage des règles , tunneling fractionné , et interrupteur d'arrêt VPN avec WireGuard VPN. Remarque qu'il n'est pas recommandé de les utiliser conjointement les uns avec les autres. Si vous utilisez le routage de stratégie, vous ne devez pas activer le split tunneling ou le kill switch VPN, et vice versa.
Routage des règles
Par défaut, tout le trafic sur le client VPN sera acheminé via le serveur VPN. Parfois, vous souhaiterez acheminer uniquement un type de trafic spécifique, en fonction du protocole de la couche transport et du port de destination. C'est ce qu'on appelle le routage de stratégie.
Le routage de stratégie est configuré sur l'ordinateur client et nous devons d'abord arrêter la connexion VPN.
sudo systemctl stop [email protected]
Modifiez ensuite le fichier de configuration du client.
sudo nano /etc/wireguard/wg-client0.conf
Par exemple, si vous ajoutez les 3 lignes suivantes dans le [interface]
section, alors WireGuard créera une table de routage nommée "1234" et ajoutera la règle IP dans la table de routage. Dans cet exemple, le trafic sera acheminé via le serveur VPN uniquement lorsque TCP est utilisé comme protocole de couche de transport et que le port de destination est 25, c'est-à-dire lorsque l'ordinateur client envoie des e-mails.
Table =1234PostUp =ip rule add ipproto tcp dport 25 table 1234PreDown =ip rule delete ipproto tcp dport 25 table 1234
Enregistrez et fermez le fichier. Ensuite, redémarrez le client WireGuard.
sudo systemctl start [email protected]
Tunneling fractionné
Par défaut, tout le trafic sur le client VPN sera acheminé via le serveur VPN. Voici comment activer le split tunneling, donc uniquement le trafic vers le 10.10.10.0/24
La plage IP sera tunnellisée via WireGuard VPN. Ceci est utile lorsque vous souhaitez créer un réseau privé pour plusieurs serveurs cloud, car les clients VPN s'exécuteront sur des serveurs cloud et si vous utilisez un tunnel VPN complet, vous perdrez probablement la connexion aux serveurs cloud.
Modifiez le fichier de configuration du client.
sudo nano /etc/wireguard/wg-client0.conf
Modifier
IP autorisées =0.0.0.0/0
À
IP autorisées =10.10.10.0/24
Ainsi, le trafic sera acheminé via VPN uniquement lorsque l'adresse de destination se trouve dans la plage IP 10.10.10.0/24. Enregistrez et fermez le fichier. Redémarrez ensuite le client WireGuard.
sudo systemctl restart [email protected]
Commutateur d'arrêt VPN
Par défaut, votre ordinateur peut accéder à Internet via la passerelle normale lorsque la connexion VPN est interrompue. Vous pouvez activer la fonction kill switch, qui empêche le flux de paquets non chiffrés via des interfaces non-WireGuard.
Arrêtez le processus client WireGuard.
sudo systemctl stop [email protected]
Modifiez le fichier de configuration du client.
sudo nano /etc/wireguard/wg-client0.conf
Ajoutez les deux lignes suivantes dans le [interface]
rubrique.
PostUp =iptables -I SORTIE ! -o %i -m marque ! --mark $(wg show %i fwmark) -m type_adresse ! --dst-type LOCAL -j REJECTPreDown =iptables -D OUTPUT ! -o %i -m marque ! --mark $(wg show %i fwmark) -m type_adresse ! --dst-type LOCAL -j REJETER
Comme ceci :
[Interface]Adresse =10.10.10.2/24DNS =10.10.10.1PrivateKey =cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=PostUp =iptables -I SORTIE ! -o %i -m marque ! --mark $(wg show %i fwmark) -m type_adresse ! --dst-type LOCAL -j REJECTPreDown =iptables -D OUTPUT ! -o %i -m marque ! --mark $(wg show %i fwmark) -m type_adresse ! --dst-type LOCAL -j REJECT[Peer]PublicKey =RaoAdsIEIwgV9DHNSubxWVG+nZ1GP/c3OU6A/efBJ0I=AllowedIPs =0.0.0.0/0Endpoint =12.34.56.78:51820PersistentKeepalive =25
Enregistrez et fermez le fichier. Démarrez ensuite le client WireGuard.
sudo systemctl start [email protected]