Menu Fermer

Wireguard : trouver le meilleur MTU (Optimisation)

Pour optimiser Wireguard et obtenir les meilleurs débits entrants et sortants pour votre VPN, vous pouvez chercher la meilleure valeur du le MTU (Maximum transmission unit).
Cela afin de limiter la fragmention IP qui est assez couteuse en ressources et en latence.
Le gain de vitesse peut être important, de l’ordre de 30%.

Dans ce tutoriel, je vous propose de le faire avec nr-wg-mtu-finder qui automatise les tests MTU pour trouver les meilleurs combinaisons pour Wireguard.
Les tests de débits du VPN sont effectués avec iperf.

Comment trouver le meilleur MTU pour optimiser WireGuard

Prérequis

Pour trouver la bonne valeur du MTU, vous pouvez faire des tests successifs avec iperf.
Mais on peut aussi utiliser nr-wg-mtu-finder qui le fait automatiquement.

WireGuard et optimisation du MTU

nr-wg-mtu-finder s’exécute côté client et serveur et utilise iperf pour mesurer les débits.
Les valeurs du MTU seront ensuite modifiées dans le fichier de config /etc/wireguard/wg0.conf via sed et le serveur/client WireGuard est relancé automatiquement.
Cela permet d’effectuer les mesures de bande passante pour chacune des valeurs du MTU.
Une fois cela terminé, le script génère un graphique de mesures des débits par MTU.

Votre installation Wireguard, doit être en place et fonctionnelle. Pour cela, vous pouvez suivre ce tutoriel : WireGuard : installer et configurer un serveur VPN Linux et client (Windows, Android, Ubuntu)
Vous pouvez effectuer les tests depuis une machine virtuelle pour ne pas toucher votre installation en production.
Le fichier de configuration doit comporter une entrée MTU, par exemple :

[Interface]
...
MTU = 1420

[Peer]
...

La solution utilise un serveur iperf3 (port 5201) et un serveur flask (port 5000).
Si vous avez un firewall qui filtre les connexions VPN, vous devez les autoriser côté serveur.
Par exemple avec ufw en remplaçant par votre classe IP :

ufw allow proto tcp from <classe IP>/24 to any port 5201
ufw allow proto tcp from <classe IP>/24 to any port 5000

De même pour autoriser le serveur sur iptables :

iptables -i wg0 -p tcp -m multiport --dports 5000,5201 -j ACCEPT

Comment trouver le meilleur MTU pour optimiser WireGuard

  • Installez les paquets python et iperf3 suivants :
sudo apt install python3-pip iputils-ping iperf3
  • Puis installez le script python sur le client et le serveur wireguard :
pip install nr-wg-mtu-finder==0.2.1 --upgrade
Comment trouver le meilleur MTU pour optimiser WireGuard
  • Ensuite sur le serveur Wireguard, démarrez le serveur nr-wg-mtu-finder en spécifiant les valeurs du MTU minimales et maximales que vous souhaitez tester. Voici la syntaxe à utiliser :
 nr-wg-mtu-finder --mode server --mtu-min 1410 --mtu-max 1420 --mtu-step 2 --server-ip <ip serveur wireguard>
Comment trouver le meilleur MTU pour optimiser WireGuard
  • Une fois le serveur en écoute, exécutez le script côté client, là aussi en spécifiant l’intervalle de valeurs MTU à tester :
nr-wg-mtu-finder --mode peer --mtu-min 1300 --mtu-max 1420 --mtu-step 2 --server-ip <ip serveur wireguard>
Comment trouver le meilleur MTU pour optimiser WireGuard
Comment trouver le meilleur MTU pour optimiser WireGuard

Comment le lire le résultat pour trouver la meilleure valeur du MTU

Il ne reste plus qu’à ouvrir l’image puis de vérifier le résultat.
Le MTU du serveur est en verticale et celui du client en horizontale.
Les zones vertes foncés indiquent des problèmes de connexion. Plus vous allez vers le clair, meilleures sont les performances.

Comment trouver le meilleur MTU pour optimiser WireGuard

Certains ont utilisateurs ont envoyés leurs propres graphiques avec les tests, vous trouverez les résultats ici.