Autor Beitrag
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 18.02.08 01:21 
Was ist ein Portforwarding und wann bzw. warum brauch ich das?

Untersuchen wir die Problematik mal anhand eines kleinen, völlig aus der Luft gegriffenen Beispiels: :angel: eine Chat-Anwendung, bestehend aus einem Server- und einem Client-Programm. :zwinker: (Hinweis: die folgenden Darstellungen und Erklärungen sind stark vereinfacht! Es geht mir in erster Linie darum, die Problematik für Anfänger verständlich und nicht wissenschaftlich exakt darzustellen.)

Konstellation A - Server und 2 Clients im LAN
ausblenden Quelltext
1:
2:
3:
4:
+---------------+                  +---------------+                  +---------------+
| PC-2 (Client) |4711         12345| PC-1 (Server) |12345         4712| PC-3 (Client) |                     
| 192.168.0.2   |------<TCP>-------| 192.168.0.1   |-------<TCP>------| 192.168.0.3   |
+---------------+                  +---------------+                  +---------------+

Computer haben zur Kommunikation im Netzwerk eine eindeutige IP-Adresse. Damit mehr als eine Verbindung pro PC (= IP-Adresse) möglich ist, wird mit virtuellen Steckdosen gearbeitet: den Ports. Eine Anwendung auf einem PC kann einen Port öffnen, um Daten zu versenden, umgekehrt ist diese Anwendung dann für eintreffende Daten auf diesem Port "zuständig". Beim Öffnen eines Ports muss natürlich angegeben werden, wo die Gegenstelle zu erreichen ist, also IP-Adresse und Port.

Im Beispiel oben haben wir einen Chat-Client PC-2, der eine (TCP-)Verbindung zu PC-1, dem Server, an Adresse 192.168.0.1:12345, hergestellt hat. Beim Öffnen der Verbindung vom Client aus ist dabei folgendes passiert:
  • der Benutzer gibt die IP-Adresse des Servers ein: 192.168.0.1
  • der Benutzer gibt den Port ein: 12345 (TCP) und klickt auf "Verbinden"
  • das Betriebssystem wählt automatisch einen freien, lokalen Port aus: hier ist das 4711, um die Verbindung zu 192.168.0.1:12345 herzustellen
  • wenn der Server auf die Verbindungsanfrage antwortet (indem er Daten an 192.168.0.2:4711 schickt), ist die Verbindung hergestellt
Analog läuft die Verbindungsaufnahme für den anderen Client im LAN ab.

Konstellation B - 1 Client im LAN, Server im LAN und INet-Wählverbindung, 1 Client im Internet (Wählverbindung)
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
+---------------+                  +---------------+
| PC-2 (Client) |4711         12345| PC-1 (Server) |
| 192.168.0.2   |------<TCP>-------| 192.168.0.1   |                  +---------------+
+---------------+                  |---------------|12345         4712| PC-3 (Client) |
                                   | 88.127.63.95  |-------<TCP>------| 89.245.241.18 |
                                   +---------------+                  +---------------+
Hier ist der Server-PC sozusagen in zwei Netzwerken: im LAN (192.168.x.x) und per Wählverbindung im Internet (z.B. unter der IP 88.127.63.95). Deshalb ist der Server für Client PC-2 vom LAN aus unter 192.168.0.1:12345 erreichbar und für Client PC-3 aus dem Internet unter 88.127.63.95:12345. Der Verbindungsaufbau erfolgt analog zu Konstellation A.

Konstellation C - 1 Client im LAN, Server im LAN und INet-Wählverbindung, 1 Client im Internet (aber per Router)
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
+---------------+                  +---------------+
| PC-2 (Client) |4711         12345| PC-1 (Server) |
| 192.168.0.2   |------<TCP>-------| 192.168.0.1   |                  +---------------+
+---------------+                  |---------------|12345         5001| Router        |
                                   | 88.127.63.95  |-------<TCP>------| 89.245.241.18 |
                                   +---------------+                  |---------------|
                                                                      | 192.168.0.1   |
                                                                      +---------------+
                                                                              |12345
                                                                              |
                                                                          4712|
                                                                      +---------------+
                                                                      | PC-3 (Client) |
                                                                      | 192.168.0.2   |
                                                                      +---------------+
