En ebtables, BROUTING
la cadena en broute
la tabla tiene comportamientos especiales para ACCEPT
acciones DROP
: ACCEPT
significa puente/ruta de avance y DROP
significa 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 broute
la 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-nft
ha 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 iptables
fuentes 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 1
para emular-t broute
. Si-t broute
se proporciona, se traduce automáticamente-j DROP
ameta broute set 1 accept
internamente.
lo que permitirá usar ebtables-nft
en 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,
DROP
en realidad se representabroute set 1 accept
como 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 por
ebtables-legacy
:NF_BR_PRI_FIRST
)