Configurer un VPN auto-hébergé à l'aide de Wireguard
Un VPN (Virtual Private Network) 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 gagner l'anonymat lors de l'accès à Internet ou de 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 Wireguard . 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 package wireguard
installe à la fois Wireguard Server et Client. Exécutez la commande suivante sur la machine serveur et la machine cliente.
sudo apt install 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 private_key | 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 interdit aux utilisateurs normaux et que 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 sur077
. 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 private_key
et public_key
. Pour afficher les clés, exécutez :
cat private_key
cat public_key
Copiez la clé privée, nous en avons besoin à l'étape suivante.
Remarque : 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]
Address = 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 de 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
La partie en surbrillance est l'adresse IP
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 l'être wlan0
ou wlp2s0
si l'utilisateur est connecté à un réseau WiFi à l'aide d'une carte sans fil.
Remplacez le in PostUp
et PostDown
par votre interface ; dans cet exemple, c'est le cas eth0
. PostUp
et les PostDown
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 la iptables
commande 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 Echap , puis tapez :wq
et appuyez sur Entrée pour enregistrer et quitter.
Si vous utilisez un ufw
pare - feu sur le serveur, nous devons autoriser les connexions UDP au port du serveur VPN, 51190.
ufw allow 51190/udp
Démarrage du service
Maintenant que la configuration est terminée, nous pouvons démarrer le service VPN Wireguard.
Pour permettre au service de démarrer au démarrage, exécutez :
systemctl enable [email protected]
Notez que voici wg0
le nom du fichier de configuration.
Pour démarrer le service, exécutez :
service [email protected] start
Vérifiez que le service a démarré avec succès :
service [email protected] status
Vérifiez que l'interface que nous avons créée dans le fichier de configuration a démarré, à l'aide de la commande IP.
ip a show wg0
Le serveur VPN Wireguard est maintenant configuré et en cours d'exécution. Configurons le client maintenant.
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 paire de clés publique/privée 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 les fichiers client_private_key
et client_public_key
.
Vérifiez qu'ils ont été créés à l'aide de la cat
commande.
cat client_private_key
cat 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éez le fichier de configuration avec le nom que vous souhaitez. Nous allons le créer avec le nom wg0-client
de cet exemple.
vim wg0-client.conf
Ajoutez la configuration suivante.
[Interface]
# IP Address and Private Key of the Client
Address = 10.20.43.2/24
PrivateKey =
[Peer]
# Public key, IP Address and Port of the Server
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.
Ajoutez la clé privée du client générée à l'étape précédente à la ligne 4 du code de configuration ci-dessus.
Sous « Peer », nous ajoutons des informations sur le serveur VPN Wireguard auquel nous voulons nous connecter.
Entrez la clé publique du serveur. Entrez l' adresse IP du serveur , que nous avons précédemment notée, et le port au format donné par rapport au 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 Echap , puis tapez :wq
et appuyez sur Entrée pour enregistrer et quitter.
Activez le service client pour qu'il s'exécute à chaque démarrage et démarrez-le.
systemctl enable [email protected]
service [email protected] start
Vérifiez si le service a démarré.
service [email protected] status
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.
Retournez au serveur. Tout d'abord, arrêtez le service VPN .
service [email protected] stop
Ensuite, ouvrez le fichier de configuration pour ajouter la configuration pour le pair (client).
vim /etc/wireguard/wg0.conf
Ajoutez les lignes suivantes au fichier.
[Peer]
PublicKey =
AllowedIPs = 10.20.43.2/32
Maintenant, redémarrez le service VPN .
service [email protected] start
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 s'assurer que la communication du tunnel VPN fonctionne. Exécutez ce qui suit sur le client :
ping 10.20.43.1
Ensuite, 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 https://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écessitent un niveau plus élevé de connaissances en réseau et en routage pour être configurés. 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 .