对于我的网络,我在交换机上设置了两个 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
。此外,我将接口重命名enp5s0
为eth0
(因为我更喜欢旧的命名)。
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