PDA

Bekijk de volledige versie : ip rule fwmark не работает



andycpp
15-01-2007, 18:20
Похоже, что ip rule не реагирует на fwmark (прошивка Олега)
Ввожу


iptables -t nat -A VSERVER -j DNAT -p tcp --dport 17 --to 10.0.0.100:17
iptables -t mangle -I PREROUTING 1 -j MARK --set-mark 8217 -p tcp -s 10.0.0.100 --sport 17
iptables -t mangle -I POSTROUTING 1 -j LOG -m mark --mark 8217 --log-prefix 'MARK 8217 '

В логе вижу строки на тему маркировки, когда 10.0.0.100 посылает пакет с 17 порта. Т.е. маркировка работает.

Далее ввожу следующее (192.168.1.1 - IP-адрес девайса, подключенного к vlan2)


ip route add 192.168.1.0/24 dev vlan2 table 82
ip route add 10.0.0.0/24 dev br0 table 82
ip route add default via 192.168.1.1 prio 82 table 82
ip rule add fwmark 8217 table 82 prio 82

По-идее, после этого ответ от 10.0.0.100 должен роутиться через 192.168.1.1, ан нет - всё равно пакет идёт через другой default gateway, который определён в main, хотя и приоритет у неё ниже...


$ ip rule list
0: from all lookup local
82: from all fwmark 8217 lookup 82
32766: from all lookup main
32767: from all lookup 253


Где косяк?

gaaronk
15-01-2007, 18:33
собрано ли ядро среди прочего с опцией

CONFIG_IP_ROUTE_FWMARK=y

?

Oleg
15-01-2007, 18:49
│ │ IP: advanced router │ │
│ │ IP: policy routing │ │
│ │ IP: use netfilter MARK value as routing key │ │
│ │ IP: fast network address translation │ │
│ │ [ ] IP: equal cost multipath │ │
│ │ IP: use TOS value as routing key │ │
│ │ [ ] IP: verbose route monitoring │ │
│ │ [ ] IP: large routing tables │ │

andycpp
16-01-2007, 06:22
А оно хоть у кого-то работает? А может ли этот кто-то в таком случае конфиги выложить? :)

andycpp
17-01-2007, 12:07
Up.

Может подскажите, как искать, в чём и где проблема конкретно? Или как иначе организовать такой вот хитрый роутинг, когда в зависимости от порта пакеты должны роутиться в разные интерфейсы...

Oleg
17-01-2007, 12:15
С учётом того, что там вирутальный сервер, роутинг должен быть не по портам, а по адресу отправителя. Т.е. policy routing и смотреть поле src (один из внешних адресов).

andycpp
17-01-2007, 12:36
С учётом того, что там вирутальный сервер, роутинг должен быть не по портам, а по адресу отправителя. Т.е. policy routing и смотреть поле src (один из внешних адресов).
Я не совсем понял - речь ведь только о некоторых портах. Остальной трафик должен идти по другому маршруту.
По-идее, каждый tcp-пакет отдельно роутится и т.п. Следовательно - пришел пакет на 17 порт роутера, он его DNAT'нул, и паект отроутился на 17 порт внутреннего компа. Ок.
Теперь внутренний комп отвечает с 17-го порта - в пакете ведь адрес отправителя и получателя (+ порты), пакет дошел до DG, потом роутер видит, что пакет пришел с 17 порта внутреннего компа и его нужно отправить куда-то наружу. По номеру порта определяется, что 17 - он обслуживается wan1, делается fwmark, потом роутинг на основе fwmark запихивает в wan1, и SNAT уже подставляет адрес wan1.

Я так понимаю, что вариант с src - это если весь трафик с определённого компа нужно отправить через определённый интерфейс.
Или iprouting2 трекает весь коннекшн и понимает, откуда он начался и что остальные пакеты - с ним связаны?