我从 dnsmasq 获取的所有 DHCPOFFER 都有 2 分钟的 IP 租用时间,并且它会忽略更改它的选项。
更多细节:
我的网络上有两个路由器:
- AVM FritzBox 7390 (192.168.0.1)
- VDSL2 调制解调器
- DECT 电话底座
- 实际路由到互联网
- Netgear R7000(运行 FreshTomato 固件,192.168.0.2)
- WiFi 接入点
- DHCP 服务器
我的内部 DNS 是在我的服务器上的 Docker 容器中运行的 Pi-Hole。(192.168.0.100)
FreshTomato 带来的 DHCP 服务器是一个 dnsmasq,我需要它告诉新客户端以下配置:
- IP 在 192.168.0.50 - ...80 范围内
- IP 租赁时间~1 天
- 路由器是 FritzBox (192.168.0.1)
- DNS 服务器是 Pi-Hole (192.168.0.100) 或 FritzBox (192.168.0.1)
所以我将所有这些信息放入 R7000 的 UI 中,当我保存配置时,会生成以下 dnsmasq 配置文件:
pid-file=/var/run/dnsmasq.pid
resolv-file=/etc/resolv.dnsmasq
addn-hosts=/etc/dnsmasq
dhcp-hostsfile=/etc/dnsmasq
expand-hosts
min-port=4096
interface=br0
dhcp-range=tag:br0,192.168.0.50,192.168.0.80,255.255.255.0,1440m
dhcp-option=tag:br0,3,192.168.0.1
dhcp-lease-max=255
dhcp-authoritative
log-queries
dhcp-option=6,192.168.0.100,192.168.0.1
当我使用这个简洁的 nmap 脚本测试 DHCP 配置时,它对我来说看起来是有效的:
nmap --script broadcast-dhcp-disccover
我得到以下答案:
| broadcast-dhcp-discover:
| Response 1 of 1:
| IP Offered: 192.168.0.71
| DHCP Message Type: DHCPOFFER
| Server Identifier: 192.168.0.2
| IP Address Lease Time: 2m00s
| Renewal Time Value: 1m00s
| Rebinding Time Value: 1m45s
| Subnet Mask: 255.255.255.0
| Broadcast Address: 192.168.0.255
| Domain Name Server: 192.168.0.100, 192.168.0.1
|_ Router: 192.168.0.1
除了 IP 租约时间只有 2 分钟外,其他一切都正确。我网络中的某些设备(3 部智能手机和 2 台 Android 平板电脑)不喜欢这么短的租约时间,并且每分钟都会断开 WiFi 连接。
有人知道我做错了什么吗?
有趣的事实:我刚刚刷入了 FreshTomato,在此之前我使用了 DD-WRT,它与 dnsmasq 有完全相同的问题。
经过几次测试后进行编辑
我为 dnsmasq 创建了一个小型测试环境来测试一些配置:
- 运行 dnsmasq 的 Docker 容器
- 第二个容器循环运行该 nmap 脚本
我发现的是:当我在行中指定租用时间时dhcp-range
,它会被忽略。
我发现可以直接通过 IANA 分配的标签来设置 DHCP 选项(https://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-parameters.xml)
当我设置 DHCP 租用时间时,dhcp-option=51,48h
租用时间会改变,但续订和重新绑定时间不会改变。
将它们与标签 58 和 59 一起设置
dhcp-option=58,24h # DHCP Renewal (T1) Time
dhcp-option=59,42h # DHCP Rebinding (T2) Time
没有帮助,因为我得到的结果是:
IP Address Lease Time: 2d00h00m00s
Renewal Time Value: 1m00s
Rebinding Time Value: 1m45s
答案1
您确定 dnsmasq 已获取更改吗?我有时会遇到守护进程无法正确重启的问题。尝试重启路由器,看看配置更改是否真的以这种方式获取。如果您不想重启,只需重启 dnsmasq 并在重启后检查它是否有新的 PID。
顺便问一下,您是否考虑过这种可能性:您的 DHCP 服务器确实响应正确,但 nmap 脚本存在错误?我刚刚在 LAN 中运行了该命令,得到了相同的响应。当我检查系统日志时,我能够验证租约确实更长。