Menu Fermer

OpenVPN : configurer le MTU et résoudre les problèmes de MTU

OpenVPN est un serveur VPN très populaire qui offre de nombreuses options et qui peut rendre sa configuration compliquée.
Parmi les problèmes courants que l’on peut rencontrer : les problèmes de MTU.
Les problèmes de MTU se manifestent souvent par des connexions qui se bloquent pendant les périodes d’utilisation active.

Dans ce tutoriel, je vous propose de découvrir les options MTU d’OpenVPN et comment configurer le MTU dans OpenVPN.
Je termine par quelques problèmes courants de MTU.

OpenVPN : réglage MTU et résoudre les problèmes de MTU

Comprendre le MTU dans OpenVPN

Le MTU est mesuré en octets et représente la plus grande taille de paquet qui peut être transmise sur un réseau sans être décomposée en fragments plus petits. Des valeurs MTU plus élevées permettent une transmission de données plus efficace, car moins de paquets sont nécessaires pour transmettre la même quantité de données. Cependant, si le MTU est trop élevé et dépasse les capacités de n’importe quel appareil réseau le long du chemin de transmission, une fragmentation peut se produire, entraînant des problèmes de performance ou la perte de paquets

OpenVPN fonctionne en encapsulant les données dans ses propres paquets, qui ont leur propre MTU.
Par défaut, OpenVPN définit un MTU de 1500 octets, qui est le MTU standard pour les réseaux Ethernet.
Le MTU par défaut n’est pas toujours adapté à toutes les configurations de réseau, et il peut être nécessaire de le modifier pour garantir des performances optimales.

TCP MSS et IP/Ethernet MTU

Quelles sont les options MTU dans OpenVPN

ParamètreDescriptionCôté (serveur/client)
tun-mtu 1400Détermine la taille maximale des paquets que le VPN peut transporter,
Du côté du serveur (le serveur VPN), vous pouvez modifier le fichier de configuration du serveur OpenVPN pour définir le MTU à l’aide de l‘option tun-mtu.
Serveur/Client
link-mtu 1400Réfère à la taille maximale de la charge utile UDP qui sont envoyés entre les pairs OpenVPN.
Cette taille n’inclut pas l’en-tête IP ou UDP.
Serveur
mssfix 1400Définit le MTU côté client, vous pouvez utiliser l’option mssfix.
Cette option réduit la taille maximale de segment (MSS) à 1400 octets, ce qui permet d’éviter la fragmentation.
La valeur tun-mtu du serveur ne doit pas être modifiée (à 1500) sinon le client ignore cette option.
Client
fragment 1400Permet la fragmentation effectuée par OpenVPN lui-même en utilisant son propre algorithme interne (pas la fragmentation IP), et en tant que telle, elle doit être acceptée par les deux points d’extrémité. Cependant, lorsqu’il est présent, il peut avoir des valeurs asymétriques.
L’option fragment doit être soit présent des deux côtés, soit absent des deux côtés
Des deux côtés
Path MTU Discovery (PMTUD)L’activation de la découverte du MTU du chemin (PMTUD) peut permettre aux points d’extrémité d’ajuster dynamiquement le MTU en fonction des conditions du chemin. Vous pouvez l’activer en ajoutant les lignes suivantes à votre serveur OpenVPN et aux configurations de vos clients :
fragment 1300
mssfix 1300
Ceci indique à OpenVPN de tenter de réduire le MTU à 1300 octets si des problèmes sont rencontrés.
Client
mtu-discActive ou désactive la découverte du Path MTU sur le canal TCP/UDP.
Uniquement sur les systèmes d’exploitation tels que Linux qui supportent l’appel système nécessaire pour définir le MTU.
Trois valeurs sont valides :
no — Ne jamais envoyer de trames DF (Don’t Fragment)
maybe — Utiliser des conseils par itinéraire
yes — Toujours DF (Don’t Fragment)
Les options MTU dans Openvpn

Pour plus de configurations : https://openvpn.net/community-resources/reference-manual-for-openvpn-2-6/

Il peut y avoir des confusions entre ceux options d’OpenVPN.
En voici les différences :

  • Link-MTU :
    • La MTU (Maximum Transmission Unit) de la liaison (link-MTU) fait référence à la taille maximale des paquets qui peuvent être transmis sur une interface réseau physique ou virtuelle, telle qu’une carte réseau Ethernet.
    • La valeur de la link-MTU dépend des caractéristiques de la connexion réseau sous-jacente, comme le type de carte réseau, le protocole utilisé, et les paramètres de configuration du système d’exploitation.
  • Tun-MTU :
    • La MTU du tunnel (tun-MTU) fait référence à la taille maximale des paquets qui peuvent être encapsulés dans le tunnel VPN entre les deux points de terminaison du VPN.
    • Dans le contexte d’OpenVPN, la tun-MTU est spécifiée dans la configuration du serveur et du client. Elle détermine la taille maximale des paquets que le VPN peut transporter, en tenant compte de la surcharge de l’en-tête VPN.

En résumé, la link-MTU est la taille maximale des paquets pouvant être transmis sur une interface réseau, tandis que la tun-MTU est la taille maximale des paquets pouvant être encapsulés dans le tunnel VPN.

mtu-disc

L’option “mtu-disc” permet à OpenVPN de détecter automatiquement la MTU maximale autorisée sur le chemin réseau entre les deux points de terminaison du VPN. Cela se fait en envoyant des paquets ICMP “Fragmentation Needed” (Type 3, Code 4) et en ajustant la MTU en conséquence pour éviter la fragmentation des paquets.

Lorsque cette option est activée, OpenVPN utilise la découverte automatique de la MTU pour ajuster la taille des paquets envoyés par la connexion VPN, ce qui peut améliorer les performances et la fiabilité de la transmission des données. Cependant, dans certains cas, il peut être nécessaire de désactiver cette option si la découverte automatique de la MTU provoque des problèmes de connectivité ou de performances sur le réseau.

Celle-ci est à configurer côté serveur :

mtu-disc yes

net.ipv4.ip_forward_use_pmtu sur Linux

L’option net.ipv4.ip_forward_use_pmtu dans Linux contrôle la façon dont le système gère la fragmentation des paquets IP lorsque la fonctionnalité de routage IP est activée (c’est-à-dire lorsque le routage est activé sur le système).

Plus précisément, lorsque cette option est activée (avec une valeur de 1), le système utilise le MTU (Maximum Transmission Unit) path discovery (PMTU) pour déterminer la taille maximale des paquets qu’il peut transmettre à travers les interfaces réseau. Cette fonctionnalité est utile pour éviter la fragmentation des paquets IP lors de leur transmission à travers des réseaux ayant des MTU différents. Elle contribue à améliorer l’efficacité et les performances de la transmission des données.

Pour modifier la valeur et tester celle-ci, utilisez la commande sysctl suivante :

sysctl net.ipv4.ip_forward_use_pmtu=1

Comment calculer la valeur du MTU optimale pour OpenVPN

Cela suggère que nous devons prendre en compte les octets de l’en-tête UDP. Donc 1470 – 28 (pour IPv4) = 1442.

Manuellement avec des tests ping

La première chose à faire pour résoudre votre problème de MTU OpenVPN est de déterminer quel est votre plus grand MTU.
Pour cela, on utilise l’utilitaire ping en faisant varier la valeur du MTU à l’aide des commandes suivantes :

ping <adresse IP passerelle VPN> -f -l <valeur mtu>
ping -c 10 -M do -s <valeur mtu> <adresse IP passerelle VPN>

L’idée est de commencer avec une valeur de 1500 et de réduire de 10 pour trouver la valeur où les paquets ne sont pas fragmenté et aucune perte de paquet n’a lieu.

ping <adresse IP passerelle VPN> -f -l 1500

A partir de là, vous pouvez déterminer la valeur optimale du MTU.

Comment calculer la valeur du MTU optimale pour OpenVPN

Automatiquement avec –mtu-test

Une autre façon de procéder est de laisser OpenVPN calculer la valeur du MTU.
Pour mesurer empiriquement le MTU au démarrage de la connexion, ajoutez l’option –mtu-test à votre configuration.
OpenVPN enverra des paquets ping de différentes tailles au pair distant et mesurera les plus gros paquets qui ont été reçus avec succès. Le processus –mtu-test prend normalement environ 3 minutes.
La sortie des journaux est la suivante :

2024-05-13 12:06:08 NOTE: Beginning empirical MTU test -- results should be available in 3 to 4 minutes.
2024-05-13 12:06:11 read UDPv4 [EMSGSIZE Path-MTU=1436]: Message too long (fd=5,code=90)
2024-05-13 12:09:08 NOTE: Empirical MTU test completed [Tried,Actual] local->remote=[1454,1454] remote->local=[1454,1454]
Les logs de l'option mtu-test dans OpenVPN

Résoudre les erreurs MTU

Lorsque les valeurs du MTU sont trop importantes, vous pouvez rencontrer une baisse des performances allant même jusqu’à des freez et blocage du VPN.
Dans les logs, vous pouvez rencontrer les entrées suivantes :

2024-05-13 11:49:34 write UDPv4 [EMSGSIZE Path-MTU=1436]: Message too long (fd=5,code=90)
OpenVPN : write UDPv4 [EMSGSIZE Path-MTU=1436]: Message too long (fd=5,code=90)

Vous pouvez corriger cela, en ajoutant des paramètres fragment côté serveur et client et mssfix côté client.