Placer son serveur local derrière un VPS

Introduction

Comme vous le savez peut-être, j’héberge mes propres services sur un petit serveur à mon domicile. Pour plus de détails, je vous renvoie à cet article.

J’ai prévu de changer de fournisseur d’accès à Internet prochainement. Cependant, mon prochain opérateur utilise probablement la technologie CGNAT, conçue pour faire face à la pénurie d’adresses IP v4. Malheureusement, cette technologie ne permet pas d’avoir une adresse IP publique et les transferts de ports ne sont pas possibles. Ces limitations empêchent l’accès au serveur local depuis internet, ce qui le rend inutile.

J’avais donc besoin de trouver une solution à ce problème.

A la recherche de la bonne solution

Je voyais deux manières d’aborder la chose :

  • trouver un autre fournisseur d’accès à internet : c’est ce que j’ai finalement fait, mais je voulais quand même poursuivre cette expérience. 😛
  • faire transiter le trafic de mon serveur via un VPN : cette solution permet d’utiliser l’adresse IP publique du serveur VPN et le port forwarding devient possible.

J’ai donc choisi la deuxième option, celle du VPN. Là encore, deux possibilités s’offraient à moi :

  • trouver un fournisseur VPN qui permet d’utiliser une adresse IP fixe ainsi que le port forwarding à un prix raisonnable.
  • louer un serveur privé virtuel (VPS) et y installer un serveur VPN que je pourrai configurer comme je le souhaite.

Il est important de savoir que les VPN grand public commerciaux ne sont pas conçus pour cela et ceux qui le permettent sont rares. Il est donc essentiel de bien se renseigner.

Après quelques recherches, je me suis intéressé à PureVPN qui aurait potentiellement pu convenir. Cependant, j’avais un mauvais pressentiment et je n’ai pas réussi à le faire fonctionner. Le tarif était aussi plus élevé que les options qui suivent. J’ai donc finalement décidé de changer de direction.

Je me suis ensuite tourné vers des associations qui militent pour un internet libre et proposent, entre autres, des accès VPN. Je n’ai malheureusement pas pu en profiter car c’était soit trop cher pour mon budget, soit je ne venais pas de la bonne région, ou encore que les inscriptions étaient fermées aux nouveaux utilisateurs. J’ai finalement abandonné et me suis tourné vers l’option du VPS.

Un VPS pour créer son propre serveur VPN

Un VPS est un serveur virtuel privé qui permet d’avoir une adresse IP et des ressources dédiées, sans avoir à acheter ou gérer un serveur physique.

Il existe passablement de solutions de VPS pour tous les besoins et tous les budgets. Personnellement, j’ai choisi Gandi.net, bien que d’autres options auraient pu être possibles.

Pour le choix du VPS, dans notre cas, il est important de faire attention aux points suivants :

  • Trafic et bande passante suffisants, voire illimités : puisqu’on accédera à notre serveur local par le VPS, il est important de ne pas être limité dans le trafic de données.
  • IP publique fixe (en v6 serait un plus) : sur laquelle je pourrai pointer mon nom de domaine, d’où l’intérêt de cette procédure. En principe c’est le cas de tous les VPS mais des exceptions peuvent exister. Ce serait bête de rater ce point.

En revanche, concernant les autres caractéristiques, comme l’espace de stockage, le CPU ou la RAM, on pourra opter pour le minimum.

J’ai pris le serveur d’entrée de gamme qui me revient à moins de CHF 6.- par mois.

Configuration du serveur VPS

Après avoir installé Debian 11 sur mon VPS et configuré une paire de clé pour l’authentification SSH, je me suis attelé à l’installation du VPN.

J’ai d’abord choisi d’installer OpenVPN, avant de me tourner vers WireGuard sous les conseils avisés de mes amis.

OpenVPN est très bien et offre une bonne compatibilité, mais WireGuard est bien plus rapide et moderne. La configuration est aussi plus simple.

