问题:在 systemd-networkd 下,如何配置系统启动时不会自动出现的 VLAN?
细节:我正在运行 Ubuntu 20.04 服务器。我的工作站有两个网络接口。eth0 是我的主接口,连接到我的常规网络,并且按预期工作。eth1 连接到交换机中继端口,使我可以访问我偶尔用于开发或测试目的的许多其他内部网络。我在 systemd-networkd(/etc/systemd/network)中定义了两个 vlan。每个 vlan 都定义了一个网桥,用于各种容器或虚拟机。
按照配置,eth1 和 VLAN 在重启时自动启动。由于我很少使用这些 VLAN 或网桥,所以我希望它们保持关闭状态,直到我手动启动它们。我尝试设置 ActivationPolicy=manual,但这仅适用于物理接口,不适用于 VLAN。
我的当前配置文件如下所示。有什么办法可以防止 networkd 自动启动 VLAN 吗?
11-eth1.网络
[Match]
Name=eth1
MACAddress=[obscured]
[Link]
ActivationPolicy=manual
[Network]
VLAN=vlan22
VLAN=vlan24
12-eth1.netdev
[NetDev]
Name=eth1
Kind=vlan
MACAddress=[obscured]
21-vlan22.netdev
[NetDev]
Name=vlan22
Kind=vlan
[VLAN]
Id=22
22-vlan24.netdev
[NetDev]
Name=vlan24
Kind=vlan
[VLAN]
Id=24
31-vlan22.网络
[Match]
Name=vlan22
[Network]
Bridge=br22
DHCP=yes
32-vlan24.网络
[Match]
Name=vlan24
[Network]
Bridge=br24
DHCP=yes
41-br22.netdev
[NetDev]
Name=br22
Kind=bridge
42-br24.netdev
[NetDev]
Name=br24
Kind=bridge
答案1
我自己也遇到过这个问题。我需要systemd-networkd
创建很多 VLAN,稍后我会从另一个应用程序管理它们。出于某种原因,既没有关闭ActivationPolicy=manual
也没有ActivationPolicy=down
关闭接口;相反,systemd-networkd
只是在 VLAN 上忽略它并让接口保持打开状态。我怀疑发生的事情是 VLAN 接口默认打开,并且systemd-network
没有主动关闭它。
我通过创建一个触发器服务解决了这个问题,该服务在 VLAN 接口启动时运行,然后立即将其关闭。由于我的 VLAN 不受文件systemd-networkd
.network
( ActivationPolicy=manual
) 管理,因此它们保持关闭状态。
首先,创建一个辅助 .service 文件:/lib/systemd/system/[email protected]
[Unit]
Description=Interface Forced Shutdown Service
[Service]
Type=oneshot
ExecStart=ip link set %i down
[Install]
WantedBy=sys-subsystem-net-devices-%i.device
请注意,这是一个可以与任何界面一起使用的模板。
最后,对于您想要自动关闭的任何接口,启用相应的服务:
systemctl enable [email protected]
systemctl enable [email protected]
几点注意事项:
- 从技术上讲,链接可能会在几毫秒内恢复,然后再断开。这可能会或可能不会给您带来安全隐患。
- 我不能 100% 确定在
systemd-networkd
启动接口和[email protected]
关闭接口之间不存在狭窄的竞争条件(这可能导致接口保持启动状态)。