A-DSL : certains serveurs ne sont pas joignables

Base de données support (cg_pmtu2)

SuSE Linux: Version 7.3
Kernel: des versions à partir de 2.4.0

Symptôme :

Vous utilisez une liaison A-DSL avec la version 7.3 de SuSE Linux et certains serveurs d'Internet ne sont pas joignables. Cela se remarque par le fait que la connexion peut encore être partiellement établie, mais que la transmission de données reste "bloquée", c'est à dire, ne peut pas s'effectuer.

Cause :

Le fait que la connexion reste "bloquée" n'est pas un problème spécifique à votre connexion A-DSL mais plutôt une conséquence du fait que l'unité de transmission MTU (Maximum Transmission Unit) pour A-DSL (à travers PPPOE) est plus petite. Dans le cas où la méthode décrite ici ne vous aidait pas, veuillez consulter également l'article SDB "" (http://sdb.suse.de/fr/sdb/html/cg_internet.html).

Malheureusement, quelques opérateurs ont mal configuré les "firewalls" de certains serveurs. Ceci est la cause réelle de ce problème.

Solution :

Il vous faut saisir la valeur 1492 pour les paramètres MTU et MRU dans les fichiers suivants :

/etc/ppp/options
/etc/ppp/peers/pppoe

Saisissez dans le fichier /etc/ppp/peers/pppoe les lignes suivantes :

mtu 1492
mru 1492

Dans le fichier /etc/ppp/options cherchez les paramètres mtu et mru (lignes de commentaires), et modifiez ces lignes comme suit :

mtu 1492
mru 1492

Ici, il est important de bien attribuer la même valeur dans les deux fichiers. Si vous avez saisi la valeur 1492 pour tous les paramètres, vous devriez après cela pouvoir accéder sans problème aux serveurs problématiques tels que gmx.de ou postbank.de.

A-DSL en conjonction avec un routeur

Vous utilisez un routeur central qui se charge du masquage (masquerading) pour plusieurs ordinateurs. Les clients ne peuvent pas atteindre certains ordinateurs d'Internet. Localement, vous n'avez cependant aucun problème avec votre routeur.

Tout d'abord, vous devez tester sur l'un de vos clients si c'est vraiment PMTU discovery qui vous cause ce problème. À cette fin, vous pouvez utiliser la commande ifconfig dans un terminal afin de déterminer la taille des paquets à utiliser. Veuillez noter que vous ne devez pas réduire la carte réseau directement connectée à votre modem A-DSL dans MTU.

tux@terre:~ $ /sbin/ifconfig
eth0	  Protocole:Ethernet  Adresse hardware 00:10:10:00:01:A4
          Adresse inet:10.10.11.102  Bcast:10.10.255.255  Masque:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:93589710 errors:0 dropped:0 overruns:0 frame:0
          TX packets:14879178 errors:0 dropped:0 overruns:0 carrier:0
          Collisions:0 Longueur de files d'attente (send queue):100
          RX bytes:3770027551 (3595.3 Mb)  TX bytes:2994365512 (2855.6 Mb)
          Interrupt:11 Adresse basique:0xd000

