如何使用 netplan 桥接 VLAN 和物理接口?

如何使用 netplan 桥接 VLAN 和物理接口?

我有两个运行 Ubuntu 22.04 Server 的工作站,使用 netplan 进行网络设备管理。

enp0s25第一个工作站有 5 个 NIC。我认为只有两个 NIC和 ens1 与之相关。以下是该工作站的 netplan 配置:

network:
  renderer: networkd
  version: 2
  ethernets:
    enp0s25:
      dhcp4: false
      dhcp6: false
      link-local: []
      ignore-carrier: true
    enp10s0f0:
      dhcp4: false
      dhcp6: false
      link-local: []
      ignore-carrier: true
    enp10s0f1:
      dhcp4: false
      dhcp6: false
      link-local: []
      ignore-carrier: true
    ens1:
      dhcp4: false
      dhcp6: false
      link-local: []
      ignore-carrier: true
  vlans:
    vlan10:
      accept-ra: no
      id: 10
      link: enp0s25
  bridges:
    br0:
      dhcp4: true
      link-local: []
      interfaces:
        - enp0s25
    br1:
      dhcp4: false
      dhcp6: false
      link-local: []
      addresses: [10.233.20.90/23]
      interfaces:
        - vlan10
        - ens1
      parameters:
        forward-delay: 0
        stp: true
    br2:
      dhcp4: false
      dhcp6: false
      link-local: []
      interfaces: [enp10s0f0]
    br3:
      dhcp4: false
      dhcp6: false
      link-local: []
      interfaces: [enp10s0f1]

我创建了vlan10连接到物理接口enp0s25的 VLAN,该接口的 ID 为 10。我已将 和ens1都连接vlan10br1。我已将一大堆设备插入到通过 连接的物理网络ens1。我使用 libvirt 将一堆虚拟机连接到br1。物理设备和虚拟机可以正常通信。

我的理论是,进入 ens1 的未标记第 2 层流量最终将在 enp0s25 上被标记为 vlan 10.然而我可能全都错了。

我尝试使用tcpdump在主机上运行来确认这一点

$ sudo tcpdump -i enp0s25 -n 'vlan 10'
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on enp0s25, link-type EN10MB (Ethernet), snapshot length 262144 bytes
23:45:01.873478 90:9a:4a:31:6d:58 > ff:ff:ff:ff:ff:ff, RRCP-0x25 query
23:45:02.416923 ARP, Request who-has 10.233.20.199 tell 10.233.20.205, length 46
23:45:02.871227 90:9a:4a:31:6d:58 > ff:ff:ff:ff:ff:ff, RRCP-0x25 query
23:45:03.417030 ARP, Request who-has 10.233.20.199 tell 10.233.20.205, length 46
23:45:03.745380 ARP, Request who-has 10.233.21.24 tell 10.233.20.90, length 28
23:45:03.872080 90:9a:4a:31:6d:58 > ff:ff:ff:ff:ff:ff, RRCP-0x25 query

看起来这可行吗?

我的第二个工作站(类似的硬件)有一个这样的网络计划

network:
  renderer: networkd
  version: 2
  ethernets:
    enp0s25:
      dhcp4: false
      dhcp6: false
      link-local: []
      ignore-carrier: true

  vlans:
    vlan10:
      accept-ra: no
      id: 10
      link: enp0s25
    vlan100:
      accept-ra: no
      id: 100
      link: enp0s25

  bridges:
    br0:
      dhcp4: true
      dhcp6: false
      link-local: []
      interfaces:
        - enp0s25
    br10:
      dhcp4: true
      dhcp6: false
      link-local: []
      interfaces:
        - vlan10
    br100:
      dhcp4: false
      dhcp6: false
      link-local: []
      interfaces:
        - vlan100

我的假设是,我可以在第二个工作站上看到 VLAN 10 流量。运行 sudo tcpdump -n -i enp0s25 'vlan 10'并没有显示我所期望的内容

$ sudo tcpdump -n -i enp0s25 'vlan 10'
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on enp0s25, link-type EN10MB (Ethernet), snapshot length 262144 bytes
23:50:54.153304 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 92:e7:5b:f0:b0:7a, length 292

DHCP 流量只是本地机器尝试获取 IP,因为我要求 netplan 在桥上运行 DHCP。我根本没看到这台机器上出现 VLAN 标记帧。

我的设置有问题吗?我还需要做些什么才能让它正常工作吗?

更新:我将笔记本电脑的以太网端口直接插入第一个工作站。我看到tcpdump在 vlan 10 上使用的流量与在主机上运行的流量相同。那么我的网络交换机是否可能以某种方式不传递 802.1Q 流量?我所有的交换机都是“哑交换机”,我认为它们不关心 802.1Q 字段。

相关内容