Tunnel GRE Ethernet et MTU

Posted by Benoit Papillault on Nov 18, 2009 in Linux |

Après avoir créé un tunnel GRE Ethernet, il semble important de comprendre comment l’encapsulation affecte le MTU, ainsi que quelques pièges classiques dans l’utilisation d’un tunnel GRE Ethernet sous Linux.Créer un tunnel Ethernet GRE implique quelques étapes décrites dans un autre article : Utiliser un tunnel GRE Ethernet

Un premier piège est que vous devez vous assurer que votre noyau inclus un patch de Herbert Xu en date du 2009-10-30 (ce patch a été publié depuis mon dernier article, c’est vraiment incroyable!). Sans ce patch, vous avez du remarquer que votre interface GRE n’avait pas une adresse MAC de diffusion correcte.

Sans le patch (2.6.32-rc5-wl kernel)  :

# ip link show mygre0
5: mygre0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
 link/ether c0:a8:01:45:78:75 brd c0:a8:01:37:ff:ff

Avec le patch (2.6.32-rc6-wl kernel) :

# ip link show mygre0
7: mygre0@NONE: <BROADCAST,MULTICAST> mtu 1462 qdisc noop state DOWN qlen 1000
 link/ether 1a:04:03:bb:e7:9f brd ff:ff:ff:ff:ff:ff

Une fois que ce problème est résolu, revenons sur le sujet du MTU. Par définition, le MTU est la taille maximum en octets d’un datagramme IP. Une valeur courante pour l’IP au dessus d’Ethernet est 1500 octets. Mais comme GRE utilise de l’encapsulation, si nous partons d’un paquet IP extérieur de 1500 octets, nous avons besoin de supprimer 20 octets pour l’entête IP externe, puis de 4 octets requis par l’entête GRE, puis 14 octets requis par Ethernet (2 adresses MAC de 6 octets + 2 octets pour le champ EtherType). En tout, nous supprimons 38 octets, ce qui nous amène à un paquet IP interne de 1500 – 38 = 1462 octets. Cette valeur est en effet la valeur par défaut du MTU de notre interface GRE fraîchement créée.

Maintenant, nous voulons mettre cette nouvelle interface GRE dans un bridge, afin de pouvoir connecter deux réseaux LAN Ethernet. Comme le MTU par défaut sur Ethernet est de 1500 octets, nous voulons crééer un interface bridge (br0) avec un MTU de 1500 octets. Pour ce faire, chaque interface dans le bridge doit aussi avoir un MTU de 1500 octets. Ainsi, nous avons besoin d’accroitre  le MTU de l’interface GRE à 1500.

Si nous faisons simplement cela, un simple ping fonctionnera car il s’agit d’un petit paquet. Mais tracepath ne fonctionne pas car cet outil envoie des paquets de 1500 octets (afin de découvrir le réel MTU de chemin) et pour certains raisons, les paquets ne sont pas fragmentés du tout.Une solution rapide et efficace est d’accroitre le MTU de l’interface sans fil à 1538 octets puisque dans mon cas, le tunnel GRE est au dessus d’un simple lien sans fil.

Étiquettes : ,

Comments are closed.

© 2024 Blog de Benoit Papillault ! Theme : Laptop Geek - Réalisation : BenoitDuWeb - Mentions légales