Linux: pontes, VLANs e RSTP

1

Eu tentei descobrir como configurar o RSTP no Linux com VLANs e pontes envolvidas e agora estou completamente confuso.

Estou tentando fazer a ponte entre três interfaces, duas das quais devem atuar como tronco (hdlc0 e hdlc1) e uma delas deve agir como porta de acesso (eth0). Eu também preciso habilitar o RSTP em cada interface incluída no bridge, mas com a configuração listada abaixo os pacotes RSTP são enviados via hdlc0 e hdlc1 marcados (!) Para que outros dispositivos os rejeitem. Como o Linux não tem nenhum conceito de 'vlan nativo', não tenho ideia de como consertar isso.

Aqui está minha configuração:

ifconfig eth0 up


ifconfig hdlc0 up
ifconfig hdlc1 up

vconfig add hdlc0 42
vconfig add hdlc1 42
ifconfig hdlc0.42 up
ifconfig hdlc1.42 up


brctl addbr br1
brctl addif br1 eth0
brctl addif br1 hdlc0.42
brctl addif br1 hdlc1.42

ifconfig br1 up
brctl stp br1 on

Outra pergunta: Eu também me pergunto como configurar o RSTP em cenários onde eu tenho várias pontes: digamos que eth0 é trunk com vlan 42-42 permitido, vlan 42 deveria passar via hdlc0 e vlan 43 deveria passar via hdlc1, então eu tenho duas pontes. Se eu habilitar o RSTP em ambas as pontes, ele (provavelmente) será executado independentemente em cada ponte, de modo que enfrentarei problemas em breve?

    
por grindelwaldus 06.01.2017 / 12:53

1 resposta

3

No Linux, as VLANs e as pontes são construções completamente separadas, e as pontes do Linux não são "com reconhecimento de VLAN".

Quando você cria uma interface de VLAN, o Linux marca / desmarca pacotes nessa interface antes de passá-los para / da interface física subjacente ("tronco"). No entanto, você ainda pode usar a interface física subjacente para enviar pacotes não marcados ("VLAN nativa").

Quando você cria uma ponte, o Linux alterna os pacotes entre as interfaces associadas, sem qualquer preocupação com as tags da VLAN (ou a falta delas) nos pacotes. Se você anexar uma interface de tronco a uma ponte, a ponte terá todo o prazer em alternar os pacotes marcados com VLAN sem nenhuma consideração pelas marcas. Quando você habilita o STP em uma ponte, o Linux gera pacotes STP não marcados e os coloca na ponte.

Quando uma ponte é anexada a uma interface física que também possui interfaces de VLAN associadas, essas interfaces de VLAN deixarão de ver qualquer tráfego que não seja destinado ao endereço MAC da interface física. Esse comportamento é devido à ordem em que a ponte e a marcação de VLAN são processadas e podem ser alteradas usando ebtables conforme descrito em . No entanto, no que diz respeito à Spanning Tree, anexar pontes a uma interface física e interfaces de VLAN associadas funcionará corretamente se você estiver usando o PVST + de qualquer maneira (porque o bloqueio de portas STP é gerenciado independentemente para cada ponte), portanto não é realmente relevante aqui.

Mas você também pode criar interfaces VLAN na parte superior de uma ponte que está passando pacotes marcados com VLAN e, em seguida, adicionar essas interfaces VLAN a outras pontes.

Então, para realizar o que você quer, tente:

ip link set dev hdlc0 up
ip link set dev hdlc1 up

brctl addbr br_native
brctl addif br_native hdlc0
brctl addif br_native hdlc1
brctl stp br_native on
ip link set dev br_native up

ip link add link br_native name br_native.42 type vlan id 42
ip link set dev br_native.42 up
ip link set dev eth0 up

brctl addbr br_42
brctl addif br_42 br_native.42
brctl addif br_42 eth0
ip link set dev br_42 up

Observe que o código de ponte do kernel Linux suporta apenas nativamente o 802.1D STP tradicional. Para adicionar suporte a RSTP e PVST +, use o link (Também é possível encontrar alguma documentação relevante para mstpd em: link ). O mstpd também é capaz de falar MSTP, mas devido à maneira como o Linux implementa seus FIBs, atualmente é impossível mapear topologias MSTP em pontes Linux, portanto o MSTP não é realmente funcional.

Para responder sua segunda pergunta, não acredito que seja possível (em qualquer switch, não apenas quando usando Linux) usar STP ou RSTP para direcionar cada uma das duas VLANs diferentes em um único tronco através de outros dois troncos. Isso só pode ser feito usando PVST + ou MSTP, embora, como mencionado acima, o MSTP não seja suportado no Linux.

    
por 06.01.2017 / 23:51