SelfLinux Linux im Netzwerk Network Address Translation Abschnitt 2 | SelfLinux-0.13.0

| Network Address Translation | Autor Formatierung GPL

#### 3 Die zwei Formen von NAT

Ich unterscheide NAT in zwei verschiedene Typen: Source Nat (SNAT) und Destination NAT (DNAT).

Wenn Du die Quelladresse des ersten Pakets änderst, ist das Source NAT: Du veränderst den Ursprung der Verbindung. Source NAT ist immer Post-Routing, es wirkt, gerade bevor das Paket in die Leitung geht. Masquerading ist eine spezielle Form von SNAT.

Wenn Du die Zieladresse des ersten Pakets anderst, ist das Destination NAT: Du veränderst das Ziel, wohin die Verbindung geht. Destination NAT ist immer Pre-Routing, gerade wenn das Paket aus der Leitung kommt.Port-Forwarding, load-sharing und transparente Proxies sind alles Formen von DNAT.

#### 4 Schnelle Übersetzung vom 2.0er und 2.2er Kernel

Sorry an alle von Euch, die noch immer geschockt sind vom Übergang von 2.0 (ipfwadm) auf 2.2 (ipchains). Es gibt gute und schlechte Neuigkeiten.

Zuerst einmal kannst Du ipfwadm und ipchains wie gewohnt weiterbenutzen.Um das zu tun, musst Du das ipchains.o oder ipfwadm.o Kernelmodul aus der letzten netfilter-Distribution laden (insmod). Diese beiden schließen sich gegenseitig aus (Du bist gewarnt) und sollten nicht mit anderen netfilter-Modulen kombiniert werden.

Sobald eins dieser Module installiert ist, kannst Du ipchains und ipfwadm wie gewohnt benutzen, mit den folgenden Unterschieden:

- Das Masquerading Timeout mit ipchains -M -S, oder mit ipfwadm -M -S, zu setzen, bringt nichts. Da die neuen Timeouts der neuen NAT-Infrastruktur länger sind, sollte das aber egal sein.
- Die init_seq, delta und previous_delta Felder in der ausführlichen Masqueradingliste sind immer Null.
- Gleichzeitig die Zähler auflisten und auf Null setzen (-Z -L) funktioniert nicht mehr: Die Zähler werden nicht zurückgesetzt.

Für Hacker:

- Du kannst jetzt auch Ports von 61000-65095 einbinden, sogar wenn Du Masquerading machst. Der Masquerading Code hatte früher angenommen, dass alles im diesem Bereich freigehalten werden sollte, so dass Programme ihn nicht nutzen konnten.
- Der (undokumentierte) getsockname Hack, welchen man nutzen konnte, um bei transparenten Proxies das wirkliche Ziel herauszufinden, funktioniert nicht mehr.
- Der (undokumentierte) bind-to-foreign-address Hack ist auch nicht implementiert; dies wurde verwendet, um die Illusion von transparenten Proxies komplett zu machen.

#### 4.1 Ich will nur Masquerading! Hilfe!

Das ist das, was die meisten Leute wollen. Wenn Du durch eine PPP-Verbindung eine dynamische IP-Adresse hast (wenn Du das nicht weißt, dann hast Du eine), möchtest Du Deinem Rechner einfach sagen, dass alle Pakete, die aus Deinem internen Netzwerk kommen, so aussehen sollen, als ob sie von dem Rechner mit der PPP-Verbindung kommen würden.

    # Das NAT-Modul laden (dies zieht all die anderen mit).
      modprobe iptable_nat

    # In der NAT-Tabelle (-t nat) eine Regel für alle an ppp0 (-o ppp0)
    # ausgehenden Pakete hinter dem Routing (POSTROUTING), die maskiert
    # werden sollen, anhängen (-A).
      iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

    # IP-Forwarding aktivieren
      echo 1 > /proc/sys/net/ipv4/ip_forward

Beachte, dass Du hier keine Pakete filterst: hierzu lese das Paket-Filtering-HOWTO: Kombinieren von NAT und Paketfiltern.

#### 4.2 Was ist mit ipmasqadm?

Das ist eine verzwicktere Sache, und ich habe mir hier keine grossen Sorgen um die Rückwärts-Kompatibilität gemacht. Um Port-Forwarding zu verwenden, kannst Du einfach iptables -t nat benutzen. Unter Linux 2.2 hättest Du es zum Beispiel so machen können:

    # Linux 2.2
    # TCP-Pakete, die an 1.2.3.4 Port 8080 gehen, an 192.168.1.1 Port 80
    # weiterleiten
      ipmasqadm portfw -a -P tcp -L 1.2.3.4 8080 -R 192.168.1.1 80

Jetzt würdest Du folgendes tun:

    # Linux 2.4
    # Eine Pre-Routing (PREROUTING) Regel an die NAT-Tabelle (-t nat)
    # anhängen (-A), die besagt, dass alle TCP-Pakete (-p tcp) für 1.2.3.4
    # (-d 1.2.3.4) Port 8080 (--dport) auf 192.168.1.1:80
    # (--to 192.168.1.1:80) gemappt werden (-j DNAT).
      iptables -A PREROUTING -t nat -p tcp -d 1.2.3.4 --dport 8080 \
      -j DNAT --to 192.168.1.1:80

Wenn Du willst, dass diese Regel auch lokale Verbindung verändert (ich meine, wenn sogar auf dem NAT-Rechner selbst ein Telnet auf 1.2.3.4 Port 8080 an 192.168.1.1 Port 80 geleitet wird), kannst Du diese Regel in die OUTPUT-Kette (für lokal ausgehende Pakete) einfügen:

    # Linux 2.4
      iptables -A OUTPUT -t nat -p tcp -d 1.2.3.4 --dport 8080 \
      -j DNAT --to 192.168.1.1:80