公网无法访问本地BIND9 DNS服务器解析的域名问题排查求助
首先,我一眼就发现了导致公网无法解析你的域名的核心问题——你的NS记录指向了内网IP,这是公网DNS服务器根本无法访问的!下面我一步步给你拆解问题和解决方案:
1. 核心错误:NS记录使用内网IP
在你的db.mm-it.ro配置里,ns1的A记录是10.14.14.10,这是你的局域网私有IP,公网的递归DNS服务器根本无法路由到这个地址,自然会返回“没有有效NS响应”的错误。
修复方法:
修改db.mm-it.ro里的NS记录IP为你的公网IP:
ns1 IN A 86.125.220.243
同时把区域的Serial号从6改成7(必须递增,否则BIND9不会同步更新),然后重启BIND9服务:
systemctl restart bind9
2. 检查域名注册商的NS设置
你提到在注册商那里设置了域名指向公网IP,但这里需要注意:
- 注册商的域名管理面板里,必须把域名的NS服务器设置为
ns1.mm-it.ro(如果需要冗余可以加ns2,但先搞定一个) - 确保注册商那边的NS记录已经正确关联到你的公网IP
86.125.220.243,可以通过WHOIS查询工具确认这一点。
3. BIND9配置调整
你的named.conf.options里有几个需要调整的地方:
(1)允许公网查询
当前你的allow-query只包含了86.125.220.243; localhost; localnets; 10.14.14.0/24;,但公网用户的DNS查询经过PFsense转发后,源IP是用户的公网IP(不是你的WANIP),所以需要修改为允许所有公网查询:
allow-query { any; }; allow-query-cache { localnets; localhost; }; // 缓存只对内网开放即可 allow-recursion { localnets; localhost; }; // 递归查询也只对内网开放,避免被滥用
(2)确认监听接口
确保BIND9监听了10.14.14.10的53端口,当前配置已经包含,但可以用以下命令验证:
ss -tulpn | grep named
输出里应该能看到10.14.14.10:53的监听记录。
4. PFsense端口转发规则检查
DNS协议同时使用UDP和TCP(UDP用于常规查询,TCP用于大响应包或区域传输),你必须同时转发这两个协议的53端口:
- 在PFsense的NAT规则里,创建两条规则(或者一条包含两种协议):
- 源:任何,目标:WAN接口的53端口,协议:UDP,转发到
10.14.14.10:53 - 源:任何,目标:WAN接口的53端口,协议:TCP,转发到
10.14.14.10:53
- 源:任何,目标:WAN接口的53端口,协议:UDP,转发到
- 同时确保PFsense的WAN防火墙规则允许这两个协议的53端口流量进入。
5. 测试步骤(按顺序来)
- 先在本地LAN测试:用
dig @10.14.14.10 mm-it.ro NS,确认返回的ns1记录是你的公网IP - 用公网环境的设备(比如手机开流量)测试:
dig @8.8.8.8 mm-it.ro,看看是否能返回正确的A记录 - 直接查询你的DNS服务器:
dig @86.125.220.243 mm-it.ro,如果这个返回正确结果,说明PFsense转发和BIND9配置没问题;如果返回超时,说明转发规则或防火墙有问题。
额外说明:反向解析的问题
你的db.10是内网的反向解析区域,公网的反向解析需要联系你的ISP来配置(因为公网IP段属于ISP),这个暂时不影响正向域名解析,可以先不用管,等正向解析正常后再处理。
备注:内容来源于stack exchange,提问作者Robert Murariu

