Arch Linux dhcpd 不会在启动时启动 - 找不到子网声明

Arch Linux dhcpd 不会在启动时启动 - 找不到子网声明

我想要在 Arch Linux 上运行 DHCP 服务器,但我遇到了问题。我在启动 dhcpd 时遇到问题。当我登录后手动运行时,它将正常启动。sudo systemctl start [email protected]

我正在运行最新版本的 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/[email protected]systemctl enable [email protected]

    [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 [email protected]

我已经进行了大量的谷歌搜索,但没有找到解决这个问题的方法。我尝试将文件(dhcpd.conf[email protected]wired.network)调整为硬编码接口、添加额外的 DHCP 声明、更改单元需求等;但似乎没有任何作用。

答案1

您是否尝试将 dhcpd 限制为仅 eth0?如果没有,您可以简单地使用标准的 systemd 服务文件dhcpd4.service

如果是的话,也许可以尝试改变

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

After=network.target

这也规定在标准 dhcpd4.service。看来 dhcpd 需要一个活动接口 - 如果启动则无法保证 network.target

答案2

我找到了问题的答案!问题在于,启动过程在网络启动/配置时尝试启动 DHCP 服务,因此 DHCP 无法找到要绑定的工作接口。这就是为什么当我手动运行启动 dhcpd 服务时它总是有效但在启动时不起作用的原因。

我从这篇文章中找到了答案的线索:arch linux 上的 dhcp - rasp-pi。用户在单元文件中使用了重新启动声明,这使得服务每 6 秒重试一次,直到服务启动。 - 这个临时解决方案也对我有用。

我在 systemd 网站上进行了挖掘特殊目标页面并找到此链接网络通后运行服务。根据本页的建议,我做了以下调整:

  • 在里面[电子邮件受保护]单元文件我删除了Before=...,更改AfterAfter=network-online.target并更改WantsWants=network-online.target
  • 我还启用了systemd-networkd-wait-online.service开机启动。

现在它可以在启动时运行!然而,建议页面确实说启用systemd-networkd-wait-online.service确实会减慢启动时间,并且可以缩短 90 秒(如果我没看错的话)。尽管我只注意到在我的情况下启动时间增加了大约 1 或 2 秒。

相关内容