Connexion Premium

[Tuto] Utiliser son VPS comme serveur Wireguard pour un VPN maison (et gratuit)

Cette actualité est sponsorisée par NextVPN !

[Tuto] Utiliser son VPS comme serveur Wireguard pour un VPN maison (et gratuit)

Illustration : Flock

Dans un premier tuto, nous avons installé un gestionnaire de mot de passe – Vaultwarden – sur un VPS à quelques euros par mois. Il ronronne depuis sur le serveur, sans en utiliser toutes les ressources, loin de là ! Nous en profitons donc pour ajouter un autre service : un serveur VPN, avec Wireguard. Coût de l’opération : 0 euro. On vous détaille toutes les étapes.

Le 16 mars à 10h49

Un VPN dans le cas présent, pourra vous être utile sur des réseaux Wi-Fi publics et/ou partagés afin de créer un tunnel chiffré entre votre ordinateur/smartphone et votre VPS. Cela permet d’éviter des attaques du type Man in the middle ou le récent AirSnitch qui casse l’isolement des utilisateurs, par exemple. Vous pouvez également l’utiliser en déplacement afin d’avoir une IP française.

Pour choisir votre VPS, nous avons, pour rappel, publié un comparatif de trois offres à moins de 5 euros par mois. Nous sommes actuellement en train de passer en revue plusieurs hébergeurs et leurs VPS pas cher afin de vous expliquer toutes les subtilités. L’importance des vCore avec Ionos, les enjeux de la virtualisation avec LWS, etc.

Quant à l’utilité des VPS, nous avons publié un premier tuto sur la manière d’auto-héberger un gestionnaire de mot de passe, qui dispose d’applications mobiles et d’extensions pour navigateurs gratuites. Un VPN est un second usage, et c’est loin d’être le dernier ! Si ce n’est pas encore fait, pensez à le sécuriser !

Installation de Wireguard sur le serveur, puis création des clés

L’installation est simple et rapide. Il faut tout d’abord se connecter au VPS en SSH, nous utilisons PuTTY pour cela. Une fois sur le terminal, on commence par un « update » des dépôts ensuite on lance l’installation de Wireguard via la commande apt (cela installe automatiquement les dépendances wireguard-tools au passage) :

Il reste 78% de l'article à découvrir.

Cadenas en colère - Contenu premium

Soutenez un journalisme indépendant,
libre de ton, sans pub et sans reproche.

Accédez en illimité aux articles

Profitez d'un média expert et unique

Intégrez la communauté et prenez part aux débats

Partagez des articles premium à vos contacts

Commentaires (34)

votre avatar
J'apprécie beaucoup Wireguard, fiable et très largement plus simple a mettre en place qu'un OpenVPN.

J'ai mis la configuration en place via networkd et je trouve plus simple et plus élégant d'avoir la configuration réseau centralisée et avec des méthodes unifiées plutot que de passer par du spécifique. La création des clés se fait de la même façon si je me souvient bien, et ensuite on a dans le répertoire /etc/systemd/network (comme pour toutes les interface réseaux), un fichier .netdev avec les paramètres de l'interface réseau (nom, clés, port d'écoute, interlocuteurs...) et un fichier .network avec les paramètres réseau (IP, masque, routage), le second n'étant pas spécifique à Wireguard.
votre avatar
Hello @koocotte ,
Je suis intéressé par la configuration, est-ce que tu pourrais nous la partager s'il te plait ?
votre avatar
Bien sur.

Assurez vous que c'est bien systemd-networkd qui gère votre réseau et pas un autre système.

Pour créer un VPN entre les machines Alpha et Bravo:

Fichier alpha:/etc/systemd/network/99-wg0bravo.netdev


[NetDev]
Name=wg0bravo
Kind=wireguard

[WireGuard]
# Clé privée (PrivateKeyFile a partir de systemd 242)
#PrivateKeyFile=/etc/wireguard/alpha.key
PrivateKey=XXXXXXX
# Port d'écoute, si la machine est joignable directement par d'autres
ListenPort=1234

[WireGuardPeer]
# Clé publique du pair
PublicKey=XXXXXXX
# Clé partagée
PresharedKey=XXXXXXX
# Adresse de la machine distante, si elle est joignable directement
Endpoint=bravo.example.org:1234
# Durée maximum d'inactivité avant l'envoi d'un paquet permettant de conserver la connexion
PersistentKeepalive=59
# Adresses IP ou sous-réseaux accessibles depuis ce pair
AllowedIPs=0.0.0.0/0
AllowedIPs=::/0


Fichier alpha:/etc/systemd/network/99-wg0bravo.network


Match]
Name=wg0bravo

