Tengo un buen moldeador, con filtrado hash, construido en un puente de Linux. En resumen, las br0
conexiones external
y internal
las interfaces físicas, los paquetes etiquetados con VLAN se conectan "transparentemente" (es decir, no hay interfaces VLAN allí).
Ahora, diferentes núcleos lo hacen de manera diferente. Puedo estar equivocado con los rangos exactos de versiones de kernel, por favor perdóname. Gracias.
2.6.26
Entonces, en debian, 2.6.26 y superior (hasta 2.6.32, creo) --- esto funciona:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 ht 1:64 match ip dst 192.168.1.100 flowid 1:200
Aquí, "kernel" coincide con dos bytes en el campo "protocolo" con 0x8100, pero cuenta el comienzo del paquete ip como una "posición cero" (perdón por mi inglés, si no estoy claro).
2.6.32
Nuevamente, en debian (no he construido el núcleo de vainilla), 2.6.32-5 --- esto funciona:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 ht 1:64 match ip dst 192.168.1.100 at 20 flowid 1:200
Aquí, "kernel" coincide con el mismo protocolo, pero cuenta el desplazamiento desde el comienzo del encabezado de este protocolo --- Tengo que agregar 4 bytes al desplazamiento (20, no 16 para la dirección dst). Está bien, parece más lógico, en cuanto a mí.
3.2.11, el último establo ahora
Esto funciona --- como si no hubiera una etiqueta 802.1q en absoluto:
tc filter add dev internal protocol ip parent 1:0 prio 100 \
u32 ht 1:64 match ip dst 192.168.1.100 flowid 1:200
El problema es que hasta ahora no pude encontrar una manera de hacer coincidir la etiqueta 802.1q.
Etiqueta 802.1q coincidente en el pasado
Podría hacer esto antes de la siguiente manera:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 match u16 0x0ed8 0x0fff at -4 flowid 1:300
Ahora soy incapaz de igualar 802.1q etiqueta con at 0
, at -2
, at -4
, at -6
o por el estilo. El principal problema que tengo cero éxitos cuentan --- este filtro no se está comprobando en absoluto "protocolo equivocado", en otras palabras.
Por favor, alguien, ayúdenme :-)
¡Gracias!
fuente
protocol all
me daRTNETLINK answers: Invalid argument
(3.3.4 kernel aquí). Probaré esto con núcleos más nuevos. Gracias.Tenía que hacer exactamente esto. Descubrí que la respuesta sugerida por @Thusitha era la forma correcta de hacerlo para los nuevos núcleos.
Probado con Debian Wheezy Kernel 3.2.0-4 e iproute (de donde proviene el comando tc) versión 20120521-3 + b3
Aquí está el script completo, las
tc filter
líneas son casi exactamente como lo especifica @Thusithafuente
protocol all
me dio un error en el núcleo de vainilla. Debería comprobarlo más. Gracias.Recomendaría usar wireshark para capturar lo que pasa por la interfaz como visible en el espacio de usuario, y usar eso para escribir el filtro. Me pregunto si tal vez la interfaz está eliminando las etiquetas de VLAN por alguna razón (a pesar de estar configurada para conectarse de forma transparente). ¿Quizás está agregando etiquetas adicionales o algo así?
fuente
tcpdump
muestra ID de vlan en todas las interfacesbridge
y puertos.Puede marcar paquetes vlan con ebtables .
Luego aplique la conformación basada en las marcas. ebtables e iptables comparten la misma marca.
No lo he hecho yo todavía. Entonces es más bien una corazonada.
fuente
Intente desactivar la
reorder_hdr
opción en la interfaz vlan. Si la opción de reordenar encabezado está habilitada, las etiquetas de los marcos se eliminarán. Compruébelo por comandoip -d link list dev vlan_iface
.fuente
tc
se llaman los filtros? ¿Tienes un enlace a un mapa o algo así? ¡Gracias!