使用dnsmasq为多网段主机分配静态IP失败的配置求助
看起来你遇到的问题是dnsmasq在配置多网段静态IP时,仅识别了第一个网段的静态租约配置,第二个网段的静态租约未被正确加载生效。我来帮你排查配置里的关键问题并给出修复方案:
核心问题分析
从你的启动日志可以看到,dnsmasq只输出了第一个网段的static leases only日志,完全没提到第二个网段,说明dnsmasq没有正确将第二个网段的静态租约关联到配置中;同时你的dhcp-host条目没有和对应的网段tag绑定,导致即使配置了tag化的路由选项,也无法正确应用到目标主机。
具体修复步骤
1. 为每个静态租约显式绑定对应网段的Tag
你已经用set:net24和set:net25为两个网段标记了Tag,但所有dhcp-host条目都没有关联这些Tag,dnsmasq无法判断这些静态主机属于哪个网段,因此不会将它们纳入第二个网段的静态租约范围。
修改你的dhcp-host条目,在末尾添加set:<tagname>:
dhcp-host=[mac 34],69.xx.yy.34,node034,set:net24 # [其他net24网段的主机都加上set:net24] dhcp-host=[mac 13],69.xx.zz.13,lsl13,set:net25 # [其他net25网段的主机都加上set:net25]
2. 确保监听接口包含两个网段的IP地址
由于两个网段属于同一个VLAN,dnsmasq所在服务器的baremetal接口必须同时配置两个网段的IP地址(比如一个主IP+一个别名IP),否则dnsmasq无法在第二个网段上接收和响应DHCP请求。
用以下命令检查接口IP配置:
ip addr show baremetal
输出中需要同时存在69.xx.yy.0/24和69.xx.zz.0/25段的IP。如果缺失,需要给接口添加别名IP,例如:
ip addr add 69.xx.zz.2/25 dev baremetal
3. 优化DHCP-Range配置(可选但推荐)
虽然你的dhcp-range格式语法正确,但显式指定网段的起始/结束IP(即使是静态租约模式)可以让dnsmasq更明确网段范围,避免识别歧义:
# 替换原来的dhcp-range配置 dhcp-range=set:net24,69.xx.yy.1,69.xx.yy.254,static,255.255.255.0,3d dhcp-range=set:net25,69.xx.zz.1,69.xx.zz.126,static,255.255.255.128,3d
4. 验证配置并重启服务
先验证配置文件是否有语法错误:
dnsmasq --test --conf-file=/path/to/your/dnsmasq.conf
如果输出dnsmasq: syntax check OK.,再重启dnsmasq服务:
systemctl restart dnsmasq
此时查看启动日志,应该会看到两个网段的静态租约日志:
Jul 31 16:43:03 [url] dnsmasq-dhcp[284686]: DHCP, static leases only on 69.xx.yy.0, lease time 3d
Jul 31 16:43:03 [url] dnsmasq-dhcp[284686]: DHCP, static leases only on 69.xx.zz.0, lease time 3d
5. 测试DHCP请求
在目标主机上执行DHCP请求测试(替换eth0为对应网卡):
dhclient -d eth0
同时可以开启dnsmasq的调试日志排查细节:
dnsmasq --log-debug --conf-file=/path/to/your/dnsmasq.conf
查看调试日志中是否有目标主机的MAC地址请求记录,以及租约分配的详细信息。
额外说明
当使用Tag+静态租约的组合时,dnsmasq依赖Tag来关联网段配置(如路由、子网掩码)和静态主机,缺失Tag会导致配置不匹配,这是多网段静态租约配置中最容易遗漏的点。
备注:内容来源于stack exchange,提问作者user1118334

