systemd-networkd 無法在具有多個 VLAN 介面的中繼埠上執行 DHCPServer
我正在嘗試配置在交換機中繼埠上執行 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。