LINUX.ORG.RU
ФорумAdmin

Где делать mangle MARK перед route?

 ,


0

3

Помогите понять одну вещь. Вот допустим я создаю две дополнительные таблицы маршрутизации, чтобы часть трафика пускать через другие шлюзы следующим образом:

ip route add default table 2 via 10.68.*.* dev eth0
ip rule add fwmark 2 table 2
ip route add default table 3 via 100.127.*.* dev ppp0
ip rule add fwmark 3 table 3
Где должны маркироваться пакеты при условии, что роутится через 3 таблицы должен как локальный трафик, так и проходящий. Что-то подсказывает, что правила MARK должны быть одновременно в mangle-PREROUTING и mangle-OUTPUT, но вот открываю схему прохождения пакетов https://upload.wikimedia.org/wikipedia/ru/thumb/f/f4/Iptables-traversal.svg/8... и вижу, что для проходящих пакетов перед routing decision находится сразу после mangle-PREROUTING, так что всё должно быть верно. А вот для локальных routing decision стоит перед mangle-OUTPUT так что похоже оно так не взлетит. Как же тогда правильно?

★★★★★

29 апреля 2023 г.
Ответ на: комментарий от Bers666

Можешь на пальцах объяснить, не совсем понимаю? Допустим я при помощи ip route создал несколько таблиц маршрутизации, а в ip rule определяю в какую таблицу маршрутизации попадёт пакет по метке, метка устанавливается в iptables действием MARK в mangle-OUTPUT. Собственно вопрос, что делает routing decision и что делает rerouting check, я правильно понимаю, что проверка по таблицам маршрутизации для каждого пакета осуществляется дважды? Я могу делать MARK не в mangle-OUTPUT, а в raw-OUTPUT, но всё равно это будет раньше routing decision, то есть в routing decision все пакеты будут приходить без меток, и, стало быть, будут попадать в таблицу маршрутизации main, а вот уже на этапе rerouting check пакет будет с меткой.

sunny1983 ★★★★★
() автор топика
Ответ на: комментарий от sunny1983

ИМХО, лучше бы новую тему завели...

routing decision — главная задача определить src-ip адрес. Обычно софт просто устанавливает соеденение с нужным ip-адресом и не указывает с какого адреса идёт соединение. А для пакета в iptables всегда должен быть определён src-адрес.

Поэтому сначала routing — выбор интерфейса и src-адреса по интерфейсу. Потом пакет уже может быть отправлен в iptables (mangle OUTPUT), если там с ним что-то сделали, то rerouting определит ему другой маршрут (но не src-адрес).

Я могу делать MARK не в mangle-OUTPUT, а в raw-OUTPUT

Ну попробуйте так сделать

mky ★★★★★
()
Ответ на: комментарий от mky

Вот. Теперь всё понятно. Если routing decision определяет src-адрес - значит ничего не будет работает, если в таблице main не будет defroute (он не сможет определить куда и откуда отправлять пакет), в от в этом и была загвоздка.

А смысл новой темы?

sunny1983 ★★★★★
() автор топика
Ответ на: комментарий от sunny1983

Вот. Теперь всё понятно.

Непохоже :)

если в таблице main не будет defroute (он не сможет определить куда и откуда отправлять пакет)

У меня в таблице main нет defroute, УМВР ЧЯДНТ ?

anc ★★★★★
()