You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.04LTS路由器isc-dhcp-server接口无子网声明及热插拔DHCP失效问题求助

Ubuntu 22.04LTS路由器isc-dhcp-server接口无子网声明及热插拔DHCP失效问题求助

大家好,我正在基于Ubuntu 22.04LTS搭建家用路由器,用的是isc-dhcp-server、nftables和NetworkManager,但遇到了奇怪的DHCP问题,想请教下各位:

TL;DR:我用Nano Pi R6S做路由器,配置了两个LAN网段,但isc-dhcp-server只有在对应网口插线后重启服务才能正常工作,热插拔设备时无法自动分配IP,必须手动临时设固定IP再重启DHCP服务才行。

我的Nano Pi R6S有三个以太网接口:

  • enP3p49s0:WAN口,连接ISP路由器,通过ISP端的MAC地址保留获取固定IP 192.168.0.22
  • enP4p65s0:LAN1口,后续接管理交换机,配置静态IP 10.42.0.1/24
  • eth0:LAN2口,专门用于SSH管理路由器,配置静态IP 10.42.42.1/30(已做DHCP MAC地址保留)

对应的Netplan配置文件如下:

# /etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    enP3p49s0:
      dhcp4: true
    enP4p65s0:
      addresses:
        - 10.42.0.1/24
      dhcp4: false
    eth0:
      addresses:
        - 10.42.42.1/30
      dhcp4: false

DHCP服务器配置文件是这样的:

# /etc/dhcp/dhcpd.conf
default-lease-time 86400;
max-lease-time 604800;
authoritative;

# Configuration for LAN1 (Home network)
subnet 10.42.0.0 netmask 255.255.255.0 {
  option routers          10.42.0.1;
  option subnet-mask      255.255.255.0;
  option domain-name-servers 8.8.8.8, 8.8.4.4;
  range 10.42.0.100 10.42.0.200;
}

# Configuration for LAN2 (Router Management)
subnet 10.42.42.0 netmask 255.255.255.252 {
  host novoo_adapter {
    hardware ethernet XX:XX:XX:XX:XX:XX;
    fixed-address 10.42.42.2;
  }
  option routers 10.42.42.1;
  option domain-name-servers 8.8.8.8, 8.8.4.4;
}

问题现象

DHCP只有在对应网口插线后重启服务才能正常工作,比如LAN2的情况:

  1. 直接把笔记本插LAN2,无法获取预设的10.42.42.2地址
  2. 必须先给笔记本设固定IP,登录路由器执行systemctl restart isc-dhcp-server
  3. 再把笔记本改回DHCP模式,才能正常获取IP

查看日志发现,插线前DHCP服务启动时会报错:

$ sudo journalctl -u isc-dhcp-server
...
Jul 17 19:06:15 nanopi-r6s dhcpd[18158]: No subnet declaration for eth0 (no IPv4 addresses).
Jul 17 19:06:15 nanopi-r6s dhcpd[18158]: ** Ignoring requests on eth0.  If this is not what
Jul 17 19:06:15 nanopi-r6s dhcpd[18158]:    you want, please write a subnet declaration
Jul 17 19:06:15 nanopi-r6s dhcpd[18158]:    in your dhcpd.conf file for the network segment
Jul 17 19:06:15 nanopi-r6s dhcpd[18158]:    to which interface eth0 is attached. **
...

重启DHCP服务后,这个报错会转移到未插线的LAN1口,同时LAN2的DHCP开始正常工作:

$ sudo journalctl -u isc-dhcp-server
...
Jul 17 19:15:28 nanopi-r6s dhcpd[18602]: No subnet declaration for enP4p65s0 (no IPv4 addresses).
Jul 17 19:15:28 nanopi-r6s dhcpd[18602]: ** Ignoring requests on enP4p65s0.  If this is not what
Jul 17 19:15:28 nanopi-r6s dhcpd[18602]:    you want, please write a subnet declaration
Jul 17 19:15:28 nanopi-r6s dhcpd[18602]:    in your dhcpd.conf file for the network segment
Jul 17 19:15:28 nanopi-r6s dhcpd[18602]:    to which interface enP4p65s0 is attached. **
...
Jul 17 18:45:59 nanopi-r6s dhcpd[13237]: DHCPDISCOVER from XX:XX:XX:XX:XX:XX via eth0
Jul 17 18:45:59 nanopi-r6s dhcpd[13237]: DHCPOFFER on 10.42.42.2 to XX:XX:XX:XX:XX:XX via eth0
Jul 17 18:46:00 nanopi-r6s dhcpd[13237]: DHCPREQUEST for 10.42.42.2 (10.42.42.1) from 94:05:bb:11:ae:49 via eth0
Jul 17 18:46:00 nanopi-r6s dhcpd[13237]: DHCPACK on 10.42.42.2 to XX:XX:XX:XX:XX:XX via eth0
...

另外我发现,NetworkManager只有在网口插线后才会分配静态IP(这是预期行为吗?):

# eth0插线后的ip addr输出
$ ip addr
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
inet 10.42.42.1/30 brd 10.42.42.3 scope global noprefixroute eth0
valid_lft forever preferred_lft forever

3: enP4p65s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff permaddr XX:XX:XX:XX:XX:XX
...

我的推测

  • isc-dhcp-server需要接口已分配IP才能正常监听该接口
  • NetworkManager只有在网口有连接时才会分配静态IP
  • 插线后接口获取了IP,但isc-dhcp-server不会自动识别这个变化,必须重启服务才能生效

我希望实现的是:热插拔设备到LAN2时,不用手动设固定IP就能直接获取预留的地址;LAN1后续接交换机后,设备也能正常自动获取DHCP地址。

有没有大佬能帮忙分析下问题出在哪,怎么解决呢?

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 08:27:57