Hallo Experten,
Hi,
bekannterweise bieten ja die meisten Router eine NAT-Funktion
an. Mir ist zu Ohren gekommen, dass insbesondere bei den
Billiggeräten die NAT-Funktion mangelhaft ist.
Ich wuerde eher sagen, dass NAT auf jeden Fall mangelhaft ist. Es gibt aber ein paar Methoden, diese Maengel zu flicken. Das aendert aber nichts, dass das NAT-Konzept eine Kruecke ist.
D.h. speziell bei Anwendungen, die mit dynamischen Ports
arbeiten, gibt es dann wohl Schwierigkeiten.
Ja.
Kann mir jemand mehr Informationen dazu geben? Was genau ist
das Problem?
Dazu musst Du verstehen, wie NAT ueberhaupt funktioniert. Bei einer ausgehenden Verbindung vom lokalen Netzwerk ueber den NAT-router aendert der router die source-IP# eines IP-Paketes von der des internen Rechners zu seiner externen und routet es ins Internet. Gleichzeitig verwaltet er eine Tabelle mit der IP# des Originalpaketes, einigem anderen Kleinkram und der identification-Nummer des ins Internet geschickten Paketes. Die identification-Nummer dient zum Zusammensetzen oder allgemein Zuordnen der Bestandteile einer IP-session. Der gegenueberliegende host wird seine Antwort an die IP# aus dem Quell-IP#-header schicken und dabei die gleiche identification-Nummer setzen. Kommt ein solches Paket an den router zurueck vergleicht die Nummer mit seiner Tabelle, aendert die Ziel-IP# auf den passenden Wert und routet das Paket weiter ins interne Netz.
Das ist alles kein Problem und funktioniert in diese Richtung i. A. hinreichend gut. Knifflig werden Verbindungsversuche von aussen: dann kommt ploetzlich ein Paket mit einer identification-Nummer, die der router gar nicht kennt. Wohin damit? Er wirft es einfach weg (das stimmt nicht ganz, laeuft aber darauf hinaus). Genau bis hier hin ist es NAT, alles weitere sind features, add-ons, Bonus.
Schlaue Leute haben sich den Kniff mit dem portforwarding ausgedacht: damit sagt man dem router „Wann immer eine (bestimmte) Verbindung reinkommt, die Du nicht zuordnen kannst, leite sie bitte an jenen host weiter.“ Der router modifiziert fuer unbekannte Pakete von aussen die Ziel-IP# nach diese Regeln, routet sie ins interne Netz und schon rennt der Esel… aeh… HTTP-server.
Das funktioniert auch prima nach statischen Regeln, die man selbst eintraegt. Jetzt gibt es aber ein paar ziemlich abartige Protokolle, bei denen zuerst von einem internen host eine Verbindung nach aussen zu einem server aufgemacht wird und ueber diese eine Verabredung der Art „Bitte melde auf dem port $sowieso, ich installiere dort selbst einen server, und lade Deinen Krempel da ab.“ Den port $sowieso handeln die beiden Rechner untereinander aus. In dem Augenblick wird der server-host im externen Netz zum client und versucht eine Verbindung zum client-host (der jetzt einen server hat) aufzumachen. Und genau dies scheitert am NAT-router.
Natuerlich haben sich kluge Leute auch da Gedanken gemacht: sie beobachten solche kranken Protokolle und lauschen mit. Und wenn sich da zwei verabreden, wissen sie vorab, dass sie die demnaechst eingehende Verbindung an den passenden Rechner weiterleiten muessen (eine Art dynamisches portforwarding). Dummerweise mutieren solche Protokolle manchmal munter vor sich hin oder entstehen aus dem Nichts neu, so dass sich dann immer jemand hinsetzen und einen passenden ‚Beobachter‘ basteln muss.
Worauf muss ich bei den technischen Daten achten, um ein
funktionierendes NAT mit Port Forwarding zu bekommen?
Keine der kranken Protokollen verwenden. Kein NAT nehmen. Es ist und bleibt eine Kruecke. Den Fachhaendler kann man vielleicht noch ausfragen, ob der router mit aktivem FTP und Punkt-zu-Punkt-Kommunikationen mit IRC oder ICQ klar kommt. Das sind so die gaengigsten der kranken Protokolle. Man sollte sich aber auf ein verduztes Gesicht beim Mediamarkt-Angestellten einstellen bzw. seinem „Jaja, der kann das, frueher nicht, aber das ist der neue, der kann jetzt auch stealth.“-Geplapper nicht viel Glauben schenken.
HTH,
Gruss vom Frank.