我怎样才能将 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
是为了获得即时反馈)来查看正在流经的内容eth0
。vlan.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。但我不确定这是否适合我的需求,因为这样做的目的是能够模拟某些主机之间的节流连接。因此,我想将
netem
qdiscs 附加到特定的子接口。如果我使用感知 VLAN 的网桥,我不知道我是否仍然能够tc qdisc
根据目标主机使用不同的 qdiscs(除非我可以使用分类 qdiscs 并根据数据包的源/目标对其进行分类?不确定。但我想避免使用tc
我不太熟悉的高级命令)。