У меня есть несколько таких правил переадресации портов
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
Интересно, есть ли способ добавить новые правила пересылки в одну строку вместо двух, чтобы мне не приходилось вводить одни и те же данные дважды. Я имею в виду такие правила:
Является ли это возможным?
Это невозможно сделать с помощью только одной команды для каждого 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