[Network]
# Les adresses sont:
# 192.168.246.1 pour alpha,
# 192.168.246.2 pour bravo
# 192.168.246.3 broadcast
Address=192.168.246.1/30
IPForward=ipv4

[Route]
Gateway=192.168.246.2
Destination=A.B.C.D/24

[Route]
Gateway=192.168.246.2
Destination=W.X.Y.Z/24



Je fais le symétrique pour l'autre serveur, les sections Route permettent aux machines des LAN des deux cotés de se voir via Wireguard
votre avatar
Merci !
votre avatar
J'ai déjà configuré ce dernier sur un vps ionos et les performances, spécifiquement pour wiregard, sont catastrophiques, alors qu'en débit dans d'autres situation ça dépote, quelqu'un saurait pourquoi ?

Ps : on peut aussi installer wiregard sur son propre routeur OpenWRT, pensez au port 443 pour que ça passe partout !
votre avatar
Ionos bride peut-être le débit en UDP, vecteur de pas mal de [D]DOS sur Internet.
votre avatar
On peut pousser la chose encore plus loin en installant openmptcprouter et agreger deux liens (cas classique fibre/adsl+4G ou 4G seul) pour s'en servir soit de lien redondant, soit obtenir une ip publique sur un lien 4g/5g. Pour ma part j'avais utilisé cela pour avoir l'adresse ipv4 publique de mon vps avec une sim illimité free (pas d'ipv4 publique) car mon adsl etait moribond avant l'arrivee de la
fibre. (Depuis que j'ai la fibre j'ai rendu le vps.)
Mais ca impose d'avoir un routeur supplementaire (ou de le remplacer) chez soi par rapport à la solution proposée dans l'article.

Edit : beaucoup plus simple en fait, openwrt le gère nativement (load balancing), sauf si on veut vraiment agreger les debits (aucun interet a priori avec la fibre et surtout goulot etranglement du vps à 400Mb/s). Openmpctprouter n'est pas encore obsolete, mais semble peu maintenu.
votre avatar
Merci pour l'article.

Est-ce qu'il n'y aurait pas une erreur de configuration ? Le PostUp et PostDown sont identiques.
votre avatar
Pour le PostUp, il y a le paramètre -A (add) et pour le PostDown un -D (Delete) :mad:
votre avatar
Salut,
tu n'as pas entendu parler de pivpn seb ?
ça n'est pas limité au raspi, ça marche sur tout debian/ubuntu en ipv4 comme ipv6.
votre avatar
Hum non, connait pas pivpn, mais ça semble être intéressé à regarder rapidement :)
votre avatar
J'ai installé pivpn sur un VPS d'OVH il y a 3 ans, je m'en sers tous les jours et j'en suis très satisfait !
votre avatar
je lui préfère adguard self hosted
votre avatar
Je trouve que le principal souci avec ce genre de configuration pour surfer est que le VPS est souvent dans les pools d'IP demandant des vérifications à la connexion (quand on n'est pas tout simplement interdit d'accès) sur pas mal de sites.

Et pour simplifier le tout, je trouve que tailscale est plus simple d'emploi (une grande partie de la complexité des clés, ... étant masqué). On choisit son exit node (une machine chez soi, un vps, ...) et hop
votre avatar
Je trouve que le principal souci avec ce genre de configuration pour surfer est que le VPS est souvent dans les pools d'IP demandant des vérifications à la connexion (quand on n'est pas tout simplement interdit d'accès) sur pas mal de sites.
Oui, le risque est de se prendre des murs de Cloudflare et équivalents... Ça m'arrivait déjà quand j'ai eu recours à la box 4G et qu'à cause de l'IP partagée des réseaux mobiles je me prenais des CAPTCHA toutes les 5 minutes -_-
votre avatar
Ca peut être utilisé en remplacement de "vrais" serveurs VPN tel qu'utilisé pour se connecter a un réseau d'entreprise ?
votre avatar
Non, la tu te connectes au réseau d’OVH, ca ne permet pas de créer un tunnel sécurisé entre un poste et une entreprise, il faut dans ce cas que le serveur VPN soit sur le réseau de l’entreprise
votre avatar
Pour ça, il fautv que le serveur/routeur soit dans le réseau de l'entreprise, avec une ip publique, bien sûr, comme tous les vpn.
votre avatar
Pour ceux qui se demanderait "mais c'est réellement utile d'installer un VPN comparé à ... ?", la réponse est oui :
- le coût n'est pas si élevé que ça et on peut facilement l'installer avec des outils tiers comme Yunohost / DietPi.
- si on veut augmenter la rentabilité, on peut également installer d'autres apps (mots de passes, notes, boites mails, etc ...).
- on a la maîtrise sur les données

