Routerprobleme und niedrige IDs bei eDonkey-Betrieb und deren Lösung

Zum technischen eDonkey2000-Forum bei Parsimony
Impressum (nach §6 und §7 TDG)
Diesel's eMule-Speed-Anleitung

Volltextsuche im Forum

1. Grundelegende Probleme beim Download aus P2P-Systemen über DSL-Router
2. Ein einzelner PC an der Strippe
3. Privates LAN hinter einem Router
4. Sonderfall Uni-LAN
5. Die Parsimony-Routerdatenbank
6. Zwei Esel an einer öffentlichen IP-Adresse
7. Begriffserklärungen

Häufig lese ich im Forum von Problemen mit dem Download und niedriger ID und in meiner Mailbox finden sich auch regelmäßig Hilferufe von Usern, die mit genau diesem Problem kämpfen. Hier eine kurze Erklärung der Problematik und der Lösungswege.

Grundlegende Probleme beim Download aus P2P-Systemen über DSL-Router

DSL-Router sind zunächst eine elegante Methode, um mehrere PCs gleichzeitig über einen DSL-Anschluß ans Internet anzuschließen. Das funktioniert beim surfen im Web und bei normalen Downloads auch völlig problemlos. Beim Betrieb über P2P-Netzwerke (wie z.B. eDonkey2000, Kazaa, Gnutelle o.ä.) treten jedoch ein paar überaschende Probleme auf, die zum einen den Download drastisch verschlechtern können und zum anderen eine korrekte Funktion auch völlig verhindern. Als erstes tritt das Problem der Erreichbarkeit des P2P-Clients von Seiten des Internets auf.

Da DSL-Router den einzelnen Rechnern im LAN immer private IP-Adressen zuweisen und weil private IP-Adressen im Internet nicht geroutet werden (dürfen!), kann ein anderer Peer aus dem Internet zunächst keine direkte Verbindung zum einen Peer im privaten LAN herstellen. Er kommt nur bis zum Router, weil dahinter das Netz aus privaten und von seiner Seite aus nicht adressierbaren IP-Adressen besteht. Dieses Problem läßt sich nur lösen, in dem man dem Router bei der Installation mitteilt, das (eDonkey-) Datenpakete an einen bestimmten Rechner im LAN weitergeleitet werden sollen. Erkennbar sind eDonkey-Datenpakete an der Portnummer, unter der sie beim Router eintreffen: Port TCP:4662. Gibt man dem Router die Regel an die Hand, daß alle Datenpakete, die dem TCP-Protokoll entsprechen und die auf Port 4662 hereinkommen an eine feste IP-Adresse eines PCs im LAN weitergeleitet werden sollen, ist dieses erste Problem gelöst. Die folgenden Ausführungen beschäftigen sich genau mit diesem Thema.

Das zweite Problem entsteht durch die Menge an gleichzeitigen TCP-Verbindungen, die beim normalen surfen oder beim Download einzelnen Dateien von FTP- oder HTTP-Servern zwar sehr gering sind (bis zu 20), bei Download über eDonkey aber ohne weiteres auf 1.000 bis über 3.000 ansteigen können. Die meisten DSL-Router begrenzen hier auf etwa 250 gleichzeitige Verbindungen, weil CPU-Leistung und Speicher für mehr nicht ausreichen. Sehr hochwertige DSL-Router schaffen bis zu 1.000 gleichzeitige TCP-Verbindungen, was jedoch für eDonkey immer noch eine gewisse Begrenzung darstellt. So können ggf. nicht alle angebotenen Download-Quellen genutzt werden. Für dieses Problem gibt es nur eine einzige Lösung: Update der Firmware, soweit es eine leistungsfähigere Variante gibt. Es existieren Firmware-Versionen teurerer Router-Modelle, die ansonsten völlig baugleich sind mit preiswerten OEM-Routern anderer Hersteller. So leisten z.B. Zyxel-Router oft ein mehrfaches, kosten allerdings auch erheblich mehr. Mit etwas Glück kann man eine Zyxel-Firmware auch in anderen (baugleichen) Routern zur Leistungssteigerung verwenden. Mehr als 1.000 gleichzeitige Verbindungen sind aber auch dann nicht möglich, weil der Router dann an seiner Leistungsgrenze arbeitet.

