VLAN 接入端口和中继端口在 Linux 上如何工作?

VLAN 接入端口和中继端口在 Linux 上如何工作?

我刚刚花了半天时间试图弄清楚如何在 Linux 机器上执行基本的 VLAN 配置。我在 WEB 上找到了一些资源,但从中并不清楚如何在 Linux 机器上配置访问端口和中继端口。以下是一些链接:

access.redhat.com 上的文章

linuxjournal.com 上的文章

最后,我能够通过以下方式创建一种“VLAN”网络,这是我的网络:

具有一个 VLAN 的网络图片

顶部有 2 个客户端 PC(编号为 4 和 6),按钮上有 2 个“PC 开关”(编号为 1 和 3)

我希望能够在 KaliLinuxCLI_2-1 和 KaliLinuxCLI_2-3 上创建多个带有 VLAN 的访问端口(目前只有一个端口/VLAN,以便于解释和配置)以及 PC 之间的 1 个中继端口

我做了接下来的配置:

  • KaliLinuxCLI_2-4 和 KaliLInuxCli_2-6 在相同的网络掩码中添加了 IP 地址。

  • KaliLinuxCLI_2-1 和 KaliLinuxCLI_2-4:

为中继接口 eth3 添加了带有标签 10 的虚拟接口:

ip link add link eth3 name eth3.10 type vlan id 10 

为 VLAN 10 创建网桥:

ip link add brvlan10 type bridge

添加了中继虚拟接口 eth3.10 和一种“访问”接口 eth0,我基本上没有将其配置为桥接 brvlan10:

ip link set eth3.10 master brvlan10
ip link set eth0 master brvlan10

我也打开了所有接口ip link set <iface_name> up

就是这样。它确实起作用了:

  • 我能够从 KaliLinuxCLI_2-4 ping 到 KaliLinuxCLI_2-6
  • 我能够看到 KaliLinuxCLI_2-1 和 KaliLinuxCLI_2-3 之间的标记帧
  • 我认为我甚至可以添加更多像 KaliLinuxCLI_2-2 和 6 这样的 PC,并按照我的方式添加更多 VLAN,而且我确信它可以工作。

让我感到困扰的是,这里所有的工作都是由网桥完成的。目前,网桥用于将“某种”接入端口 (eth0) 连接到具有 vlan 的特定“中继”接口,以便将帧转发到下一台 PC。

我认为它应该如何工作是,访问端口应该以某种方式配置一个 vlan,以便 Linux PC 根据 vlan 和目标 MAC 地址切换帧,而不是盲目地将其转发到网桥想要的位置。

在 Linux 上是否可以像这样配置 VLAN 访问端口?在 Linux 机器上是否有更好的基本 VLAN 配置方法?

谢谢!

答案1

桥梁总是完成这项工作,因为桥梁与以太网交换机最接近的版本。(“MAC 桥接器”是 IEEE 802.1D 实际使用的术语,因此以太网交换机只是桥接的一种具体实现。)

因此在 Linux 上,物理接口必须属于“桥接”接口,以便转发 L2 帧。(将整个 Linux 系统视为单个巨型交换机是错误的,因为您可以拥有多个具有完全独立 L2 域的桥接器,每个桥接器都有自己的“VLAN 10”。)

也就是说,在 Linux 上,你使用配置每个端口的 VLANbridge vlan命令。要使用此配置模式,首先启用VLAN 过滤在你的桥上:

ip link set br0 type bridge vlan_filtering 1

添加两个物理端口:

ip link set eth3 master br0
ip link set eth0 master br0

最后添加 VLAN 到端口的绑定:

bridge vlan add dev eth3 vid 10
bridge vlan add dev eth0 vid 10 pvid untagged
bridge vlan delete dev eth0 vid 1

此模式还具有在网桥上正确支持 (R)STP 的优点。


注意:如果您想要 Linux 主机本身要参与多个 VLAN,那么您仍然需要“vlan”接口,并且还必须将 VLAN ID 添加到过滤器(使用关键字self)。

bridge vlan add dev br0 vid 10 self
ip link add br0.10 link br0 type vlan id 10
ip addr add x.x.x.x/xx dev br0.10

相关内容