Un VPN prêt à l’emploi en cinq minutes

Alexandre 92 jours

Dès lors qu’on voyage un peu, même en France, il est courant de se connecter au réseau sans-fil du lieu où on se trouve ne serait-ce que pour lire ses courriels ou envoyer des nouvelles à toute la famille via une application de discussion instantanée. Quoi de plus banal, n’est-ce pas ?

Certes, mais quelle confiance accordez-vous au réseau auquel vous accédez ? Personnellement, aucune. En effet, le réseau peut très bien être proposé par une tierce personne mal intentionnée. Avant l’avènement du HTTPS, il était bon pour une personne mal intentionnée de snifer le réseau pour guetter, par exemple, des identifiants de connexion.

Autre chose, acceptez-vous que le propriétaire du Wifi puisse savoir ce que vous avez fait ?
Personnellement, non, mais parfois on n’a pas tellement le choix. En effet, la plupart des réseaux ouvert disposent de conditions d’utilisations, que personne ne lit, qui permettent à l’entreprise de stocker et parfois analyser votre navigation. Cela permet certes de couvrir l’entreprise en cas d’utilisation illicite, mais également de faire de la publicité ciblée.

Je ne vous ai pas convaincu, tant pis ; voyons une utilisation plus banale d’un VPN : relié deux réseaux distants entre eux. Un exemple comme un autre, utiliser le Steam Link pour jouer sur votre PC portable où que vous soyez. Bon ok, Wireguard n’a pas encore de client officiel pour Windows, mais ça va venir !

Cette fois je pense avoir convaincu un petit peu plus de monde, du coup, on va pouvoir parler de la solution retenue.

Après quelques jours à me prendre la tête avec l’historique OpenVPN, je me suis penché sur Wireguard. Ce choix m’a été proposé lors d’une discussion avec des libristes et cet article, très bien rédigé, à fini de me convaincre.

Je ne vais pas copier le travail déjà effectuer, mais résumer en très gros, pour la solution soit effectivement prête à l’emploi en cinq minutes.

Avant de commencer, quelques points importants.
Mon objectif principal est de faire passer l’ensemble des données à travers le VPN et ceux en IPv4 et IPv6. En objectif secondaire, je souhaite que le plan d’adressage soit simple.

Effectuer l’installation en suivant la procédure présente sur le site officiel. Sous Debian, j’ai dû ajouter les headers au kernel :

Shell (root)

apt install linux-headers-amd64

Activer l'IP forwarding :

Shell (root)

echo "net.ipv4.ip_forward = 1"  > /etc/sysctl.d/ip_forward.conf
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.d/ip_forward.conf

Personnellement, j’ai redémarré, histoire d’être peinard.
S'installer dans un coin douillet pour travailler :

Shell (root)

cd /tmp

Générer les clefs pour la partie serveur :

Shell (root)

wg genkey | tee PrivateKey.srv | wg pubkey > PublicKey.srv

Créer le fichier de configuration du serveur :

Shell (root)

nano /etc/wireguard/wg0.conf

Configurer le serveur en collant ces quelques lignes :

[Interface]
Address = 192.168.70.254/24, fd42:70::254/64
ListenPort = 1194
PrivateKey = << contenu de PrivateKey.srv >>
PostUp = iptables -t nat -A POSTROUTING -o << interface de sortie du serveur >> -j MASQUERADE; ip6tables -t nat -A POSTROUTING -o << interface de sortie du serveur >> -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o << interface de sortie du serveur >> -j MASQUERADE; ip6tables -t nat -D POSTROUTING -o << interface de sortie du serveur >> -j MASQUERADE

Éditer les éléments en gras entourés de supérieurs/inférieurs :

  • << contenu de PrivateKey.srv >> : la clef privée est contenu dans le fichier PrivateKey.srv qu'on a généré précédemment.
  • << interface de sortie du serveur >> : l'interface réseau qui permet au serveur d'avoir accès à internet

Afin d'éviter les aller-retour, nous allons autoriser un premier client ; générer les clefs du client :

Shell (root)

wg genkey | tee PrivateKey.clt1 | wg pubkey > PublicKey.clt1

Modifier le fichier de configuration du serveur :

Shell (root)

nano /etc/wireguard/wg0.conf

Ajouter un ligne vide puis autoriser le client en ajoutant ces lignes :

[Peer]
# << Nom du client  >>
PublicKey = << contenu de PublicKey.clt1 >>
AllowedIPs = 192.168.70.1/32, fd42:70::1/128

A partir de là, le serveur est prêt, le démarrer :

Shell (root)

wg-quick up wg0

Si tout se passe bien, activer le service au démarrage :

Shell (root)

systemctl enable wg-quick@wg0

J'ai pour habitude, peut-être mauvaise, de tout faire a un seul endroit ; du coup, créer le fichier de configuration du client :

Configurer le client en ajoutant les lignes suivantes :

[Interface]
PrivateKey = << contenu de PrivateKey.clt1 >>
Address = 192.168.70.2/24, fd42:70::2/64
DNS = << serveurs DNS >>

Ajouter un ligne vide puis joindre le serveur en ajoutant ces lignes :

[Peer]
PublicKey = << contenu de PublicKey.srv >>
Endpoint = << adresse IP du serveur >>:1194
AllowedIPs = 0.0.0.0/0,::/0

Je regroupe les explications :

  • << serveurs DNS >> : liste de serveurs DNS, séparés par une virgule, utilisés par le client
  • << adresse IP du serveur >> : adresse IP publique du serveur

Le client est maintenant prêt à se connecter au serveur :

Shell (root)

wg-quick up wg0

Vérifier que le client sort bien avec les IP publiques du serveur :

Shell (root)

curl https://ipv4.lafibre.info/ip.php && echo && curl https://ipv6.lafibre.info/ip.php && echo

Sur le serveur, il est possible d'afficher le status des clients avec la commande suivante :

Shell (root)

wg show

Voilà, normalement avec ça, vous avez un VPN fonctionnel.
Je vous invite vivement à lire l'article sur lequel je me suis basé, même si celui-ci est en anglais.

Commentaire

Rédiger

Quelle est la deuxième lettre du mot igtg ?