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

Помогите разобраться с маркировкой пакетов в Nftables

 


0

0

На роутере есть: 2 впн соединения. 2 дополнительные таблицы маршрутизации для маркированных пакетов. Правила nftables маркирующее пакеты для этих таблиц.

ip daddr @vpn1 counter ct mark set 0x1
ip daddr @vpn1 counter meta mark set ct mark

Есть необходимость блокировать трафик до адресов в списке @vpn1 в случае когда vpn1 будет недоступен. Трафик не должен индти через другие соединения будь то 2й впн или провайдер.

Для этого я планировал фильтровать трафик таким правилом.

oifname "$IF_WAN" meta mark 0x1 drop counter

Но правило не работает. Счетчик не тикает. Как мне кажется дело в маркировке пакета. Точнее где эта марка хранится. Я так и не смог разобраться как работает маркировка пакетов и как нужно написать данное правило. Помоги пожалуйста с этим вопросом. Или дайте ссылку на простую статью где описывается работа с маркировкой пакетов в nftables.

★★★★★

Ответ на: комментарий от anonymous

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

Кажется что правило в фаерволе выглядит элегантней.

Behem0th ★★★★★
() автор топика
Последнее исправление: Behem0th (всего исправлений: 1)
Ответ на: комментарий от anonymous

Сейчас в таблице маршрутизации есть одно правило

root-> ip route show table vpn
default via 10.8.0.9 dev tun1

Когда впн соединение рвется дефолтный маршрут пропадает и все трафик начинает идти по главной таблице.

Если бы это был микротик то я бы добавил маршрут 0.0.0.0/0 в блекхол с более высоким дистансом. Но в линуксе как я понял нельзя добавить 2 дефолт маршрута. Получается для каждого отдельного ип нужно делать свой маршрут в блекхол? Или есть какой то еще вариант? Кажется что должен быть простой вариант но не могу его найти.

Behem0th ★★★★★
() автор топика
Последнее исправление: Behem0th (всего исправлений: 1)
Ответ на: комментарий от Behem0th

Чисто теоретически, я бы попробовал сделать 2 правила

ip ru add prio 1000 fwmark 1 unicast table 30
ip ru add prio 1001 fwmark 1 unicast table 31
В таблицу 31 добавляем блекхол.

В таблицу 30 добавляем dgw через vpn если он поднят.

Ну и настоятельно рекомендуется для транзитных пакетов маркировать их в таблице mangle/prerouting т.е. до routing decision (https://inai.de/images/nf-packet-flow.svg).

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 2)
Ответ на: комментарий от vel

Ну и настоятельно рекомендуется для транзитных пакетов маркировать их в таблице mangle/prerouting

Да у меня так.

        chain vpn1 {
                type filter hook prerouting priority mangle
                policy accept;
                ip daddr @vpn1 counter ct mark set 0x1
                ip daddr @vpn1 counter meta mark set ct mark

В таблицу 31 добавляем блекхол.
В таблицу 30 добавляем dgw через vpn если он поднят.

Спасибо. Все отлично сработало. Оставлю такой вариант. Но все равно надеюсь что кто то подскажет с маркировкой пактов в фаерволе на будущее.

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

В смысле «подсказать про маркировку пакетов»?

Можно маркировать пакеты, можно маркировать соединение (ct).

Для большенства проверок используется марка пакета.

Маркировка соединения нужна обычно для маркировки ответных пакетов.

IMHO В твоём варианте достаточно было «meta mark set 0x1»

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

У меня как раз скрипт который рулит маршрутами. Вариант с дополнительной таблицей пока нравится, так что остановлюсь на нем.

Behem0th ★★★★★
() автор топика
Последнее исправление: Behem0th (всего исправлений: 1)