You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Debian 11中isc-dhcp-server因网络未就绪启动失败的解决方案咨询

Debian 11中isc-dhcp-server因网络未就绪启动失败的解决方案咨询

嘿,我来帮你搞定这个头疼的问题!从你贴的日志能明显看出来,核心问题就是isc-dhcp-server启动时,你的enp32s0网卡还没拿到IPv4地址,导致服务找不到可用的子网接口直接退出了。而且你之前改启动脚本加sleep被覆盖,是因为系统包更新时会重置默认脚本,得用更持久的方法来解决。下面给你几个靠谱的方案,按优先级来:

方案一:修改systemd服务依赖(最推荐,持久化不被覆盖)

Debian 11用的是systemd管理服务,直接修改服务的依赖规则,让它等网络完全就绪再启动,比加sleep靠谱多了:

  1. 先把默认的服务单元复制到自定义目录,避免系统更新覆盖:
cp /lib/systemd/system/isc-dhcp-server.service /etc/systemd/system/
  1. 编辑这个自定义的服务文件:
nano /etc/systemd/system/isc-dhcp-server.service
  1. 找到[Unit]段,把原来的After=network.target改成下面的内容(确保服务在网络完全就绪后启动):
After=network-online.target
Wants=network-online.target

如果想更精准,只等enp32s0网卡就绪,可以再加一行:

After=sys-subsystem-net-devices-enp32s0.device network-online.target
  1. 重新加载systemd配置,让修改生效:
systemctl daemon-reload
  1. 确保服务开机自启,然后重启服务器测试:
systemctl enable isc-dhcp-server
systemctl reboot

重启后用journalctl -u isc-dhcp-server查看日志,确认服务是否正常启动。

方案二:给服务添加启动前延迟(备选方案)

如果方案一因为NetworkManager的原因没生效,可以直接给服务加启动延迟,这次改systemd不会被覆盖:

  1. 同样编辑/etc/systemd/system/isc-dhcp-server.service
  2. [Service]段里添加一行(这里设置10秒延迟,你可以根据实际情况调整,比如15秒):
ExecStartPre=/bin/sleep 10
  1. 重新加载systemd配置并重启服务测试:
systemctl daemon-reload
systemctl restart isc-dhcp-server

方案三:给DHCP服务器网卡设置静态IP(关键补充)

我注意到你的/etc/network/interfaces里没配置enp32s0的IP,应该是用NetworkManager动态获取的?但DHCP服务器自身必须用静态IP啊!如果服务器自己的IP是动态获取的,启动时很可能还没拿到IP,导致DHCP服务找不到子网。建议你给enp32s0设置静态IP:

  1. 用NetworkManager命令行配置静态IP(假设你的网关是192.168.1.1,IP设为192.168.1.3,和你dhcpd.conf里的路由器地址一致):
nmcli connection modify enp32s0 \
ipv4.method manual \
ipv4.addresses 192.168.1.3/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns 8.8.8.8,8.8.4.4 \
connection.autoconnect yes
  1. 重启NetworkManager和网卡:
systemctl restart NetworkManager
nmcli connection up enp32s0

附你提供的问题相关信息:

系统版本

PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"

关键日志片段

jan 09 07:50:31 server dhcpd[632]: No subnet declaration for enp32s0 (no IPv4 addresses).
jan 09 07:50:31 server dhcpd[632]: ** Ignoring requests on enp32s0. If this is not what
jan 09 07:50:31 server dhcpd[632]: you want, please write a subnet declaration
jan 09 07:50:31 server dhcpd[632]: in your dhcpd.conf file for the network segment
jan 09 07:50:31 server dhcpd[632]: to which interface enp32s0 is attached. **
jan 09 07:50:31 server dhcpd[632]: Not configured to listen on any interfaces!
jan 09 07:50:33 server systemd[1]: Failed to start LSB: DHCP server.

网络配置文件/etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

DHCP配置文件/etc/dhcp/dhcpd.conf(关键部分)

option domain-name "server.local";
option domain-name-servers 8.8.8.8, 8.8.4.4;

default-lease-time 600;
max-lease-time 7200;

ddns-update-style none;
authoritative;

subnet 192.168.1.0 netmask 255.255.255.0 {
# — default gateway
option routers 192.168.1.3;
option subnet-mask 255.255.255.0;
option domain-name "SERVER";
# Cloudflare
option domain-name-servers 1.1.1.1, 1.0.0.1;
option time-offset -18000;
option ntp-servers 192.168.1.3;
option broadcast-address 192.168.1.255;
range 192.168.1.11 192.168.1.90;
default-lease-time 21600;
max-lease-time 43200;
# Fixed IP addresses can also be specified for hosts.
[...]

备注:内容来源于stack exchange,提问作者Anderson Silvestre

火山引擎 最新活动