На шлюзе PROXY есть два подключения к интернету: eth1 и eth2. В качестве PROXY использовались Debian Lenny и CentOS 5.5, результат одинаковый.
Задача: выпускать компьютер HOST(10.10.0.68) в интернет через второе подключение, остальные компьютеры - через первое.
Настройки PROXY:
Интерфейсы:
Код: Выделить всё
lo 127.0.0.1/8
eth0 10.10.0.2/24 # локальная сеть
eth1 192.168.1.252/24 # провайдер, default gw 192.168.1.1
eth2 10.0.0.61/24 # провайдер, default gw 10.0.0.2
Код: Выделить всё
# ip rule list
0: from all lookup 255
100: from all fwmark 0x2 lookup 100
32766: from all lookup main
32767: from all lookup default
Код: Выделить всё
# ip route list
10.0.0.0/24 dev eth2 proto kernel scope link src 10.0.0.61 # интерфейс в интернет
92.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.252
10.10.0.0/24 dev eth0 proto kernel scope link src 10.10.0.2
default via 10.0.0.2 dev eth2
# ip route list table 100
192.168.1.0/24 dev eth1 scope link src 192.168.1.252
default via 192.168.1.1 dev eth1
Код: Выделить всё
echo "1" > /proc/sys/net/ipv4/ip_forward
# NAT
# выпускаем локалку в интернет
iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o eth2 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o eth1 -j MASQUERADE
# ROUTING
ip route flush table 100
ip route add 192.168.1.0/24 dev eth1 src 192.168.1.252 table 100
ip route add default via 192.168.1.1 dev eth1 table 100
ip rule del pri 100
ip rule add fwmark 2 lookup 100 pri 100
# MARK RULES
iptables -t mangle -A FORWARD -s 10.10.0.68 -j MARK --set-mark 2
iptables -t mangle -A FORWARD -s 10.10.0.68 -d 127.0.0.0/8 -j MARK --set-mark 0
iptables -t mangle -A FORWARD -s 10.10.0.68 -d 10.0.0.0/8 -j MARK --set-mark 0
iptables -t mangle -A FORWARD -s 10.10.0.68 -d 192.168.0.0/16 -j MARK --set-mark 0
iptables -t mangle -A FORWARD -s 10.10.0.68 -d 172.16.0.0/12 -j MARK --set-mark 0
# COUNT RULES
iptables -t mangle -A POSTROUTING -m mark --mark 2 -j ACCEPT
ip route flush cache
Все возможные модули со словом mark в названии загружены:
Код: Выделить всё
#lsmod | grep -i mark
xt_connmark 6209 0
xt_CONNMARK 6465 0
xt_CONNSECMARK 6465 0
xt_SECMARK 6852 0
xt_mark 5953 1
xt_MARK 6465 5
ip_conntrack 53281 8 xt_connmark,xt_CONNMARK,xt_CONNSECMARK,ipt_MASQUERADE,iptable_nat,ip_nat,ip_conntrack_netbios_ns,xt_state
x_tables 17349 14 xt_connmark,xt_CONNMARK,xt_CONNSECMARK,xt_SECMARK,xt_mark,xt_MARK,ipt_MASQUERADE,iptable_nat,ipt_REJECT,xt_state,ip_tables,ip6t_REJECT,xt_tcpudp,ip6_tables
Настройки HOST(10.10.0.68):
Интерфейсы:
Код: Выделить всё
eth0 10.0.0.68/24
lo 127.0.0.1/8
Код: Выделить всё
#ip rule list
0: from all lookup 255
32766: from all lookup main
32767: from all lookup default
Запуск traceroute на HOST показывает, что трафик до 8.8.8.8(гуглёвский бесплатный DNS) всё равно идёт через 10.10.0.2 и потом 10.0.0.2, то есть через первого провайдера.
Проверяем работу второго провайдера:
Меняем на PROXY маршрут по-умолчанию на 192.168.1.1:
Код: Выделить всё
# ip route del default
# ip route add default via 192.168.1.1 dev eth1
В чём может быть проблема? Весь гуг облазил - вроде всё правильно.

