LINUX.ORG.RU
ФорумAdmin

gпомогите разобраться с ip и iptables


0

0

Всем привет.

У нас есть три линка в интернет, я разруливаю пользователей при помощи 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.

Может у меня в скрипте что-то не так.
Подскажите.


Я делаю так:
ip rule add fwmark 202 lookup games
ip route add default via x.x.x.x table games
ip rule add fwmark 101 lookup games2
ip route add default via x.x.x.x table games2

iptables -t mangle -A PREROUTING -s 192.168.1.50 ! -d 192.168.1.100 -i eth3 -j MARK --set-mark 202

iptables -t nat -A POSTROUTING -s 192.168.1.50 -o ppp0 -j SNAT --to y.y.y.y

Если мне нужен другой канал:
iptables -t mangle -R PREROUTING 1 -s 192.168.1.50 ! -d 192.168.1.100 -i eth3 -j MARK --set-mark 101
ip route flush cache

Зачем игратся с этими CONNMARK`ами ?

SlavikSS ★★
()

> У нас есть три линка в интернет

Дело в том, что функции мультилинка в ядре реализованы довольно кривовато. http://www.ssi.bg/~ja/nano.txt - стопудово работает. Но нужно ядро патчить.

iron ★★★★★
()

А если делать не

iptables -t mangle -A routing_n

а ptables -t mangle -I routing_n 0

?

Gin ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.