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

dnsmasq读取addn-hosts配置却忽略,fallback到系统/etc/hosts问题求助

dnsmasq读取addn-hosts配置却忽略,fallback到系统/etc/hosts问题求助

看起来你遇到的问题确实有点蹊跷——明明日志显示dnsmasq已经读取了/etc/hosts.d里的文件,但解析就是不按预期走,甚至明明加了no-hosts,系统/etc/hosts还在生效。我来帮你一步步排查:

1. 先纠正addn-hosts的用法误区

你现在用addn-hosts=/etc/hosts.d指向目录,但dnsmasq的addn-hosts参数设计是用来指定单个额外hosts文件的。如果要加载整个目录下的所有hosts文件,应该改用hostsdir=/etc/hosts.d这个参数。虽然你的日志显示dnsmasq读取了目录里的文件,但这可能是dnsmasq的兼容行为,实际解析时没有正确应用这些条目。

修改/etc/NetworkManager/dnsmasq.d/00-add-hosts.conf:

log-queries
no-hosts
# 替换addn-hosts为hostsdir
hostsdir=/etc/hosts.d
address=/development/127.0.0.1

2. 确认no-hosts是否真的生效

你提到系统/etc/hosts的内容依然生效,但ps输出里启动命令确实有--no-hosts,这有点矛盾。可以做个快速测试:

  • 在/etc/hosts里临时加一条:192.168.99.99 test-no-hosts.com
  • 执行dig @127.0.0.1 test-no-hosts.com
  • 如果返回192.168.99.99,说明no-hosts没有真正生效,可能是NetworkManager的dnsmasq模块在启动时额外注入了加载/etc/hosts的配置?

这种情况下,可以尝试在00-add-hosts.conf里再加一条hostsfile=/dev/null,强制dnsmasq不加载任何默认hosts文件。

3. 直接测试dnsmasq的解析逻辑

不要用ping(ping可能会调用系统的hosts缓存或者其他解析方式),改用dig/nslookup直接指定dnsmasq的地址,确保测试的是dnsmasq本身的解析:

dig @127.0.0.1 1.example.com
nslookup 1.example.com 127.0.0.1

看看返回的IP是不是0.0.0.0。如果还是不对,查看dnsmasq的实时日志,观察它怎么处理查询:

# 先重启NetworkManager让配置生效
sudo systemctl restart NetworkManager
# 实时查看dnsmasq相关日志
journalctl -u NetworkManager -f | grep dnsmasq

然后再执行dig命令,看日志里有没有对应的查询记录,以及dnsmasq是怎么返回结果的。

4. 检查/etc/hosts.d目录和文件的权限

虽然日志显示dnsmasq读取了文件,但还是确认一下权限:dnsmasq运行在dnsmasq用户下,所以/etc/hosts.d目录和里面的文件需要让dnsmasq用户有可读权限:

sudo chmod 755 /etc/hosts.d
sudo chmod 644 /etc/hosts.d/*
sudo chown -R root:root /etc/hosts.d

(不需要改成dnsmasq用户所有,只要保证其他用户有读权限就行)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 13:30:30