总结:我打算使用isc-dhcp-server
、nftables
&为我的家庭网络配置我自己的基于 Ubuntu 22.04LTS 的路由器NetworkManager
。我遇到了奇怪的 DHCP 行为。
我正在使用具有 3 个以太网接口的 Nano Pi R6S:
enP3p49s0
:(连接到我的 ISP 路由器 - duh)- 路由器通过 ISP 路由器上配置的 DHCP MAC 地址保留WAN
分配 IP192.168.0.22
enP4p65s0
:(LAN1
将连接到路上的托管交换机)-10.42.0.1/24
eth0
:(LAN2
保留用于通过 SSH 和 DHCP MAC 地址保留管理路由器)-10.42.42.1/30
因此,我将有两个本地网络,定义如下:
# /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 似乎会按预期运行仅有的如果我在相关的以太网端口上插入什么东西和我重新启动了isc-dhcp-server
。
例如,目前,如果我插入 LAN2,10.42.42.2
尽管使用了具有正确 MAC 地址的正确以太网卡,但我不会获得预期的地址。我必须:
- 将电缆插入 LAN2
- 将 IP 设置为客户端(我的笔记本电脑)上的固定 IP
systemctl restart isc-dhcp-server
通过服务器上的DHCP 重新启动- 在客户端上将 IP 重新设置为 DHCP
- 然后我终于有了一个 DHCP 属性的 IP
我在 1. 之前就注意到了以下几点:
$ 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. **
...
此提及在步骤 3 之后消失。(然后我收到有关 的相同警告eth0
):
$ sudo journalctl -u isc-dhcp-server
...
Jul 17 19:15:28 nanopi-r6s dhcpd[18602]: No subnet declaration for enP4p65s0 (no IPv4 add>
Jul 17 19:15:28 nanopi-r6s dhcpd[18602]: ** Ignoring requests on enP4p65s0. If this is n>
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 segme>
Jul 17 19:15:28 nanopi-r6s dhcpd[18602]: to which interface enP4p65s0 is attached. **
Jul 17 19:06:15 nanopi-r6s dhcpd[18158]:
Jul 17 19:06:15 nanopi-r6s dhcpd[18158]: Sending on Socket/fallback/fallback-net
Jul 17 19:06:15 nanopi-r6s dhcpd[18158]: Server starting service.
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如果已插入电缆(这是预期的行为吗?):
# here with a cable plugged in eth0
$ 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 的接口来工作- 仅当电缆插入相关端口时才分配 IP
- 插入电缆确实会导致 IP 分配
- 但 DHCP 服务无法识别已分配的 IP(以及子网声明)
- 仅通过重新启动 DHCP 服务即可解决此问题
我希望能够将我的笔记本电脑热插拔到 LAN2 进行管理,而无需固定分配 IP(这违背了 DHCP MAC 地址保留的整个目的),对于我未来的家庭网络,LAN1 也是如此。
请问有什么想法吗?
注意:MAC 地址已被扰乱
答案1
ISC DHCPD 需要接口具有地址,因为这是将声明的子网与接口关联的唯一方法。如果它要监听所有接口,它会忽略接口。将接口名称放入 dhcpd 启动选项中可以帮助它跟踪其状态(不明显)。
众所周知,当没有链接时,NetworkManager 会关闭逻辑接口,但您可以覆盖此行为。尝试创建如下文件
/usr/lib/NetworkManager/conf.d/00-server.conf
:[主要的]
无自动默认=enP4p65s0
忽略运营商=enP4p65s0