iptables и множественные перенаправления nat

Просто выполните:

cd ..

См. man cd для получения дополнительной информации.

1
08.04.2018, 14:52
2 ответа

Не вижу смысла сбрасывать все правила при изменении одного VPS. Если вы не имели в виду 2000 команд на VPS, но в этом случае я бы предположил, что вы делаете что-то не так.

В общем, я предлагаю иметь две цепочки для каждого VPS,активный и неактивный. Если вам действительно нужно подождать между двумя командами iptables, просто сделайте это — во время настройки неактивной цепочки. Когда это будет сделано, вы измените ссылку с активной на неактивную цепочку в основной цепочке (возможноPREROUTING).

Если вы используете много команд iptablesдля проверки того, какой VPS является целевым, вы можете начать использовать ipset, чтобы сделать это с помощью одной команды.

пример

Вы создаете две цепочки для всех активных и всех неактивных цепочек. Это позволяет изменять без условий гонки.

iptables -t nat -I PREROUTING 1 -j chaingroup_a

iptables -t nat -A chaingroup_a -j vps_1a
iptables -t nat -A chaingroup_a -j vps_2a
iptables -t nat -A chaingroup_a -j vps_3a
iptables -t nat -A chaingroup_a -j ACCEPT # stop applying rules

iptables -t nat -A vps_1a -d 1.2.3.4 -p tcp --dport 42 -j DNAT --to-destination 10.1.2.3:4242

Если конфигурация должна быть изменена, вы сбрасываете неактивные цепочки и настраиваете их:

iptables -t nat -F chaingroup_b
iptables -t nat -F vps_1b
iptables -t nat -F vps_2b
iptables -t nat -F vps_3b

iptables -t nat -A chaingroup_b -j vps_1b
iptables -t nat -A chaingroup_b -j vps_2b
iptables -t nat -A chaingroup_b -j vps_3b
iptables -t nat -A chaingroup_b -j ACCEPT # stop applying rules

iptables -t nat -A vps_1a -d 1.2.3.4 -p tcp --dport 4321 -j DNAT --to-destination 10.1.2.3:12345

После подготовки вы делаете неактивную группу цепочки активной:

iptables -t nat -I PREROUTING 1 -j chaingroup_b

Из-за -j ACCEPTв конце chaingroup_bвсе еще существующий chaingroup_aигнорируется. Но вы все равно должны удалить его, чтобы предотвратить рост PREROUTINGс каждым изменением:

iptables -t nat -D PREROUTING 2
2
27.01.2020, 23:23

На самом деле iptables может сделать это достаточно быстро, и я проверил это почти для 1900 правил. Все, что вам нужно, это отслеживать порты ip :в файле списка, а затем написать скрипт, например. сценарий bash, подобный следующему, и перезагрузите порты ip :из этого файла

Я предполагаю, что каждая строка в файле представляет собой что-то вроде realport :vps -ip :port

#/bin/bash
HOST=100.200.100.200 # your public address
LIST=/path/to/file

iptables -t nat -F
cat "$LIST" | while read line
do
realport=`echo $line|cut -f1 -d:`
vpsip=`echo $line|cut -f2 -d:`
port=`echo $line|cut -f3 -d:`
iptables -t nat -A PREROUTING -p tcp -d $HOST --dport $realport -i eth0 -j DNAT --to-destination $vpsip:$port
done

iptables save

Таким образом, вам нужно будет позаботиться только о списке. Вы также можете использовать другие форматы вместо realport :vps -ip :port, например, разделяя их запятыми -. Затем измените -d :на -d или что-то еще.

1
27.01.2020, 23:23

Теги

Похожие вопросы