LINUX.ORG.RU
решено ФорумAdmin

Порядок обработки пакетов в таблице маршрутизации.

 


0

1

есть vpn и мне хочется в зависимости от настроек добавлять правила в таблицу маршрутизации и удалять их когда vpn останавливает свою работу. Правила работают и добавить их в основную таблицу не сложно, но чтобы их удалить надо так упороться в баше что после первого дня я решит отказаться от этой идеи. Самый простой вариант это добавить свою таблицу. Её проще всего удалить. Написал что-то вроде этого:

table ip vpn {
        chain input {
                type filter hook input priority filter - 1; policy accept;
                iif "enp4s0" tcp dport 35462 counter packets 21 bytes 1260 accept
        }

        chain forward {
                type filter hook forward priority filter - 1; policy accept;
                ip saddr 10.0.4.0/24 counter packets 0 bytes 0 accept
        }

        chain output {
                type filter hook output priority filter - 1; policy accept;
                oif "tun0" counter packets 0 bytes 0 accept
        }
}

В основной таблице у всех цепочек политика по умолчанию drop. В дополнительной таблице поставил приоритет меньше на единицу и при попытке подключиться пакеты попадают в таблицу vpn но потом благополучно проваливаются в основную где и отбрасываются. Не понимаю почему это не работает, подскажите пожалуйста =)

UPD: Решил с помощью добавления правил с комментариями, и поиском правил по определённым цепочкам. Хотел сделать вариант который бы не привязывался к каким либо настройкам фаервола, но возможно в другой раз. Тема «как это всё работает» для меня осталось «магией».



Последнее исправление: SmilePlz (всего исправлений: 2)

https://commons.wikimedia.org/wiki/File:Netfilter-packet-flow.svg

https://wiki.nftables.org/wiki-nftables/index.php/Netfilter_hooks

Для сравнения ещё можно посмотреть на RouterOS: https://help.mikrotik.com/docs/display/ROS/Packet+Flow+in+RouterOS — эта схема чуть понятнее, но нужно в голове переводить понятия с RouterOS-овых на линуксовые

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 3)

https://www.frozentux.net/iptables-tutorial/chunkyhtml/c3965.html

As soon as the match specification for a packet has been fully satisfied, and we specify ACCEPT as the target, the rule is accepted and will not continue traversing the current chain or any other ones in the same table. Note however, that a packet that was accepted in one chain might still travel through chains within other tables, and could still be dropped there.

Сделайте chain’ы в существующей table.

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

спасибо большое, за информацию. Пойду читать и применять в жизнь =)

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

Не логично, что вы называете таблицы файервола «таблицами маршрутизации». А то, что пакет проходит по всем таблицам нормально. Они же просто хуки.

так упороться

Не знаю, во что вы там управались. Добавляйте такие правила, которые легко выделяются из списка, sed'ом или awk получаете их handle и удаляете по ниму. А чтобы правило легко выделялось, оно должно содержать подходящий (уникальный для вашей системы) комментарий.

в баше что после первого дня

Ну взяли бы на второй день ваш любимый lua, разгребали бы на нём список правил.

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

думал на счёт комментариев, проблема в том что номер handle не сквозной, а принадлежит table->chain. А как распарсить так чтобы знать к какой связке это принадлежит у меня не хватает кунгфу, поэтому и «анальная боль, бузова…» велосипеды =)

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

сделал в основной таблице цепочки vpn-in, vpn-fwd, vpn-out входящие пакеты цепочка обрабатывает, но потом этот пакет захватывает основной input и-и-и благополучно его дропает =). Если приоритеты стоят одинаковые, всё тоже самое. Надеялся на то что handle каким то образом влияет на порядок обработки, но нет =) мда… толи лыжи не едут…

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

Да, вы правы, только что проверил. Таким образом, просто так сделать final accept не получится.

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

Я точно не помню, но, вроде nft list позволял указать таблицу и цепочку, то есть можно поочерёдно перебирать. Ну будет в скрипте несколько вызовов nft list, ничего страшного.

И вобще, вы же коммент сами пишете, памяти ядра (при вашем числе правил) более чем. Пусть скрипт и в коммент пишет таблицу/цепочку, а потом парсит...

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

да свежий взгляд со стороны, это нечто =). И думаешь почему сам до этого не додумался, это же так просто…

SmilePlz
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.