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_forward
ist 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.125
ist 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