В сети есть 2 роутера и сервер. Роутеры имеют свои аплинки в «мир». На обоих роутерах сконфигурен NAT для «выпуска» сервера в мир. Также на обоих роутерах сделан DNAT определенных портов на сервер. На самом сервере шлюз по умолчанию роутер1 и ес-но связь «из вне» работает только через роутер1.
Нужен PBR для «решения проблемы». Усложнение в том, что сервере только 1 интерфейс 1 IP и добавлять алиас чтобы сделать ip rule from ... не хотелось бы. Ведь у нас когда пакеты приходят с роутера2, можно по Source MAC их классифицировать и т.о. сделать нужную нам маршрутизацию.
В iptables делаю "-m mac --mac-source [MAC] -j CONNMARK --set-mark 2", также делаю ip rule fwmark 2 lookup router2. Соб-но в табличке router2 прописан default gw через роутер2. В -t mangle -A PREROUTING делаю --restore-mark.
Пакеты пришедшие через роутер2 маркируются (ну во всяком случае правило iptables пополняется попаданиями), но ответы уходят по прежнему через роутер1 с основной таблицы маршрутизации.
Можно ли так делать и что я делаю не так? Может где-то надо еще восстанавливать метку?
EDIT: Я наверное сам себе правильные вопросы задаю... видимо надо еще в -t mangle -A OUTPUT восстанавливать метку? Попозже попробую.
EDIT2: Ну конечно же после добавления правила -t mangle -A OUTPUT -j CONNMARK --restore-mark всё заработало. Поспешил с вопросом, но может кому-то полезно будет. :)