Network Address Translation (NAT) ermöglicht es, mit wenigen öffentlichen IP-Adressen viele Geräte mit dem Internet zu verbinden. Nahezu jeder Heimrouter nutzt NAT.

Warum NAT?

Das IPv4-Problem

IPv4-Adressen: ~4,3 Milliarden
Geräte weltweit: > 20 Milliarden

→ Nicht genug öffentliche IPs für alle Geräte
→ Lösung: Private IPs intern, NAT für Internet

Private IP-Bereiche (RFC 1918)

| Bereich | Adressen | Typische Nutzung | |---------|----------|------------------| | 10.0.0.0/8 | 16 Mio. | Große Unternehmen | | 172.16.0.0/12 | 1 Mio. | Mittelgroße Netzwerke | | 192.168.0.0/16 | 65.536 | Heimnetzwerke |

Diese Adressen sind im Internet nicht routbar – hier kommt NAT ins Spiel.

Grundprinzip

Lokales Netzwerk                    Internet
                       NAT
┌────────────────┐    Router    ┌──────────────────┐
│ PC: 192.168.1.10│──────┐      │                  │
│ PC: 192.168.1.11│──────┼──[203.0.113.1]────────│  Webserver      │
│ PC: 192.168.1.12│──────┘      │  93.184.216.34  │
└────────────────┘              └──────────────────┘

Alle internen Geräte erscheinen im Internet
mit der gleichen öffentlichen IP: 203.0.113.1

NAT-Typen

SNAT (Source NAT)

Ändert die Quell-IP von ausgehenden Paketen.

Ausgehend:
Intern: 192.168.1.10:54321 → Extern: 93.184.216.34:80
          ↓ SNAT
NAT:    203.0.113.1:12345 → Extern: 93.184.216.34:80

Eingehende Antwort:
Extern: 93.184.216.34:80 → NAT: 203.0.113.1:12345
          ↓ Reverse NAT
Extern: 93.184.216.34:80 → Intern: 192.168.1.10:54321

DNAT (Destination NAT)

Ändert die Ziel-IP von eingehenden Paketen.

Eingehend:
Internet: 1.2.3.4:54321 → Router: 203.0.113.1:80
          ↓ DNAT (Port Forwarding)
Internet: 1.2.3.4:54321 → Webserver: 192.168.1.100:80

PAT (Port Address Translation) / NAPT

Die häufigste Form – nutzt Ports zur Unterscheidung:

┌─────────────────────────────────────────────────────────────┐
│                    NAT-Tabelle                              │
├──────────────────┬────────────────┬─────────────────────────┤
│ Intern           │ NAT-Port       │ Ziel                    │
├──────────────────┼────────────────┼─────────────────────────┤
│ 192.168.1.10:54321│ 203.0.113.1:10001│ 93.184.216.34:80    │
│ 192.168.1.11:54322│ 203.0.113.1:10002│ 93.184.216.34:80    │
│ 192.168.1.12:54323│ 203.0.113.1:10003│ 172.217.0.1:443     │
└──────────────────┴────────────────┴─────────────────────────┘

NAT mit Linux (iptables/nftables)

MASQUERADE (dynamisches SNAT)

# Aktiviere Routing
echo 1 > /proc/sys/net/ipv4/ip_forward

# SNAT für ausgehenden Traffic (iptables)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Mit nftables
nft add table nat
nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
nft add rule nat postrouting oifname "eth0" masquerade

SNAT mit fester IP

# iptables
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 203.0.113.1

# nftables
nft add rule nat postrouting oifname "eth0" snat to 203.0.113.1

Port Forwarding (DNAT)

# Port 80 von außen → 192.168.1.100:80 intern
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 \
    -j DNAT --to-destination 192.168.1.100:80

# Auch Forwarding erlauben
iptables -A FORWARD -i eth0 -p tcp --dport 80 \
    -d 192.168.1.100 -j ACCEPT

# nftables
nft add chain nat prerouting { type nat hook prerouting priority -100 \; }
nft add rule nat prerouting iifname "eth0" tcp dport 80 dnat to 192.168.1.100:80

Vollständiges NAT-Setup

#!/bin/bash
# NAT-Router Setup

