Вопрос или проблема
Синтаксис nftables кажется непоследовательным, но я все еще пытаюсь его понять в отношении того, как значения отображаются от карт на правила, которые на них ссылаются. Вот что выглядит как несоответствие. Эти примеры взяты из различных интернет-поисков:
` { 2.2.2.2 . 8888 : 192.168.1.101 } # элемент множества
dnat to ip saddr . tcp dport map # правило
dnat to ip saddr <2.2.2.2> tcp dport map # как это, по-видимому, отображается
`
Выглядит довольно понятно, за исключением того, что “dnat ip to” появляется в начале с картой, где в противном случае оно было бы в конце, как это:
`<filter-expression> dnat to 1.2.3.4
ip saddr 2.2.2.2 tcp dport 8.8.8.8 dnat to 1.2.3.4 # как это, по-видимому, отображается
`
Эта меня озадачила. Я оставил команду на месте, потому что порядок выражения мне не ясен.
` { 1400 : 192.168.1.4 . 5061 } # элемент множества
nft add rule nat pre ip protocol tcp dnat ip addr . port to tcp dport # команда
nft add rule nat pre ip protocol tcp dnat ip <192.168.1.4> . <5061> to tcp dport # моя попытка перевода
`
Где встает порт 1400? В чем логика? Я не нашел формального определения синтаксиса, который бы это объяснял.
Дэвид
.
Ответ или решение
Вопрос о том, как с использованием карт осуществляется замена в правилах с DNAT в контексте nftables, действительно может вызывать недоумение, особенно если рассматривать синтаксис и порядок выражений. Чтобы разобраться в этом, важно понимать теоретические основы, особенности практической реализации и методы применения.
Теория
nftables — это более современная замена iptables, которая позволяет более гибко управлять сетевой фильтрацией и трансляцией адресов в Linux. NFtables использует концепцию карт (maps) для сопоставления значений и упрощения управления сложными правилами фильтрации и трансляции.
DNAT (Destination Network Address Translation) — техника, используемая для изменения адреса назначения пакетов. Она часто применяется в сетевых маршрутизаторах, чтобы перенаправлять входящие соединения на внутренние серверы.
В nftables можно создать карту, которая будет использоваться для трансляции адресов, сопоставляя определенные входные условия с выходными значениями. Это выполняется при помощи изменений в правилах, где предлагаются выражения, определяющие условия (например, IP-адрес отправителя и порт) и действия с ними (трансляция на иной адрес и порт).
Пример
-
Состав карты
Пример карты:{ 2.2.2.2 . 8888 : 192.168.1.101 }
.
Это означает, что если источник IP-адрес и порт —2.2.2.2:8888
, необходимо выполнить трансляцию на192.168.1.101
. -
Правило DNAT с использованием карты
Простой вариант правила DNAT может выглядеть так:
dnat to ip saddr . tcp dport map
. -
Преобразование с использованием карты
В контексте карты, правило фактически преобразуется в конструкцию, которая сопоставляет входные параметры с картой и выполняет трансляцию в соответствии с ее значениями:dnat to ip saddr <2.2.2.2> tcp dport map
Применение
-
Как работают карты в nftables:
Карты используют ключи для поиска значений, которым соответствуют определенные состояния или комбинации IP и портов, как в вашем примере. В случае с1400 : 192.168.1.4 . 5061
, карта использует порт1400
в качестве ключа для трансляции к IP192.168.1.4
и порту5061
. -
Использование правил в написании DNAT:
Конструкция может быть непривычной из-за позиций и формулировок, отличающихся от традиционной литературы по iptables. Правилоnft add rule nat pre ip protocol tcp dnat ip addr . port to tcp dport
подразумевает, что система должна искать комбинации IP-адресов и портов, чтобы применить трансляцию на указанный адрес и порт. -
Упрощение синтаксиса:
nftables предоставляет возможность использовать карты для уменьшения числа отдельных правил, вместо этого применяя одно правило с сопоставлением в карте. Это экономит ресурсы и делает правила более читаемыми и простыми для управления.
Заключение
Сложности понимания синтаксиса правил nftables и применения карт связаны с разницей в подходах и терминологии, особенно если раньше вы работали с iptables. Карты в nftables облегчают управление множеством сопоставлений без необходимости определять каждое отдельно. Основное, что нужно учитывать, это соответствие синтаксиса и логики: когда вы пишете правила, имейте в виду картину сопоставления параметров с результатирующими действиями, которые вы ожидаете от системы.
Для более глубокого понимания рекомендуется детальное изучение официальной документации и использование инструментов отладки, таких как nft monitor
, которые позволяют видеть, как и когда применяются те или иные правила и карты.
Этот подход поможет системно и гибко настроить сетевое оборудование, будь то серверы или маршрутизаторы, отвечающие за динамическую маршрутизацию трафика в больших сетях.