Назад | Перейти на главную страницу

Как установить отметку на пакете при его пересылке в таблице предварительной маршрутизации nat?

У меня есть несколько таких правил переадресации портов

iptables -t nat -A PREROUTING -p tcp --dport 46000 -j DNAT --to-destination 172.16.8.2:46000
iptables -A FORWARD -p tcp -d 172.16.8.2 --dport 46000 -j ACCEPT

Интересно, есть ли способ добавить новые правила пересылки в одну строку вместо двух, чтобы мне не приходилось вводить одни и те же данные дважды. Я имею в виду такие правила:

  1. В nat PREROUTING переслать пакет по назначению и пометить его
  2. В фильтре FORWARD разрешить все пакеты, которые были помечены правилом 1

Является ли это возможным?

Это невозможно сделать с помощью только одной команды для каждого DNAT - если ... не см. Ниже. Но можно ввести данные только один раз.

Определим диапазон отметок 1024–2047 для соединений, которые получают DNAT и перенаправляются.

Одна строка с каждым условием соответствия DNAT в mangle:

iptables -t mangle -A PREROUTING -p tcp --dport 46000 -j MARK --set-mark 0x400
iptables -t mangle -A PREROUTING -p tcp --dport 46001 -j MARK --set-mark 0x401
iptables -t mangle -A PREROUTING -p tcp --dport 46002 -j MARK --set-mark 0x402

По одной команде в нац:

iptables -t nat -A PREROUTING -m mark --mark 0x400 -j DNAT \
  --to-destination 172.16.8.2:46000
iptables -t nat -A PREROUTING -m mark --mark 0x401 -j DNAT \
  --to-destination 172.16.8.2:46001
iptables -t nat -A PREROUTING -m mark --mark 0x402 -j DNAT \
  --to-destination 172.16.8.2:46002

Одна команда для всех в фильтре:

iptables -A FORWARD -m mark --mark 0x400/0x400 -j ACCEPT

Кстати: нет необходимости указывать порт назначения для -j DNAT если его не изменить.

Изменить 1:

Вы можете сделать это, если не разрешаете соединения явно, если вас устраивает разрешение всего, что было DNATted. В этом случае вы будете придерживаться своего

iptables -t nat -A PREROUTING -p tcp --dport 46000 -j DNAT --to-destination 172.16.8.2:46000

но есть только одно правило FORWARD для всех:

iptables -A FORWARD -m conntrack --ctstate DNAT -j ACCEPT