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 InternetPrivate 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.1NAT-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:54321DNAT (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:80PAT (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" masqueradeSNAT 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.1Port 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:80Vollstä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 ACCEPTNAT 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 ACCEPTNAT-Typen (für P2P/Gaming)
Full Cone NAT
Offen: Jeder kann antworten
PC:Port → NAT:Port ←→ Beliebige externe IPRestricted Cone NAT
Eingeschränkt: Nur bekannte IPs
PC:Port → NAT:Port ←→ Nur IPs, mit denen vorher kommuniziert wurdePort Restricted Cone NAT
Stark eingeschränkt: Bekannte IP:Port
PC:Port → NAT:Port ←→ Nur exakte IP:Port-KombinationSymmetric 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:19302NAT 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 -nVerbindungsprobleme
# 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-ipPort Forwarding testen
# Von außen testen
nc -zv öffentliche-ip port
# Auf Router: Regel prüfen
iptables -t nat -L PREROUTING -v -n | grep dportZusammenfassung
| 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.