Eu criei uma ponte com reconhecimento de VLAN com comando e adicionei interfaces relevantes:
% ip link add br0 type bridge vlan_filtering 1
% ip link set dev eth0 master br0
...
(e repita isso para eth1, eth2, eth3)
Agora, quero que as portas da ponte lidem com quadros com várias tags e que os quadros sejam removidos das tags e entregues na porta br0 onde tenho um daemon de escuta:
% bridge vlan del dev eth0 vid 1
% bridge vlan add dev eth0 vid 2-4094
...
(e repita isso para eth1, eth2, eth3)
Depois que todos os comandos forem concluídos, a configuração da ponte terá a seguinte aparência:
% bridge -c vlan sh
port vlan ids
br0 1 PVID Egress Untagged
eth3 2-4094
eth2 2-4094
eth1 2-4094
eth0 2-4094
br1 1 PVID Egress Untagged
Agora quando eu envio ping
do host por trás da eth0
interface para br0
(tendo IP 192.168.1.1), vejo com tcpdump
que eth0 está de fato recebendo frame marcado (no meu caso o ID é 10), porém br0 não recebe nada. o que estou perdendo?
A auto interface da ponte, que é a parte da ponte que participa do roteamento, também deve ser colocada na VLAN adequada.
Para configurar a interface da ponte em vez de uma de suas portas,
self
é necessária a palavra-chave adicional. A pilha de roteamento (na camada 3) lida com pacotes IPv4 ou IPv6, portanto espera receber quadros desse tipo, não quadros marcados. Portanto, o ID de VLAN 10 deve ser desmarcado ao sair da ponte (para que a pilha de roteamento receba tráfego) e esse deve ser o ID de VLAN da porta, para que o tráfego da pilha de roteamento para a ponte seja marcado de volta. Apenas uma VLAN pode ser vinculada à pilha de roteamento dessa maneira.Isto dá: