使用 netplan 设置两个标记的 Vlan

使用 netplan 设置两个标记的 Vlan

对于我的网络,我在交换机上设置了两个 VLan(VLan ID:1 和 2)。我的 ubuntu core 22.04.1 机器通过一个标记端口连接到交换机,该端口允许 VLan 1 和 VLan 2 流量。此机器稍后将托管运行 dhcp、dns、OpenLDAP 等的 docker 容器。我想在我的 ubuntu 机器上使用 netplan,因为它为我提供了有关我的网络配置的良好概述。我想要实现:

  • 在 VLan 1 中拥有一个可从 VLan 1 中的其他主机访问的 IP 地址 192.168.10.101/24
  • 在 VLan 2 中拥有一个可从 VLan 2 中的其他主机访问的 IP 地址 192.168.20.101/24
  • 将 ubuntu 计算机分别通过网关 192.168.10.1 和 192.168.20.1 路由到两个子网 192.168.10.0/24 和 192.168.20.0/24 中的其他主机
  • 路由到默认网关 192.168.10.1,以便 ubuntu 机器连接到互联网

该文件/etc/netplan/00-installer-config.yml如下所示:

network:
  version: 2
  ethernets:
    enp5s0:
      dhcp4: false
    enp6s0:
      dhcp4: false
      optional: true
  vlans:
    vlan.1:
      id: 1
      link: enp5s0
      addresses:
      - 192.168.10.101/24
      nameservers:
        addresses:
        - 192.168.10.116
      routes:
      - to: default
        via: 192.168.10.1
        metric: 100
  vlans:
    vlan.2:
      id: 2
      link: enp5s0
      addresses:
      - 192.168.20.101/32

的输出ip route为:

default via 192.168.10.1 dev vlan.1 proto static metric 100 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 
192.168.10.0/24 dev vlan.1 proto kernel scope link src 192.168.10.101

这种配置(应用sudo netplan apply)已经非常接近我想要做的事情了:

  • 从 ubuntu 机器我可以
    • 通过 ssh 进入 192.168.10.0/24 子网中的一台机器
    • 通过 ssh 进入 192.168.20.0/24 子网中的一台机器
    • 访问互联网
  • 从 192.168.10.0/24 子网中的主机,我可以通过 192.168.10.101 访问 ubuntu 机器
  • 从 192.168.20.0/24 子网中的主机,我可以通过 192.168.10.101 访问 ubuntu 机器

我缺少的是以下内容:

  • 从 192.168.10.0/24 子网中的主机到达 192.168.20.101
  • 从 192.168.20.0/24 子网中的主机也可以到达 192.168.20.101。

查看上面的 netplan 配置,我认为这是由于192.168.20.101/32不允许从两个子网中的其他主机访问此 IP。我已经尝试使用 定义地址192.168.20.101/24,但结果导致无法192.168.20.0/24从 ubuntu 计算机访问子网上的任何其他主机。

有人能帮我找出我做错了什么,导致无法通过 访问 ubuntu 机器192.168.20.101吗?我甚至可以使用 netplan 执行此操作吗?还是我需要在应用配置后手动执行一些步骤?

答案1

我很高兴找到了解决问题的方法!问题出在两个 VLan 使用的 MAC 地址相同。对我而言,有效的解决方案是为 VLan 创建桥接。我之前读过有关(网络)桥接的文章,但每次看到示例时,桥接都只使用一个接口。对我来说,只使用一个接口进行桥接毫无意义,因为我预计桥接会有第二个“支柱”。最后发现这没有必要,仅定义一个接口就足够了:

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: false
      match:
        macaddress: a8:5e:45:56:38:65
        name: enp5s0
      set-name: eth0
    enp6s0:
      dhcp4: false
      optional: true
  bridges:
    br0:
      interfaces: ["vlan.1"]
      addresses:
      - 192.168.10.101/24
      nameservers:
        addresses:
        - 192.168.10.116
      routes:
      - to: default
        via: 192.168.10.1
    br1:
      interfaces: ["vlan.2"]
      addresses:
      - 192.168.20.101/24

  vlans:
    vlan.1:
      id: 1
      link: eth0
      accept-ra: no
    vlan.2:
      id: 2
      link: eth0
      accept-ra: no

查看新的 netplan 配置,192.168.20.101/32可以将 改回192.168.20.101/24。此外,我将接口重命名enp5s0eth0(因为我更喜欢旧的命名)。

ip route现在打印以下内容:

default via 192.168.10.1 dev br0 proto static
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
192.168.10.0/24 dev br0 proto kernel scope link src 192.168.10.101
192.168.20.0/24 dev br1 proto kernel scope link src 192.168.20.101

相关内容