桥梁上的Linux Vlans

我试图桥接一个dot1q主干,似乎无法弄清楚。 我能够通过eth0.2接口连接到trunk上的主机,但是当我用br0连接接口并尝试连接时,我什么也得不到。 我在这里错过简单的东西吗?

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 

如果一个接口(在你的情况下是eth0 )被添加到网桥,默认情况下,它的VLAN子接口( eth0.2 )将不再获得传入stream量 – 所有的数据包将被传递到网桥。 在Linux 2.6.37之前,VLAN子接口有时可能工作,具体取决于您的硬件(如果硬件和驱动程序支持接收VLAN加速( NETIF_F_HW_VLAN_RX ),VLAN在桥接之前处理,并且VLAN子接口工作)。 自2.6.37以来,所有卡和驱动程序的行为都是相同的。

有几个解决scheme有不同的缺点:

  1. 将VLAN子接口添加到网桥而不是物理接口。 但是在这种情况下,网桥的所有端口都可以访问所有的VLAN,这可能是不希望的。

  2. 使用ebtables将802.1Q标记的stream量传递给VLAN子接口:

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

    (在BROUTING链路中, ACCEPT表示“网桥”, DROP表示“路由”,或者实际上是“根据ethertype进行处理”,对于802_1Qtypes意味着“传递到适当的VLAN子接口”

    在这种情况下,网桥将不会得到任何标记的stream量,但由于ebtables处理,会有一些额外的开销。

  3. 重新configurationnetworking以使接口上的所有stream量都被标记,避免需要桥接未标记的stream量。

这里混合的东西很less。 标记通常发生在实际的以太网接口(即eth0.2)上,而桥接通常不需要任何forms的显式标记(虽然也有例外)。

好的 – 我将假定您希望VLAN 2和VLAN 100通过以太网0。

1.)你想创buildeth0.2和eth0.100。 不要在IP地址(inet手册)上。

2.)创buildbr2和br100(为了方便起见),并将这些IP分配给这些VLAN(inet static)。

3.)eth0.2将是br2中的bridge_port。 eth0.100将是br100中的一个bridge_port。

长话短说:标记你的接口,然后添加网桥。 所以,为了使vlan100在桥接模式下可用,你需要

eth0 – > eth0.100 – > br100

要添加另一个标签:

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

等等

将接口添加到网桥后,应该使用网桥接口和子接口来获取未标记和带VLAN标记的数据包。

所以,在你的例子中,你需要用br0.2replacebr0.2

你只有一个网桥( br0 ),但是使用网桥子接口(例如br0.2 ),你可以从任何你喜欢的VLAN中获得stream量。

要将所有的信息从eth0传递给br0 ,只需要将eth0joinbr0 ,然后每天调用它。 看来你已经这样做了。

您可能还需要切换以下内容:

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

这是在我的闲话框上1 ,但在清醒0 。 我不得不把它设置为1 ,以使我的网桥/ VLAN设置再次工作。