Wireguard comme serveur VPN, avec une Freebox et avec Yunohost
# Introduction
Depuis quelques temps, Wireguard est devenu la norme en terme de VPN opensource et a pris le pas sur Openvpn, qui a longtemps été la référence. Quand je parle de VPN, je ne parle pas des "VPN" que l’on peut utiliser en location pour avoir des IP de sortie sur d’autres continents, pour bénéficier d’accès à des vidéos des services VOD régionalisé, par exemple.
Mais d’une connexion sécurisée entre ma machine et un réseau particulier sur lequel j’ai la maitrise. Ou une connexion en situation de nomadisme via un serveur relais sur lequel j’ai une relative maitrise et qui est utilisé comme point de sortie, me permettant de sécuriser à minima ma connexion.
Ce billet de blog ne sera pas un tutoriel détaillé, n’expliquera pas les configurations techniques de Wireguard. Il y a tout un tas de ressources existantes sur le sujet et si il y a lieu, je renverrai vers elle.
# Mes besoins
Je dispose de deux "appareils" qui peuvent me servir de serveur VPN en activant un service Wireguard, qui disposent d’une adresse IP publique fixe et via lesquels je veux me connecter au travers d’une connexion Wireguard.
* une Freebox avec une IP fixe (disposant d’IP v4 & v6 publique) associée à un nom de domaine (diu fait de mon auto-hébergement ;
* un serveur VPS chez Hetzner, dans un datacenter en Allemagne, disposant d’IPv4 également associée à un nom de domaine.
En situation de mobilité, quelque soit l’appareil (PC portable, tablette ou smartphone), je veux pouvoir me connecter de façon sécurisé et ainsi utiliser un réseau mis à disposition (pour la plupart du temps un réseau Wifi "gratuit") en relative sérénité.
Comment on met tout ça en place et quelles sont les difficultés que j’ai rencontrées... et comment je les ai résolues
# Freebox et Wireguard
Depuis quelques temps, les serveurs Freebox (la box routeur) propose d’activer un service de serveur Wireguard, tout comme était déjà proposé un service de serveur OpenVPN.
La principale différence avec OpenVPN est que le service d’OpenVPN mode serveur (la Freebox propose aussi un client OpenVPN) propose 2 modes :
* bridgé (on est sur le réseau local et on voit les machines locales)
* routé (on ressort sur Internet comme si on était sur le réseau local
Cf mon article à l’époque La Freebox v6 dispose d’un serveur et d’un client VPN.
Avec le service serveur Wireguard, on a un mixe des 2 : une fois la connexion lancé, on est sur le réseau local et on voit les machines locales mais on a aussi accès à Internet et on est alors vu des machines en face comme ayant l’IP publique de la Freebox. C’est comme si on était chez soi.
Pour la mise en place/activation de Wireguard sur la Freebox, il y a ce tutoriel en images Comment activer Wireguard sur votre Freebox ? qui explique pas à pas, où aller dans l’interface d’administration de la box, FreeboxOS, pour activer et configurer Wireguard, crée le bon utilisateur etc. (C’est assez intuitif/simple).
Une fois le tutoriel suivi, on a un la possibilité de télécharger le fichier de configuration pour notre client (sur la machine nomade) ou de scanner le QRCODE pour configurer automatiquement le client (fonctionnalité de l’application Wireguard sur smartphone/tablette).
# Yunohost et Wireguard
Application serveur
Attention, le besoin ici est que l’instance Yunohost fasse office de serveur VPN Wireguard.
Sur un serveur VPS que je loue chez Hetzner (l’OVH Allemand), sur lequel tourne Yunohost, j’ai utilisé l’application prépackagée disponible sur Yunohost https://github.com/YunoHost-Apps/wireguard_ynh
Une fois Wireguard installé comme n’importe quelle application, on a une tuile/raccourci qui vient s’ajouter dans l’interface utilisateur. C’est un raccourci vers l’application Wireguard UI, une interface graphique assez simple avec 3 écrans qui permet de configurer Wireguard (choix des DNS...), de créer un client et ainsi d’avoir le fichier de configuration à importer au sein de l’application cliente de son appareil qui utiliser ce serveur VPN Wireguard.
C’est assez intuitif. Je ne détaille pas ici.
Application cliente
Il existe aussi une application cliente Wireguard, qui permet de connecter son instance Wireguard à un serveur Wireguard. Ce n’est pas le sujet de ce billet. Si le besoin est d’avoir un Yunohost hébergé derrière une connexion Wireguard, il y a ce tutoriel qui explique comment faire pas à pas
https://blog.torguard.net/yunohost-wireguard-a-noobs-guide-to-diy-web-hosting/
# Yunohost sur un VPS chez Hetzner, Wireguard, perte de l’IPv6
Le gros problème que j’ai constaté
Suite à l’installation de Wireguard, sur ce serveur VPS chez Hetzner (j’insiste sur le VPS chez Hetzner, c’est important), le serveur ne fonctionne plus en IPv6. Il a toujours une adresse publique mais les routes en IPv6 ne marchent plus. Yunohost signale des erreurs. Let’s encrypt ne veut plus mettre à jour les certificats automatiquement (et c’est comme ça que je me suis rendu compte de la perte de connectivité IPv6, en rencontrant une erreur d’expiration de certificat). Et ça remarche si on désintalle Wireguard. Et ça repart si on le remet.
Sur ma machine autohébergé chez moi, derrière ma Freebox, sur laquelle tourne la même version de Yunohost, j’ai installé la même application Wireguard. Et je n’ai pas eu de soucis.
J’ai comparé quelques fichiers de configurations entre les 2 machines pour comprendre... J’ai regardé les scripts d’installation du paquet, posé une issue sur Github et était aidé par le mainteneur du paquet. Et j’ai cherché à base de différents mots clefs sur un moteur de recherche et ai fini par trouver : La problématique de perte d’IPv6 est lié à la configuration par défaut des VPS Heztner.
Le tutoriel suivant datant de 2019 Fixing IPv6 on Hetzner Cloud : the story of a lifetime explique le pourquoi et le comment, ce qu’il faut faire... Tout est expliqué et la résolution est assez simple.
Je joins un export PDF de ce tutoriel à ce billet au cas où la source venait à disparaître...
Mon VPS date d’il y a quelques années (même si il est à jour et a évolué en version Debian & Yunohost, il y a des reste de la configuration d’origine comme celle qui m’a posé soucis), je n’en ai pas d’autre et je ne sais pas si c’est corrigé.
# Clients que j’utilise
Pour mes différents machines, j’ai installé le client officiel Wireguard, disponible sur la plupart des OS (https://www.wireguard.com/install/) et importé le fichier de configuration fournie par la Freebox ou par l’application Wireguard.
# Connexion au serveur Wireguard via le port 443
Les deux machines (VPS et Freebox à la maison) que j’utilise pour mes services Wireguard ont des services webs et le port 443 est déjà utilisé.
Mais mes parents ayant une Freebox sur une connexion fibre et n’ayant pas d’autohébergement chez eux, j’ai activé sur leur Freebox Wireguard avec comme port pour le service le port 443.
Cela me permet donc de faire passer le VPN sur le port 443 et cela permet d’avoir une connexion VPN qui puisse être établie sur des réseaux sur lesquels il y a blocage sur la plupart des ports sortants (le 80 et 443 sont souvent les ports qui restent ouverts ; cela dépend aussi du niveau de filtrage/blocage par un proxy etc. Ce n’est pas une garantie à 100% que ça marche).
# Vérifier son IP
Une fois la connexion au VPN Wireguard lancée, il est assez simple de vérifier que l’on passe bien par le serveur. Depuis un navigateur, on se rend sur l’URL suivante https://www.mon-ip.com et on vérifie que l’adresse indiqué correspond bien à celle attendue (cela nécessite en prérequis de connaitre son IP publique de sa Freebox ou de son serveur VPS... bien évidemment).
# Vitesse de connexion potentielle
Une fois les connexions VPN lancées sur les serveurs des Freebox, la vitesse de la connexion, bien que sur une connexion fibre, est indiquée d’environ 40Mbits/s via les speedtest. (Test depuis chez mes parents, connexion au Wireguard de la Freebox de chez moi ; test depuis chez moi, connexion au Wireguard de chez mes parents). A comparer au potentiel de 1Gbits/s pour la connexion (je suis en filaire, pas en Wifi).
Pour comparer via le VPS chez Hetzner, je suis à 500 Mbits/s. La connexion VPN Wireguard est donc limité par la puissance du processeur des Freebox (Mini 4k et Révolution), là où le VPS a 4 coeurs et un peu de mémoire vive (8go).
A confirmer/vérifier de façon plus rigoureuse et scientifique, bien évidemment !
# Projets à faire
Tester l’application Wireguard cliente de Yunohost
Vu que j’ai maintenant deux serveurs Wireguard. On peut imaginer une connexion permanente entre mes deux instances Yunohost pour faciliter le transfert via une connexion sécurisée. Si je mets ça en place, ce sera l’objet d’un autre billet de blog/tutoriel.
Configurer les DNS
Dans la partie administration des services Wireguard, il y a la possibilité de configurer/définir des serveurs DNS qui seront utilisés pour la résolution. L’idée est de faire cette configuration et de vérifier qu’elle est bien prise en compte à la la suite de l’initialisation de la connexion VPN.
# Conclusion
A l’usage, Wireguard est simple et correspond à mes attentes. Ce billet de retour d’expérience se veut assez long et complet, j’espère qu’il sera utile à d’autres.