# [ICMP] mtu, mss & PPPoE(résolu)

## truc

Bonjour,

J'ai récemment mis un PC linux à la place d'un petit "routeur" tout public pour partager l'accès internet. La connexion WAN est de type PPPoE, Du coup, je m'y attendais, les PC sur le LAN ont des problèmes dûs au MSS.

Je peux contourner ces problèmes de deux manières:

En forçant le mtu sur les postes clients à 1492(1500 -6 -2), mais:

 je ne sais pas faire cette manip sur windows!(ça a l'air compliqué en plus d'après ce que je vois!)

 comme par hasard, le client DHCP de windows ne demande pas, ou ne prends pas en compte, par défaut l'option DHCP pour configurer le MTU

 cette solution n'est pas cool, car les postes clients entre eux vont aussi discuter avec un MTU à 1492, alors qu'ils devraient pouvoir jouïr sans problème d'un MTU à 1500;)

 en utilisant iptables et le saut TCPMSS, il est possible de modifier en live le MSS négocié pour les connexions TCP. 

Au passage, j'me suis demandé pourquoi le problème ne semblait pas se poser pas avant avec le petit routeur, et lorsque je regarde avec tcpdump la valeur du mss sortant (arrivant sur une autre IP publique), je constate qu'il est à 1492, je soupçonne donc le routeur d'utiliser et d'abuser de la même (du mème?) astuce (altérer le mss).

 ok, c'est cool, ça marche, mais je ne comprends pas trop pourquoi j'ai besoin de faire ça, dans la description de TCPMSS, on peut lire This  target  is  used  to overcome criminally braindead ISPs or servers which block "ICMP Fragmentation Needed", et d'après ce que je comprends, ça serait le serveur que je suis justement en train de mettre en place qui serait le braindead'euh!

Donc voila aucune des deux 'solutions' ne me semble satisfaisante, j'ai l'impression que le serveur que je mets en place devrait envoyer des pacquets ICMP fragmentation-needed, mais qu'il ne le fait pas, je ne vois pourtant rien de bloqué(rien en ICMP je veux dire) dans le parefeu. Du coup, je le soupçonne de fragmenter, ce qui m'amène à vous poser deux questions:

	1) dois-je empécher la fragmentation (si oui, comment? avec sysctl j'imagine, mais je n'ai pas encore trouvé comment? (si vraiment c'est la solution à adopter de toutes façons..)

	2) En supposant que le serveur fragmente de son côté, il devrait pouvoir se passer la même chose sur le trajet retour, comme ce n'est pas le cas, la fragmentation est-elle "interdite" sur le backbone internet?

Bon, il y a peut-être quelque chose qui m'échappe au final, vous voyez quoi!?

Merci!  :Smile: 

EDIT: tiens, la même question mais  sans réponse!

----------

## truc

Bon, en fait, après une bonne nuit de repos on y voit toujours plus clair.

J'ai fait des tests sur un autre serveur similaire et c'est bon, vous pouvez reprendre votre souffle, linux se comporte bien...  :Wink: 

Je m'explique:

```
ailleurs -- routeur en amont -- lien avec mtu=1492 -- serveur linux -- LAN avec mtu=1500
```

Si le transfert d'un fichier à bien lieu du LAN vers ailleurs, alors, le serveur va effectivement envoyer les paquets ICMP fragmentation-needed.

Si le transfert à lieu dans l'autre sens, c'est au routeur en amont d'envoyer ces paquets vers ailleurs, et si ce dernier ne les reçoit pas c'est que 

soit le routeur en amont ne les envoit pas (pas bien!)

soit ces paquets ICMP sont bloqués (pour de mauvaises raisons! rappellez-vous du "braindead ISP")

Conclusion, la meilleure option dans l'immédiat est de continuer avec le saut TCPMSS, et sur le long terme d'essayer de trouver qui bloque quoi/ou/pourquoi/comment et/ou de contacter le FAI en question.

----------

## Poussin

Salut,

Ce genre de sujet m'intéresse beaucoup, alors j'ai quelques petites questions pour toi  :Smile: 

Comment as-tu détecté le problème? Personnellement, j'ai toujours utilisé un routeur linux pour partager les connexions, alors ton message m'intrigue.

Par curiosité, je vais essayer de voir comment openwrt traite ce problème, dont je n'avais jamais entendu parler.

----------

## truc

 *Poussin wrote:*   

> Comment as-tu détecté le problème? 

 

Si tu veux parler de comment le problème se traduisait d'un point de vue utilisateur, c'est simple, certaines pages web s'affichent d'autres non, mais le problème ne se pose pas depuis le routeur, uniquement depuis les postes du LAN.

Si tu veux parler de la source du problème, le mss, bien, c'est un problème très courant avec PPPoE, donc, y'a des pas mal d'infos sur le net, malheureusement, on ne voit souvent que la solution et pas une explication détaillée du problème.

 *Quote:*   

> Personnellement, j'ai toujours utilisé un routeur linux pour partager les connexions, alors ton message m'intrigue.
> 
> Par curiosité, je vais essayer de voir comment openwrt traite ce problème, dont je n'avais jamais entendu parler.

 

En fait, le paquet PPP (c'est sur une machine debian, je n'ai pas vérifié sur gentoo) vient avec des hooks prédéfinis dont un qui t'ajoute automatiquement une règle iptables se chargeant de modifier le MSS. Donc, il y a de forte chance que tu n'aies rien à faire et que ça le fasse déjà tout seul. Tu peux déjà vérifier si tu voies cette règle sur ton routeur:

```
sudo iptables -t mangle -nvL FORWARD
```

Le hic pour moi, c'est qu'en parrallèle je peaufinais le parefeu, ce qui a consisté notamment à vider toutes les règles et à les recharger. Sauf celle qui devait être automatiquement ajoutée par ppp...

Résultat, j'ai choisi de désactiver ce hook (et son copain qui supprime la règle) et l'ai ajoutée manuellement dans mon ruleset

Ça répond à tes questions?

----------

## Poussin

Alors, dans openwrt, rien dans le mangle, tout est fait dans le filter:

```

Chain zone_wan_MSSFIX (1 references)

 pkts bytes target     prot opt in     out     source               destination         

40267 2414K TCPMSS     tcp  --  *      ppp0    0.0.0.0/0            0.0.0.0/0           tcp flags:0x06/0x02 TCPMSS clamp to PMTU 

```

C'est donc bien l'astuce prévue qui est utilisée.

----------