Bref, à une époque où on parle de souveraineté, je trouve ça plutôt important et le seul élément "compliqué" que j'ai eu à mettre en place, c'est l'installation automatique des mises à jour (unattended-upgrades) qui demande à aller modifier un fichier de config. Le reste se fait avec une interface graphique.

Et en préférence :
- si le système doit être accessible de l'extérieur : Yunohost (qui se chargera tout seul d'installer les certificats Let's Encrypt)
- si c'est en interne uniquement : DietPi

Le seul truc important à retenir (surtout si ça doit être accessible à l'extérieur), c'est que chaque app augmente la surface d'attaque, donc le risque de compromission du système.
votre avatar
Les backup, ne pas oublier les backup.

(et la vérification régulière de restauration)
votre avatar
J'en profite : j'étais intéressé par Borg pour la sauvegarde mais c'est l'instance installée sur le serveur qui prend l'initiative d'envoyer la sauvegarde. Pas pratique quand le serveur de destination est géré en interne, inaccessible depuis l'extérieur
Est-ce qu'il n'existerait pas l'inverse où un serveur R (receveur) contacte un serveur S (sauvegardé) pour initier la sauvegarde de S et une fois fini, de récupérer les données depuis R ?

En gros :
- R demande à S d'initier la sauvegarde
- S sauvegarde et informe R quand c'est fini
- R télécharge la sauvegarde
votre avatar
Je ne connais pas l'outil, mais je verrai plusieurs options :


  • Utiliser des API s'il en propose.

  • Quand j'avais encore mon dédié multi-vms, c'était une instance Jenkins qui servait d'ordonnanceur

  • Moins hardcore, un déclenchement via ssh et pooling régulier de l'état si t'as pas de possibilité de webhook

votre avatar
Personnellement je n'expose que deux services, et wireguard. Le reste faut forcément être via le VPN pour y accéder.
votre avatar
"Si vous avez des idées ou des envies, n’hésitez pas à nous en faire part via les commentaires."
Faites votre choix : github.com GitHub
On va empêcher Seb de :dors: pendant quelques mois. :D
votre avatar
votre avatar
Wireguard est installé chez moi en docker sur un VM Debian qui instancie plusieurs dockers pour ce qui est des OPs de filtrage, de routage ou de fw. Avec un mini cluster, on assure à peu de frais un solution robuste et scalable et ca permet de tester d'autres solutions très simplement.
votre avatar
Je commence à déployer WireGuard sous Docker, j'essaye avec wg-easy, cela fonctionne assez vite (supporte du user remap, dans mon souvenir avec un noyau "récent" j'ai même enlevé la capability SYS_MODULE).
Par contre, je ne trouve pas de logs complets (avec les adresses IP, les tentatives...) pour surveiller l'usage.
WireGuard logue assez peu, et je n'ai pas encore trouvé comment loguer plus, surtout sous docker dans cette image.
Tu évoques du filtrage et plus, peux-tu en dire plus, en particulier sur les logs, STP ?
votre avatar
Tu as spécifié un DNS interne sur ta config WG? Ici, Les requêtes DNS transitent par AdGuard qui est un autre docker.
votre avatar
Par défaut dans wg-easy, cela retourne des config (pour importer le tunnel dans un client) comme

[Interface]
PrivateKey = ------
Address = 10.8.0.2/24
DNS = 1.1.1.1
votre avatar
Tu as quelle version de wg-easy? J'ai vérifié il semble en effet que la version 14 ne permette pas de modifier le DNS mais la version 15 devrait le permettre.
votre avatar
Dans wg-easy c'est toujours la dernière version. Il est possible au premier démarrage de changer les DNS.
Il y a une page de doc, sur wg-easy et AdGuard https://wg-easy.github.io/wg-easy/latest/examples/tutorials/adguard/
votre avatar
Donc tu peux mettre l'IP de ton DNS ( ie: Adguard) qui longue les queries DNS.
votre avatar
Je ne sais pas si c'est lié à wireguard ou aux FAI/fournisseurs cloud mais les débits sont catastrophiques. Chez moi, testé avec free et bouygues (FAI destination) pour accéder à un NAS et regarder une vidéo ça ne passe pas :( Au début ça fonctionne puis au bout de quelques minutes/secondes plus de connexion. Je n'ai jamais compris pourquoi. Après je feinte ne utilisant le port udp/123 pour pouvoir être tjs autorisé sur les réseaux clients. C'est ptet ça.
votre avatar
Merci pour le tuto, je serais très intéressé par la version ipv6 ;-)