Weblog
Network Address Translation (NAT)
27.04.2025 4 Min. Lesezeit
Die Technologie Network Address Translation (NAT) ist ein fundamentaler Bestandteil moderner Netzwerkinfrastrukturen. Sie wurde ursprünglich entwickelt, um das Problem der knappen IPv4-Adressen zu lösen, hat sich aber darüber hinaus zu einem vielseitigen Werkzeug für Sicherheits-, Routing- und Virtualisierungszwecke entwickelt. In diesem Beitrag erläutere ich NAT in all seinen Ausprägungen - SNAT, DNAT und Static NAT - mit technischem Tiefgang, historischem Kontext und praktischen Konfigurationsbeispielen für Junos, Cisco IOS und iptables.
Historischer Kontext und Motivation
IPv4 wurde in den 1980er Jahren entwickelt und bietet einen Adressraum von etwa 4,3 Milliarden Adressen. Mit dem explosionsartigen Wachstum des Internets in den 1990er Jahren wurde schnell klar, dass dieser Adressraum nicht ausreichen würde. Gleichzeitig war es nicht praktikabel, jedem Endgerät eine öffentliche IP-Adresse zuzuweisen.
1994 wurde NAT in RFC 1631 spezifiziert. Die Idee: Private IP-Adressen (RFC 1918) können innerhalb eines Netzwerks verwendet werden, während nur eine oder wenige öffentliche IP-Adressen für die Kommunikation mit dem Internet benötigt werden. NAT übersetzt dabei die Adressen und Ports zwischen internem und externem Netzwerk.
Grundprinzip von NAT
NAT verändert IP-Header-Felder (und ggf. Portnummern) von IP-Paketen, während sie ein NAT-Gateway passieren. Es gibt drei Hauptformen:
- SNAT (Source NAT) - Quelladresse wird verändert
- DNAT (Destination NAT) - Zieladresse wird verändert
- Static NAT - feste 1:1-Zuordnung zwischen interner und externer Adresse
SNAT - Source NAT
Beschreibung
SNAT wird verwendet, wenn ein internes Gerät mit einer privaten IP-Adresse nach außen kommuniziert (z. B. ins Internet). Die Quelladresse wird durch eine öffentliche IP ersetzt, damit die Antwortpakete korrekt zurückgeleitet werden können.
Typisches Einsatzszenario
- Internetzugang für interne Clients
- Maskierung interner Netzstruktur
Beispiel: iptables
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to-source 203.0.113.1
Beispiel: Cisco IOS
ip nat inside source list 1 interface GigabitEthernet0/1 overload
access-list 1 permit 192.168.0.0 0.0.0.255
Beispiel: Junos
set security nat source rule-set rs1 from zone trust
set security nat source rule-set rs1 to zone untrust
set security nat source rule-set rs1 rule r1 match source-address 192.168.0.0/24
set security nat source rule-set rs1 rule r1 then source-nat interface
Die Junos Beispiele beziehen sich alle auf die SRX Firewall-Familie. Mittels einer MultiService-Erweiterung können auch MX-Router für NAT eingesetzt werden.
DNAT - Destination NAT
Beschreibung
DNAT wird verwendet, wenn ein externer Client ein internes Gerät erreichen soll. Die Zieladresse im Paket wird durch eine interne Adresse ersetzt - z. B. bei Portweiterleitungen.
Typisches Einsatzszenario
- Zugriff auf internen Webserver von außen
- Portweiterleitung für Dienste wie SSH, HTTP, VoIP
Beispiel: iptables
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.100:80
Beispiel: Cisco IOS
ip nat inside destination list 1 interface GigabitEthernet0/1
access-list 1 permit 203.0.113.10
ip nat inside destination static tcp 203.0.113.10 80 192.168.0.100 80
Beispiel: Junos
set security nat destination pool webserver address 192.168.0.100/32
set security nat destination rule-set rs1 from zone untrust
set security nat destination rule-set rs1 rule r1 match destination-address 203.0.113.10/32
set security nat destination rule-set rs1 rule r1 match destination-port 80
set security nat destination rule-set rs1 rule r1 then destination-nat pool webserver
Static NAT (1:1 NAT)
Beschreibung
Static NAT ordnet eine interne IP-Adresse dauerhaft einer öffentlichen IP-Adresse zu. Es wird keine Portübersetzung durchgeführt - jede Verbindung wird 1:1 abgebildet.
Typisches Einsatzszenario
- Server mit fester öffentlicher IP
- VPN-Gateways, VoIP-Systeme
Beispiel: iptables
iptables -t nat -A PREROUTING -d 203.0.113.10 -j DNAT --to-destination 192.168.0.10
iptables -t nat -A POSTROUTING -s 192.168.0.10 -j SNAT --to-source 203.0.113.10
Im Falle von iptables entspricht ein Static NAT Eintrag der Kombination von DNAT und SNAT.
Beispiel: Cisco IOS
ip nat inside source static 192.168.0.10 203.0.113.10
Beispiel: Junos
set security nat static rule-set rs1 from zone untrust
set security nat static rule-set rs1 rule r1 match destination-address 203.0.113.10/32
set security nat static rule-set rs1 rule r1 then static-nat prefix 192.168.0.10/32
Bedeutung von NAT im IPv4-Zeitalter
NAT war (und ist) eine zentrale Technologie zur Adresskonservierung. Ohne NAT wäre der IPv4-Adressraum schon lange vor der Einführung von IPv6 erschöpft gewesen. NAT ermöglicht:
- Adressübersetzung zwischen privaten und öffentlichen Netzen
- Sicherheitsgewinn durch Maskierung interner Strukturen
- Mehrmandantenfähigkeit in Rechenzentren
- Virtualisierung und Containerisierung (z. B. Docker NAT)
Einschränkungen und Herausforderungen
- Protokollinkompatibilität: Einige Protokolle (z. B. SIP, FTP, IPsec) funktionieren schlecht oder nur mit NAT-Traversal.
- Verlust von End-to-End-Konnektivität: NAT bricht das ursprüngliche Internetmodell.
- Komplexität bei Debugging und Logging
- Skalierungsprobleme bei großen NAT-Tables
Fazit
NAT ist eine technisch elegante, aber nicht perfekte Lösung für ein strukturelles Problem: die Knappheit von IPv4-Adressen. In modernen Netzwerken ist NAT allgegenwärtig - sei es im Heimrouter, im Rechenzentrum oder in Cloud-Umgebungen. Mit dem Übergang zu IPv6, das NAT überflüssig machen soll, verliert es langfristig an Bedeutung - doch bis dahin bleibt es ein unverzichtbares Werkzeug für Netzwerktechniker.
Zusätzliche Hinweise
Stateful Firewall: In beiden Systemen (Junos und iptables) sollte NAT mit einer zustandsbehafteten Firewall kombiniert werden.
Reverse Path Filtering (RPF): Bei asymmetrischem Routing kann RPF Pakete verwerfen - unbedingt prüfen.
Hairpin NAT: Für interne Clients, die über die öffentliche IP auf interne Server zugreifen - erfordert spezielle Konfiguration.