Ich habe einige Fragen zu SNAT mit iptables. Angenommen, es gibt einen Router, der als DHCP-Server fungiert, um private IPs in meinem LAN zuzuweisen, und NAT, damit die Hosts in meinem LAN auf das öffentliche Internet zugreifen können.
Der Router hat zwei Schnittstellen, eine „eth0“ mit dynamischer öffentlicher IP und die andere „eth1“ mit privater IP 192.168.0.1 und das Subnetz ist 192.168.0.0/24. Angenommen, die IPv4-Paketweiterleitung ist auf diesem Router aktiviert. Ich weiß, dass ich eine Regel in der NAT-Tabelle festlegen muss, um die Quell-IP des Pakets von den Hosts in meinem LAN zum öffentlichen Internet zu maskieren. Diese Regel kann wie die folgende aussehen.
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
Ich verstehe, warum ich die Regel brauche, da das Paket aus meinem LAN eine öffentliche IP für das Internet-Routing benötigt.
Ich verstehe jedoch nicht, warum ich PREROUTING
für die Antwortpakete keine weitere Regel in der Kette festlegen muss, um deren Ziel-IP-Adressen zu ändern.
Ist die Änderung der Zieladresse dieser Antwortpakete ein Standardverhalten der MASQUERADE-Regel, die ich gerade festgelegt habe?
Und eine weitere Frage ist, woher weiß iptable, welche Pakete geändert werden sollen?
Danke schön.
Antwort1
iptables NAT ist statusbehaftet. Die Verwendung der 'nat'-Tabelle lädt automatisch dieKontaktSystem, das eine Liste aktiver Verbindungen führt und erkennt, welches Paket zu welcher Verbindung gehört. Das Conntrack-System registriert interne Hooks, die unabhängig von den iptables-Regeln arbeiten, und transformiert automatisch Pakete, die es erkennt.
(Sie können die Conntrack-Statustabelle mit conntrack -L
oder über /proc/self/net/nf_conntrack anzeigen.)
Mit diesem System entsprechen die Regeln in der Tabelle 'nat' tatsächlich nur denanfänglichPaket, das zu jeder Verbindung gehört, nicht jedes einzelne Paket. Sobald das erste Paket abgeglichen wurde, wird der entsprechende Conntrack-Eintrag als NAT-bedürftig (oder nicht) markiert und weitere Pakete werden automatisch transformiert, ohne auch nur die „NAT“-Tabelle zu durchlaufen.