Vous pouvez voir en gras ci-dessus la valeur par défaut de 1500 octets pour MTU. Essayez de réduire cette valeur (à cette fin, les permissions d'accès de root sont nécessaires).

root@terre:~ # /sbin/ifconfig eth0 mtu 1400

Si maintenant le serveur problématique peut être atteint, vous pouvez procéder aux modifications suivantes :

Première possibilité : avec iptables

Si vous utilisez iptables, il vous suffira de reconfigurer le routeur T-DSL. Une configuration spécifique du client n'est pas nécessaire. Vous devez avoir installé la version 2.4 du noyau Linux sur votre routeur pour pouvoir utiliser iptables.

Sur le routeur, saisissez, en tant qu'administrateur root, la commande suivante :

iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Cette commande fait en sorte que le routeur modifie l'option "MSS" (taille maximale de segment) qui est échangée entre le serveur dans Internet et un des clients de votre réseau lors de l'établissement de la connexion.

Deuxième possibilité : modification de la configuration des clients

Si vous n'avez aucune permission d'administrateur sur votre routeur, vous pouvez également modifier la configuration de vos clients et prédéfinir une route bien déterminée.

  1. Réduisez la taille de segment proposée à l'aide de l'option MSS de la commande route. À cette fin, vous pouvez, par exemple, modifier le fichier /etc/route.conf comme suit :
    Si vous avez par exemple :
    default          10.10.0.8          0.0.0.0   eth0
    
    contentez vous simplement d'ajouter ceci à la fin de la ligne :
    default          10.10.0.8          0.0.0.0   eth0 mss 1400
    
    afin d'ajuster la taille de segment à 1400 octets (normalement : 1448 octets).
    Avantage : Les connexions LAN peuvent encore utiliser la taille maximale pour les datagrammes (paquets de données) ; uniquement les connexions TCP vers des ordinateurs à l'extérieur du réseau local utiliseront la taille réduite pour les datagrammes.
    Inconvénients : Des problèmes peuvent arriver dans le cas où la configuration locale n'est pas correcte, (par exemple un pare-feu (firewall) local mal configuré). Cette méthode ne fonctionne pas avec le protocole UDP (Realaudio, Netmeeting, Real-Video, par exemple, utilisent le protocole UDP).
  2. Réduisez l'unité MTU de la carte de réseau. Vous pouvez procéder à cette modification dans /etc/rc.config par exemple. Recherchez, dans ce fichier, la partie relative à la configuration de l'interface de réseau, qui aura, par exemple, la forme suivante :
    IFCONFIG_0="10.10.11.102 broadcast 10.10.255.255 netmask 255.255.0.0"
    
    et saisissez :
    IFCONFIG_0="10.10.11.102 broadcast 10.10.255.255 netmask 255.255.0.0 mtu 1400"
    
    afin de limiter l'unité MTU à 1400 octets.
    Avantages : Cette méthode fonctionne sans problème étant donné que l'option MSS est correctement suggérée. Cela fonctionne également pour les datagrammes UDP.
    Inconvénient : Tous les datagrammes se voient attribuer une taille réduite. Ceci provoque l'augmentation du temps inactif (overhead) à cause de l'en-tête (header) et diminue ainsi la vitesse de traitement des données dans le réseau local. Il s'agit d'une méthode un peu "brutale".
  3. Nous vous proposons, ici, une variation de la première méthode : définissez une route avec une taille de datagramme diminuée vers l'ordinateur (ou les ordinateurs) posant problème. Dans le but de définir, par exemple, une route vers le serveur web (213.95.15.200) de SuSE Linux AG avec une taille maximale de segment (MSS) de 1400 octets, ajoutez, dans /etc/route.conf la ligne suivante :
    213.95.15.200 10.10.0.8  255.255.255.255 eth0 mss 1400
    
    ou bien - de façon temporaire - sur la ligne de commande (permissions root nécessaires !)
    route add -host 213.95.15.200 gw 10.10.0.8 eth0 mss 1400
    

Informations complémentaires

Le fait que la connexion reste "bloquée" n'est pas un problème spécifique à votre connexion A-DSL mais plutôt une conséquence du fait que l'unité de transmission MTU (Maximum Transmission Unit) pour A-DSL (à travers PPPOE) est plus petite. L'unité MTU autorisée peut également être plus petite si vous utilisez certains routeurs commerciaux ou Windows en tant que routeur et des trames (frames) Ethernet autres que les trames Ethernet_II normalement utilisés dans les LAN. Cela est valable également pour les tunnels CIPE ou IP-over-IP.

Les datagrammes (ou paquets) qui seront transmis à travers ces connexions, doivent donc être un peu plus petits qu'habituellement.

Si un datagramme trop grand se présente, voici ce qui se passe normalement : lors de l'arrivée du datagramme sur la route avec une unité MTU plus petite, le routeur qui contient l'adapatateur réseau avec la plus petite unité MTU, procède à une fragmentation transparente. Le datagramme est décomposé en plusieurs petits paquets IP par le routeur, paquets qui sont alors suffisamment petits. L'ordinateur destinataire assemblera à nouveau ces fragments IP.

Cette fragmentation transparente représente une charge énorme pour les routeurs principaux d'Internet qui doivent fragmenter leurs datagrammes (dans le cas, par exemple, de T-DSL en Allemagne, il s'agirait du routeur de Deutsche Telekom). Dans le but de baisser les coûts de l'infrastructure nécessaire à Internet, les systèmes d'exploitation modernes attribuent une "étiquette" (flag) spéciale à chaque datagramme IP, le bit "DF" (en anglais Don't Fragment,c'est à dire, ne pas fragmenter), qui permet d'éviter une surcharge de l'infrastructure. Dans le cas de Linux, cette possibilité a été implémentée depuis la version 2.4 du noyau. L'ensemble s'appelle Path MTU discovery et est décrit dans le document RFC 1191.

