我正在尝试配置在交换机中继端口上运行 systemd-networkd 的 Linux 主机。该主机有一个接口 enp4s0。交换机中只有几个 VLAN 端口,其他端口未标记。我想在中继端口上添加 DHCP 服务器。
我的具有新 DHCP 服务器设置的配置文件如下所示。
[Match]
Name=enp4s0
[Network]
DHCPServer=true
VLAN=enp4s0.10
VLAN=enp4s0.20
VLAN=enp4s0.30
DNS=192.168.1.1
Gateway=192.168.1.1
Address=192.168.1.2/24
[DHCPServer]
PoolOffset=100
PoolSize=150
DefaultLeaseTimeSec=300s
此组合失败并出现以下错误:
systemd-networkd[]: enp4s0: Could not start DHCPv4 server instance: Device or resource busy
systemd-networkd[]: enp4s0: Failed
运行route -n
将显示除默认网关之外的所有路由。按照以下建议操作:systemd-networkd 和直接路由,我添加了以下内容:
[Address]
Address=192.168.1.2/24
Peer=192.168.1.1/32
这样 DHCP 服务器就可以启动,接口就可以启动,网关的路由也会出现。一切似乎都正常。但是,DHCP 服务器从未响应查询。使用时,tcpdump
我可以看到查询进来,但服务器没有响应。
然后,我添加了一个到 255.255.255.255 的链路级路由,但这不起作用(我在手动测试时认为它起作用了,但我无法重现它)。我添加的部分是:
[Route]
Destination=255.255.255.255/32
Scope=link
回到原始配置但注释掉两个 VLAN 也有效。使用以下配置,网络启动,VLAN ... 实际上,所有 3 个 VLAN 接口都启动 (?!) ... 并且 DHCPServer 响应查询。
[Match]
Name=enp4s0
[Network]
DHCPServer=true
VLAN=enp4s0.10
#VLAN=enp4s0.20
#VLAN=enp4s0.30
DNS=192.168.1.1
Gateway=192.168.1.1
Address=192.168.1.2/24
[DHCPServer]
PoolOffset=100
PoolSize=150
DefaultLeaseTimeSec=300s
我需要使用出现但被注释掉的 VLAN 来测试上述配置,但目前无法这样做。最后,恢复到没有 DHCP 但运行外部 DHCP 服务器的配置可以正常工作。也就是说,使用以下命令独立运行 udhcpd:
[Match]
Name=enp4s0
[Network]
VLAN=enp4s0.10
VLAN=enp4s0.20
VLAN=enp4s0.30
DNS=192.168.1.1
Gateway=192.168.1.1
Address=192.168.1.2/24
我担心有些基本的东西我没理解,导致我无法说这是 systemd-networkd 的一个错误。有人能实现这个方案吗?我使用的是 systemd-237。
答案1
这似乎按预期工作。注释掉 VLAN 标识符并重新启动网络时,已配置的接口(现在已注释掉)不会被删除。在无头模式下工作时,无法关闭接口、进行编辑,然后将其恢复,因此我只是根据需要手动删除过时的 VLAN。