URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 61045
[ Назад ]

Исходное сообщение
"host with 2 gateways and iptables -j MARK"

Отправлено NetKnight , 19-Окт-05 02:58 
Настраиваю по доке "linux advanced ruoting how-to" роутинг через два гейтвея и у меня следующая проблема: Не проходит трафик который рутится на основе марков (fwmark).

Вот что я имею:
eth0 - Gaeway 1 iface
ip0 - ip for eth0
gw0 - gateway ip for eth0
eth1 - Internal iface
ip1 - ip for eth1
eth2 - gateway 2 iface
ip2 - ip for eth2
gw2 - gateway for eth2

Прописываю следующее:
iptables -t mangle -A PREROUTING -p icmp -j MARK --set-mark 6

ip rule add fwmark 6 table T1
ip rule add main
ip rule add default

Правила роутинга в T1 прописаны правильно, т.к. если в критерии правила не ставить fwmark - всё работает. А вот с этой fwmark трейсроут доходит только до гейтвея gw0 или gw2 (Пробовал направлять в оба). Тоесть решение о роутинге принимается правильно и пакеты уходят с сервера через правильный интерфейс, но вот на хардварном гейтвее (куда напрвлены eth0 и eth2) застревают. Последним в маршруте трейсировки любого адреса находится адрес указаного гейтвея и дальше не идёт :(

Почему такое может быть? Какая разница использую я марки или нет? Они же ведь только в кернеле сущевствуют. Почему хост-гейтвей не пропускает маркированые пакеты? Или есть ещё способы направлять маршруты по портам и протоколам?


Содержание

Сообщения в этом обсуждении
"host with 2 gateways and iptables -j MARK"
Отправлено jonatan , 19-Окт-05 08:51 
>ip rule add fwmark 6 table T1
Покажите
ip rule list
ip route list table T1
>ip rule add main
>ip rule add default
Это зачем?
Покажите результаты traceroute.

"host with 2 gateways and iptables -j MARK"
Отправлено den , 19-Окт-05 12:11 
Я когда-то  пытался аналогичную задачу решить, так и не нашел решения. Самое интересное что при маркировани icmp и завороте трафика в нужный table c дальнейшим snat обнарожилось, что пакеты маркируются правильно , уходят в нужный интерфйс с предварительным snat, echo reply возвращаются на внешний интерфейс но обратного nat не происходит. Читание манов на предмет connection traking тоже ничего не дало. Как заставить ядро производить замену ип на внутринние с последующим их форвардом к клиенту ?

PS: для TCP/UDP траффика все работает без проблем


"host with 2 gateways and iptables -j MARK"
Отправлено NetKnight , 19-Окт-05 16:59 
>>ip rule add fwmark 6 table T1
>Покажите
>ip rule list
>ip route list table T1
>>ip rule add main
>>ip rule add default
>Это зачем?

Как зачем? Это направление в главную таблицу роутинга. Обычно они уже есть по дефолту, но я делал flush и по этому заново их прописывал.

>Покажите результаты traceroute.

#ip rule list
0:      from all lookup local
99:     from myhost fwmark 6 lookup T1
998:    from all lookup main
999:    from all lookup default

#ip ruote list table T1
192.168.3.0/24 dev eth2  scope link  src 192.168.3.254
192.168.2.0/24 dev eth1  scope link  src 192.168.2.1
127.0.0.0/8 dev lo  scope link
default via 192.168.3.1 dev eth2

machine myhost#tracert www.sun.com
Tracing route to www.sun.com [209.249.116.195]
over a maximum 30 hops:
1 <1 ms <1 ms * 192.168.2.1
2 <1 ms <1 ms 1 ms 192.168.3.1
3 * * * *
4 * * * *
5 * * * *
....... И так до упора

Для теста fwmark ставится на все пакеты которые идут от myhost.
Если в ip rule заменить
99:     from myhost fwmark 6 lookup T1
на
99:     from myhost lookup T1
всё прекрасно работает.


"host with 2 gateways and iptables -j MARK"
Отправлено jonatan , 19-Окт-05 17:25 
>Как зачем? Это направление в главную таблицу роутинга. Обычно они уже есть
>по дефолту, но я делал flush и по этому заново их
>прописывал.
Делали flush чего? Кэша?
>machine myhost#tracert www.sun.com
>Tracing route to www.sun.com [209.249.116.195]
>over a maximum 30 hops:
>1 <1 ms <1 ms * 192.168.2.1
>2 <1 ms <1 ms 1 ms 192.168.3.1
>3 * * * *
>4 * * * *
>5 * * * *
Проверьте tcpdump-ом на eth2 с каким source ip уходят пакеты.