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

Ubuntu 16.04.3 DNS解析故障求助:自建DNS服务器无法外网访问

排查DNS服务器全球访问问题的实用建议

嘿,作为刚上手Ubuntu和DNS搭建的新手,遇到本地能正常解析但外部连不上的问题太正常了,咱们一步步揪出可能遗漏的配置:

  • 先检查VPS系统防火墙的端口放行
    DNS服务默认依赖UDP 53端口(区域传输等场景会用到TCP 53),如果你的防火墙只开放了本地访问,外部请求根本进不来。
    要是用的是Ubuntu自带的ufw,先执行sudo ufw status看看当前规则,如果没看到53端口的允许项,赶紧补上:

    sudo ufw allow 53/udp
    sudo ufw allow 53/tcp
    sudo ufw reload
    

    要是用的是iptables,记得添加对应的ACCEPT规则,别只给127.0.0.1开权限。

  • 别漏了VPS服务商的安全组/防火墙
    很多VPS厂商都有自己的外层安全组,哪怕你系统里开了端口,服务商那边没放行的话,外部还是连不上。登录你的VPS管理后台,找到安全组配置页面,确保UDP 53和TCP 53端口对所有IP(或者你测试用的IP)开放。

  • 确认DNS服务的监听地址
    你的DNS服务(比如Bind9)可能只监听了localhost(127.0.0.1),这样外部请求根本触达不到服务。打开Bind的主配置文件(一般是/etc/bind/named.conf.options),找到listen-on和listen-on-v6的配置项,改成监听公网IP或者所有地址:

    listen-on { any; };
    listen-on-v6 { any; };
    

    改完重启服务:sudo systemctl restart named,然后用ss -tulpn | grep named检查一下,确保服务在公网IP的53端口上监听着。

  • 必须配置Glue记录(胶水记录)
    因为你的ns1.example.com和ns2.example.com都是example.com的子域名,而递归DNS服务器要找你的NS服务器,得先知道这两个子域名的IP——这就需要在域名注册商那边配置Glue记录,把ns1.example.com和ns2.example.com直接绑定到123.123.11.123。
    要是没配置这个,外部DNS会陷入“要解析example.com得找ns1,但解析ns1又得找example的NS”的死循环,自然无法访问。登录域名注册商后台,找Glue Records或者“Nameserver IP关联”的选项,把这俩NS域名和IP绑定好。

  • 核对DNS区域文件的正确性
    虽然本地dig正常,但还是要确认你的example.com区域文件(比如/etc/bind/db.example.com)里的配置:

    • 有没有正确的A记录指向网站的公网IP?
    • NS记录是不是确实设置为ns1.example.com和ns2.example.com?
    • SOA记录里的主服务器是不是ns1.example.com,邮箱格式有没有写错(比如应该是admin.example.com,用点代替@)?
  • 用外部DNS服务器测试解析
    你可以在本地电脑上用dig命令指定公共DNS测试,比如:

    dig example.com @8.8.8.8
    dig ns1.example.com @8.8.8.8
    

    如果返回SERVFAIL或者NXDOMAIN,要么是你的DNS服务器没响应外部请求,要么是全球DNS缓存还没更新。

  • 给DNS缓存一点时间
    刚修改域名的NS记录后,全球各地的递归DNS服务器需要时间更新缓存,这个周期由你设置的TTL决定(通常几个小时到一天)。可以用dig example.com +trace查看解析链路,确认是不是已经走到你的DNS服务器了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:34:20