Уже третий день бьюсь над проблемой отправки трафика через определенную таблицу на базе порта.
Проблема в том что для транзитного трафика все работает на ура, а вот как только пытаюсь сделать ping на сервер для которого в iptables указана маркировка, то болт.
Как это выглядит: есть таблица vpn101, в ней указан default route который отлично работает. Есть наборы правил:
ip rule add to 8.8.4.4 table vpn101 pref 101
Но мне надо сделать чтобы только 53 порт ходил через vpn101, беру в руки iptables
$IPTABLES -t mangle -A PREROUTING -d 8.8.4.4 -p udp --dport 53 -j MARK --set-mark 0x21
ip rule add from fwmark 0x21 table vpn101 pref 102
И вот тут начинается самое интересное, если запрос посылает пользователь сети то все идет в тунель. Но если запрос посылает сам сервер, то болт.
Попытка отследить цепочку правил iptables при локальной отправке пакетов, приводит к след порядку:
IPTABLES_RAW_OUTPUT
IPTABLES_MANGLE_OUTPUT
IPTABLES_NAT_OUTPUT
IPTABLES_FILTER_OUTPUT
IPTABLES_MANGLE_POSTROUTING
IPTABLES_NAT_POSTROUTING
Но, вот что странно, как только пакет появляется в raw output он уже имеет OUT интерфейс на который смотрит default route самой системы. Дальше упоминание про маркировку пакета появляется в логе из таблицы MANGLE OUTPUT.
net.ipv4.tcp_fwmark_accept=1
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
В общем прошу Вашей помощи, может кто-то знает решение данного вопроса.
Linux router 4.4.0-77-generic #98-Ubuntu SMP Wed Apr 26 08:34:02 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Да, на Mikrotik такое работало, там требовалось добавить правило в mangle output, а вот Linux не взлетает, хотя помню что раньше еще во время 2.7 ядра все работало.