Wireguard over 4G : la fureur du dragon

Bonjour à toutes et à tous,
Depuis maintenant plusieurs mois, je ne cesse d’améliorer le lab que j’ai mis en place chez moi. Ce lab est constitué, entre autres, de nombreux services dont je me sert dans le cadre de mes études ou alors pour mon plaisir personnel.

L’architecture de ce dernier est simple. Je n’ai qu’un seul appareil qui est en dehors de mon réseau privé : un VPS que je loue chez OVH pour une bouchée de pain. J’utilise ce serveur en grande partie en tant que Reverse Proxy afin de pouvoir accéder à mes services privés depuis Internet. Pour ceux qui ne voient pas de quoi je parle, c’est par ici.

Mon Reverse Proxy fonctionne étroitement avec un VPN Wireguard qui permet à mes appareils connectés sur mon réseau privé d’être joignables par mon Reverse Proxy. Dans ce tunnel chiffré transitent alors mes données, qui sont ensuite envoyées en HTTPS sur Internet. Voici un schéma résumant la topologie:

Maintenant que la topologie vous est claire, entrons dans le vif du sujet.

En effet, j’ai constaté que mon lien VPN entre mon VPS et mes clients internes était stable. Cependant, des phénomènes étranges se produisaient. Utilisant un serveur Nextcloud localement, ce dernier est associé à un sous-domaine accessible depuis l’extérieur. Ce service avait une facheuse tendance à ne pas fonctionner correctement (timeout et eventuellement une erreur Bad Gateway). Je me suis alors mis à essayer d’identifier la cause du problème. J’ai donc fait des captures réseau et ai remarqué que lors d’un accès à mon serveur web:

  • La requête arrivait bien au VPS
  • Elle était bien redirigée vers le bon service
  • Le service recevait bien la requête
  • Mais le réponse n’arrivait jamais en retour sur le VPS

Bizarre de ne pas recevoir seulement la réponse alors que le tunnel était toujours monté…

Après des mois de frustration à blâmer mon routeur 4G, à m’arracher les cheveux, à reconfigurer mon VPN, réinstaller mon VPS et mes serveurs, je suis enfin tombé par accident sur la solution ! En cherchant du côté de vieux forums parlant des comparatifs entre les différents modèles de routeurs 4G, une réponse à un post m’a mis la puce à l’oreille. Ce dernier citait un paramètre que j’avais jusqu’alors totalement mis de côté : le MTU.

De manière synthétique, le MTU est la valeur qui fixe la taille maximum des paquets transmis sur le réseau. Par défaut, cette valeur est réglée sur “1500”.

En baissant la valeur du MTU à 1360, je n’ai plus eu aucune coupure ni aucun problème sur mon lien VPN !

Pour régler le MTU sur votre Wireguard, il suffit d’éditer le fichier de configuration de ce dernier (souvent localisé dans le répertoire “/etc/wireguard”) et d’ajouter la ligne suivante dans la rubrique “[Interface]”:

MTU = 1360

Remontez votre lien Wireguard avec la commande suivante et tous vos ennuis disparaîtrons comme par magie :

wg-quick down wg0 && wg-quick up wg0

Enjoy ! 🙂

Laisser un commentaire