Begriff
NAT (Network Address Translation)
Warum wichtig?
Dieser Begriff ist ein Knoten im SengakujiWorks-Wissensnetz. Nutze Level 0 für die erste Einordnung, Level 1 für Praxis, Level 2 für technische Struktur und Level 3 für Grenzen, Fallstricke und Expertenkontext.
Die Welt hat zu wenig IPv4-Adressen. Dein Haus hat nur eine echte IP (vom Provider). Aber du hast 10 Geräte (Handy, Laptop, TV). Wie surfen alle gleichzeitig? Der Router macht NAT. Er ist der Postbote. Die Geräte haben interne IPs (192.168.x.x -> Private Adressen). Wenn das Handy Google aufruft, tauscht der Router den Absender ("Handy") gegen "Ich (Router)" aus. Google antwortet an den Router. Der Router schaut in sein Notizbuch ("Wer wollte Google? Ah, das Handy!") und leitet das Paket weiter. Nach außen sieht es so aus, als ob alle Geräte ein Gerät wären.
Merksatz: Ein Verfahren in Routern/Firewalls, um private IP-Adressen interner Netzwerke auf eine oder mehrere öffentliche IP-Adressen umzuschreiben (Maskierung), um Kommunikation mit dem Internet zu ermöglichen.
In Docker/K8s ist NAT allgegenwärtig ("Masquerading").
Wenn ein Container (172.17.0.2) nach draußen will (curl google.com), muss der Host-Linux-Kernel NAT machen.
Befehl: iptables -t nat -L.
Regel: MASQUERADE.
Bedeutet: "Verstecke den Container hinter der IP des Hosts."
Ohne NAT würde Google versuchen, an "172.17.0.2" zu antworten. Diese Adresse ist aber im Internet nicht routingfähig -> Timeout.
1. SNAT vs. DNAT
- SNAT (Source NAT): Der Absender wird umgeschrieben (von Privat zu Öffentlich). Standard für "Raus ins Internet".
- DNAT (Destination NAT): Der Empfänger wird umgeschrieben. Beispiel: Port Forwarding.
Du rufst Router-IP:80 an. Router leitet um an Server-Intern:8080.
In K8s macht
NodePortgenau das (DNAT ankommenden Traffics auf den Pod).
2. Connection Tracking (Conntrack)
Woher weiß der Router bei der Antwort, wem das Paket gehört?
Er speichert eine Tabelle (Conntrack Table).
{ Source: 192...:5000, Dest: Google:80, MasqPort: 20000 }.
Wenn diese Tabelle voll läuft (bei 100.000 parallelen Verbindungen, z. B. DDoS oder Torrent), werden alle neuen Pakete verworfen ("Packet Drop").
Linux Kernel Parameter: net.netfilter.nf_conntrack_max. Tunen!
3. CGNAT (Carrier Grade NAT)
Dein Provider hat selbst keine IPv4-Adressen mehr. Er steckt dich auch noch hinter ein NAT. Du hast keine öffentliche IP mehr. Du teilst dir eine IP mit 1000 Nachbarn. Folge: Du kannst keine Ports öffnen (kein VPN nach Hause, kein eigener Server). Lösung: IPv6 (kein NAT nötig!) oder Cloudflare Tunnel.
Iptables und MASQUERADE im Kernel-Path
NAT ist nichts Physisches, es ist pures Kernel-Routing ("Netfilter" bei Linux).
Das Kommando iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE ist das magische Herz jedes Heimrouters und Docker-Hosts.
Das -t nat -A POSTROUTING sagt dem Kernel: "Erst wenn alle Routing-Entscheidungen durch sind und das Paket gerade dabei ist, das physikalische Kabel am Switch (eth0) zu berühren, greife ein und überschreibe kurz die Header-IP."
Der Trick am "Masquerading" im Gegensatz zu starrem NAT (SNAT) ist dessen dynamische Natur: Wenn der Router per DHCP vom Provider jede Nacht eine neue echte IP kriegt, liest MASQUERADE das Device-Interface on-the-fly aus und passt die Header dynamisch fehlerfrei der neuen IP an.
SNAT Port Exhaustion
Ein massives Problem bei hoch-parallelen Cloud-Setups.
Pro öffentliche IP hat man nur 65.535 TCP-Ports.
Setzt du AWS Lambda Datascraping auf "Eine NAT Gateway IP" ein und machst 20.000 Connections/Sekunde gegen dieselbe Google-API-IP, reserviert die Conntrack-Tabelle für jede Flow-Kombination einen ephemeral NAT-Port.
Dieser Port bleibt auch beim Schließen (TCP TIME_WAIT) noch für Minuten gesperrt.
Plötzlich gehen dem Gateway physisch die Source-Ports aus ("Port Exhaustion"). Keine neuen Pakete können geroutet werden. Die einzige Lösung ist extremes TCP Sysctl-Tuning (Timeout Reduktionen) oder das Loadbalancing des Egress-Traffics über gigantische Pools an vielen öffentlichen NAT-Gateway-IPs.
STUN, TURN und das Hole-Punching
NAT zerstört ein Internet-Grundprinzip: P2P (Peer-to-Peer). Zwei Spieler können nicht direkt miteinader zocken (Multiplayer), weil beide hinter starren Router-NATs (Firewalls) sitzen. Hier greifft UDP Hole Punching via STUN. Spieler A sendet ein UDP Paket an einen Stun-Public-Server. Auf dessen Weg durch A's Router meißelt das Paket unwiderruflich ein Verbindungs-Loch (Mapping) in A's Router-Tabellen. Der STUN Server teilt Spieler B dann dieses offene Router-Mappping mit. Spieler B sendet nun UDP dorthin. A's Router denkt "Ah, diese Antwort auf das Loch kenne ich" und lässt es durchs NAT auf A's IP fallen. P2P ist etabliert, ohne jemals manuell Ports Forwardings eingerichtet zu haben.
Quick-Check
Braucht IPv6 NAT?
Nein! IPv6 hat so viele Adressen, dass jeder Toaster eine eigene, öffentliche IP haben kann. End-to-End Connectivity ist wiederhergestellt. NAT ist ein "Hack" für das IPv4-Problem.Was ist "Hairpin NAT"?
Wenn ich von intern meine eigene externe IP aufrufe. Das Paket geht zum Router und muss "in der Haarnadelkurve" wieder zurück ins LAN. Viele billige Router können das nicht.Warum ist NAT eine "Firewall"?
Nebeneffekt: Von außen kommt niemand rein (außer auf Antwort-Pakete). Wer deine interne IP nicht kennt und kein Port-Forwarding hat, prallt am Router ab. Das ist ein Sicherheits-Feature "by accident".