如何将dnsmasq配置为家庭网络中的子域权威服务器,同时支持其他域名的递归解析
如何将dnsmasq配置为家庭网络中的子域权威服务器,同时支持其他域名的递归解析
当然可以做到!我帮你调整一下配置,解决你遇到的非home.mydomain.com域名被拒绝的问题。
你当前的配置里,no-resolv参数和auth-zone的组合限制了递归查询的转发,这正是导致非权威域请求返回REFUSED的核心原因。下面是修正后的完整配置,以及每个参数的作用说明:
修正后的dnsmasq.conf配置
log-queries # 指定上游公共DNS服务器,用于递归解析非权威域 server=8.8.8.8 server=8.8.4.4 # 声明home.mydomain.com为权威域,仅允许192.168.1.0/24子网的主机查询 auth-zone=home.mydomain.com,192.168.1.0/24 # 指定权威域的NS记录指向你的dnsmasq服务器IP auth-server=home.mydomain.com,192.168.1.50 # 添加子域主机记录,把server.home.mydomain.com映射到服务器IP host-record=server.home.mydomain.com,192.168.1.50 # 可选:如果有其他家庭服务需要解析,继续添加host-record # host-record=service.home.mydomain.com,192.168.1.60
关键配置说明
- 去掉了
no-resolv:这个参数会强制dnsmasq忽略所有上游DNS配置(包括你指定的8.8.8.8等),移除它之后,dnsmasq才能正常使用公共DNS处理非权威域的递归查询。 auth-zone:明确home.mydomain.com是你的权威管理域,同时限制只有家庭子网内的设备能查询这个域的权威记录,既符合需求也提升了安全性。auth-server:为你的权威域指定NS(域名服务器)记录,确保dnsmasq返回的home.mydomain.com相关响应是标准的权威应答。log-queries:保留这个参数方便你排查问题,通过日志可以清楚看到每个DNS请求的处理结果。
测试配置
配置完成后,记得重启dnsmasq服务生效:
sudo systemctl restart dnsmasq
然后用两个测试验证功能:
- 测试权威域解析:执行
nslookup server.home.mydomain.com 192.168.1.50,应该返回192.168.1.50,且响应标记为权威。 - 测试递归解析:执行
nslookup www.google.com 192.168.1.50,应该正常返回谷歌的IP地址,不会再出现REFUSED错误。
额外注意事项
- 确保你的服务器防火墙允许53端口的UDP和TCP流量(DNS默认用UDP,大响应会用TCP),否则客户端可能连不上你的DNS服务器。
- 如果需要添加更多家庭设备的域名解析,直接继续添加
host-record条目即可,格式和示例一致。
备注:内容来源于stack exchange,提问作者SofaKng
相关产品推荐
相关产品推荐

