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?
linux
networking
nat
Andrey Belkin
fuente
fuente
¿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