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

Bind9搭建DNS服务器VPS内部正常,外部无域名NS记录求助

解决Bind9 DNS服务器外部无法查询NS记录的问题

我之前搭Bind9的时候也踩过一模一样的坑——内部ping、dig都正常,外部就是查不到域名的名称服务器,大概率是几个关键环节没配置到位,咱们一步步来排查:

1. 先确认域名注册商的NS记录配置(最关键!)

这是90%的人会漏掉的核心步骤:你在VPS上搭了自己的DNS服务器,但域名的上游注册商根本不知道这回事!

  • 登录你的域名管理后台(比如阿里云、Namecheap、GoDaddy等),找到「DNS服务器设置」或「名称服务器」选项
  • 把默认的NS记录改成你自己的DNS服务器地址,比如 ns1.yourdomain.com.ns2.yourdomain.com.(注意要加末尾的英文点)
  • 重中之重:这两个NS域名本身必须能被解析到你的VPS公网IP!也就是说你要在Bind9的区域文件里给ns1ns2配置A记录,指向你的VPS IP

2. 检查Bind9的区域文件和核心配置

确保你的Bind9配置里正确声明了NS记录,没有语法错误:

区域文件示例(比如/etc/bind/zones/db.yourdomain.com

$TTL    3600
@       IN      SOA     ns1.yourdomain.com. admin.yourdomain.com. (
                          2024052001      ; 序列号,每次修改必须递增
                          3600            ; 刷新时间(秒)
                          1800            ; 重试时间(秒)
                          604800          ; 过期时间(秒)
                          3600 )          ; 负缓存TTL(秒)
; 声明域名的名称服务器
@       IN      NS      ns1.yourdomain.com.
@       IN      NS      ns2.yourdomain.com.
; 给NS域名配置A记录,指向VPS公网IP
ns1     IN      A       你的VPS公网IP
ns2     IN      A       你的VPS公网IP
; 其他业务域名解析(比如www)
www     IN      A       你的VPS公网IP

检查named.conf.local的区域声明

确保你正确加载了上面的区域文件:

zone "yourdomain.com" {
    type master;
    file "/etc/bind/zones/db.yourdomain.com";
    allow-transfer { none; }; # 禁止未经授权的区域传输,提升安全性
};

修改配置后记得重启Bind9,并校验配置语法:

sudo systemctl restart bind9
named-checkconf # 检查全局配置语法
named-checkzone yourdomain.com /etc/bind/zones/db.yourdomain.com # 检查区域文件语法

3. 确认端口和防火墙完全开放

DNS服务依赖UDP 53和TCP 53端口,必须确保这两个端口在VPS内部防火墙服务商安全组都开放:

  • VPS内部防火墙(以ufw为例):
    sudo ufw allow 53/udp
    sudo ufw allow 53/tcp
    sudo ufw reload
    
  • 登录VPS服务商控制台(比如DigitalOcean、AWS),在安全组/防火墙规则里放行UDP 53和TCP 53端口,允许所有IP访问

可以从外部用nc命令测试端口连通性:

nc -zv 你的VPS公网IP 53

如果连接失败,说明端口没开,优先排查服务商安全组(很多人会忽略这个)。

4. 排查DNS缓存问题

外部DNS服务器可能缓存了旧的NS记录,你可以用公共DNS直接查询验证:

dig @8.8.8.8 yourdomain.com NS # 用谷歌DNS查询
dig @1.1.1.1 yourdomain.com NS # 用Cloudflare DNS查询

如果还是没有返回你的NS记录,要么是注册商的配置还没生效(一般需要1-24小时,取决于TTL设置),要么就是前面的步骤还有遗漏。

补充:基于你提供的信息的额外排查点

你提到内部dig正常、外部无NS记录,还可以补充检查:

  • dig @localhost yourdomain.com NS的内部输出贴出来,确认Bind9确实正确返回了NS记录
  • 外部dig yourdomain.com NS的输出里如果显示「SERVFAIL」,大概率是端口没开或Bind9配置有误
  • /etc/hosts的配置只影响VPS本身的解析,不会影响外部,不用过度关注
  • Nginx配置和DNS解析无关,除非你做了反向代理,但当前问题核心在DNS层面

内容的提问来源于stack exchange,提问作者Hosein

火山引擎 最新活动