Я пытаюсь прозрачно направить трафик одной виртуальной машины Xen через другую, вот так:
------- 192.168.250.4 192.168.250.3 ---------
| VM1 | <-----------------bridged----------------> | VM2 | <-----> Internet
------- | with |
| squid |
| proxy |
---------
Не спрашивайте почему, просто экспериментирую с iptables. Я могу успешно направлять HTTP-трафик через прокси-сервер Squid VM2 (прозрачный режим) с
iptables -t nat -A PREROUTING -p tcp --dport 80 –s ! 192.168.250.3 -j REDIRECT --to-port 3128
но как мне просто пропускать весь остальной трафик? Я уже пробовал эту конфигурацию, но она выдает мне ошибки "Connection denied" при попытке доступа в Интернет с VM1 ( 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
Что здесь не так? Я уже прочитал кучу туториалов, но большинство из них не работают как надо... (Кстати: /proc/sys/net/ipv4/ip_forward
это 1)
решение1
Вместо REDIRECT попробуйте DNAT и SNAT. Попробуйте это:
iptables -t nat -I ПРЕДВАРИТЕЛЬНАЯ МАРШРУТИЗАЦИЯ -d 192.168.250.3 -j DNAT --до пункта назначения 192.168.250.4 iptables -t nat -I ПОСЛЕДУЮЩАЯ МАРШРУТИЗАЦИЯ -s 192.168.250.4 -j SNAT --до источника 192.168.250.3
решение2
Я наконец нашел правильный способ сделать это:
NAT-преобразование исходящих соединений (VM1 --> Интернет/интранет) работает с перезаписью источника (SNAT):
iptables -t nat -A POSTROUTING -s 192.168.250.4 -j SNAT --to-source 192.168.2.125
где 192.168.2.125
текущий внешний IP-адрес VM2 (необходимонетбыть внутренним адресом). Поскольку в моем случае этот IP назначается DHCP, правило должно быть изменено для выполнения SNAT на динамическом IP. Это делается командой MASQUERADE:
iptables -t nat -A POSTROUTING -s 192.168.250.4 -j MASQUERADE
Окончательная конфигурация iptables теперь выглядит так (остальные таблицы/цепочки пусты):
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 192.168.250.4 0.0.0.0/0