
Preciso interceptar o tráfego que vai para o IP externo e redirecioná-lo para o host local. É bem simples usar o iptables, mas não consegui entender como fazer funcionar através do nft. Eu criei tabela e cadeia dentro do nft, mas não consegui criar a regra, o nft diz que a operação não é suportada.
Tabelas
sudo /usr/sbin/nft list ruleset
table ip filter {
chain OUTPUT {
type filter hook output priority filter; policy accept;
}
}
Regra
sudo /usr/sbin/nft add rule ip filter OUTPUT ip daddr $EXTERNAL_ADDRESS counter dnat to 127.0.0.1
Error: Could not process rule: Operation not supported
Módulos do kernel
lsmod | grep nf_tables
nf_tables 360448 1 nft_nat
libcrc32c 12288 3 nf_conntrack,nf_nat,nf_tables
nfnetlink 20480 1 nf_tables
O que há de errado com minha regra, ou ela poderia ser simplificada?
Responder1
Atribua o endereço IP ao host. Rotear todo o tráfego é a finalidade da tabela de encaminhamento, o firewall pode fazer isso, mas muitas vezes isso não é necessário.
Por exemplo, atribuindo um endereço IP que criei para loopback no Linux:
ip a add 2001:db8:114:6402::1020 dev lo
Como rota de host único, ela terá prioridade mesmo que normalmente exista em outro lugar na Internet. Em uma interface de loopback, outros hosts não saberão disso, sendo acessíveis apenas pelo tráfego que "sai" do mesmo host.
Se o host for um roteador, decida se deseja que isso seja anunciado para outros roteadores ou não.
Exercícios para o leitor: registre isso no IPAM e no DNS. Torne-o persistente com o gerenciador de rede da sua distribuição.