Basta filtrar com base no endereço de destino:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -d $PUBLIC_IP -m conntrack --ctstate NEW -j DNAT --to-destination 192.168.1.2:443
Se o IP público for dinâmico, você precisará adicionar ganchos ao script do cliente DHCP para atualizar essa regra quando o endereço IP for alterado. Você também pode usar conjuntos de IPs para alterar o endereço IP para verificar sem alterar sua regra.
Outra solução menos perfeita é usar o módulo addrtype
. Este módulo faz uma verificação na tabela de roteamento para determinar que tipo de entrada de roteamento o endereço possui. o tipo LOCAL pode ser usado para verificar se esse IP é do host.
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -m addrtype --dst-type LOCAL -m conntrack --ctstate NEW -j DNAT --to-destination 192.168.1.2:443
Observe que esta solução também redireciona conexões para 192.168.1.1
e 127.0.0.1
ou qualquer endereço IP que seu host tenha. Você pode excluir endereços de destino adicionando uma correspondência simples de ! -d 192.168.1.1
à regra.