Как выполняются подстановки в правилах с использованием карт dnat?

Вопрос или проблема

Синтаксис 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-адрес отправителя и порт) и действия с ними (трансляция на иной адрес и порт).

Пример

  1. Состав карты
    Пример карты: { 2.2.2.2 . 8888 : 192.168.1.101 }.
    Это означает, что если источник IP-адрес и порт — 2.2.2.2:8888, необходимо выполнить трансляцию на 192.168.1.101.

  2. Правило DNAT с использованием карты
    Простой вариант правила DNAT может выглядеть так:
    dnat to ip saddr . tcp dport map.

  3. Преобразование с использованием карты
    В контексте карты, правило фактически преобразуется в конструкцию, которая сопоставляет входные параметры с картой и выполняет трансляцию в соответствии с ее значениями:

    dnat to ip saddr <2.2.2.2> tcp dport map

Применение

  1. Как работают карты в nftables:
    Карты используют ключи для поиска значений, которым соответствуют определенные состояния или комбинации IP и портов, как в вашем примере. В случае с 1400 : 192.168.1.4 . 5061, карта использует порт 1400 в качестве ключа для трансляции к IP 192.168.1.4 и порту 5061.

  2. Использование правил в написании DNAT:
    Конструкция может быть непривычной из-за позиций и формулировок, отличающихся от традиционной литературы по iptables. Правило nft add rule nat pre ip protocol tcp dnat ip addr . port to tcp dport подразумевает, что система должна искать комбинации IP-адресов и портов, чтобы применить трансляцию на указанный адрес и порт.

  3. Упрощение синтаксиса:
    nftables предоставляет возможность использовать карты для уменьшения числа отдельных правил, вместо этого применяя одно правило с сопоставлением в карте. Это экономит ресурсы и делает правила более читаемыми и простыми для управления.

Заключение

Сложности понимания синтаксиса правил nftables и применения карт связаны с разницей в подходах и терминологии, особенно если раньше вы работали с iptables. Карты в nftables облегчают управление множеством сопоставлений без необходимости определять каждое отдельно. Основное, что нужно учитывать, это соответствие синтаксиса и логики: когда вы пишете правила, имейте в виду картину сопоставления параметров с результатирующими действиями, которые вы ожидаете от системы.

Для более глубокого понимания рекомендуется детальное изучение официальной документации и использование инструментов отладки, таких как nft monitor, которые позволяют видеть, как и когда применяются те или иные правила и карты.

Этот подход поможет системно и гибко настроить сетевое оборудование, будь то серверы или маршрутизаторы, отвечающие за динамическую маршрутизацию трафика в больших сетях.

Оцените материал
Добавить комментарий

Капча загружается...