Por desconfigurando os campos de cabeçalho dos pacotes com nftables é possível, mesmo sem usar ip route add nat
, que, como uma funcionalidade simples do roteador, é limitada à camada 3 (IP), não à camada 4 (TCP, UDP, ...).
AVISO: requer nftables > = 0,6 (> = 0,7 aqui se estiver usando o notrack) e kernel > = 4,10. Testado aqui com nftables 0.8.3 e kernel 4.15.x.
É bem compacto, porque os nftables podem combinar vários destinos (3 alvos aqui):
# nft add table raw
# nft 'add chain raw prerouting {type filter hook prerouting priority -300;}'
# nft add rule raw prerouting ip daddr 205.254.211.17 udp dport 5004 notrack ip daddr set 192.168.100.17 udp dport set 5006
Citações na segunda linha para evitar a interpretação da casca. Se estiver fazendo testes, a maneira mais rápida de remover todo o nft é nft flush ruleset
.
Portanto, apenas lendo em voz alta, a regra diz para selecionar apenas um pacote IP com destino 205.254.211.17, sendo UDP com porta de destino 5004, então tags como não rastreável (por conntrack, se estiver carregado), define seu IP de destino como 192.168.100.17 e define sua porta de destino como 5006.
Você pode misturar nftables
com iptables
sem muito problema, contanto que você não use nat
tabelas em ambos ao mesmo tempo (bem, você não quer usar isso de qualquer maneira). Ser capaz de declarar a prioridade da cadeia explícita ainda permite escolher se os ganchos nftables serão executados antes ou após os ganchos correspondentes do iptables, por exemplo, escolhendo -301 ou -299 para ter certeza de rodar antes ou depois da tabela iptables ' raw
se houvesse tal necessidade.