Entwickler-Ecke

Internet / Netzwerk - Portforwarding - Eine kleine Einführung


Narses - Mo 18.02.08 02:21
Titel: Portforwarding - Eine kleine Einführung
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 [http://www.delphi-library.de/topic_Minimaler+LAN+Internet+Chat_60744.html], 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

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: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)

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)

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:
Konstellation D - 1 Client im LAN, Server im LAN und per Router im INet, 1 Client im Internet (Wählverbindung)

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: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