工控机配置dhcp server,绑定指定网口,不报错服务不重启、开机自启、不插网线也能用的 dhcp 完整配置
工控机内置DHCP Server,绑定指定网口,插入指定网口后为接入机器自动分配IP,像路由器一样访问管理节点,实现开机自启、不插网线也能用服务器不会一直重启。下面以Ubuntu系统为例,进行配置
一、安装服务
sudo apt-get update
sudo apt-get install isc-dhcp-server -y
二、配置网卡
1. 指定网卡eth1配置固定IP(使用 systemd-networkd 配置)
- 创建文件
#创建文件
sudo vim /etc/systemd/network/10-eth1-static.network
- 编辑内容如下:
[Match]
Name=eth1
[Network]
# 配置静态 IP
Address=192.168.10.1/24
# 不需要网关,因为是局域网服务端
# Gateway=...
# DNS=...
# 关键配置:即使没有检测到载波(没插网线),也认为接口是“就绪”的
# 这能防止系统等待网络连接超时而导致启动慢或服务启动失败
LinkLocalAddressing=no
ConfigureWithoutCarrier=yes
# 关闭 IPv6 (可选,根据你的需求)
IPv6AcceptRA=no
IPv6LinkLocalAddressGenerationMode=none
# 新增:确保即使被其他管理器短暂接管,也强制管理
[Link]
Unmanaged=no
2. NetworkManage不再管理网卡eth1
告诉 NetworkManager 不要尝试管理 eth1,把它留给 systemd-networkd。这样可以消除 sys-iface-state: 'external' 的警告日志,避免两者冲突。
- 编辑配置文件
sudo vim /etc/NetworkManager/NetworkManager.conf
- 配置内容如下:
[keyfile]
# 让 NetworkManager 忽略 eth1 接口
unmanaged-devices=interface-name:eth1
3. 重启网络服务并验证
- 重启服务
# 重启 networkd 以应用新 IP
sudo systemctl restart systemd-networkd
# 重启 NM 以应用忽略规则
sudo systemctl restart NetworkManager
- 验证 IP (关键步骤):
拔掉 eth1 的网线(确保物理断开),然后运行:
ip addr show eth1
预期结果:
你应该能看到类似如下输出(重点是有 inet 192.168.10.1/24):
6: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 192.168.10.1/24 brd 192.168.10.255 scope global eth1
valid_lft forever preferred_lft forever
注意:这一步很关键,isc-dhcp-server 要求网卡必须正常,不然会一直启动失败,反复重启,这个配置是保障在不插入网线的情况,网卡eth1仍然可以启动,并且分配有固定IP
三、配置DHCP服务
1. 绑定指定的网卡eth1
- 编辑配置文件
sudo vim /etc/default/isc-dhcp-server
- 配置内容如下:
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="eth1"
INTERFACESv6=""
2. 编辑主配置文件
- 编辑配置文件
sudo vim /etc/dhcp/dhcpd.conf
- 编辑内容如下
subnet 192.168.10.0 netmask 255.255.255.0 {
option routers 192.168.10.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.10.255;
option interface-mtu 1500;
range 192.168.10.100 192.168.10.200;
}
- 测试配置
sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf
3. 配置开启启动
- 编辑systemd配置
# 编辑systemd配置文件,会自动创建文件/etc/systemd/system/isc-dhcp-server.service.d/override.conf
sudo systemctl edit isc-dhcp-server
- 输入以下内容
[Unit]
# 清空依赖防止,等待网络接入的情况
After=
Wants=
# 强制DHCP在网络完全就绪后启动
After=systemd-networkd.service
Wants=systemd-networkd.service
After=local-fs.target
[Service]
# 启动前延迟3秒(适配工控机启动慢)
ExecStartPre=/bin/sleep 3
# 启动失败自动重试(最多5次,间隔3秒)
Restart=on-failure
RestartSec=5
StartLimitBurst=3
# 允许网卡无载波时启动
TimeoutStartSec=30
User=root
Group=root
- 重载并重启服务
sudo systemctl daemon-reload
sudo systemctl restart isc-dhcp-server
4. 重启系统2分钟后isc-dhcp-server才启动成功问题解决
- 原因分析
因为你之前的配置虽然写了 After=systemd-networkd.service,但没有清除原服务文件中可能存在的 After=systemd-networkd-wait-online.service。Systemd 会把它们合并,导致只要有一个依赖没满足(wait-online 在等网线),DHCP 就得等着。现在的配置通过 After= 清空列表,彻底解决了这个问题。
- 确认 wait-online 服务已正确配置忽略 eth1
虽然我们现在不依赖它了,但为了系统整体启动速度,还是建议保持之前的配置,防止其他服务被卡住。
# 确认配置存在
cat /etc/systemd/system/systemd-networkd-wait-online.service.d/override.conf
确保内容包含 --ignore-interface=eth1。如果没有,请执行:
sudo mkdir -p /etc/systemd/system/systemd-networkd-wait-online.service.d
sudo tee /etc/systemd/system/systemd-networkd-wait-online.service.d/override.conf > /dev/null <<EOF
[Service]
ExecStart=
ExecStart=/lib/systemd/systemd-networkd-wait-online --ignore-interface=eth1 --timeout=30
EOF
- 重载并验证
# 1. 重载配置
sudo systemctl daemon-reload
# 2. 重置失败状态(如果有)
sudo systemctl reset-failed isc-dhcp-server
# 3. 测试重启服务(这次应该秒回,不会卡住)
time sudo systemctl restart isc-dhcp-server
# 观察 time 输出的时间,应该是 5-6 秒左右(sleep 5 + 启动时间),绝不再是 2 分钟
# 4. 检查状态
systemctl status isc-dhcp-server
- 最终重启测试
sudo reboot
本文来自博客园,作者:敬code,转载请注明原文链接:https://www.cnblogs.com/dacode/p/19727807

浙公网安备 33010602011771号