Preparar:
- Linux (probado en LEDE, OpenWrt, Ubuntu 16)
- iptables deshabilitados (módulos del kernel descargados)
- nftables (probado v. 0.8, 0.8.2)
cadenas y NAT se crean de acuerdo a wiki de nftables oficiales :
% nft add table nat % nft add chain nat prerouting { type nat hook prerouting priority 0 \; } % nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
Mediante esta configuración, dnat funciona como se espera, por ejemplo:
% nft add rule nat prerouting tcp dport 15000 dnat 192.168.0.50:20000
redirige todos los paquetes TCP entrantes desde el puerto 15000 a 192.168.0.50:20000 y viceversa.
Sin embargo, no se procesa ninguna regla snat (ninguna regla de):
% nft add rule nat postrouting counter ip saddr 192.168.0.50 snat 1.2.3.4
% nft add rule nat postrouting counter tcp sport 20000 snat 1.2.3.4:1234
% nft add rule nat postrouting counter ip protocol tcp drop
He intentado estas reglas por separado o en variaciones (oif, ip + tcp, ...): los paquetes aún no se modifican (lo demuestra WireShark) o no se eliminan. Aunque:
- La cadena de post-enrutamiento se procesa, ya que si quito la cadena de post-enrutamiento, dnat (por pre-enrutamiento) deja de funcionar (como se espera).
- Añadir una regla de caída a las cadenas de entrada o salida funciona.
- Añadiendo cadenas con
type nat hook input/output
de acuerdo a Sugerencia de A.B. Todavía no resuelve el problema.
Entonces, ¿cómo escribir una regla snat nftables?
¿Cuál es el firmware que el enrutador está ejecutando actualmente? ¿Y qué hace el dispositivo / modelo?
—
Tim_Stewart
poste transversal serverfault.com/questions/910753/…
—
A.B
así que tengo que hacer comentarios cruzados ... la implementación actual de nftables requiere la creación de la cadena de salida (nat hook) incluso si no se usa. p.ej: marc.info/?l=netfilter&m=152532769025083&w=2
—
A.B
@ A.B: Gracias, buena información en general. Desafortunadamente, en este caso no ayuda, he intentado agregar cadenas de entrada / salida / avance sin éxito.
—
Andrey Belkin
@Tim_Stewart: Lo he intentado con: LEDE: SNAPSHOT, r3298-e4297f0, Kernel 4.4; OpenWrt: SNAPSHOT, r6762-044e84f, Kernel 4.9; ambos con NXP / Freescale TWR-LS1021A (ARM) y UHX65A-W (x86-64bit).
—
Andrey Belkin