# Variablen
WAN_IF="eth0"          # Internet-Interface
LAN_IF="eth1"          # LAN-Interface
LAN_NET="192.168.1.0/24"

# IP-Forwarding aktivieren
sysctl -w net.ipv4.ip_forward=1

# NAT-Regeln löschen
iptables -t nat -F

# SNAT für ausgehenden Traffic
iptables -t nat -A POSTROUTING -o $WAN_IF -s $LAN_NET -j MASQUERADE

# Port Forwarding: Webserver
iptables -t nat -A PREROUTING -i $WAN_IF -p tcp --dport 80 \
    -j DNAT --to-destination 192.168.1.100:80
iptables -t nat -A PREROUTING -i $WAN_IF -p tcp --dport 443 \
    -j DNAT --to-destination 192.168.1.100:443

# Forwarding erlauben
iptables -A FORWARD -i $WAN_IF -o $LAN_IF -m state \
    --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $LAN_IF -o $WAN_IF -j ACCEPT

NAT und Protokolle

Problematische Protokolle

Einige Protokolle funktionieren nicht gut mit NAT:

| Protokoll | Problem | Lösung | |-----------|---------|--------| | FTP (aktiv) | Daten-Port wechselt | Passives FTP oder nf_conntrack_ftp | | SIP/VoIP | Ports in SDP | STUN/TURN Server | | IPsec | Protokoll-IDs | NAT-Traversal (NAT-T) | | Gaming | P2P-Verbindungen | UPnP, Port Forwarding |

Conntrack Helper

# FTP-Helper laden
modprobe nf_conntrack_ftp

# In iptables aktivieren
iptables -A INPUT -m conntrack --ctstate RELATED -j ACCEPT

NAT-Typen (für P2P/Gaming)

Full Cone NAT

Offen: Jeder kann antworten
PC:Port → NAT:Port ←→ Beliebige externe IP

Restricted Cone NAT

Eingeschränkt: Nur bekannte IPs
PC:Port → NAT:Port ←→ Nur IPs, mit denen vorher kommuniziert wurde

Port Restricted Cone NAT

Stark eingeschränkt: Bekannte IP:Port
PC:Port → NAT:Port ←→ Nur exakte IP:Port-Kombination

Symmetric NAT

Am strengsten: Für jedes Ziel neuer Port
PC:Port → NAT:Port1 → Ziel1
PC:Port → NAT:Port2 → Ziel2 (anderer NAT-Port!)

Testen

# STUN-Test (z.B. mit stunclient)
stunclient stun.l.google.com:19302

NAT vs. IPv6

Mit IPv6 ist NAT weniger nötig:

IPv4 + NAT:
Privat 192.168.1.10 ──NAT──→ Öffentlich 203.0.113.1

IPv6:
Jedes Gerät hat öffentliche IP (z.B. 2001:db8::1)
NAT nicht erforderlich (aber möglich: NAT66)

Troubleshooting

NAT-Tabelle anzeigen

# Conntrack-Tabelle
cat /proc/net/nf_conntrack
# oder
conntrack -L

# iptables NAT-Regeln
iptables -t nat -L -v -n

Verbindungsprobleme

# Prüfen ob NAT funktioniert
# Auf internem Client:
curl ifconfig.me
# Sollte öffentliche IP zeigen

# Auf NAT-Router:
tcpdump -i eth0 -n host externe-ziel-ip

Port Forwarding testen

# Von außen testen
nc -zv öffentliche-ip port

# Auf Router: Regel prüfen
iptables -t nat -L PREROUTING -v -n | grep dport

Zusammenfassung

| NAT-Typ | Richtung | Anwendung | |---------|----------|-----------| | SNAT | Ausgehend | Internet-Zugang für LAN | | DNAT | Eingehend | Port Forwarding, Server | | MASQUERADE | Ausgehend | Dynamische WAN-IP | | PAT/NAPT | Beide | Standard-NAT mit Ports |

Fazit

NAT ist eine Übergangslösung für die IPv4-Knappheit, die sich fest etabliert hat. Es ermöglicht vielen Geräten den Internet-Zugang über eine öffentliche IP. Für Server hinter NAT ist Port Forwarding nötig. Mit IPv6 wird NAT langfristig weniger relevant, aber für IPv4-Netzwerke bleibt es unverzichtbar.