nftables: ¿Cómo obtener un comportamiento BROUTING como el legado de ebtables?

nftables: ¿Cómo obtener un comportamiento BROUTING como el legado de ebtables?

En ebtables, BROUTINGla cadena en broutela tabla tiene comportamientos especiales para ACCEPTacciones DROP: ACCEPTsignifica puente/ruta de avance y DROPsignifica enrutamiento/ruta de entrada. Por ejemplo, para forzar que todos los paquetes que no sean IPv6 pasen por NAT, con la configuración adecuada de iptables mientras todos los paquetes IPv6 están directamente puenteados, se podría hacer:

ebtables -t broute -A BROUTING -p ! ipv6 -j DROP -i wan

¿Cómo puedo conseguir este comportamiento en nftables?

Varios mensajes y el viejo.páginas de manual de nftablessugirió que esto no se implemente. Además, hay unhilo en la lista de correo de nftablesque finalmente no obtuvo ninguna respuesta realmente válida.

¿Aún no se ha implementado? Si es así, ¿hay alguna solución o tengo que usar ebtables-legacy? Gracias.

Respuesta1

¿Aún no se ha implementado?

Sí, pero todavía solo por unas pocas semanas (el kernel de Linux 6.4 debería lanzarse a finales de 2023-06 o principios de 2023-07). La propuesta aceptada (después de algunas iteraciones) para usarbrotarconnftablesen netfilter-devel es de2023-02-24.

ACTUALIZAR: ahora está implementado oficialmente para nft(nftables) >= 1.0.8 e incluso ebtables-nft>= 1.8.10, vea la actualización al final de esta respuesta.

Ha sidoagregado en aún por publicarseNúcleo de Linux 6.4el 26 de abril de 2023:

Filtro de red:

  • Agregue compatibilidad con nf_tables 'broouting' para forzar que un paquete sea enrutado en lugar de puenteado

y está en proceso para el próximo lanzamiento aún por publicarnftablesversión, probablemente 1.0.8:

meta: introducir soporte para metabroute

Se puede utilizar en el gancho de enrutamiento previo del puente para desviar un paquete a la pila de IP para su enrutamiento.

Este es un reemplazo de ebtables -t broutela funcionalidad.

No hayebtablespeculiaridad sobre el uso de aceptar/soltar con un especialbrotartipo. Se utiliza configurando elbrotarbandera en una regla en elpuentetipo de familiafiltrarypreenrutamientogancho:

meta broute set 1

Entonces, en lugar de (usar ebtables-legacy, desde entonces ebtables-nftha faltado soporte parabrotarhasta hace poco):

ebtables-legacy -t broute -A BROUTING -p ! ipv6 -j DROP -i wan

uno hará en su lugar algo como:

table bridge b {
    chain prerouting {
        type filter hook prerouting priority -250; policy accept;
        ether type != ip6 iifname wan meta broute set 1 accept
    }
}

Además, ebtables-nft(enviado a través de iptablesfuentes para elnftablesvariante backend), también ha recibidoun parche equivalente para la próxima versión aún por publicarse:

ebtables-nft: agregar emulación de tabla broute

Utilice new meta broute set 1para emular -t broute. Si -t broutese proporciona, se traduce automáticamente -j DROPa meta broute set 1 accept internamente.

lo que permitirá usar ebtables-nften lugar de ebtables-legacy(aún con kernel >= 6.4) aceptar tal cual:

ebtables -t broute -A BROUTING -p ! ipv6 -j DROP -i wan

ACTUALIZAR

  • como está escrito arriba, núcleo6.4 lanzado alrededor del 25 de junio de 2023recibió la característica

  • como está escrito arriba,nftables1.0.8 lanzado alrededor del 14 de julio de 2023ahora admite broute:

    • soporte de puente para cortocircuitar la lógica del puente desde el gancho de enrutamiento previo del puente y pasar paquetes a la pila de IP local.

      ... meta broute set 1
      
  • iptables: 1.8.10 lanzado alrededor del 10/10/2023(también proporciona el binarioebtables) ahora admite broute con ebtables-nft:

    • Soporte de mesa Broute en ebtables-nft

    A partir de esta versión, el siguiente comando tendrá éxito:

    ebtables-nft -t broute -A BROUTING -p ! ipv6 -j DROP -i wan
    

    Como está escrito arriba, DROPen realidad se representa broute set 1 acceptcomo se muestra a continuación (mostrar generalmente está bien, alterar generalmente no está bien):

    # nft list ruleset
    table bridge broute {
      chain BROUTING {
          type filter hook prerouting priority -2147483648; policy accept;
          iifname "wan" ether type != ip6 counter packets 0 bytes 0 meta broute set 1 accept
      }
    }
    

    (la prioridad -2147483648 puede parecer extraña, pero es lo mismoprioridad de gancho utilizada porebtables-legacy:NF_BR_PRI_FIRST)

información relacionada