gпомогите разобраться с ip и iptables
Всем привет.
У нас есть три линка в интернет, я разруливаю пользователей при помощи ip и iptables, но происходят странные вещи.
Три различных ISP подключены к свичу cisco. Затем транком виланов приходят на eth0 сервера Linux (ASPLinux 12). Интерфейс eth1 смотрит в локалку.
Транк поднимается сервером на интерфейсы eth0.101, eth0.102, eth0.103
На сервере мною написан вот такой скрипт
[root@gw rc.d]# cat def_routing
#!/bin/bash
#
ip rule del table 1
ip rule del table 2
ip rule del table 3
ip route del table 1
ip route del table 2
ip route del table 3
ip route add default via xxx.xxx.xxx.xxx table 1
ip route flush cache
ip route add default via yyy.yyy.yyy.yyy table 2
ip route flush cache
ip route add default via zzz.zzz.zzz.zzz table 3
ip route flush cache
ip rule add fwmark 1 table 1
ip rule add fwmark 2 table 2
ip rule add fwmark 3 table 3
iptables -t mangle -F
iptables -t mangle -X
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -N routing
iptables -t mangle -N routing_n
############################################################################### ########################
iptables -t mangle -A PREROUTING -i eth1 -j routing
############################################################################### #######################
iptables -t mangle -A routing -m state --state NEW,RELATED -j routing_n
iptables -t mangle -A routing -m connmark --mark 1 -j MARK --set-mark 1
iptables -t mangle -A routing -m connmark --mark 2 -j MARK --set-mark 2
iptables -t mangle -A routing -m connmark --mark 3 -j MARK --set-mark 3
iptables -t mangle -A routing_n -s 192.168.200.0/24 -d ! 192.168.0.0/16 -j CONNMARK --set-mark 3
iptables -t mangle -A routing_n -s 192.168.200.2/32 -d ! 192.168.0.0/16 -j CONNMARK --set-mark 1
iptables -t mangle -A routing_n -s 192.168.200.3/32 -d ! 192.168.0.0/16 -j CONNMARK --set-mark 2
iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -m mark --mark 1 -o eth0.101 -j SNAT --to-source xxx.xxx.xxx.xxx
iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -m mark --mark 2 -o eth0.102 -j SNAT --to-source yyy.yyy.yyy.yyy
iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -m mark --mark 3 -o eth0.103 -j SNAT --to-source zzz.zzz.zzz.zzz
Скрипт прописан для запуска в rc.local
Так вот в чем странность - после перезагрузки сервера все работает на УРА.
Я на своей машине (192.168.200.2) внутри локалки запускаю tracert www.ru -d, все бежит так как должно и я вижу что пакеты бегут через ISP1, точно такоеже действие на машине (192.168.200.3) показывает похождение пакетов через ISP2, у всех остальных в локалке прохождение через ISP3.
Теперь я правлю свой скрипт в строке
iptables -t mangle -A routing_n -s 192.168.200.2/32 -d ! 192.168.0.0/16 -j CONNMARK --set-mark 2
запускаю скрипт и проверяю на своей машине - tracert www.ru -d, но почемуто трасерт показывает, что я опять иду через ISP1.
Делаю перезагрузку сервера и все встает на свои места - трасерт показывает что я иду через ISP2.
Может у меня в скрипте что-то не так.
Подскажите.