[iptables] схема прохождения пакета по цепочкам

a10063

может кто-нибудь из тех, кто понимает, описать такую схему?
мне казалось, что я понимаю, но выяснилось, что это не так
особенно меня удивило, что -t nat -A OUTPUT -j LOG перекрывает -t nat -A POSTROUTING -j LOG
или что сообщений -t nat -A POSTROUTING -j LOG получается гораздо меньше, чем -t mangle -A POSTROUTING -j LOG
объясните, люди добрые, маны не помогают...

Marinavo_0507

в таблицу nat попадает только первый пакет каждого соединения, поэтому и меньше
что такое "перекрывает", не понял

a10063

в таблицу nat попадает только первый пакет каждого соединения, поэтому и меньше
это подтверждает факты! хорошо!
тогда вопрос следующий:
ставлю цель SNAT
ловлю перед ним LOG-ом и в mangle тоже
1. лог мангла показывает старый SRC (у пакетов соединения)
2. количество пакетов в -t nat -L -v для LOG не соответствует количеству записей в логе
3. что раньше mangle POSTROUTING or nat POSTROUTING?
что такое "перекрывает", не понял
здесь перекрывает - это значит, что если задать оба правила - то в лог идет только оутпут, а если задать только построут, то он и идет в лог

Marinavo_0507

mangle раньше nat
перекрывает, видимо, потому что нефиг 2 раза в лог писать про один и тот же пакет

a10063

mangle раньше nat
да, я так и представлял, но, видимо, какой-то эксперимент неправильно интерпретировал
перекрывает, видимо, потому что нефиг 2 раза в лог писать про один и тот же пакет

вот это своевольное поведение!

a10063

читал, просто некоторые результаты экспериментов сбивают с толку
кстати, рекомендовал бы английскую, но v>=1.2.0, есть некоторые исправления
вот по теме там, например, в схеме есть второй routing decision

a10063

товарищи, объясните, пожалуйста, как такое может быть:
все уходящие в интерфейс ppp1 пакеты я изменяю SNAT --to-source=NEW_IP, т.к. они имеют SRC=OLD_IP, что удивит ppp1
а из интерфейса приходят с DST=OLD_IP
здесь OLD_IP - src ip дефолтного шлюза по ифейсу ppp0
если попробовать убрать дефолтный route из таблицы main - все вообще останавливается
я в логах вижу только обращение к днс, пакеты даже не попадают в mangle OUTPUT, где должны маркироваться, а потом просматривать другую (не main) таблицу роутов
по какой причине?
неужто упущен еще один route decision в схеме?
благодарен буду за всякие идеи, я уже иссяк
как это отладить - не понимаю

Marinavo_0507

вопрос написан не особо понятно, но для исходящих соединений src ip выбирается раньше, чем пакет попадает в iptables, а этот выбор делается через таблицы маршрутизации

a10063

спасибо! я, оказывается, упустил 3-й routing desicion (у меня была более старая карта, чем в v.1.2.0)
вот правильная карта (на случай, если кому-то понадобится, можно найти поиском по форуму):

правда, мне это остается непонятным, зачем же он нужен... (про два других - понимаю)
итог: если нет дефолтного роута - лучше завести его хотя бы на dummy host
а с маскированием я ошибался: если вывести лог в mangle PREROUTING (а я по глупости INPUT смотрел) - все нормально (да и думаю, что с неправильным сорсом пакет бы не возвращался)

Marinavo_0507

по-моему, обман на этой карте
не верю

a10063

а что именно смущает?

a10063

да, с LOG-ом, конечно, у iptables труба
почему же происходит такое "схлопывание" логов или это баг? ведь параметры у пакета в каждой цепочке разные...
вот поставил сейчас писать в лог при mangle PREROUTING INPUT FORWARD OUTPUT POSTROUTING и nat POSTROUTING
результат вообще удивительный - в логе только про mangle PREROUTING OUTPUT и иногда (это и удивительно!) мигает mangle POSTROUTING... такое впечатление, что пакеты где-то теряются между output & postrouting, хотя входящие пакеты (как бы в ответ на исходящие) есть
хотя iptables -t mangle -L -v говорит, что через лог-правила пакеты шли, но в логе их нет
может и правда их что-то режет, а входящие - ответ на другие пакеты? как понять? есть какие-нибудь идеи, что это может быть?
кто-нибудь может проверить у себя - есть ли схлопывание? пожалуйста!...
Оставить комментарий
Имя или ник:
Комментарий: