Routing

systemd-networkd 無法在具有多個 VLAN 介面的中繼埠上執行 DHCPServer

  • August 23, 2018

我正在嘗試配置在交換機中繼埠上執行 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 and direct routes中的建議,我添加了以下內容:

[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。

這似乎按預期工作。註釋掉 VLAN 標識符並重新啟動網路時,不會刪除已配置的介面(現在已註釋掉)。無頭工作不可能關閉介面、編輯然後將其恢復,所以我只是根據需要手動刪除過時的 VLAN。

引用自:https://serverfault.com/questions/926853