SuSE Linux: Version 7.3
Kernel: Versionen ab 2.4.0
Sie verwenden DSL mit SuSE Linux 7.3 und manche Rechner im Internet sind nicht erreichbar. Dies äußert sich darin, dass zum Teil die Verbindung noch aufgebaut werden kann, aber dann die Datenübertragung hängen bleibt.
Das "Hängenbleiben" der Verbindung ist nichts T-DSL spezifisches, sondern durch die kleinere zulässige MTU von T-DSL (durch PPPOE) bedingt. Falls Ihnen die hier beschriebene Methode nicht weiterhilft beachten Sie bitte auch den SDB Artikel "Internetverbindung: Manche Webseiten lassen sich nicht aufrufen" (http://sdb.suse.de/de/sdb/html/cg_internet.html).
Leider gibt es einige Betreiber von Servern, die davorliegende "Firewalls" falsch konfiguriert haben. Das ist die eigentliche Ursache des Problems.
Sie müssen in folgenden Dateien den MTU und den MRU Wert auf 1492 setzen.
/etc/ppp/options
/etc/ppp/peers/pppoe
Fügen Sie in die Datei /etc/ppp/peers/pppoe folgende Zeilen ein:
mtu 1492
mru 1492
In der Datei /etc/ppp/options suchen Sie nach mtu und mru, und ändern die auskommentierten Zeile wie folgt ab:
mtu 1492
mru 1492
Wichtig hierbei ist, dass Sie in beiden Dateien die Werte gleich setzen. Haben Sie alle Werte auf 1492 gesetzt, sollten Sie danach ohne Probleme Seiten wie gmx.de oder postbank.de erreichen.
Sie verwenden einen zentralen Router der für mehrere Rechner das Masquerading übernimmt. Die Clients können bestimmte Rechner im Internet nicht erreichen. Lokal auf dem Router haben Sie keine Probleme.
Als ersten sollten Sie auf einer der Clientmaschinen testen
ob wirklich PMTU discovery das Problem bei Ihnen verursacht. Hierzu können Sie
an der Kommandozeile das ifconfig
Kommando verwenden um die
verwendete Paketgröße einzustellen. Beachten Sie daß Sie auf dem Router die
Netzwerkkarte an der das T-DSL Modem direkt angeschlossen ist nicht in
der MTU verkleinern dürfen.
tux@erde:~ $ /sbin/ifconfig eth0 Protokoll:Ethernet Hardware Adresse 00:10:10:00:01:A4 inet Adresse:10.10.11.102 Bcast:10.10.255.255 Maske: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 Kollisionen:0 Sendewarteschlangenlänge:100 RX bytes:3770027551 (3595.3 Mb) TX bytes:2994365512 (2855.6 Mb) Interrupt:11 Basisadresse:0xd000
Oben fett hervorgehen sehen Sie die Voreinstellung der MTU von 1500 Byte. Probieren Sie nun die MTU zu verkleinern (root rechte erforderlich).
root@erde:~ # /sbin/ifconfig eth0 mtu 1400
Sollte Sie nun die problematischen Server erreichen können so können Sie für diesen Fall folgende Veränderungen vornehmen:
Wenn Sie iptables
verwenden genügt es wenn Sie lediglich den
T-DSL Router umkonfigurieren. Eine explizite Konfiguration der Clientmaschinen
ist unnötig. Um iptables
verwenden zu können muß auf Ihrem Router
ein Linux Kernel Version 2.4 installiert sein.
Geben Sie auf dem Router als Benutzer root folgendes Kommando ein:
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Dieses Kommando bewirkt daß die "MSS" Option die beim Verbindungsaufbau zwischen dem Internet-Server und einer Clientmaschine Ihres Netzwerkes ausgetauscht wird vom Router "umgeschrieben" wird.
Falls Sie auf den Router keinen administrativen Zugriff haben können Sie auch die Clientmaschinen umkonfigurieren und die MSS für eine bestimmte Route festlegen.
route
Kommandos. Dazu können Sie z.B. die Datei /etc/route.conf
wie folgt
verändern:default 10.10.0.8 0.0.0.0 eth0setzen Sie ans Zeilenende einfach
default 10.10.0.8 0.0.0.0 eth0 mss 1400um zum Beispiel die Segmentgröße auf 1400 Byte zu setzen (Normal: 1448 Byte).
/etc/rc.config
erledigen. Suchen Sie nach der Konfiguration des Netzwerkinterfaces in dieser Datei, die beispielsweise
so aussehen kann:IFCONFIG_0="10.10.11.102 broadcast 10.10.255.255 netmask 255.255.0.0"und setzen Sie
IFCONFIG_0="10.10.11.102 broadcast 10.10.255.255 netmask 255.255.0.0 mtu 1400"ein um die MTU auf 1400 Byte zu begrenzen.
213.95.15.200
) der SuSE Linux AG mit einer MSS von 1400 Byte zu
setzen nehmen Sie in /etc/route.conf
folgende Zeile auf.213.95.15.200 10.10.0.8 255.255.255.255 eth0 mss 1400oder -temporär - an der Kommandozeile (
root
rechte erforderlich!)
route add -host 213.95.15.200 gw 10.10.0.8 eth0 mss 1400
Das "Hängenbleiben" der Verbindung ist nichts T-DSL spezifisches, sondern durch die kleinere zulässige MTU von T-DSL (durch PPPOE) bedingt. Die zulässige MTU kann auch verkleinert sein wenn Sie manche kommerziellen Einwahlrouter oder Windows als Router verwenden und andere Ethernet Frames statt normalen Ethernet_II Frames im LAN verwenden. Ebengleiches gilt für IP-over-IP oder CIPE Tunnel.
Die Netzwerkpakete die über diese Verbindungen geschickt werden müssen also ein bißchen kleiner sein als überall sonst üblich.
Kommt ein zu großes Paket an, so würde normalerweise passieren: Beim Eintritt des Paketes in die Strecke mit kleinerer MTU wird vom Router der die Netzwerkschnittstelle mit der kleineren MTU hat, transparent fragmentiert. Das Netzwerkpaket wird von diesem Router in mehrere, kleinere IP Pakete zerlegt die dann klein genug sind. Der Zielrechner setzt diese IP Fragmente wieder zusammen.
Diese transparente Fragmentierung ist eine enorme Belastung für die Backbone-Router des Internets die Ihre Pakete fragmentieren müssen (Im Falle von T-DSL wäre das z.B. der Router der Telekom). Um die Kosten für die Internet Infrastruktur zu senken wird bei modernen Betriebssystemen diese Belastung der Infrastruktur durch ein spezielles Flag in jedem IP Paket, das sog. "DF" (Don't fragment) Bit vermieden. Bei Linux wird dies seit Kernel Version 2.4 eingesetzt. Das ganze nennt sich Path MTU discovery und ist in RFC 1191 beschrieben.
Die Router die so ein großes Packet normalerweise fragmentieren müssten
senden bei gesetztem DF bit im IP Paket eine ICMP (Internet Control message
protocol)-Nachricht "ICMP: destination unreachable: need to
fragment"
an den Absender des großen Paketes zurück. Sogar mit Vorschlag
einer neuen MTU. Das ursprüngliche Paket wird vom Router verworfen. Der
absendende Rechner empfängt die ICMP Nachricht und verkleinert das Paket um
es dann nochmals zu verschicken.
Kommt dieses ICMP Paket beim Absender nicht an, so bleibt die Verbindung hängen. Leider gibt es einige Betreiber von wichtigen Servern die davorliegende "Firewalls" falsch konfiguriert haben und diese ICMP Pakete wegwerfen. Das ist die eigentliche Ursache des Fehlers.
Die Verbindung bleibt scheinbar hängen, da beide Seiten denken es wäre lediglich ein Packet verloren gegangen und eine erneute Übertragung des unveränderten Paketes probieren - die aber natürlich wieder fehlschlägt.
MSS
kann für eine Route mit
dem route
Kommando festgelegt werden. Die MSS
ist eng mit
der MTU verwandt.