проблема с ip rule и mark - аналог route-map (cisco)
Добрый день!
пытаюсь сделать аналог cisco route-map на Linux
исходные данные:
есть два сервера - у каждого свой провайдер
но на первом серваке провайдер с широким канал, а на серваке 2 узкий (подешевле как резерв)
Далее
на серваке 2 есть asterisk, но default route идет на сервер1
хочу чтобы только траффик астериска шел через 2 провайдера
для этого маркируем пакеты астериска
alabarym@taka ~ $ sudo iptables -L -t mangle -v
Chain OUTPUT (policy ACCEPT 96174 packets, 63M bytes)
pkts bytes target prot opt in out source destination
0 0 MARK all -- any any anywhere anywhere DSCP match 0x2eMARK set 0x2e
354 177K MARK all -- any any anywhere anywhere owner UID match asterisk MARK set 0x2e
861 81838 MARK icmp -- any any anywhere anywhere MARK set 0x2e
затем направляем траффик через ip rule
alabarym@taka ~ $ ip rule
0: from all lookup local
1: from all fwmark 0x2e lookup usi
32762: from 212.220.110.97 lookup usi
32766: from all lookup main
32767: from all lookup default
проблема в том что при пакеты почему-то идут в обход NAT
вот tcmpdump
192.168.0.50 -> 212.53.40.40 SIP Request: REGISTER sip:sipnet.ru
то бишь пакеты идут напрямую в инет с адресом 192.168.0.50 что неправильно
Как говориться WTF?
подскажите где ошибка
- Для комментирования войдите или зарегистрируйтесь
Самое забавное что если
Самое забавное что если посмать icmp запрос с маркировкой - то все правила выполняются корректно
~ $ sudo ping 8.8.8.8 -m 46
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_req=1 ttl=52 time=95.5 ms
64 bytes from 8.8.8.8: icmp_req=2 ttl=52 time=95.5 ms
64 bytes from 8.8.8.8: icmp_req=3 ttl=52 time=94.9 m
Я как то пробовал рулить UDP
Я как то пробовал рулить UDP трафиком для уменьшения нагрузки на некоторые шлюзы, в итоге ничего не вышло. Такой трафик просто не рулиться (ну или у меня не вышло).
На сколько я понял, подобные махинации валидны только для TCP трафика.
Может я ошибаюсь, пусть люди поправят.
хмм решил проверить. загнал
хмм решил проверить.
загнал правилами tcp траффик в тот же MARK
результат - тот же самый
что-то тут не то
Взгляните на порядок движения
Взгляните на порядок движения пакетов от процесса : http://www.opennet.ru/docs/RUS/iptables/#TRAVERSINGOFTABLES .
Маршрутизация происходит ДО правил фервола. Потому пакеты сначала проверяются в ip rule, а потом помечаются.
Кажеться пахнет булочками ...
хмм посмотрел - действительно
хмм посмотрел - действительно это справедливо для локальных процессов
как же траффик разворачивать? iproute2 опиратеся на IP адреса и никак не получиться использовать UID
грустно как-то ...
Вот у меня было похожее
Вот у меня было похожее желание.
Состояло в том, что бы по "LARTC" отправлять пакеты через тот шлюз, через который они пришли, делал один в один по мануалу, но пакеты Астериск отправлял ровно через маршрут по умолчанию.
В итоге получилось не очень красиво, а как поступить я так и не придумал :/