Pour installer Wireguard, j’ai suivi cet excellent tutoriel que je recommande. Il vous expliquera les étapes à suivre pour installer et configurer Wireguard, ainsi que le firewall et tout ce qui est nécessaire.

Ensuite, il faudra créer un fichier de configuration pour votre serveur local. Le tutoriel susmentionné vous expliquera aussi comment préparer le client. Pour ma part, ayant un système Yunohost, j’ai pu installer le client Wireguard via l’interface graphique et je n’ai eu besoin que de lui fournir le fichier de configuration.

Configuration des DNS

La dernière étape consistera à configurer les DNS avec l’IP publique du VPS plutôt que celle du serveur local et le tour devrait être joué.

Sur l’interface d’administration du VPS, vous aurez probablement la possibilité de configurer le reverse DNS avec votre nom de domaine. N’oubliez pas de le faire.

Difficultés rencontrées

Bon, j’ai quand même traversé plusieurs difficultés, la principale ayant été le port forwarding qui ne passait pas. Après pas mal de recherches, il est apparu qu’il manquait l’option FORWARD dans le fichier de configuration du serveur Wireguard (wg.conf) :

PostUp = iptables -A FORWARD -i wg0 -j ACCEPT

J’ai également dû ouvrir tous les ports dont j’avais besoin dans le firewall avec cette commande (en remplaçant successivement 80 par les différents ports) :

ufw allow 80

Un autre problème qui est survenu est ce que l’on appelle le hairpinning. Cela signifie que mon serveur fonctionne normalement depuis l’extérieur de mon réseau, mais pas en local. Ce point peut toutefois facilement être corrigé. Il suffit de configurer son routeur pour ajouter une entrée DNS avec le nom de domaine et l’IP local du serveur. Si votre routeur ne permet pas cette configuration, vous pouvez simplement le faire dans le fichier hosts de votre machine.

Finalement, le dernier problème rencontré a été la gestion des certificats LetsEncrypt (pour le HTTPS). En effet, des erreurs sont causées probablement car l’IP du nom de domaine (IP publique du VPS) ne correspond pas à l’IP du serveur (IP publique du réseau local). Je suis en train de travailler sur ce point et mettrai à jour cet article quand j’aurai plus d’informations à ce sujet.

Avantages

Cette architecture me procure les avantages suivants :

  • IP fixe : le VPS fournit une adresse IP fixe. Pas besoin de mettre à jour l’IP des DNS, même si l’adresse IP de mon réseau local change.
  • IP locale cachée : puisque le nom de domaine est configuré avec l’IP du VPS, mon IP locale n’est pas dévoilée, ce qui n’est pas négligeable en termes de sécurité et de confidentialité.
  • Port forwarding : cette configuration permet d’outrepasser les limitations de votre opérateur s’il utilise la technologie CGNAT.
  • Serveur de messagerie : deux problématiques récurrentes en moins :
  • L’IP publique de mon réseau local était sans arrêt blacklistée par les spamlists. En effet, les opérateurs leur envoient régulièrement les plages d’IP “domestiques” sur lesquelles il n’est pas censé y avoir de serveur mail. Je devais régulièrement demander une levée de mon IP sur les spamlists, et parfois ce n’était pas possible. Maintenant, avec l’IP du VPS, ce n’est plus le cas.
  • Je peux enfin configurer le reverse DNS et ainsi paraître plus crédible aux yeux des autres fournisseurs d’emails afin de ne pas finir dans les spams de mes correspondants.

Conclusion

Placer son serveur local derrière un VPS est une bonne solution pour héberger ses propres services à domicile tout en gardant une adresse IP fixe. Cette méthode permet également de contourner les limitations imposées par les opérateurs qui utilisent la technologie CGNAT. Bien que cela puisse sembler complexe au premier abord, cette opération est tout à fait à votre portée.


Newsletter

Recevez ma newsletter mensuelle afin de ne rien rater. Inscrivez-vous ici :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *