
Necesito interceptar el tráfico que va a una IP externa y redirigirlo al host local. Es bastante simple usar iptables, pero no pude entender cómo hacerlo funcionar a través de nft. Creo una tabla y una cadena dentro de nft, pero no pude crear una regla, nft dice Operación no compatible.
Mesas
sudo /usr/sbin/nft list ruleset
table ip filter {
chain OUTPUT {
type filter hook output priority filter; policy accept;
}
}
Regla
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 del núcleo
lsmod | grep nf_tables
nf_tables 360448 1 nft_nat
libcrc32c 12288 3 nf_conntrack,nf_nat,nf_tables
nfnetlink 20480 1 nf_tables
¿Qué hay de malo en mi regla? ¿O podría simplificarse?
Respuesta1
Asigne la dirección IP al host. La tabla de reenvío sirve para enrutar todo el tráfico; el firewall puede hacerlo, pero a menudo eso no es necesario.
Por ejemplo, asignando una dirección IP que inventé para loopback en Linux:
ip a add 2001:db8:114:6402::1020 dev lo
Como ruta de un solo host, tendrá prioridad incluso si normalmente existe en otro lugar de Internet. En una interfaz loopback, otros hosts no lo sabrán y sólo podrán acceder a ellos mediante el tráfico que "sale" del mismo host.
Si el host es un enrutador, decida si desea que se anuncie a otros enrutadores o no.
Ejercicios para el lector: regístrelo en IPAM y DNS. Hazlo persistente con el administrador de red de tu distribución.