Dans le cas où un bit DF accompagne un datagramme IP trop grand que les routeurs devraient normalement fragmenter, ceux-ci envoient un message ICMP (Internet Control message protocol) "ICMP: destination unreachable: need to fragment" à l'expéditeur de ce datagramme trop grand. Il accompagne même ce message d'une suggestion de MTU. Le datagramme originel est éliminé par le routeur. L'ordinateur expéditeur réceptionne le message ICMP et réduit la taille du datagramme afin de l'envoyer à nouveau.

Si ce message ICMP n'arrive pas à l'expéditeur, la connexion reste "bloquée". Malheureusement, quelques opérateurs ont mal configuré les "firewalls" de certains serveurs importants, et ceux-ci éliminent les messages ICMP. Ceci est la cause réelle du dysfonctionnement.

La connexion reste alors apparemment bloquée parce que chaque côté pense qu'un datagramme a été perdu, et tente de retransmettre le même datagramme inchangé, ce qui, bien entendu, reproduit la même erreur.

Glossaire :

Trame : On définit par trame (frame) un bloc de données transmis dans un réseau. La trame d'un datagramme fournit aux ordinateurs impliqués dans la transmission de données les informations relatives au(x) destinataire(s), à l'expéditeur et au contenu de ce datagramme. Afin de permettre la transmission de ces informations, les données à transmettre sont conditionnées en bloc de données nommées des trames (en anglais frame) et composées, dans le cas d'Ethernet des adresses de(s) destinataire(s) et de l'expéditeur et du type des données contenues. Dans le cas de certains types, la longueur du datagramme est également spécifiée.
MSS: Maximum segment size. La taille maximale autorisée d'un segment. Ceci est une option des connexions TCP qui définissent la taille des datagrammes lors de l'établissement de la connexion. La taille MSS peut être définie pour une route déterminé avec la commande route. La taille MSS est très proche de l'unité MTU.
MRU: Maximum receive unit. La possibilité de prédéfinir la taille maximale des unités en réception n'est offerte que dans le cas des connexions PPP dans lesquelles la taille des datagrammes est définie lors de l'établissement de la connexion. Ici, les mêmes règles sont valables que pour les tailles MSS et MTU.
MTU: Maximum transmit unit. Taille maximale, mesurée en octets, d'un datagramme sur le réseau. Normalement, la taille maximale d'un datagramme est de 1514 octets pour l'Ethernet ; en conséquence, la taille utile d'une unité MTU pour les protocoles TCP/IP est de 1500 octets. Dans des cas spéciaux (tunnel, PPPoE) les tailles autorisées seront plus petites étant donné qu'un paquet sera conditionné dans un autre. Dans le cas de l'utilisation du protocole PPPoE, la taille des datagrammes ne pourra pas être supérieure à 1492 octets (Standard Ethernet II Frames), respectivement 1490 octets.
PPPOE PPP over ethernet (Point to point protocol over ethernet) est un protocole qui permet de déployer les structure de connexion existantes pour liaisons modem ou RNIS pour les liaisons DSL non orientées connexion. Voyez à ce sujet la page d'information de Deutsche Telekom par exemple (Informationsseite der Telekom).

Mots-clés: PMTU, PATH, DISCOVERY, T-DSL, TDSL, ADSL, A-DSL, FRAGMENTATION, NEEDED

Catégories: Internet

SDB-cg_pmtu2, Copyright SuSE Linux AG, Nürnberg, Germany - Version: 29. Apr 2002
SuSE Linux AG - Dernière modification: 06. Mai 2002 de ip (sdb_gen 1.40.0)