Arch-Linux

Arch Linux dhcpd 不會在啟動時啟動 - 找不到子網聲明

  • August 17, 2016

我想在 Arch Linux 上執行 DHCP 伺服器,但我遇到了問題。我在啟動 dhcpd 時遇到問題。sudo systemctl start dhcpd@eth0.service當我登錄後手動執行時,它會開始正常。

我正在執行最新版本的 Arch Linux (4.7.0-1),並且我已經按照 Arch 網路 wiki 進行了設置。

我的設置

  • dhcpcd 被禁用
  • 我使用 systemd-networkd 做靜態 ip(已啟用),配置為 ( /etc/systemd/network/wired.network):
[Match]
Name=eth0

[Network]
Address=10.0.0.2/24
Gateway=10.0.0.1
  • /etc/dhcpd.conf的很簡單:
option domain-name-servers 10.0.0.2;   
option subnet-mask 255.255.255.0;   
option routers 10.0.0.0.1;   
subnet 10.0.0.0 netmask 255.255.255.0 {
    range 10.0.0.5 10.0.0.50;   
}
* 我創建了我的 systemd 服務文件 ( `/etc/systemd/system/dhcpd4@.service`) 並啟用它`systemctl enable dhcpd4@eth0.service`:

[Unit] Description=IPv4 DHCP server on %I Wants=network.target After=network-pre.target Before=network.target

[Service] Type=forking PIDFile=/run/dhcpd4.pid ExecStart=/usr/bin/dhcpd -4 -q -pf /run/dhcpd4.pid %I KillSignal=SIGINT

[Install] WantedBy=multi-user.target



當我重新啟動時,我在啟動時收到一條錯誤消息(當我執行時`journalctl -xe`):

No subnet declaration for eth0 (no IPv4 addresses). ** Ignoring requests on eth0….


然後,當我執行`systemctl start dhcpd4@eth0.service`時,一切都執行良好,沒有問題。


我做了很多Google搜尋,但沒有找到解決這個問題的方法。我已經嘗試將文件( 和 )調整`dhcpd.conf`為`dhcpd4@.service`硬`wired.network`編碼介面,添加額外的 DHCP 聲明,改變 Unit Want 等等等;但似乎沒有任何效果。

我找到了問題的答案!問題是啟動過程正在嘗試在網路啟動/配置時啟動 DHCP 服務,因此 DHCP 找不到要綁定的工作介面。這就是為什麼當我手動執行啟動 dhcpd 服務並且在啟動時無法正常工作時它總是有效的原因。

我從這篇文章中找到了答案的線索:dhcp on arch linux - rasp-pi。使用者在單元文件中使用了重新啟動聲明,這使得服務每 6 秒重試一次,直到服務啟動。- 這個臨時解決方案也對我有用。

我在特殊目標頁面上的 systemd 網站上進行了探勘,並在網路啟動後找到了這個執行服務的連結。根據此頁面的建議,我進行了以下調整:

  • 在 dhcpd4@.service 單元文件中,我刪除了Before=...,更改AfterAfter=network-online.target並更改WantsWants=network-online.target
  • 我還啟用了systemd-networkd-wait-online.service開機啟動。

它現在可以在啟動時使用!但是,推薦頁面確實說啟用systemd-networkd-wait-online.service確實會減慢您的啟動時間,並且可以減少 90 秒(如果我沒看錯的話)。雖然我只注意到在我的情況下啟動時間增加了大約 1 或 2 秒。

您是否試圖將 dhcpd 限制為僅 eth0?如果沒有,您可以簡單地使用標準的 systemd 服務文件dhcpd4.service

如果你是,也許嘗試改變

After=network-pre.target
Before=network.target

After=network.target

這也在標準 dhcpd4.service中指定。似乎 dhcpd 需要一個活動介面 - 如果它之前 network.target啟動則無法保證。

引用自:https://unix.stackexchange.com/questions/303599