Eine wirklich nachhaltige, kostengünstige und daher erwähnenswerte Lösung ist der Umbau eines alten PC mit 486'er-CPU und ein paar MB RAM-Speicher unter Linux (!) als DSL-Router. Es müssen also nicht so leistungsstarke Rechner wie die von mir angebotene Lugdunix verwendet werden. Im Prinzip jeder Alt-PC mit 386-DX-Prozessor ist geeignet, wenn man auf eine grafische Windows-Oberfläche verzichten kann und den Rechner über die Eingabeaufforderung konfiguriert. Der PC benötigt zwei Netzwerkkarten (billige 10Mbit-ISA-Modelle genügen durchaus) und wird zwischen DSL-Modem und LAN eingefügt. Wer mehrere PCs im Netz betreibt, benötigt als Netzwerkverteiler noch einen Hub oder einen Switch. Als Betriebssystem kann vorteilhaft jede Linux-Variante benutzt werden. Von Windows als Router-Betriebssystem rate ich ab, weil nur Windows NT, Windows 2000 oder XP verwendet werden können, die zum einen alle recht teuer sind und zum anderen für die mitgebrachte Grafik vielzuviel Leistung und Speicher verbrauchen. Es sollte also auf jeden Fall Linux Verwendung finden! Ein solcherart aufgebauter DSL-Router leistet auch mit 486'er-CPU ab 30.000 gleichzeitige Verbindungen. Das eDonkey-Paradies...

Ein einzelner PC an der Strippe

Die einfachste und verbreitetste Konfiguration ist sicher ein einzelner PC, der über eine ISDN-Anlage, ein DSL- oder ein Kabel-Modem ans Internet angeschlossen ist. Normalerweise sollten hierbei keinerlei Probleme auftauchen, denn der PC selbst ist nach herstellen der Internetverbindung im Besitz der vom ISP zugewiesenen öffentlichen IP-Adresse. Routing findet hier höchstens beim ISP statt und darum wird er sich selbst kümmern. Selbst mit eDonkey2000 sollten keine Probleme auftreten, falls nicht sogenannte Firewalls auf dem eigenen PC die Verbindung behindern. Windows-XP bringt eine eingebaute Firewall mit Portfilter-Funktionen mit. Ist diese aktiv und sind die benötigten Ports nicht ausdrücklich freigegeben, wird kein Download möglich sein.

Es gibt einen Sonderfall: Internet-Zugänge in Universitäts-Wohnheimen, Internet-Cafes, Firmen und dergleichen, die ihren "Kunden" nur einen Teil des Internets anbieten. Allerdings bekommt hier jeder Teilnehmer eine private IP-Adresse, anhand derer schon erkennbar ist, daß man über einen Router mit NAT ans Netz angebunden ist. Der Router befindet sich hierbei zwar außerhalb der Reichweite des angebundenen PCs, ist aber dennoch vorhanden. Daher gilt hier die weiter unten stehenden Beschreibung zu LANs, die über Router ans Netz angebunden sind, mit der Einschränkung, daß sich in diesem Fall meist nichts machen läßt, da man ja den Router nicht konfigurieren kann - außer man ist selbst der Admin dieses Netztes...

Verbindung eines einzelnen Rechners mit dem Internet ohne Router

Privates LAN hinter einem Router

