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

Rédigé par Alexandre le 2019-02-22

#vieprivée #debian #loisir

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 deent 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 :

apt install linux-headers-amd64

Activer l'IP forwarding :

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 :

cd /tmp

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

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

Créer le fichier de configuration du serveur :

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 premierent ; générer les clefs duent :

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

Modifier le fichier de configuration du serveur :

nano /etc/wireguard/wg0.conf

Ajouter un ligne vide puis autoriser leent en ajoutant ces lignes :

[Peer]
# << Nom duent  >>
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 :

wg-quick up wg0

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

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 duent :

Configurer leent 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 leent
  • << adresse IP du serveur >> : adresse IP publique du serveur

Leent est maintenant prêt à se connecter au serveur :

wg-quick up wg0

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

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 desents avec la commande suivante :

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.