我做了什么

我做了什么

我怎样才能将 VLAN 子接口桥接在一起?

在我的主机上,我可以成功地将我的eth0接口转换为网桥。
我还可以成功创建和使用 VLAN 子接口。
但是,我还没有成功桥接 VLAN 子接口。我这里遗漏了什么?

这是我的设置:

设置

我做了什么

我正在使用 Ubuntu 机器(因此,我无法使用 Cisco 或 OpenWRT 特定的命令)

要奴役我的 eth0 接口:

hostA $ sudo ip link add name br0 type bridge
hostA $ sudo ip link set dev br0 up
hostA $ sudo ip link set dev eth0 master br0
hostA $ sudo ip addr del 192.168.0.100/24 dev eth0
hostA $ sudo ip addr add 192.168.0.100/24 dev br0
hostA $ sudo ip route add default via 192.168.0.1
# I am still able to ping the Internet

要通过子接口与主机 B 通信:

hostA $ sudo modprobe 8021q
hostA $ sudo ip link add link eth0 name vlan.10 type vlan id 10
hostA $ sudo ip link set vlan.10 up
hostA $ sudo ip route add 192.168.0.200 dev vlan.10
# I am now able to ping 192.168.0.200, the frame leaving hostA is tagged with VLAN10

一旦我将vlan.10子接口绑定到br0,我就无法再 ping 192.168.0.200 了。我做错了什么?

我目前的调查

我使用 tcpdump(实际上termshark是为了获得即时反馈)来查看正在流经的内容eth0vlan.10我不确定我对那里显示的 VLAN 以太网报头有多大信心,因为我读到它取决于 NIC 使用的驱动程序/固件。

但我在那里看到的是:

  • 对 hostB 的 ARP 请求通过 eth0 发送,没有 VLAN 标记(不是预期的,但是哎呀)
  • ARP 应答通过 vlan.10 接口(以及带有 VLAN 以太网头的 eth0 接口)发送(这意味着 hostB 已经收到了该请求。很奇怪,但很神奇)
  • ip neigh显示 hostB 已在 vlan.10 上“注册”(这很合理,因为我们刚刚收到 ARP 响应)
  • ...但是 ping 请求发送时没有 VLAN 标记,尽管是 eth0!这很奇怪,因为这与 ARP 表显示的内容不符...
  • 不出所料,我看不到任何 ping 回复,因为我认为主机 B 根本没有收到 ping 请求

还有其他选择吗?

  • 我已经能够使用 VLAN10 的不同子网连接我的主机,并让主机 A 执行 IP 转发和 NAT(伪装)。但是,我真的很想只使用第 2 层交换,因为它可以简化每个主机上所需的配置。
  • 我读过网桥可以感知 VLAN。但我不确定这是否适合我的需求,因为这样做的目的是能够模拟某些主机之间的节流连接。因此,我想将netemqdiscs 附加到特定的子接口。如果我使用感知 VLAN 的网桥,我不知道我是否仍然能够tc qdisc根据目标主机使用不同的 qdiscs(除非我可以使用分类 qdiscs 并根据数据包的源/目标对其进行分类?不确定。但我想避免使用tc我不太熟悉的高级命令)。

相关内容