Hier wird´s schon etwas schwieriger, angedeutet dadurch, dass der Router die gleiche LAN-Adresse wie der Server-PC hat (es sind ja zwei getrennte LANs, das ist kein Problem), sowie der Client PC-3 die gleiche (private) LAN-IP, wie PC-2 (was immer noch kein Problem ist, sind ja zwei LANs). Beim Verbindungsaufbau von Client PC-3 zum Server läuft nun folgendes ab:
  • der Benutzer gibt die IP-Adresse des Servers ein: 88.127.63.95
  • der Benutzer gibt den Port ein: 12345 (TCP) und klickt auf "Verbinden"
  • das Betriebssystem wählt automatisch einen freien, lokalen Port aus: hier ist das 4712, und schickt ein Datenpaket mit Kontaktaufnahmewunsch zu 88.127.63.95:12345 los (was automatisch beim Router landet)
  • der Router nimmt das Datenpaket an, tauscht die Absender-IP-Adresse gegen seine eigene aus (sonst kann der Server nicht antworten, die private LAN-IP des Clients ist ja vom Internet aus nicht zu erreichen!), wählt einen eigenen lokalen Port und sendet den Kontaktaufnahmewunsch an den Server los
  • der Server empfängt das Datenpaket vom Router (das eigentlich PC-3 losgeschickt hatte) und antwortet an den Absender, was ja aber nun der Router ist: 89.245.241.18:5001 :shock:
  • der Router hat sich aber in einer Tabelle gemerkt, wer das Datenpaket losgeschickt hatte und kann so die IP-Adresse des eigentlichen Empfängers ermitteln und damit das Paket vom Server im LAN zustellen: die Verbindung ist hergestellt

Konstellation D - 1 Client im LAN, Server im LAN und per Router im INet, 1 Client im Internet (Wählverbindung)
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
+---------------+                  +---------------+
| PC-2 (Client) |4711         12345| PC-1 (Server) |
| 192.168.0.2   |------<TCP>-------| 192.168.0.1   |
+---------------+                  +---------------+
                                           |12345
                                           |
                                       4713|
                                   +---------------+
                                   | Router        |
                                   | 192.168.0.100 |                  +---------------+
                                   |---------------|12345         4712| PC-3 (Client) |
                                   | 88.127.63.95  |-------<TCP>------| 89.245.241.18 |
                                   +---------------+                  +---------------+
So, jetzt wird´s aber wirklich schwer, weil folgendes bei der Kontaktaufnahme von Client PC-3 zum Server passiert:
  • der Benutzer gibt die IP-Adresse des Servers ein: 88.127.63.95
  • der Benutzer gibt den Port ein: 12345 (TCP) und klickt auf "Verbinden"
  • das Betriebssystem wählt automatisch einen freien, lokalen Port aus: hier ist das 4712, und schickt ein Datenpaket mit Kontaktaufnahmewunsch zu 88.127.63.95:12345 los
  • der Router nimmt das Datenpaket aus dem Internet an, hat aber leider keinerlei Ahnung, was er damit tun soll, denn in seiner Verbindungstabelle ist kein Eintrag, der einen Absender in seinem LAN enthält... :hair:
  • der Router verwirft das Paket - Ende der Verbindung... :( Socket Fehler 10061... :roll:
Genau hier ist das Problem: wie kommt das unerwartete Paket aus dem Internet zum Server im LAN?! :gruebel:

Lösung: ein Portforwarding im Router eintragen! :D

Beim Aufbau von Verbindungen von PCs innerhalb des LANs zu Internet-Servern wird automatisch ein Eintrag in der Verbindungstabelle des Routers angelegt, deshalb ist es ja auch kein Problem den Server in Konstellation C zu erreichen. Wenn aber der Server hinter einem Router betrieben wird, dann müssen wir manuell einen Eintrag in dieser Verbindungstabelle des Routers machen, damit er weiss, wohin die unerwartet aus dem Internet eintreffenden Pakete weitergeleitet werden sollen. :idea:

Wie das konkret zu machen ist, hängt leider vom verwendeten Router ab. Hier hilft die Anleitung und etwas gesunder Menschenverstand aber in der Regel weiter. ;) Tipp: in manchen Router-Betriebssystemen wird sowas auch "virtual Server" oder "Service-Tabelle" genannt, wenn man kein "Portforwarding" finden kann. Weiterhin ist natürlich darauf zu achten, dass die evtl. vorhandene Firewall im Router Transfers über den verwendeten Port erlaubt. :?

Eine letzte Stolperfalle ist leider auch noch zu beachten: damit ein Portforwarding korrekt (über längere Zeit) funktioniert, sollte man feste IP-Adressen für die PCs im LAN vergeben. Das sollte man allerdings nicht über eine statische IP-Konfiguration am Rechner selbst tun (hier einfach weiter auf "automatisch" stehen lassen, so dass der DHCP-Server im Router gefragt wird), sondern den DHCP-Server im Router entsprechend konfigurieren. Üblicherweise lässt sich nämlich hier eine Liste von MAC-Adressen pflegen, für die immer eine ganz bestimmte IP-Adresse herausgegeben werden soll. So kann man die IP eines PCs "festnageln", ohne die Verteilung der Konfiguration per DHCP abklemmen zu müssen (das ist nämlich in der Regel überhaupt keine gute Idee).
:think:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.

Für diesen Beitrag haben gedankt: Jakane