Aufgabe 1 - NAT und TCP

Zunächst benötigen Sie die Datei nat_topo.py, die die Mininet-Topologie beinhaltet mit der wir arbeiten werden. Die Topologie besteht aus vier Hosts (h0 - h3), wovon h1, h2 und h3 sich jeweils hinter einem NAT-Router (nat1 und nat2) befinden. Starten Sie die Topologie in Mininet wie gewohnt mit:

sudo python nat_topo.py

Sie sollten nun die ihnen schon bekannte Mininet CLI vor sich haben. Das Netz was hier erzeugt wurde sieht wie folgt aus:

Topologie
Topologie

h0 ist für heute sowas wie ein Server im Internet und h1 ist in einem privaten Subnetz hinter dem NAT-Router nat1. h2 und h3 sind ebenfalls hinter einem NAT-Router (nat2). Fangen wir an, das Verhalten dieser Router zu untersuchen.

  1. Versuchen Sie mit Hilfe von ping von Host h1 aus die beiden Hosts h0 und h2 zu erreichen. Erklären Sie warum es klappt/bzw. nicht klappt (ein Blick auf die Topologie hilft sicherlich).
  2. Starten Sie den Ihnen schon bekannten einfachen Webserver auf dem Host h0 mit:
h0 python3 -m http.server 80 &

Verbinden Sie sich nun auf nat1 und h1 (xterm h1 nat1). Starten sie Wireshark auf nat1 (wireshark &) und wählen Sie als Netzwerkschnittstelle zum Aufzeichnen die Schnittstelle mit dem Namen any, also alle verfügbaren Schnittstellen. Starten Sie die Aufzeichnung und kontaktieren Sie den eben gestarteten Webserver von h1 aus via:

`curl 10.0.0.1`

Schauen Sie sich in Wireshark an, wie der NAT-Router die Pakete verändert. Versuchen Sie anhand der Netzwerk-Topologie die Veränderungen nachzuvollziehen. 3. Jetzt nutzen wir eines der einfachsten, aber auch nützlichsten Netzwerk-Tools: Netcat (nc). Wie schon gesehen, kann man mit Netcat einfach TCP-Verbindungen aufbauen und über diese Daten transportieren. Daten braucht es aber gar nicht, um das Verhalten der NAT zu beobachten. Zunächst aber, starten wir einen Server, der TCP-Verbindungen auf dem Host im “Internet” (h0) annimmt.

nc -k -l 1234

Als nächstes verbinden wir uns von Host h1 aus mit diesem Server:

nc -q -1 10.0.0.1 1234

Wichtig ist dabei, dass -q -1 gesetzt ist, so dass die Verbindung bestehen bleibt! Jetzt schauen Sie sich den NAT-Tabelleneintrag zu dieser TCP-Verbindung auf nat1 an via:

conntrack -L

Sie sollten einen Eintrag wie diesen hier sehen:

tcp 6 431970 ESTABLISHED src=192.168.1.100 dst=10.0.0.1 sport=34016 dport=1234 src=10.0.0.1 dst=10.0.0.5 sport=1234 dport=34016 [ASSURED] mark=0 use=1

Dabei handelt es sich um das Protokoll (tcp), die Protokollnummer wie sie im dazugehörigen IP-Feld steht (6), der Timeout für den Eintrag in Sekunden (431970), den Zustand der TCP-Verbindung (ESTABLISHED), das Viertupel von Paketen Richtung Internet, wie Sie LAN-seitig ankommen und das Viertupel von Paketen aus dem Internet, wie sie WAN-seitig ankommen. Die Viertupel werden für das Muliplexen/Demultiplexen benötigt und für das Umschreiben der Pakete. Den Rest brauchen wir hier nicht. Fällt Ihnen etwas am Viertupel auf? Wurde der Quellport verändert?

Beenden Sie den nc-Client (und nur den Client, denn den Server benötigen wir noch) und schauen Sie danach gleich wieder in die NAT-Tabelle. Was fällt Ihnen auf? Welcher Eintrag hat sich verändert und warum?

  1. Wir wollen nun das Verhalten der NAT beobachten, wenn ein bereits vergebener Port auf dem NAT-Router verwendet wird. Dazu benötigen wir aber zwei Hosts im LAN. Deshalb wechseln wir nun zur nat2 und den Hosts h2 und h3. Wir nutzen wieder Netcat und verbinden uns von h2 und h3 mit jeweils den gleichen Quell-Ports, damit die NAT nicht einfach die Ports wiederverwenden kann. Dazu verbinden sie sich jeweils von h2 und h3 mit dem eben gestarteten Server wie folgt:
nc -p 3456 -q -1 10.0.0.1 1234

Verbinden Sie sich mit nat2 und schauen Sie sich die NAT-Tabelle mit conntrack an. Erklären Sie sich die Ausgabe (insbesondere die Viertupel).


Zurück
Übersicht
Weiter