Проблема с iptables+mark

Здравствуйте, у меня проблема с маркировкой пакетов.
Я делаю шейпер. И заметил что скорость он не режет, проверив, я обнаружил что через соответствующие классы не идет трафик.
тогда я решил проверить, а нормально ли пакеты маркируются. Сделал простой скрипт:

iptables -t mangle -A PREROUTING -s 192.168.1.13 -j MARK --set-mark 50
iptables -t mangle -A PREROUTING -d 192.168.1.13 -j MARK --set-mark 50
iptables -A FORWARD -m mark --mark 50 -j REJECT
iptables -A OUTPUT -m mark --mark 50 -j REJECT

Пинги идут! Как же так?

Посмотри внимательно

Посмотри внимательно на

iptables -t mangle -vL
iptables -vL

Скорее всего правила маркировки не срабатывают
попробуй так:

iptables -t mangle -A PREROUTING -s 192.168.1.13 -j DROP
iptables -t mangle -A PREROUTING -d 192.168.1.13 -j DROP
iptables -t mangle -A PREROUTING -j LOG

и смотри логи

эти правила нармальновсе

эти правила нармально все блокируют, как надо:

iptables -t mangle -A PREROUTING -s 192.168.1.13 -j DROP
iptables -t mangle -A PREROUTING -d 192.168.1.13 -j DROP

В логах тоже все чисто и красиво...
iptables -t mangle -vL показывает что пакеты идут.
я по прежнему чего-то не понимаю... но чего я не пониаю, я пока не понимаю...

Если ничего не помогает, прочти наконец инструкцию...

А попробуй делать reject в

А попробуй делать reject в mangle postrouting. Mark же только в mangle работает

DROP и REJECT работают

DROP и REJECT работают отлично.
Но!

-m mark --mark 50

не срабатывает, причем никаких ошибок нигде нету!
Это правило так же не срабатывает...

iptables -t mangle -A POSTROUTING -m mark --mark 50 -j DROP

Я вообще в ступоре...

Если ничего не помогает, прочти наконец инструкцию...

Я делаю mark в POSTROUTING,

Я делаю mark в POSTROUTING, все работает. Шейпер, на мой взгляд, должен обрабатывать только те пакеты, относительно которых роутер уже принял решение впустить/выпустить.
Есть один нюанс с mangle: пакет, проходящий через правило, не выходит из цепочки после попадания в нее, а идет по ней далее до конца. Так что, если ниже есть правило, в которое попадает пакет, уже отмаркированный предыдущим правилом, он будет перемаркирован. Для того, чтобы избежать таких чудес, нужно после -j MARK --set-mark 50 добавить точно такое же правило, но с -j RETURN. Года 3 назад у меня из-за этих особенностей mangle мозг чуть не расплавился...

А можете показать свои

А можете показать свои правила?

Если ничего не помогает, прочти наконец инструкцию...

Похоже я понял в чем

Похоже я понял в чем дело.
Правила почему-то не отрабатывают для локальных процессов (в моем случае ping).
Почему так произходит я не знаю. Но стоило мне подключить ноутбук через свой компьютер как он начал работать точно по правилам.
И шейпер нормально заработал.

Если ничего не помогает, прочти наконец инструкцию...

Мне в свое время для

Мне в свое время для понимания работы файрвола очень помогла эта картинка

У меня есть эта картинка, и

У меня есть эта картинка, и она мне тожеой как помогла разобраться в работе фаервола. =)
Вот только по ней таблица mangle как то странно работает.
А как она работает мне до сих пор не ясно...
То ли маркировка в моем примере не работает, толи проверка марки, я не знаю.

Если ничего не помогает, прочти наконец инструкцию...

Локальные процессы не ходят

Локальные процессы не ходят через PREROUTING, а только через OUTPUT и POSTROUTING

Ответы от пингуемой машины по

Ответы от пингуемой машины по идее ведь идут к локальным процессам через PREROUTING...

Если ничего не помогает, прочти наконец инструкцию...

Ответы - по идее да, но не

Ответы - по идее да, но не запросы

В таком случае пинги то не

В таком случае пинги то не должны приходить, а приходят!

Если ничего не помогает, прочти наконец инструкцию...

Чтобы ответы не приходили, их

Чтобы ответы не приходили, их режектить надо в цепочке INPUT
В цепочку OUTPUT попадают исходящие (те, которые через PREROUTING не проходят, следовательно не маркируются)
А цепочка FORWARD вообще не при делах, когда речь идет о локальном трафике.

Глянь на картинку размещенную

Глянь на картинку размещенную выше. -t mangle -A PREROUTING идет ДО INPUT, а значит пакеты должны в любом случае обрабатываться.
Блииин, ну я и туплю...
Вот как работает:
Пакет локальным процессом отправляется и под правило фильтрации не подпадает, ибо не отмаркирован.
Пакет-ответ идет через -t mangle -A PREROUTING и маркируется. Затем попадает к локальному процессу.
Вот и нифига не фильтруется.
Вот если добавить вот эти правила, то все отлично заработает:

iptables -t mangle -A OUTPUT -s 192.168.1.13 -j MARK --set-mark 50
iptables -t mangle -A OUTPUT -d 192.168.1.13 -j MARK --set-mark 50

Если ничего не помогает, прочти наконец инструкцию...

вот это iptables -t mangle -A

вот это
iptables -t mangle -A OUTPUT -d 192.168.1.13 -j MARK --set-mark 50

замени на

iptables -t mangle -A INPUT -d 192.168.1.13 -j MARK --set-mark 50

тогда будут фильтроваться входящие отмаркированные пакеты

Спасибо, я во всем

Спасибо, я во всем разобрался. =)

Если ничего не помогает, прочти наконец инструкцию...

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".