Для упрощения повествования опустим некоторые детали (типа биллинга). На сервере есть три сетевых интерфейса, два из них для выхода в Интернет.
eth0 - локальная сеть.
eth1 - первый провайдер, используется для postfix и httpd.
eth2 - второй провайдер, для доступа пользователей в интернет.
Путь его IP адрес второго соединения IP_eth2, шлюз GWIP_ETH2.
Доступ в интернет организован с помощью NAT и прозрачного Squid следующим образом:
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A POSTROUTING -o eth0 -j SNAT --to-source IP_eth2
default gw на сервере - это eth1, соответственно squid начинает работать именно через него. Пытался использовать в настройках squid параментр tcp_outgoing_address, но он его игнорировал.
В итоге остановился на таком решении:
iptables -A OUTPUT -t mangle -p tcp --dport 80 -j MARK --set-mark 1Теперь трафик со squid идёт на нужный интерфейс, но остаются сомнения о верности такого решения.
ip rule add fwmark 1 table saturn.out
ip route add default via GWIP_ETH2 dev eth2 table saturn.out
ip route flush cache
Комментариев нет:
Отправить комментарий