Você precisa apenas sair da tabela PREROUTING
antes de chegar à linha DNAT
:
iptables -t nat -I PREROUTING -p tcp -s <exempt ip> -j RETURN
Isso deve inserir ( -I
) uma nova regra para sair ( -j RETURN
) da tabela de roteamento de qualquer pacote do IP isento ( -s <exempt ip>
) como a primeira regra, para que seja atingido antes de chegar ao DNAT
rule.
(Você também pode precisar fazer algo semelhante em POSTROUTING
, não tenho certeza.)
A outra opção é criar um conjunto de IPs ( man ipset
) para os IPs que você deseja isentar e, em seguida, adicionar uma correspondência invertida às regras DNAT
e SNAT
:
ipset create exempt hash:ip
ipset add exempt <exempt ip 1>
ipset add exempt <exempt ip 2>
ipset add exempt <exempt ip 3>
iptables -t nat -A PREROUTING -p tcp --dport 80 -m set ! --match-set exempt src -j DNAT --to-destination 10.0.0.1:80 -i eth0
Isso é mais fácil de gerenciar porque você pode facilmente adicionar ou remover IPs isentos do ipset sem modificar o iptables.