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的情况:
- 直接把笔记本插LAN2,无法获取预设的10.42.42.2地址
- 必须先给笔记本设固定IP,登录路由器执行
systemctl restart isc-dhcp-server - 再把笔记本改回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
相关产品推荐
相关产品推荐

