Configurer un VPN auto-hébergé à l'aide de Wireguard
UNE VPN (réseau privé virtuel) permet à l'utilisateur de se connecter à un réseau privé à distance comme si l'ordinateur de l'utilisateur était directement connecté au réseau privé. La technologie a été initialement développée afin de permettre l'accès à distance au réseau privé interne d'une entreprise, pour les employés qui ne sont pas réellement présents sur le site du réseau interne.
Un serveur VPN est déployé à l'emplacement du réseau interne. Ce serveur est sur le réseau public et est accessible via un client VPN par l'employé. L'authentification est nécessaire pour se connecter au serveur VPN. La communication entre le serveur VPN et le client VPN est sécurisée à l'aide d'un protocole de tunneling. Notez que cette communication peut être cryptée ou non, mais généralement dans la plupart des protocoles VPN, elle est cryptée.
Une autre utilisation du VPN est de obtenir l'anonymat lors de l'accès à Internet ou pour contourner les restrictions géographiques imposées lors de l'accès à certains sites Web. Dans de tels cas, le réseau auquel l'utilisateur souhaite se connecter n'est pas un réseau privé, mais plutôt Internet.
De nombreux protocoles VPN ont été développés au fil des ans. Ces protocoles utilisent différents protocoles de tunneling et algorithmes de cryptage pour la communication entre le serveur et le client.
L'un de ces protocoles, qui est de plus en plus utilisé récemment, est Grillage. Wireguard est plus léger, plus simple et plus performant que les protocoles VPN traditionnellement utilisés tels que OpenVPN, IPSec. Il est déjà implémenté pour Windows, Mac OS et un grand nombre de distributions Linux. Sous Linux, il est implémenté en tant que module de noyau. Il est disponible dans les référentiels officiels d'Ubuntu 20.04.
Dans cet article, nous verrons comment configurer un serveur et un client VPN Wireguard dans Ubuntu 20.04.
Installation
Pour cet article, je configure un serveur Wireguard sur un Linode Ubuntu 20.04 et un client Wireguard sur ma machine locale avec Ubuntu 20.04.
Le paquet fil de fer
installe à la fois Wireguard Server et Client. Exécutez la commande suivante sur la machine serveur et la machine cliente.
sudo apt installer wireguard
Configuration du serveur
Clés de sécurité
Nous devons générer un ensemble de paires de clés publiques/privées afin d'authentifier et de sécuriser la connexion Wireguard. Cela peut être fait à l'aide des commandes suivantes :
sudo su cd /etc/wireguard umask 077 wg genkey | tee clé_privée | wg pubkey > public_key
Notez que nous effectuons toutes les tâches de configuration en tant que superutilisateur. La raison en est que l'accès au répertoire /etc/wireguard
est empêché pour les utilisateurs normaux et l'accès au répertoire ne peut pas être obtenu avec des privilèges sudo uniquement pour un utilisateur normal.
Ensuite, nous définissons le masque de création de fichier sur 077
. Cela signifie que chaque fois qu'un nouveau fichier est créé dans ce dossier par un processus, ses autorisations seront automatiquement masquées avec 077. Par exemple. si un fichier est créé dans ce dossier avec les autorisations 777, il est automatiquement masqué et les autorisations deviennent effectivement 700. Ceci est fait pour que seul le propriétaire du fichier dispose de toutes les autorisations sur le fichier et que tout le monde n'en ait pas.
Sur la ligne suivante, nous générons la paire de clés publique/privée pour le serveur. Ils sont enregistrés dans des fichiers Clé privée
et Clé publique
. Pour afficher les clés, exécutez :
chat private_key chat public_key
Copiez la clé privée, nous en avons besoin à l'étape suivante.
Noter: Ne partagez jamais votre clé privée publiquement !
Fichier de configuration
Créons un fichier de configuration pour le serveur Wireguard. Vous pouvez choisir n'importe quel nom pour le fichier. Nous allons créer un fichier wg0.conf
dans cet exemple.
vim wg0.conf
Ajoutez ce qui suit au fichier.
[Interface] Adresse = 10.20.43.1/24 SaveConfig = true ListenPort = 51190 PrivateKey = PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o -j MASQUERADE
Collez la clé privée que nous avons précédemment copiée à la ligne 5 du code ci-dessus.
Nous devons configurer Wireguard sur un sous-réseau (virtuel) différent que l'adresse IP du serveur. Ici, j'ai utilisé 10.20.43.1 pour le serveur et j'utiliserai 10.20.43.2 pour le client. N'importe quel sous-réseau peut être utilisé ici. Pour obtenir l'adresse IP du serveur et de l'interface, exécutez :
ifconfig
Notez l'adresse IP du serveur. Ceci est requis lors de la configuration du client.
L'interface utilisée par le serveur, comme le montre l'image ci-dessus, est eth0
. Le nom de l'interface peut différer en fonction du réseau de l'utilisateur, il peut être réseau local sans fil0
ou wlp2s0
dans le cas où l'utilisateur est connecté à un réseau WiFi à l'aide d'une carte sans fil.
Remplace le dans
Afficher
et PostDown
avec votre interface ; dans cet exemple c'est eth0
.Afficher
et PostDown
Les directives sont utilisées pour spécifier quelles commandes doivent être exécutées lorsque le serveur démarre et s'arrête respectivement. Dans notre exemple, nous utilisons le iptables
pour définir des règles IP telles que l'adresse IP du serveur est partagée par les clients. Les règles seront supprimées une fois que le serveur s'arrêtera.
Enregistrez et quittez le fichier. Lorsque vous utilisez vim, appuyez sur Esc, puis tapez :wq
et appuyez sur Entrer pour enregistrer et quitter.
Si vous utilisez un euh
pare-feu sur le serveur, nous devons autoriser les connexions UDP au port du serveur VPN, 51190.
ufw autoriser 51190/udp
Démarrage du service
Maintenant que la configuration est terminée, nous pouvons démarrer le service VPN Wireguard.
Autoriser le service pour démarrer au démarrage, exécutez :
systemctl activer wg-quick@wg0
Notez qu'ici wg0
est le nom du fichier de configuration.
Commencer le service, exécutez :
service wg-quick@wg0 démarrer
Vérifier que le service a démarré avec succès :
état du service wg-quick@wg0
Vérifiez que l'interface nous avons créé dans le fichier de configuration a démarré, à l'aide de la commande IP.
ip un spectacle wg0
Le serveur VPN Wireguard est maintenant configuré et en cours d'exécution. Configurons maintenant le client.
Configuration des clients
La configuration client pour Wireguard est plus ou moins la même qu'une configuration serveur. Nous générons les clés pour le client, puis créons un fichier de configuration.
Clés de sécurité
Pour générer la clé publique/privée paire pour le client, exécutez :
sudo su cd /etc/wireguard umask 077 wg genkey | tee client_private_key | wg pubkey > client_public_key
Les clés publiques et privées du client sont désormais générées respectivement dans des fichiers client_private_key
et client_public_key
.
Vérifiez qu'ils ont été créés, en utilisant chat
commander.
chat client_private_key chat client_public_key
Copiez la clé privée affichée car nous devons l'ajouter au fichier de configuration du client.
Fichier de configuration
Créer le fichier de configuration avec n'importe quel nom que vous souhaitez. Nous allons le créer avec le nom wg0-client
pour cet exemple.
vim wg0-client.conf
Ajoutez la configuration suivante.
[Interface] # Adresse IP et clé privée de l'adresse client = 10.20.43.2/24 PrivateKey = [Peer] # Clé publique, adresse IP et port du serveur PublicKey = Endpoint = :51190 AllowedIPs = 0.0.0.0/0, : :/0
Saisissez l'adresse de sous-réseau du client. Comme décrit précédemment, nous utilisons 10.20.43.2
pour le client dans cet exemple.
Ajouter la clé privée du client généré à l'étape précédente à la ligne 4 dans le code de configuration ci-dessus.
Sous « Peer », nous ajoutons des informations sur le serveur VPN Wireguard nous voulons nous connecter.
Entrez la clé publique du serveur. Entrer le l'adresse IP du serveur, que nous avons noté précédemment, et le port dans le format donné contre Point de terminaison. Il s'agit du port que nous avons spécifié dans le fichier de configuration du serveur et sur lequel le service VPN du serveur a démarré.
Les adresses IP autorisées doivent être saisies telles quelles (0.0.0.0/0) afin que toute demande sur une adresse IP publique dynamique utilisée par le client soit toujours transmise au serveur VPN.
Enregistrez et quittez le fichier. Lorsque vous utilisez vim, appuyez sur Esc, puis tapez :wq
et appuyez sur Entrer pour enregistrer et quitter.
Activer le service client à exécuter à chaque démarrage, et démarrez-le.
systemctl activer wg-quick@wg-client service wg-quick@wg-client start
Vérifier si le service a démarré.
service wg-quick@wg-client statut
Ajout d'un pair au serveur
Nous avons maintenant le serveur VPN et le client opérationnels. Cependant, un tunnel sécurisé entre les deux n'est pas établi à moins que nous n'établissions une connexion peer to peer entre le serveur et le client.
Retourner au serveur. D'abord, arrêter le service VPN.
service wg-quick@wg0 arrêter
Ensuite, ouvrez le fichier de configuration pour ajouter une configuration pour le pair (client).
vim /etc/wireguard/wg0.conf
Ajouter les lignes suivantes au fichier.
[Peer] PublicKey = AllowedIPs = 10.20.43.2/32
À présent, redémarrer le service VPN.
service wg-quick@wg0 démarrer
C'est ça! C'est toute la configuration nécessaire pour la configuration du client et du serveur Wireguard VPN. Testons maintenant notre VPN.
Tester le VPN
Tout d'abord, faisons un simple ping du client au serveur, pour nous assurer que la communication du tunnel VPN fonctionne. Exécutez ce qui suit sur le client:
ping 10.20.43.1
Suivant, ouvrez un navigateur Web et ouvrez n'importe quel site Web pour vérifier si vous pouvez vous connecter à Internet à partir de la machine cliente. Vous pouvez également vérifier votre connectivité Internet à partir de la ligne de commande en utilisant wget
.
wget
Maintenant, nous avons vérifié la connectivité du tunnel et la connectivité Internet. Si les deux fonctionnent, nous devons maintenant nous assurer que tout le trafic Internet arrivant au client passe par le serveur.
Pour cela, il suffit de vérifier l'adresse IP du client telle qu'elle est vue par Internet. Une façon de le faire est d'aller sur whatsmyip.org. Ou bien à partir de la ligne de commande, nous pouvons interroger un autre service similaire appelé IP info, en utilisant Curl.
Exécutez ce qui suit sur la machine cliente
curl //ipinfo.io/ip
Oui. C'est l'adresse IP publique du Linode où le serveur VPN est hébergé. C'est ainsi que l'anonymat est obtenu à l'aide du VPN, car partout sur Internet, l'adresse IP du serveur VPN est désormais visible et non celle de votre ordinateur.
Conclusion
La facilité de configuration est l'un des avantages les plus importants de Wireguard par rapport aux logiciels VPN traditionnels comme OpenVPN, qui nécessite un niveau plus élevé de connaissances en réseau et en routage pour être configuré. Cependant, il existe un manque de documentation officielle détaillée pour Wireguard, ce qui peut causer des problèmes si votre configuration Wireguard génère des erreurs ou ne fonctionne pas comme prévu.
Néanmoins, Wireguard est un excellent choix si vous souhaitez un VPN auto-hébergé pour une communication sécurisée sur Internet. Pour en savoir plus sur Wireguard et les protocoles et technologies qu'il utilise, vous pouvez consulter le site officiel.