Soll mehr als ein Rechner über eine einzige Netzanbindung online gehen, bekommt man ein Problem: Da der ISP nur eine IP-Adresse zur Verfügung stellt, alle gleichzeitig darüber arbeitenden Rechner jedoch zwingend unterschiedliche IP-Adressen benötigen, muß man sich in solchen Fällen mit einem Router und der Verwendung von NAT behelfen. Untenstehendes Schaubild zeigt das Anschluß-Schema. Dreh- und Angelpunkt ist der Router, der gleichzeitig die IP-Adresswandlung von öffentlich nach privat und umgekehrt vornimmt. Dieser Router kann entweder als einzelner Rechner hinter einem DSL-Modem, oder als Kombigerät in Form eines DSL-Routers ausgeführt sein. Das Modem stellt die Verbindung zum ISP her, der Router führt NAT durch. Ebendieses NAT stellt bei eDonkey2000 ein Problem dar, weil es sich regelmäßig in Form einer niedrigen ID im eDonkey-Client äußert. Grund dafür ist, daß der Client-Rechner wegen der Anwendung von NAT und damit verbundener privater IP-Adresse, nicht aus dem Internet erreichbar ist, weil private IP-Adressen im Internet nicht geroutet werden. Was bei normalem surfen im www noch einwandfrei funktioniert, kann bei P2P-Systemen nicht mehr klappen. Die Erklärung in Kurzform:

Wird eine Webseite von einem Webbrowser aufgerufen, schickt der Browser-Rechner den Request unter seiner privaten IP-Adresse an den Router. Dieser erkennt den Request, tauscht die private IP-Adresse aus dem Absenderfeld des IP-Paketes aus und schreibt seine eigene öffentliche IP-Adresse hinein. Der Router speichert den Request in seiner Connection-Tracking-Liste und sendet das IP-Paket an den Server, der die angeforderte Webseite bereithält. Dieser sendet seinerseits die angeforderte Webseite an die öffntliche IP-Adresse des Routers zurück. Der Router hat nun ein IP-Paket erhalten, in dem als Empfänger seine eigene öffentliche IP-Adresse angegeben ist. Der Router schaut in seine Connection-Tracking-Liste und stellt fest, daß dieses IP-Paket die Antwort auf den Seitenaufruf eines Rechners im LANs ist, den er vorher umgeschrieben und weitergeleitet hat. Er tauscht nun quasi rückwärts die Empfängeradresse des IP-Paketes gegen die private IP-Adresse des Rechners aus, der die Webseite angefordert hat und sendet sie weiter. Der Webbrowser des Rechners mit privater IP-Adresse erhält dann die gewünschte Webseite. Dies war in vereinfachter Form die Funktionsweise von NAT. Beim browsen im Web haben wir also eine feste Reihenfolge: Seitenanforderung > Seitenantwort, mit der ein NAT-Router gut zurecht kommt. Der Router kann Antworten leicht dem ursprünglich Anfragenden zuordnen und die Antworten weiterleiten, ohne das es weiterer Maßnahmen durch den Anwender bedarf.

Verbindung eines LANs mit dem Internet über einen (NAT-) Router

Nun ist es jedoch beim eDonkey2000-System so, das durchaus Datenpakete von fremden Clients den eigenen Rechner erreichen müssen, ohne das vorher ein Request dorthin versandt wurde. Die Folge ist: Der Router findet in seiner Connection-Tracking-Tabelle keinen passenden Eintrag, was er mit einem solchen unaufgefordert eintreffenden IP-Paket anfangen soll und verwirft das Paket ganz schlicht. Es erreicht seinen Bestimmungsort also nicht! Ob ein TCP-Paket weitergeleitet wird, läßt sich bequem mit diesem TCP-Port-Weiterleitungstest ermitteln. (Thx to TheDonkeyNetwork)

Abhilfe ist jedoch leicht möglich. Die IP-Pakete von anderen eDonkey-Clients treffen immer auf Port TCP:4662 ein. Man muß dem Router nur eine Regel an die Hand geben, daß unaufgefordert auf Port TCP:4662 eintreffende IP-Pakete immer an die richtige private IP-Adresse weiter geleitet werden sollen. Wenn also der Rechner, auf dem der eDonkey-Client läuft, die private IP-Adresse 192.168.0.15 besitzt, dann müsste die Regel sinngemäß lauten:

Alle IP-Pakete die von außen auf Port TCP:4662 eintreffen, sind an die IP-Adresse 192.168.0.15 Port TCP:4662 weiterzuleiten!

Wie man dem eigenen Router diese Regel beibiegt, steht mit etwas Glück in unserer Routerdatenbank.

