Linux iptables NAT eines gesamten /24-Subnetzes

Linux iptables NAT eines gesamten /24-Subnetzes

Mein Ziel ist es, alle IP-Adressen, die eth0 erreichen, auf allen Ports und Protokollen folgendermaßen zu NAT (übersetzen): 192.168.55.x -> 192.168.42.x (ich habe die IP-Weiterleitung aktiviert und das Subnetz 192.168.42.0/24 befindet sich auf eth1). Ich kann dies für einen Host pro Zeilenpaar wie folgt tun, beispielsweise mit x=20:

iptables -t nat -A PREROUTING -i eth0 -d 192.168.55.20 -j DNAT --to 192.168.42.20
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.42.20 -j SNAT --to 192.168.55.20

Ich kann jedoch keine Möglichkeit finden, alle 253 möglichen Hosts zu übersetzen. Ich habe Folgendes versucht:

iptables -t nat -A PREROUTING -i eth0 -d 192.168.55.0/24 -j DNAT --to 192.168.42.0-192.168.42.255
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.42.20/24 -j SNAT --to 192.168.55.0-192-168.55.255

Dies führt zu einer zufälligen Host-Übersetzung. Nützlich für den Lastenausgleich. Aber wie erhält man eine einfache Eins-zu-eins-Übersetzung?

Danke schön.

Antwort1

Aus man iptables-extensions:

NETMAP
Mit diesem Ziel können Sie ein ganzes Adressnetzwerk statisch einem anderen Adressnetzwerk zuordnen. Es kann nur von Regeln in der NAT-Tabelle verwendet werden.

Es ist also nur eine Regel erforderlich:

iptables -t nat -A PREROUTING -d 192.168.55.0/24 -i eth0 -j NETMAP --to 192.168.42.0/24

Wenn Sie möchten, dass auch Verbindungen, die ursprünglich vom Netz „42“ gestartet wurden, korrekt angezeigt werden, ergänzen Sie diese Regel mit dieser zweiten Regel:

iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o eth0 -j NETMAP --to 192.168.55.0/24

verwandte Informationen