проблема с 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" отправлять пакеты через тот шлюз, через который они пришли, делал один в один по мануалу, но пакеты Астериск отправлял ровно через маршрут по умолчанию.

В итоге получилось не очень красиво, а как поступить я так и не придумал :/

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".