понадобилось завернуть некоторые dst порты из локалки к первому провайдеру, по умолчанию траф идёт через второго прова.
гугл посдказал сделать так , порты 80 и 8080 для примера.
iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 80 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 8080 -j MARK --set-mark 2
ip rule add fwmark 2 lookup prov1
таблица prov1 уже была, поэтому просто отправил маркированые пакеты.
но не пошло, стал копать дальше подозревая что nat может мешать данной схеме.
сделал iptables -t mangle -A PREROUTING -p tcp -m multiport --dport 80,8080 -j MARK --set-mark 2
за ним ip route flush cache
и о чудо, всё заходило как надо, до понедельника...
посмотрел uptime, перезагрузок не было, проверил правила, все на месте, но пакеты по этим портам не ходят, т.е. не идут не в один канал. Причём хосты, у которых первый канал дефолтный через ip ru add from 192.168.0.10 lookup prov1 работают отлично.
как сделать маркировку правильно, учитывая что на сервере есть nat?
UPD: tcpdump показал что пакеты уходят верно, через первого провайдера, и возвращаются на внешний интерфейс,а вот в локалке ответов уже нет. Стал сомневаться не применяется ли правило и для возвратных пакетов.
изменил последний вариант на
iptables -t mangle -A PREROUTING -p tcp -i eth0 -m multiport --dport 80,8080 -j MARK --set-mark 2
опять заработало, посмотрим насколько хватит, уверенности что проблема была в этом к сожалению нет. Кто соображает подскажите, разве обратный пакет не должен содержать 80,8080 в source port вместо dport ?