Sonderfall Uni-LAN:

Gerade in den Netzen von Universitäts-Wohnheimen sind die üblichen Ports von P2P-Filesharing-Systemen meist blockiert, damit die Benutzer nicht zuviel Datenvolumen verursachen können. Grundregel: Datenvolumen kostet Geld! Da P2P-Tauschwütige meist rund um die Uhr (24/7) Daten pumpen, kann die monatlich anfallende Datenmenge je nach Geschwindigkeit der Netzanbindung enorm sein. Da die Universitäten für den Traffic bezahlen müssen, leuchtet es ein, daß die zuständigen Admins in einem Befreiungsschlag oft alle Ports oberhalb von Port 1024 sperren und so Filesharing über eDonkey, Kazaa oder Gnutella unmöglich machen. In diesem Fall hilft gar nichts! Internet-Cafes eigenen sich kaum für langwieriges Filesharing, da hier relativ teuer nach Stunden abgerechnet wird und die Mitnahme der Daten schwierig ist, wenn sie nicht gerade auf Diskette passen. Am Arbeitsplatz rate ich generell von Tauschbörsenbenutzung ab. Hier ist stets mit einer fristlosen Kündigung von Seiten des Arbeitgebers zu rechnen, da der Download von Horrorvideos oder Heavy-Metal-Musik nur schwer mit den Pflichten des Arbeitnehmers zu vereinbaren ist. Lasst besser die Finger davon, auch wenn die Firma so eine schöne 2Mbit-Anbindung hat. Zusätzlich gilt hier dasselbe wie bei den Unis: Die betreffenden Ports sind meist absichtlich gesperrt und ohne illegale Tricks vom Arbeitsplatz-PC aus nicht zu öffnen.

Zwei Esel an einer öffentlichen IP-Adresse:

Hin und wieder erreicht mich die Frage, wie man einen Port auf zwei private IP-Adressen weiterleiten kann. Einfache Antwort: Geht nicht! Die Weiterleitung der an einem Port eintreffenden Daten läßt sich nur zu einer einzigen IP-Adresse weiterleiten. Es gibt aber einen Trick:

Will man zwei eD2k-Clients über eine Leitung versorgen und gleichzeitig mit beiden eine hohe ID erhalten, weist man beiden Clients unterschiedliche Ports zu. Es existieren dann zwei verschiedene Ports, die problemlos im Router an zwei verschiedene private IP-Adressen weitergeleitet werden können. Im Falle des Esels sollte man bei der Zuweisung eines zweiten Ports um mindestens 5 Portnummern über oder unter dem Original-Port TCP:4662 bleiben, damit sich die Ports nicht gegenseitig stören. Zuweisung eines neuen Ports im eD2k-Client:

Unten im Textausgabefenster (in dem auch die Servertexte ausgegeben werden) den Cursor platzieren, eingeben:

port 4652 [ENTER]

Dann den Client neu starten, damit der Portwechsel wirksam wird. Der neue Port muß dann natürlich auch im Router weitergeleitet werden. Benutzt werden können prinzipiell alle Ports, die nicht durch andere Dienste belegt sind.

http://www.ed2k-serverboard.de/diesel by Diesel

Eigentlich überflüssig dies hier noch zu schreiben, aber:
Die Nutzung der hier wiedergegeben Daten, Beschreibungen und Verfahrensweisen zu den hier aufgeführten Zwecken ist generell jedermann völlig kostenlos gestattet. Wenn jemand es schaft, durch die normale Nutzung meiner Webseiten zu Reichtum zu kommen, dann sei ihm dies herzlichst gegönnt. Allerdings wehre ich mich gegen den leider sehr oft praktizierten "Webseiten-Nep"! Das ungenehmigte Anbieten meiner Inhalte ist unzulässig, ganz besonders dann, wenn es zur Wertsteigerung oder zum gewerblichen "Klicks-sammeln" für Werbebanner auf fremden Webspace benutzt wird.
Selbstverständlich darf auf diese Webseite verlinkt werden, dazu bedarf es auch keiner weiteren Erlaubnis von mir.