NAT via iptables

Wie unter dem Punkt Firewall bereits erläutert, kommt iptables mit einer built-in NAT Tabelle. Diese kann für entsprechendes NAT Mapping verwendet werden. Hier ist der Artikel NAT | KarlRupp zu empfehlen.

Grundlegendes

Beim Einrichten von SNAT/DNAT via iptables ist die folgende Übersicht sinnvoll. Hierbei ist vor allem der Punkt, ab welchem Punkt die NAT-Entscheidung getroffen wird, relevant. iptables

Packet Forwarding einstellen

Damit NAT funktioniert, musst du die Network Address Translator Instanz für Packet Forwarding einrichten.

Packet Forwarding via Kernel

echo 1 > /proc/sys/net/ipv4/ip_forward

Packet Forwarding Regel

iptables -A FORWARD -i <if-in_name> -j ACCEPT

MASQUERADE

Mittels MASQUERADE erfolgt ein Source NAT bei der die Source IP durch die IP auf dem <if-out_name> interface ersetzt wird. Das ist auch die Art von SNAT, die man aus dem Heimnetz kennt.

iptables -t nat -A POSTROUTING -o <if-out_name> -j MASQUERADE [-m comment --comment <comment>]

SNAT

Bei einem SNAT wird die Quell-IP Adresse verändert. Aus Performance-Gründen ist es zu empfehlen, SNAT statt MASQUERADE zu nutzen, falls die Übersetzung auf eine statische IP erfolgt. Denn hierbei entfällt der Schritt, die IP auf dem Interface zu ermitteln.

iptables -A POSTROUTING -t nat -d <dest_ip> [-p <proto>] [--dport <dest_port>] [-o <out_interface>] [-m comment --comment <comment>] -j SNAT --to-source <nat_ip> 

DNAT

Bei einem DNAT wird die Ziel-IP Adresse verändert. Dies macht insbesondere dann Sinn, falls ein System hinter einer DMZ von außen erreichbar sein soll. Dann wird eine von außen erreichbare --destination auf die --to-destination des Zielsystems innerhalb des DMZ-Netzes übersetzt.

iptables -A PREROUTING -t nat -d <dest_ip> [-p <proto>] [--dport <dest_port>] [-i <in_interface>] [-m comment --comment <comment>] -j DNAT --to-destination <dest_ip>[:<dest_port>]

NETMAP

Mittels NETMAP erfolgt ein 1:1 Mapping von IP Adressen. Dabei sollte das Mapping-Ziel möglichst die selbe Größe wie der Quellbereich haben. ist dies nicht der Fall, werden mehrere IPs ggf. auf die selbe IP gemappt.

iptables -A POSTROUTING -t nat -s <source_ip> [-o <out_interface>] [-m comment --comment <comment>] -j NETMAP --to <map_destination>
iptables -A PREROUTING -t nat -d <dest_ip> [-i <in_interface>] [-m comment --comment <comment>] -j NETMAP --to <map_destination>