iptables für transparentes NAT

iptables für transparentes NAT

Ich versuche, den Datenverkehr einer Xen-VM transparent durch eine andere zu leiten, und zwar wie folgt:

-------      192.168.250.4          192.168.250.3     ---------
| VM1 |   <-----------------bridged---------------->  | VM2   |  <-----> Internet
-------                                               | with  |
                                                      | squid |
                                                      | proxy |
                                                      ---------

Frag nicht warum, ich experimentiere nur mit iptables. Ich kann HTTP-Verkehr erfolgreich über den Squid-Proxy von VM2 (transparenter Modus) leiten mit

iptables -t nat -A PREROUTING -p tcp --dport 80 –s ! 192.168.250.3 -j REDIRECT --to-port 3128

aber wie kann ich den gesamten anderen Datenverkehr einfach durchlassen? Habe diese Konfiguration bereits ausprobiert, aber sie gibt mir die Fehlermeldung „Verbindung abgelehnt“, wenn ich versuche, von VM1 aus auf das Internet zuzugreifen ( 192.168.250.4):

vm2:~# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
# route outgoing udp traffic
DNAT       udp  -- !192.168.250.3        0.0.0.0/0           udp dpt:!80 to:192.168.250.3
# route outgoing tcp traffic
DNAT       tcp  -- !192.168.250.3        0.0.0.0/0           tcp dpt:!80 to:192.168.250.3
# this is the working squid rule
REDIRECT   tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 redir ports 3128

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
# route incoming traffic
SNAT       all  --  0.0.0.0/0            192.168.250.3       to:192.168.250.4 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Was ist hier falsch? Ich habe schon viele Tutorials gelesen, aber die meisten funktionieren nicht richtig... (Übrigens: /proc/sys/net/ipv4/ip_forwardist 1)

Antwort1

Anstelle von REDIRECT können Sie DNAT und SNAT verwenden. Versuchen Sie Folgendes:

iptables -t nat -I PREROUTING -d 192.168.250.3 -j DNAT --zum Ziel 192.168.250.4 iptables -t nat -I POSTROUTING -s 192.168.250.4 -j SNAT --zur Quelle 192.168.250.3

Antwort2

Ich habe endlich die richtige Vorgehensweise gefunden:

Das NAT ausgehender Verbindungen (VM1 --> Internet/Intranet) funktioniert mit Source Rewriting (SNAT):

iptables -t nat -A POSTROUTING -s 192.168.250.4 -j SNAT --to-source 192.168.2.125

wo 192.168.2.125ist die aktuelle externe IP von VM2 (mussnichtdie interne Adresse sein). Da diese IP in meinem Fall per DHCP zugewiesen wird, muss die Regel geändert werden, um SNAT auf der dynamischen IP auszuführen. Dies geschieht mit dem MASQUERADE-Befehl:

iptables -t nat -A POSTROUTING -s 192.168.250.4 -j MASQUERADE

Die endgültige iptables-Konfiguration sieht nun folgendermaßen aus (andere Tabellen/Ketten sind leer):

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  192.168.250.4        0.0.0.0/0

verwandte Informationen