Ich möchte einige tun NAT
in iptables
. Damit werden alle ankommenden Pakete 192.168.12.87
und der Port 80
an den 192.168.12.77
Port weitergeleitet 80
.
Wie geht das mit iptables?
Oder
Gibt es noch andere Möglichkeiten, um dasselbe zu erreichen?
192.168.12.87
. Also muss ich alle Anfragen an weiterleiten192.168.12.77
.iptables
. Und ich habe einige Beispiele gesehen. Aber es scheint zwei Ethernet zu erfordern. Link: revsys.com/writings/quicktips/nat.htmlAntworten:
Diese Regeln sollten funktionieren, vorausgesetzt, dass
iptables
sie auf dem Server ausgeführt werden192.168.12.87
:Sie müssen eingehenden Datenverkehr auf Port 80 DNAT, aber Sie müssen auch den Datenverkehr zurück SNAT.
Alternative (und beste Herangehensweise IMHO):
Abhängig von Ihrem Webserver (Apache, NGinx) sollten Sie einen HTTP-Proxy auf Ihrem Front-End-Server (192.168.12.87) in Betracht ziehen:
mod_proxy (Apache)
proxy_pass (NGinx)
quelle
Der Grund, warum ein scheinbar offensichtlicher
iptables -t nat -A PREROUTING -d 192.168.12.87 -p tcp --dport 80 -j DNAT --to-destination 192.168.12.77
Fehler nicht zu erwarten ist, ist, wie die Rückpakete weitergeleitet werden.Sie können Regeln einrichten, die bewirken, dass die an 192.168.12.87 gesendeten Pakete einfach auf 192.168.12.77 NATted werden. 192.168.12.77 sendet dann die Antworten direkt an den Client zurück. Diese Antworten gehen nicht über den Host, auf dem Ihre iptables-Regel NAT ausführt. Daher werden die Pakete in die eine Richtung übersetzt, die Pakete in die andere Richtung jedoch nicht.
Es gibt drei Ansätze, um dieses Problem zu lösen.
iptables -t NAT -A POSTROUTING -d 192.168.12.77 -p tcp --dport 80 -j SNAT --to-source 192.168.12.87
iptables -t nat -A OUTPUT -p tcp --sport 80 -j SNAT --to-source 192.168.12.87
Jede dieser drei Lösungen weist Nachteile auf. Sie müssen daher sorgfältig prüfen, ob Sie diese Weiterleitung wirklich durchführen müssen.
Von den drei Ansätzen denke ich, ist der erste derjenige, der am wahrscheinlichsten funktioniert. Wenn Sie also die Client-IP-Adressen nicht kennen müssen, würde ich diese empfehlen.
Sie können auch ganz auf NAT verzichten und nicht versuchen, das Problem auf MAC- oder IP-Ebene zu lösen. Sie können bis zur HTTP-Ebene aufsteigen und dort nach einer Lösung suchen. In diesem Fall ist die Lösung ein HTTP-Proxy. Wenn Sie einen HTTP-Proxy unter 192.168.12.87 installieren und entsprechend konfigurieren, können Sie die Anforderungen an 192.168.12.77 weiterleiten und die Antworten zurückleiten. Zusätzlich kann ein X-Forwarded-For-Header eingefügt werden, der die ursprüngliche Client-IP beibehält. Der Server am 192.168.12.77 muss dann so konfiguriert werden, dass er dem X-Forwarded-For-Header vom 192.168.12.87 vertraut.
quelle
-j MASQUERADE
wird hier nicht erwähnt; ist es nicht der übliche Ansatz bei DNAT?SNAT
stattMASQUERADE
, denn das ist es, was die Dokumentation sagt. Der genaue Wortlaut in der Dokumentation ist:It should only be used with dynamically assigned IP (dialup) connections: if you have a static IP address, you should use the SNAT target.