¿Cómo escribir una regla snat nftables?


0

Preparar:

  1. Linux (probado en LEDE, OpenWrt, Ubuntu 16)
  2. iptables deshabilitados (módulos del kernel descargados)
  3. nftables (probado v. 0.8, 0.8.2)
  4. 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:

  1. 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).
  2. Añadir una regla de caída a las cadenas de entrada o salida funciona.
  3. 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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.