You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

CentOS 7下DNSMasq配置后dig查询无应答区域且返回NXDOMAIN问题排查

CentOS 7下DNSMasq配置后dig查询无应答区域且返回NXDOMAIN问题排查

我仔细看了你的配置和命令输出,问题的核心很明确:你的系统当前并没有使用本地运行的dnsmasq服务来做DNS查询,而是直接走了公共DNS(8.8.8.8),所以自然查不到你本地hosts里配置的域名。

先给你拆解下问题点:

  1. 你的dnsmasq监听在5353端口(从dnsmasq.confport=5353可以看到),但系统默认的DNS查询端口是53,所以你直接运行dignslookup时,会用resolv.conf里的DNS服务器(最后是8.8.8.8),根本没请求本地的dnsmasq。
  2. 虽然resolv.conf里写了nameserver 127.0.0.1,但因为dnsmasq不在53端口监听,这个配置相当于无效,系统连不上本地的DNS服务,就会自动往下用后面的8.8.8.8。
  3. ping能通是因为ping优先读取本地hosts文件,和DNS服务无关,这就是为啥ping正常但DNS查询失败。

下面是一步步的解决方法:

第一步:先验证dnsmasq本身的配置是否正常

先确认dnsmasq能正确解析你的本地域名,运行这条命令:

dig @127.0.0.1 -p 5353 ns.mallet.lan

如果返回结果里有ANSWER SECTION,显示192.168.1.100,说明dnsmasq的配置本身没问题,只是系统没把它作为默认DNS。

第二步:让dnsmasq监听默认的53端口

系统默认DNS查询都是走53端口,把dnsmasq改回这个端口会省很多事:

  1. 编辑/etc/dnsmasq.conf,把port=5353改成port=53(或者直接注释掉这行,因为默认就是53)。
  2. 检查53端口是否被其他服务占用,比如bind、systemd-resolved:
ss -tulpn | grep :53

如果有其他服务在占用,先停止它们(比如systemctl stop namedsystemctl stop systemd-resolved),再重启dnsmasq:

systemctl restart dnsmasq

第三步:确保系统默认DNS指向本地dnsmasq

CentOS 7的NetworkManager会自动覆盖/etc/resolv.conf,所以需要先禁用这个行为:

  1. 编辑/etc/NetworkManager/NetworkManager.conf,在[main]节添加一行:
dns=none
  1. 重启NetworkManager生效:
systemctl restart NetworkManager
  1. 手动修改/etc/resolv.conf,让它优先查询本地dnsmasq,同时把你的本地域名加入搜索域:
nameserver 127.0.0.1
nameserver 192.168.0.1
nameserver 8.8.8.8
search mallet.lan home

第四步:验证修复效果

现在运行dig ns.mallet.lan,你应该能看到:

  • SERVER字段显示127.0.0.1#53
  • ANSWER SECTION里返回192.168.1.100
    同时nslookup ns.mallet.lan也会正确返回IP地址。

另外补充两个注意点:

  • 如果需要让局域网内其他机器也能用这个dnsmasq服务,记得开放防火墙的53端口:
firewall-cmd --add-service=dns --permanent
firewall-cmd --reload
  • 你的dnsmasq配置里有strict-order,它会让dnsmasq严格按照resolv.conf里的顺序查询上游DNS,保持127.0.0.1在resolv.conf第一位就没问题。

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

火山引擎 最新活动