Não vejo motivo para redefinir todas as regras quando um VPS foi alterado. A menos que você quisesse dizer 2000 comandos por VPS, mas nesse caso eu suponho que você esteja fazendo algo errado.
Em geral, sugiro que você tenha duas cadeias para cada VPS, uma ativa e outra inativa. Se você realmente precisa esperar por dois comandos iptables
, basta fazê-lo - enquanto configura a cadeia inativa. Quando isso é feito, você altera a referência da cadeia ativa para a inativa na cadeia principal (provavelmente PREROUTING
).
Se você estiver usando muitos comandos iptables
para verificar qual VPS é o destino, então você pode começar a usar ipset
para fazer isso com um único comando.
exemplo
Você cria duas cadeias para todas as cadeias ativas e todas as cadeias inativas. Isso permite uma mudança sem condição de corrida.
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
Se a configuração for alterada, você redefine as cadeias inativas e as configura:
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
Após a preparação, você torna o grupo de cadeias inativo o ativo:
iptables -t nat -I PREROUTING 1 -j chaingroup_b
Devido ao -j ACCEPT
no final de chaingroup_b
, o chaingroup_a
ainda existente é ignorado. Mas você deve excluí-lo assim mesmo para evitar que PREROUTING
cresça com cada alteração:
iptables -t nat -D PREROUTING 2