Для общего набора правил можно задать nftables выполнить поиск маршрута заранее, используя выдумка
выражение вместо того, чтобы ждать, пока это сделает стек маршрутизации. Это позволяет задействовать (будущее) вывод интерфейс, несмотря на то, что он еще не существует (решение о маршрутизации не принято), за счет дополнительного поиска. Затем, если результаты показывают, что пакет будет маршрутизирован, предотвратите отслеживание с помощью неттрек
утверждение.
ВЫРАЖЕНИЯ ФИБ
выдумывать {саддр | отец | отметка | иф | оиф} [. ...] {oif | имя | тип}
А выдумка выражение запрашивает выдумка (экспедиционная информационная база) на
получить такую информацию, как индекс выходного интерфейса конкретного
адрес будет использовать. Вход представляет собой кортеж элементов, который используется как
вклад в выдумка поисковые функции.
ЗАЯВЛЕНИЕ НЕ ОТСЛЕЖИВАТЬ
Оператор notrack позволяет отключить отслеживание соединения для
определенные пакеты.
неттрек
Обратите внимание, что для того, чтобы это утверждение было эффективным, оно должно быть применено к
пакеты перед коннтрек происходит поиск. Значит надо сидеть
в цепочке с любым предварительная маршрутизация или же вывод хук и приоритет хука
от -300 или меньше.
Поэтому следует выполнить «простую» проверку маршрута из предварительная маршрутизация, используя только адрес назначения в качестве селектора и проверяя наличие выходного интерфейса (немаршрутизируемые пакеты или пакеты, предназначенные для хоста, не разрешаются). Есть исключение для вот (петлевой) интерфейс для отслеживания: хотя он представляет собой локальный трафик, пакет, отправленный (через вывод путь) от хоста к себе возвращается через предварительная маршрутизация path и имеет выходной интерфейс вот тоже. Поскольку исходящий пакет уже создал коннтрек вход, лучше держите это последовательным.
nft добавить IP-адрес таблицы без сохранения состояния
nft add chain ip stateless prerouting '{ type filter hook prerouting priority -310; политика принять; }'
nft добавить правило IP prerouting без сохранения состояния iif != lo fibdddr oif существует notrack
Замена IP
семья с инет
семейство комбо должно распространять такое же общее поведение на IPv4+IPv6.
Чтобы быть более конкретным, можно указать будущий выходной интерфейс с помощью fib ddr oif eth1
например, что более или менее эквивалентно эт1
, но также доступны в предварительная маршрутизация.
Конечно, если топология известна заранее, можно избежать поиска в FIB, используя одно или несколько правил, основанных на проверке адресов, поскольку в этом случае маршруты заранее известны администратору. Может потребоваться сравнительный анализ результатов, чтобы узнать, является ли это более интересным, чем сохранение универсального метода.
Например, с предоставленной OP информацией, заменив предыдущее правило на:
nft добавить правило ip без сохранения состояния prerouting 'ip daddr!= {192.168.1.1, 192.168.2.1, 127.0.0.0/8} notrack'
должен иметь почти эквивалентный эффект. 127.0.0.0/8 присутствует по тем же причинам, что и выше, с вот интерфейс.
Обработка широковещательной рассылки (например, 192.168.1.255, полученной на eth0) и многоадресная рассылка (например, локальная ссылка 224.0.0.1, полученная на интерфейсе) могут не работать одинаково в обоих методах и не так, как ожидалось, и, возможно, потребуются дополнительные правила для конкретных нужд, особенно для второго метода. Поскольку отслеживание широковещательной и многоадресной рассылки редко бывает полезным, поскольку источник ответа не будет (и не может) исходным адресом назначения широковещательной или многоадресной рассылки, поэтому запись conntrack никогда не «увидит» двунаправленный трафик, обычно это не имеет большого значения для правила состояния.
Примечания
Обычно это несовместимо с NAT с отслеживанием состояния.
Насколько я понимаю, DNAT в направлении удаленного хоста получит свой ответный трафик, не де-NAT, и потерпит неудачу, и что перенаправленный SNAT не сработает, поскольку не было коннтрек запись создана. Редко используемый SNAT во входном пути должен подойти, и комбинация DNAT+SNAT (с использованием локального источника адреса) также может работать, поскольку в этом случае как в исходном, так и в ответном направлениях задействован локальный пункт назначения, поэтому коннтрек запись должна всегда правильно создаваться или искаться.
стандартный набор правил
Актуальные правила использования iptables или же nftables (в своей собственной другой таблице) может выполняться как обычно, включая правила с отслеживанием состояния для самого хоста. Поскольку маршрутизируемый трафик не будет создавать коннтрек записи, правила, если таковые имеются, связанные с таким трафиком, должны оставаться только без гражданства и не использовать какие-либо кт
выражение, потому что оно никогда не будет соответствовать.
проверка поведения
Можно проверить общее поведение даже без надлежащих правил брандмауэра:
с помощью манекена кт
правило, чтобы убедиться, что коннтрек объект регистрируется в текущем сетевом пространстве имен.
nft добавить таблицу ip mytable
nft add chain ip mytable mychain '{ type filter hook prerouting priority -150; политика принять; }'
nft добавить правило ip mytable mychain ct состояние новое
использовать коннтрек
инструмент для отслеживания событий:
коннтрак -E
генерировать трафик с удаленного
НОВЫЙ коннтрек записи будут созданы для трафика, который должен быть получен маршрутизатором, но не для маршрутизируемого трафика.