Linux Vlans sobre Bridge

5

Estou tentando conectar um tronco dot1q e não consigo descobrir. Eu sou capaz de se conectar a hosts no tronco com a minha interface eth0.2, mas quando eu ligar a interface com br0 e tentar se conectar eu não recebo nada. Estou sentindo falta de algo simples aqui?

auto lo
iface lo inet loopback

auto br0
iface br0 inet manual
bridge_ports eth0
bridge_stp off
bridge_fd 9
bridge_hello 2
bridge_maxwait 0

auto br0.100
iface br0.100 inet static
address 192.168.100.99
netmask 255.255.255.0

auto eth0.2
iface eth0.2 inet static
 address 10.1.2.225
 netmask 255.255.255.0
 network 10.1.2.1
 broadcast 10.2.1.255
 gateway 10.1.2.1
 mtu 1500
    
por imaiden 03.08.2012 / 21:46

4 respostas

8

Se uma interface ( eth0 no seu caso) for adicionada a uma ponte, por padrão suas subinterfaces de VLAN ( eth0.2 ) não receberão mais o tráfego de entrada - todos os pacotes serão passados para a ponte. Antes do Linux 2.6.37, as subinterfaces de VLAN poderiam, às vezes, funcionar dependendo de seu hardware (se o hardware e o driver suportassem a aceleração de RX VLAN ( NETIF_F_HW_VLAN_RX ), as VLANs fossem manipuladas antes de bridging e as subinterfaces de VLAN funcionassem); desde 2.6.37 o comportamento é o mesmo para todos os cartões e drivers.

Existem várias soluções com diferentes desvantagens:

  1. Adicione subinterfaces de VLAN à ponte em vez da interface física. Mas neste caso, todas as portas da ponte terão acesso a todas as VLANs, o que provavelmente não é desejado.

  2. Use ebtables para passar o tráfego marcado 802.1Q para subinterfaces de VLAN:

    ebtables -t broute -A BROUTING -i eth0 -p 802_1Q -j DROP
    

    (No BROUTING chain ACCEPT significa “bridge” e DROP significa “route” ou, na verdade, “process de acordo com ethertype”, que para o tipo 802_1Q significa “passar para a subinterface VLAN apropriada” .)

    Nesse caso, a ponte não obterá nenhum tráfego marcado, mas haverá um pouco mais de sobrecarga devido ao processamento de ebtables.

  3. Reconfigure a rede para tornar todo o tráfego na interface marcado e evite a necessidade de unir o tráfego sem tag.

por 03.08.2012 / 22:21
3

Há poucas coisas sendo misturadas aqui. A marcação geralmente ocorre na interface Ethernet real (ou seja, eth0.2), enquanto a ponte normalmente não requer nenhum tipo de marcação explícita (embora haja exceções para isso).

OK - Suponho que você queira que a VLAN 2 e a VLAN 100 transmitam a ethernet 0.

1.) Você quer criar eth0.2 e eth0.100. Não coloque um endereço IP em nenhum dos dois (manual inet).

2.) Crie br2 e br100 (por conveniência) e atribua os IPs que você gostaria de usar nessas VLANs (inet static).

3.) eth0.2 será uma bridge_port em br2. eth0.100 será uma bridge_port em br100.

    
por 03.08.2012 / 22:25
3

para encurtar a história: marque suas interfaces e adicione pontes. Então, para vlan100 ser utilizável em um modo de ponte, você precisará de

eth0 -> eth0.100 ->br100

Para adicionar outra tag:

eth0 -> eth0.100 -> br100
........->eth0.101 -> br101

e assim por diante

    
por 03.08.2012 / 22:59
3

Depois de adicionar uma interface a uma ponte, você deve usar a interface de ponte e as subinterfaces para obter pacotes não marcados e marcados com VLAN.

Assim, no seu exemplo, você precisa substituir eth0.2 por br0.2 .

Você teria apenas uma ponte ( br0 ), mas usando as subinterfaces da ponte (por exemplo, br0.2 ), você pode obter tráfego de qualquer VLAN que desejar.

Para passar todas as informações de eth0 para br0 , basta adicionar eth0 a br0 e encerrar o dia. Parece que você já fez isso.

Você também pode querer alternar o seguinte:

sudo sysctl net.bridge.bridge-nf-filter-vlan-tagged=1

Isso é 1 na minha caixa do Jaunty, mas 0 no Lucid. Eu tive que fazer com que 1 para minha configuração bridge / VLAN funcionasse novamente.

    
por 15.08.2012 / 13:18

Tags