Eu tenho um bom shaper, com filtragem de hash, construído em uma ponte linux. Em resumo, br0
conexões external
e internal
interfaces físicas, os pacotes marcados com VLAN são conectados "de forma transparente" (quero dizer, não há interfaces VLAN).
Agora, diferentes kernels fazem isso de maneira diferente. Posso estar errado com as faixas exatas de verificações do kernel, por favor me perdoe. Obrigado.
2.6.26
Então, no debian, 2.6.26 e superior (até 2.6.32, eu acredito) --- isso 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
Aqui, o "kernel" corresponde a dois bytes no campo "protocolo" com 0x8100, mas conta o início do pacote ip como uma "posição zero" (desculpe pelo meu inglês, se não sou claro).
2.6.32
Novamente, no debian (eu não construí o kernel vanilla), 2.6.32-5 --- isso 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
Aqui, o "kernel" corresponde ao mesmo para o protocolo, mas conta o deslocamento desde o início do cabeçalho do protocolo --- eu tenho que adicionar 4 bytes para compensar (20, não 16 para o endereço dst). Tudo bem, parece mais lógico, quanto a mim.
3.2.11, o mais recente estável agora
Isso funciona --- como se não houvesse nenhuma tag 802.1q:
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
O problema é que não consegui encontrar uma maneira de corresponder a tag 802.1q até agora.
Correspondência da tag 802.1q no passado
Eu poderia fazer isso antes da seguinte maneira:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 match u16 0x0ed8 0x0fff at -4 flowid 1:300
Agora eu sou incapaz de combinar 802.1q tag com at 0
, at -2
, at -4
, at -6
ou assim. O principal problema que tenho zero número de acessos - esse filtro não está sendo verificado, "protocolo errado", em outras palavras.
Por favor, alguém me ajude :-)
Obrigado!
fonte
protocol all
dá-meRTNETLINK answers: Invalid argument
(kernel 3.3.4 aqui). Vou testar isso com kernels mais recentes. Obrigado.Eu tive que fazer exatamente isso. Descobri que a resposta sugerida por Thusitha era a maneira correta de fazer isso para novos kernels.
Testado com o kernel Debian wheezy 3.2.0-4 e o iproute (de onde vem o comando tc) versão 20120521-3 + b3
Aqui está o script completo, as
tc filter
linhas sendo quase exatamente as especificadas por @Thusithafonte
protocol all
me deu um erro no kernel da baunilha. Eu deveria conferir mais. Obrigado.Eu recomendaria usar o wireshark para capturar o que está passando pela interface como visível no espaço do usuário e usá-lo para escrever o filtro. Gostaria de saber se, talvez, a interface esteja removendo as tags VLAN por algum motivo (apesar de estar configurada para fazer a ponte transparente). Talvez esteja adicionando tags extras ou algo assim?
fonte
tcpdump
mostra IDs de vlan em todas as interfacesbridge
e portas.Você pode marcar pacotes vlan com ebtables .
Em seguida, aplique a modelagem com base nas marcações. ebtables e iptables compartilham a mesma marcação.
Ainda não fiz isso. Portanto, é um palpite.
fonte
Tente desativar a
reorder_hdr
opção na interface vlan. Se a opção Reordenar cabeçalho estiver ativada, as tags dos quadros serão removidas. Verifique por comandoip -d link list dev vlan_iface
.fonte
tc
filtros são chamados? Você tem um link para um mapa ou algo assim? Obrigado!