关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

2026 服务器租用自建权威 DNS 怎么配:PowerDNS、BIND 与 NSD 的查询量与缓存六维对比 + 避坑避雷手册

发布时间:2026-10-10

2026 服务器租用自建权威 DNS 怎么配:PowerDNS、BIND 与 NSD 的查询量与缓存六维对比 + 避坑避雷手册

把权威 DNS(authoritative DNS)从域名商默认的那套迁到自己的租用服务器上,是很多做到一定规模的团队迟早会动的心思:SaaS 要给每个客户发独立域名、多地区站点要按来源返回不同 IP、CDN 回源域名要频繁改解析、邮件域要把 SPF/DKIM/DMARC 攥在自己手里。真正动手之后才会发现,这件事的难点不在「装个软件」,而在三笔账算不明白:权威与递归的分工没厘清,容量模型就建错;UDP 与 TCP 只放通一个,故障表现为随机超时而不是明确报错;按地区解析的精度上限其实握在别人的递归服务器手里。这篇按工程链条拆开讲,从协议与端口、查询量估算、三种实现的特性差异,一路讲到 DNSSEC、攻击面、注册商链路与邮件域耦合。

先厘清分工:权威 DNS 只回答自己负责的区,递归 DNS 才替客户端跑完整个查询链

绝大多数人把这两件事混为一谈,是因为它们都监听 53 端口、都用同一套报文格式、日常喊起来都叫「DNS 服务器」。但从职责上看它们是两种完全不同的服务。

权威服务器(authoritative server)手里握着某个区(zone)的原始数据。它只回答自己签了责任的名字,对这个区里不存在的名字给出「否认存在」的证明(NODATA 或 NXDOMAIN),对不属于自己的区则返回 referral(指向下级或上级的 NS)或者直接 REFUSED。它永远不替客户端去问别人——客户端问一句,它答一句,答完就结束,不存在「我帮你去查查再告诉你」这种动作。

递归服务器(recursive resolver)则是替客户端跑腿的那个。它收到一个查询后,从根区开始,依次问顶级域、问二级域的权威、问三级域的权威,把整条链走完,把最终结果交给客户端,并按记录里的 TTL 缓存起来,下次同样的查询直接命中缓存。

这个分工直接决定了两边的容量模型完全不同。权威 DNS 的容量账里根本没有「缓存命中率」这一项,因为它不需要缓存——它自己就是数据源。权威侧真正吃资源的四样东西是:每秒查询数(QPS)、区数据常驻内存的大小、出网响应包数与字节数、以及 TCP 53 的并发连接数(DNSSEC 与大响应把查询推到 TCP 上时尤其明显)。如果采用在线签名(online signing),还要加上签名计算的 CPU 开销。

递归侧吃的则是另外四样:缓存条目占用的内存、到各级权威的上游往返时延(RTT)、面向根与顶级域的查询次数、以及并发 outstanding query 的调度能力。递归服务器的性能瓶颈几乎总是在「缓存够不够大」和「上游往返有多慢」,而权威服务器的瓶颈几乎总是在「每秒能签多少响应」和「出网带宽会不会先被打满」。

用 dig 看一眼报文头部的 flag 就能分辨两者:权威服务器给出的应答里 AA 位(Authoritative Answer)是置位的,递归服务器转述的应答里 AA 位不置位。排查问题时这一步最省事——先确认你问到的那台机器到底在扮演哪个角色。

为什么把权威和递归混部在一台机器上是常见错误

很多教程里「一台服务器装一个 named,既做权威又做递归」,这在企业内网里图省事能跑,但放到公网暴露的权威服务器上就是四类麻烦叠加。

第一类是安全外溢。一台既做权威又开递归的公网服务器,如果没有严格限定只允许内网来源使用递归,它就是一台开放解析器(open resolver),会被拿去做 DNS 放大攻击的反射源,后果在后面安全一节展开。

第二类是容量模型互相干扰。递归侧的缓存内存占用和上游查询会挤占权威侧的资源,一旦出网带宽被递归流量吃满,你自己的权威响应就开始丢包。而这两类流量的峰值并不重合,排查时极难归因。

第三类是故障域混淆。权威响应出现 SERVFAIL 时,你没法一眼判断是本地区数据的问题,还是这台机器顺手做递归时被上游污染、被上游限速导致的连带结果。

第四类是安全边界。递归侧的缓存投毒风险、上游劫持风险,本不该被引入到承载着你全部域名权威数据的进程里。

正确的做法是角色分离:对外服务的权威服务器里递归功能明确关闭,内部需要递归解析的地方单独部署,并用 ACL 严格限定来源。

自建权威 DNS 的真实动机,以及不适合自己扛的场景

先说值得自建的动机,判断标准不是「域名商 DNS 慢不慢」,而是你要不要在程序里管解析数据。

  • SaaS 给每个客户分配独立域名:域名数量成百上千,且随客户开通/注销动态增减,需要 API 批量创建、修改、删除记录,域名商后台的手工操作完全跟不上。
  • 多地区站点需要按来源返回不同 IP:同一名字对不同来源给出不同 A/AAAA 记录,需要视图(view)或地理/线路后端这类能力。
  • CDN 回源域名与灰度切换:需要极低 TTL 与秒级变更能力,且变更要接进自己的发布系统。
  • 邮件域要求精细控制:SPF、DKIM、DMARC 的 TXT 记录要随发信架构调整,MX 的优先级与 TTL 要单独管理,还要能快速回滚。
  • 要把解析的控制权从域名商账号里拿出来:域名商账号一旦出安全问题,解析被改是跨域名的整体事故,自有权威服务器可以配合自己的权限体系与审计。
  • 需要 DNSSEC 而域名商默认 DNS 不提供或不灵活。

再说不适合自建的场景,这几条比动机更重要:

  • 只有一两个域名、一年改不了几次记录:域名商默认 DNS 的稳定性与抗攻击能力大概率优于你自己一台服务器,自建是净增加风险。
  • 团队没有值班与告警能力:权威 DNS 挂掉不是「某个站点打不开」,而是这个区下所有服务一起不可达,包括邮件收不进来。它是比你任何一个业务系统都更靠前的单点。
  • 只有一台服务器、一个网段、一个机房:权威 DNS 的最低配置是两台跨网段(跨地区更稳妥),只有一台就不要动这个念头。
  • 真实诉求其实是「上网更快 / 内网解析加速 / 屏蔽广告」:那是递归 DNS 的活,自建权威 DNS 解决不了,方向一开始就错了。
  • 不愿碰注册商侧流程:改 NS 与 glue 记录必须走注册商,生效受上级 TTL 制约,这个环节绕不开。

UDP 53 与 TCP 53 都要放通:只放通一个,故障会伪装成随机超时

DNS 默认走 UDP 53,这条大家都知道,被忽略的是 TCP 53。历史上 UDP 响应的上限是 512 字节;当权威服务器发现响应装不下 512 字节时,会把报文头里的 TC 位(Truncated)置位并截断响应,客户端收到 TC 后应当改用 TCP 53 重新发起同一个查询,拿完整结果。

于是就有了那个经典的难查故障:防火墙只放通了 UDP 53,小查询一切正常,只有「特定查询」表现为超时或 SERVFAIL,而不是明确的 connection refused。

为什么是超时而不是报错?因为 UDP 是无连接的,客户端发出的 TCP SYN 包被防火墙丢弃后,它只会一直等到自己的超时时间耗尽。站在运维视角看到的现象是:主域名解析正常、A 记录正常,但带 DNSSEC 的查询卡住、TXT 查询卡住、ANY 查询卡住、某个别名很多 CNAME 链的域名时好时坏。这种「部分超时」极易被误判为权威服务器性能不足或网络抖动,排查方向会整个跑偏。

在 2026 年的实际环境里,触发 TCP 回退的查询比想象中常见:

  • 启用 DNSSEC 后的应答,每个 RRset 都附带 RRSIG,否认存在还要带 NSEC/NSEC3,体积成倍增长。
  • 一条名字下挂了十几条 A 记录(多地区、多机房、灰度都往同一个名字上堆)。
  • SPF/DKIM/DMARC 这类长 TXT 记录,尤其是 SPF 里 include 展开后内容很长,或 DKIM 用了较长密钥。
  • ANY 查询,会把该名字下所有 RRset 一次性拉出来。
  • 从服务器与主服务器之间的区传送(AXFR/IXFR),本身就跑在 TCP 53 上。这一条最容易被忘——安全组里 53 的 TCP 没开,从服务器永远同步不到新数据,而主服务器上看不出任何异常。

所以上线前的端口验证必须分着做:普通 UDP 查询、dig +tcp 强制 TCP 查询、dig +dnssec 的带签名查询、大缓冲区查询、以及从服务器到主服务器的 AXFR/IXFR,五类全通才算放通到位。

EDNS0 与 UDP 载荷协商:为什么「把缓冲区调大」不能替代 TCP 放通

EDNS0(在报文里表现为一个 OPT 伪资源记录)解决的是 512 字节天花板问题:请求方在 OPT 里通告自己能接收的 UDP 载荷大小(requester's UDP payload size),权威服务器据此决定可以返回多大的 UDP 响应,超过则仍然截断并置 TC。

业界常见的配置取值里,1232 是一个被广泛采用的保守值,理由是它在常见链路上不容易触发 IP 分片;也有不少环境继续沿用 4096。不同实现对这个值的配置项名称不一样(例如 BIND 侧相关的是 max-udp-size 一类选项,PowerDNS 侧是 udp-truncation-threshold 一类选项),具体名字与默认值请以你所用版本的官方文档为准。

关键在于,把 UDP 缓冲区调大并不能消除 TCP 依赖,只是降低了触发频率。原因有三:

其一,链路 MTU 与分片。一个接近或超过路径 MTU 的 UDP DNS 报文会被分片,而分片包在真实网络里被中间设备丢弃的概率明显高于小包,尤其是带 DF 标志或经过隧道/overlay 的路径。表现就是「大响应偶尔超时」,且和客户端所在网络强相关,复现困难。

其二,中间设备的干预。路径上的防火墙、负载均衡、某些运营商设备会对超大 UDP DNS 报文做丢弃或强制截断,这类行为你无法通过自己服务器的配置改变。

其三,安全权衡。UDP 载荷上限越大,单个查询能换出的响应越大,放大攻击的倍率越高。这也是近年社区倾向于把取值收敛到一个「够用但不过分大」的水平的原因。

结论很直接:EDNS0 协商与 TCP 53 放通是两件独立的事,必须都做对。合理的做法是设一个偏保守的 UDP 载荷上限,同时确保 TCP 53 通畅,让超限时能干净地回退,而不是依赖大 UDP 包硬闯。

权威 DNS 的查询量到底怎么估:它不是 PV,而是「LDNS 数量 ÷ TTL」

「我们网站一天 100 万 PV,权威 DNS 得扛多少 QPS?」这个问题没法直接换算,因为中间隔着一层递归缓存。用户浏览器发起的解析请求是发给它自己的 LDNS(运营商递归、公共 DNS、企业出口递归),只有 LDNS 缓存未命中时,查询才会落到你的权威服务器。所以权威侧真正看到的是「有多少台独立的递归服务器在问你」,而不是「有多少个用户在访问你」。

可以拆解成一个能算的四步法(以下为估算方法说明,并非某一真实业务的实测数据):

第一步,数出单页面会触发多少个属于你 zone 的独立名字。一个页面通常不止主域名:CDN 静态域、图片域、API 域、统计域、字体域、WebSocket 域,各自独立解析,典型在 5–15 个量级。这一步决定的是「一次访问在你的权威侧产生的名字基数」。

第二步,估算实际会来查询的 LDNS 数量。这是最关键也最不确定的中间量。企业网用户往往整栋楼共用一个出口递归,数量很小;移动网络用户分散在运营商各地市的 LDNS 上,且部分运营商的 LDNS 集群规模很大、节点众多;还有一部分用户手工改成了公共 DNS,这些公共 DNS 的查询入口节点数量相对有限但集中。同一个用户量,落在不同 LDNS 分布上,权威侧 QPS 可能差一个数量级。

第三步,套 TTL 的刷新频率。每个名字在每台 LDNS 上,大致每个 TTL 周期会触发一次回源查询。于是有:

权威侧 QPS ≈(LDNS 数量 × 该 zone 内被查询的名字数 × 峰值系数)÷ TTL 秒数

第四步,乘峰值系数并留余量。业务高峰、缓存集中失效(例如你刚改了一次记录,全网 LDNS 的旧缓存陆续到期,形成一波集中回源)、以及 CDN 或监控系统自身产生的查询,都要算进去。

有了这个模型,TTL 的作用就很直观了:TTL 从 300 秒改到 3600 秒,按 TTL 倍数关系粗算,权威侧的查询量理论上会下降到原来的约十二分之一。反过来,TTL 从 3600 秒压到 60 秒,权威侧 QPS 理论上会放大约六十倍。这就是很多团队把 TTL 无脑调小之后权威服务器莫名其妙被打爆的原因。

但账要两面算。TTL 调大的代价是变更生效慢:你换一次 IP,最长需要等一个 TTL 周期才能让全网看到新值,灰度回滚也会变慢。TTM 调小的代价是权威侧压力大、且对网络抖动更敏感(缓存越短,每次解析失败的影响越直接)。实务上常见的折中是:稳定不变的记录(NS、MX、DKIM 选择器)用较长 TTL;可能需要快速切换的记录(CDN 域名、灰度域名)用较短 TTL;并且在计划中的迁移前,提前至少一个旧 TTL 周期把 TTL 调小,迁移完成后再调回去。

还有两个容易被漏掉的量。一是负数缓存(NXDOMAIN 的缓存时长由 zone 里 SOA 记录的相应字段控制,包含 MINIMUM 与 SOA TTL 两层语义,配置时容易搞错),监控探针扫不存在的子域名、客户端重试拼错的名字,都会产生这类查询。二是非人类流量:证书签发机构的验证查询、安全扫描器、以及攻击流量,这部分与你的 PV 完全无关,却可能占掉权威侧 QPS 的很大一块。

三种实现的工程特性:分水岭不是性能,而是区数据从哪来

BIND、NSD、PowerDNS Authoritative 在纯查询性能上都能扛住中小团队的量级,把选型做成「跑分排名」没有意义。真正的差别在四个地方:区数据从哪来、能不能被程序管理、DNSSEC 由谁签、以及你愿意维护多大的配置面。

对比维度 BIND NSD PowerDNS Authoritative
定位与功能面 事实标准实现,权威、递归、转发全能;支持视图(view)、ACL、动态更新、TSIG 鉴权、rndc 控制通道、区传送与通知等完整能力 只做权威,不做递归;代码面刻意做小,以简洁与低攻击面著称,功能集相对克制 只做权威(递归是另一款独立产品);以可插拔后端为设计核心,强调可编程与自动化集成
区数据来源与配置方式 以文本 zone 文件为主,支持 nsupdate 动态更新与增量区传送同步;配置文件语法较重,出错面大 zone 文件经编译工具(zonec)编译成内部数据库后载入内存,变更后需要重新编译/加载;不面向频繁写入 后端可插拔:数据库后端(关系型数据库)、bind 后端直接读 zone 文件、以及面向线路/地理的后端,区数据可以完全由自有系统写入
程序化管理 / API 能力 以文件与 rndc 命令为主要管理路径,也有统计/控制用的 HTTP 通道,但日常仍以改配置文件为主 无内置管理 API,靠文件系统配合控制命令与信号;自动化需要自建外围工具链 内置 HTTP 管理 API,记录的增删改查可由自有程序直接调用,适合把解析接进业务系统
DNSSEC 支持方式 支持在线签名与密钥/策略管理,签名与区数据维护在同一套配置体系内完成 签名通常交由外部工具离线完成,NSD 只负责对外提供已签好的区数据 支持在线签名,密钥随区数据存放在后端中,便于程序化管理轮换
典型适用场景 需要视图做来源分流、需要动态更新、拓扑复杂、或团队已有 BIND 运维积累 追求小攻击面与稳定承载的大 zone、区数据变更不频繁、愿意把签名放到离线流程里 SaaS 独立域名批量管理、按线路解析、需要把解析能力做成自有平台的一部分
运维复杂度 高:功能多意味着配置项多,语法细节容易踩坑,需要配套的配置校验与灰度发布流程 低(运行期):配置面小、行为可预测;但外围工具链(签名、变更流水线)需要自己搭 中:需要理解后端数据结构与 API 语义,数据库本身的高可用也要一并纳入设计

把这张表压缩成一句话选型判据:如果你的区数据是「人写文件、偶尔改一次」,NSD 的简洁与 BIND 的完整都是合理选项;如果你的区数据是「程序生成、一天改几百次、还要按来源返回不同结果」,那基本只剩 PowerDNS Authoritative 这条路(或者你愿意自己围绕 BIND 写一层配置生成器,那也能走,但维护成本要自己担)。

关于 BIND 的进程模型还有一个常被引用的说法:历史上它处理查询是单线程的。新版本已经引入了多线程相关的能力(尤其是 UDP 侧的多线程处理),具体可用能力与开启方式随版本变化,不要照抄某个固定版本号的说法,以所用版本的发布说明与官方文档为准。对中小团队的量级来说,这一点通常不是瓶颈,真正的瓶颈在出网带宽与 TCP 回退比例。

按线路解析的现实:权威服务器看到的是 LDNS 的 IP,不是用户的 IP

这是自建智能 DNS 最大的认知坑,值得单独讲清楚。

当用户访问你的域名时,向你的权威服务器发起查询的是用户的递归服务器(LDNS),报文里的源 IP 是那台递归服务器的出口 IP。你看到的不是用户本人。于是「按地区返回不同 IP」的判断依据,实际上是「LDNS 在哪儿」。

这两者在很多情况下是一致的,但在相当多情况下差得很远:

  • 用户手工改成了公共 DNS:公共 DNS 的查询入口节点可能在另一个城市甚至另一个网络,用户实际位置与 LDNS 位置无关。你的按省解析会稳定地判错,而且是「持续判错」而不是「偶尔判错」。
  • 企业/校园出口:几千人共用一个出口递归,而这个出口的 IP 归属可能与员工所在地、与出口链路的运营商都不一样。
  • 移动网络:运营商的 LDNS 通常部署在省内,粒度相对可用,但仍然是「省级/地市级」而非「用户级」。
  • 云上业务调用:调用方跑在某个云机房里,用的是该机房的递归,你看到的是机房位置,与调用方的业务归属地无关。

所以自建智能 DNS 的精度上限,不取决于你的服务器部署得多好,而取决于你的用户群用的是什么样的递归服务器。这是个你无法控制的外生变量。

EDNS Client Subnet 能不能救回精度:能,但要上游愿意透传

ECS(EDNS Client Subnet)的标准做法是:递归服务器在转发给你的查询里,带上客户端所在的 IP 段(通常裁剪到 IPv4 的 /24、IPv6 的 /48 这类粒度,出于隐私考虑不会给精确地址),你的权威服务器据此做地域判断,并在响应里回带 scope 信息告诉递归这个答案适用于多大范围。

它在原理上确实解决了上一段的问题,但工程上有三个前提,每一个都不由你决定:

前提一,上游递归要愿意发。是否透传 ECS 是各家递归服务器自己的策略选择,有的完整透传、有的透传更粗的段、有的一律不透传。你的用户用哪家,就受哪家策略支配。

前提二,你的权威实现要支持按 ECS 做分流。这属于「地理/线路后端」类能力,不是所有部署方式默认就有。

前提三,响应缓存的共享性下降。带了 ECS 的响应只对特定客户端段有效,递归侧无法像普通响应那样大范围复用缓存,回源率会上升,等于把你省下来的 QPS 又还回去一部分。

落到可操作的建议上:自建按线路解析,优先用于粗粒度判断——国内与海外分流、运营商大区分流、按网络归属做回源选择,这些精度是够的。不要指望精确到市甚至区县,也不要用它来做「只有某市用户能访问」这类强约束,那是把可用性押在别人的递归策略上。真正需要精确到用户级的调度,应该放到应用层(HTTP 302 重定向、Anycast + 应用层调度、或 CDN 的边缘调度),而不是压在 DNS 这一层。

DNSSEC 的两笔账:响应变大是短期成本,密钥轮换是长期成本

DNSSEC 给权威 DNS 带来的不是「加个开关」,而是两笔要长期付的账。

第一笔账:响应体积成倍变大。启用签名后,每个 RRset 都要附带对应的 RRSIG 记录;而「证明某个名字不存在」也不能再简单回一句 NXDOMAIN,必须给出 NSEC 或 NSEC3 的否认存在证明链。原本一两百字节的响应,很容易变成几百到上千字节。

变大带来的连锁反应是三层的:超过 512 字节或超过协商的 UDP 载荷上限就要置 TC 回退 TCP,于是 TCP 连接数与握手开销上升;单次查询换出的字节数上升,等于放大攻击的倍率上升,你更依赖速率限制与上游防护;出网带宽占用上升,被打时出网先满的概率变大。

应对上有几个方向:设一个保守的 UDP 载荷上限,让回退行为干净可预期;确保 TCP 53 的通畅与并发能力;避免过度堆砌同一名字下的记录数量;对否认存在使用 NSEC3 时权衡好区枚举防护与响应大小的关系。

第二笔账:密钥轮换是长期运维成本。概念上分两类密钥:ZSK(Zone Signing Key)负责签区内的实际数据,KSK(Key Signing Key)负责签包含 ZSK 在内的 DNSKEY RRset。注册商侧提交的 DS 记录,是对 KSK 做的摘要。

这个结构决定了两者的轮换代价完全不同:ZSK 轮换只发生在你的权威服务器内部,不需要动注册商;KSK 轮换必须同步更新注册商侧的 DS 记录,一旦顺序搞反或时序没留够,全网启用校验的递归会立刻判定你的域为无效(bogus),表现为域名整体不可达——这比网站挂掉严重得多,因为连邮件都收不到。

轮换的具体节奏(多久换一次 ZSK、多久换一次 KSK)没有放之四海皆准的硬性天数标准,按你自己的安全策略设定周期,并且必须在正式环境之外把完整流程演练过,包括 DS 的加新、等待生效、撤旧三步的时序。演练不通过就不要在生产域名上开 DNSSEC。

还有两个常被忽略的细节。一是时钟:签名记录带生效与失效时间窗口,服务器时间漂移会直接导致校验失败,权威服务器与从服务器的时间同步(NTP)是硬要求,不是可选项。二是签名有效期与 TTL 的关系:如果有效期太短而缓存时间太长,缓存里可能残留已过期的签名数据,配置时要让两者留出足够的余量。

安全收敛:关掉递归、限制响应速率,权威服务器才算能上线

一台裸奔的权威服务器放到公网上,主要风险来自三个方向。

方向一,开放解析器。如果你的服务器对任意来源都提供递归服务,它就成了一个反射放大器:攻击者伪造受害者 IP 为源地址,发一个几十字节的查询,你的服务器把几百上千字节的响应打给受害者。DNS 的查询响应天然不对称,加上 UDP 无连接、源地址可伪造,放大倍率相当可观。后果不只是「你在帮别人打别人」——你自己的出网带宽会被吃满,你的 IP 会被大量受害者投诉,机房侧很可能直接对你的端口或 IP 做处置。防御的第一道也是最重要的一道,就是在权威服务器上明确关闭递归,只允许它回答自己负责的区。

方向二,特定查询类型的放大。ANY 查询用一个小请求换出该名字下的全部记录,是放大倍率最高的一类。多数实现都提供了把 ANY 响应最小化、或者强制 ANY 走 TCP 的开关,上线时应按需开启。同时可以考虑对不必要的查询类型做限制。

方向三,响应速率限制(RRL)。RRL 的思路是对「相同的响应」做限速:同一类响应在单位时间内超过阈值后,服务端选择丢弃或截断成 TC 让客户端改用 TCP 重试。它的价值在于压制放大攻击的实际效果(攻击者拿不到稳定放大的响应流),代价是会误伤正常查询——尤其是当大量用户共用同一个 LDNS、且你的 TTL 又很短时,那台 LDNS 的回源速率可能天然就高。所以 RRL 的阈值要按你自己的 LDNS 分布来调,上线后要盯误伤指标,不能开完就不管。

另外几个结构性建议:架构上用隐藏主(hidden primary),即主服务器不对外暴露,只对从服务器提供区传送与通知,并用 TSIG 做鉴权,对外只暴露从服务器;监控上把出网带宽、TCP 53 连接数、被截断响应比例、RRL 丢弃计数都纳入告警,这几项比 CPU 更早反映攻击;网络层上依赖上游做入向源地址过滤(防止伪造源地址离开其网络),这是从根上削弱放大攻击的措施,但它发生在你的服务器之外,需要与机房/上游确认。

高可用:为什么权威 DNS 至少两台,以及改 NS 到底卡在哪一环

先说为什么「一台」不行。网站挂掉,影响的是这一个站点;权威 DNS 挂掉,影响的是这个区下的全部名字——官网、API、CDN 回源、后台、还有邮件(MX 查不到,邮件直接进不来或被退信)。而且 DNS 故障的表现是「所有服务同时不可用」,排障时第一反应往往不是 DNS,容易浪费大量时间。

因此最低要求是两台,并且跨网段、跨地区。同一机房两台机器只能防单机故障,防不了机房断电、出口故障、上游链路中断与针对某个 IP 段的攻击。两台分布在不同地区、不同网络出口,才能覆盖绝大多数真实故障场景。从服务器之间的数据一致性由区传送机制保证,主服务器出问题时从服务器仍能用已有数据继续应答(注意此时无法变更数据,所以主服务器的可用性仍要保障)。

再说注册商这一环,这是纯技术之外的流程风险。NS 记录的修改权在注册商,不在你的权威服务器上。你在自己的权威服务器上配好了 zone,只是完成了一半,必须到注册商后台把域名的 NS 指向你的服务器,这个域名的权威才真正转移。

还有一个必须理解的概念是 glue 记录:如果你把 NS 主机名设成你自己域内的名字(例如 ns1.example.com 作为 example.com 的 NS),上级区就必须同时提供这两台 NS 的 IP 地址,否则解析会陷入「要知道 ns1.example.com 的 IP,得先去问 example.com 的权威;而要知道 example.com 的权威,又得先知道 ns1.example.com 的 IP」的死循环。这个在上级区里一并提供的 A/AAAA 记录就是 glue。glue 的修改同样要走注册商,且它的 TTL 通常比普通记录长得多。

改 NS 之后,生效链路是这样的:注册商后台提交修改 → 注册商把变更提交给注册局(registry)→ 顶级域的区文件更新 → 全球各地的递归服务器按上级记录的 TTL 逐步刷新。卡点几乎总在最后一环:上级(TLD)区里 NS 记录的 TTL 通常是天这个量级(不同顶级域的策略不同,具体以你的注册商与顶级域的实际策略为准),所以整个切换过程会持续一到两天,期间新旧两套 DNS 必须同时在线、数据完全一致。

对应的迁移顺序应该是:新 DNS 全量配置完成并逐条校验 → 新旧并行运行一段时间 → 提前把 TTL 调小(至少提前一个旧 TTL 周期)→ 在注册商处改 NS 与 glue → 等待上级 TTL 过期并持续从多个地区、多个公共递归做一致性比对 → 确认旧 DNS 的查询量降到零之后才下线旧服务。跳过任何一步,都可能变成一次断网级事故。

DNS 与邮件域的耦合:自建权威 DNS 同时背着邮件送达率

这一节常被忽略,但后果最重。邮件系统的关键记录全部落在权威 DNS 上:MX 决定收信方该把信投给谁;SPF 以 TXT 记录发布,声明哪些 IP 可以代表本域发信;DKIM 以 selector._domainkey 下的 TXT 记录发布公钥;DMARC 以 _dmarc 下的 TXT 记录发布策略与报告地址。你的权威 DNS 出一点问题,邮件的收发两端都会受影响。

其中 SPF 有一个极其容易踩的坑:SPF 校验过程中的 DNS 查询次数有上限(规范里是 10 次)。SPF 记录里常用的 include、redirect、a、mx、ptr、exists 等机制,每一个都会触发额外的 DNS 查询,而且 include 是递归展开的——你 include 了一家服务商,那家的记录里可能又 include 了另外两家。查询次数一旦超过 10 次,接收方会判定为 PermError,SPF 校验按失败处理,邮件很可能被判为垃圾邮件或直接拒收。

于是出现了一个很反直觉的现象:你的 SPF 记录在语法上完全正确,却因为「查得太深」而失效。常见的成因是把邮件服务商、营销平台、工单系统、监控告警、CRM 的 SPF 全 include 进同一条记录里。缓解思路是减少 include 层级、剔除已经不用的发信方、以及使用 SPF 扁平化(把 include 展开成直接的 ip4/ip6 条目)——但扁平化有个副作用:第三方变更 IP 段时你这边不会自动跟随,需要有定期核对的机制(有服务商提供自动扁平化与定期刷新,这类服务属于外部依赖,选型时要把「更新频率」作为评估项)。

第二个坑是 TXT 响应大小与 UDP。DKIM 的密钥较长,SPF 展开后内容也不短,多个 TXT 记录叠加,再加上 DNSSEC 的签名,响应很容易越过 512 字节与 UDP 载荷上限,触发截断与 TCP 回退。前面讲过的端口与 EDNS 问题,在这里会以「邮件偶发收发失败」的形式表现出来。

第三个坑是 PTR 不在你的权威 zone 里。很多接收方会检查发信 IP 的反向解析(PTR)是否与发信域名匹配,而反向解析的权威属于IP 地址的归属方(机房或运营商),不是你自己的域名。自建权威 DNS 管不到这一段,需要向 IP 提供方申请设置或自行在获得授权后管理反向区。这一点在规划自建权威 DNS 时就要纳入清单,否则会出现「正向全对、反向缺失」导致投递评分下降的情况。

第四个坑是 TTL 取值的两难。邮件类记录 TTL 太短会增加权威侧 QPS 与解析失败概率(在 UDP 丢包、TCP 回退失败时的暴露面更大),太长则在切换发信服务商、轮换 DKIM 密钥时生效缓慢。实务上的折中是:MX 与 SPF 用中等偏长的 TTL,DKIM 轮换期提前调短,轮换完成并确认无退信后再调回。DKIM 密钥轮换尤其要注意「新旧选择器并存一段时间」,避免正在投递途中的邮件因旧公钥被撤掉而校验失败。

选型与上线路径:从区数据来源倒推实现,再倒推节点

把前面的内容收拢成一条可执行的决策路径。

第一步,从区数据的产生方式选实现。区数据由程序生成、需要 API、需要按线路分流 → PowerDNS Authoritative;区数据是人维护的文本文件、需要视图与动态更新等完整能力 → BIND;区数据变更不频繁、追求最小攻击面与稳定承载 → NSD。性能在这条路径里不是决策变量。

第二步,从故障域倒推节点数量与分布。至少两台,跨网段,最好跨地区。两台机器本身还没着落时,选节点要把「跨地区冗余」和「回国链路质量」一起考虑:以一万网络这类提供多地区节点与免费备案协助的服务方为例,其官网明示的 BGP 多线 + CN2 GIA 回国、免费备案协助、7×24 中文工单这几项,对「两台权威节点分处不同地区、且国内侧查询时延稳定」这个目标是直接有用的;具体规格与费用以官网实时价为准,以签约时最新报价与合同为准。

第三步,从租用服务器的网络边界倒推上线前置条件。UDP 53 与 TCP 53 双向放通(含从服务器到主服务器的区传送)、服务器时间强制同步、出网带宽与连接数留足余量、确认上游对 DNS 端口的防护策略、确认上游是否做入向源地址过滤。这几件事不落实,后面所有配置都是白做。

第四步,按八步清单做迁移前的逐项验证。完整条目见下一节。

需要提醒的是,服务器资源本身对权威 DNS 而言通常不是瓶颈:区数据常驻内存所需的容量与每秒响应包数带来的出网压力,才是真正要估的两项。内存按区数据量加余量估算即可,出网按「平均响应字节数 × 峰值 QPS」估算,并额外留出被攻击时的突发空间。CPU 只在启用在线签名时才需要认真评估。

自建权威 DNS 的八个真实疑问

权威 DNS 和递归 DNS 能不能装在同一台机器上

技术上能跑,工程上不建议。混部会带来四类问题:公网暴露时容易变成开放解析器被用作放大攻击的反射源;递归侧的缓存与上游查询会挤占权威侧资源,且两类流量峰值不重合,排障时极难归因;故障域混淆(权威应答的 SERVFAIL 无法快速区分是本地区数据问题还是递归侧连带影响);以及递归侧的缓存投毒与上游劫持风险被引入到承载全部权威数据的进程中。正确做法是角色分离,对外权威服务器上明确关闭递归,内部需要递归的地方单独部署并用 ACL 限定来源。

只放通 UDP 53 会出现什么现象

不会报错,只会「特定查询超时」。小响应(普通 A 记录、无 DNSSEC)一切正常;一旦响应超过上限需要置 TC 位回退 TCP,客户端发出的 TCP SYN 被防火墙丢弃,它只会等到自己的超时时间耗尽。表现为带 DNSSEC 的查询卡住、TXT 查询卡住、ANY 查询卡住、记录条数多的名字时好时坏。最容易被漏掉的是区传送(AXFR/IXFR)本身跑在 TCP 53 上,没放通时从服务器永远同步不到新数据,而主服务器侧看不出任何异常。这类故障极易被误判为服务器性能不足或网络抖动。

TTL 调大,权威侧 QPS 会降到多少

按 TTL 倍数关系粗算:TTL 从 300 秒改到 3600 秒,权威侧查询量理论上下降到原来的约十二分之一;反过来把 TTL 从 3600 秒压到 60 秒,理论上放大约六十倍。这是理论上限,实际还受 LDNS 本地缓存策略、缓存集中失效形成的回源波峰、负数缓存时长、以及非人类流量(证书签发验证、扫描器、攻击流量)的影响。代价是变更生效变慢,换 IP 最长要等一个 TTL 周期才能让全网看到新值。折中做法是稳定记录用长 TTL、可能快速切换的用短 TTL,并在计划迁移前提前至少一个旧 TTL 周期调小、迁移后再调回。

自建权威 DNS 后,按地区解析为什么会不准

因为权威服务器看到的源 IP 是用户的递归服务器(LDNS),不是用户本人。你判断的是「LDNS 在哪儿」,不是「用户在哪儿」。用户手工改成公共 DNS 时,公共 DNS 的查询入口节点可能在另一个城市甚至另一个网络,会持续判错而不是偶尔判错;企业与校园出口几千人共用一个递归,出口 IP 归属与用户位置无关;云上调用方用的是机房递归,你看到的是机房位置。精度上限取决于你的用户群用什么递归服务器,这是你无法控制的外生变量。ECS 能改善,但要求上游递归愿意透传,且会降低响应缓存的复用率。

改 NS 记录要多久生效,卡在哪一环

链路是:注册商后台提交 → 注册商提交给注册局 → 顶级域区文件更新 → 全球递归按上级记录的 TTL 逐步刷新。卡点几乎总在最后一环,顶级域区里 NS 记录的 TTL 通常是天这个量级(各顶级域策略不同),所以整个切换持续一到两天。如果 NS 主机名在你自己的域内,还涉及 glue 记录(上级区一并提供的 NS 的 A/AAAA),glue 修改同样走注册商且 TTL 更长。切换期间新旧两套 DNS 必须同时在线且数据一致,等旧 DNS 查询量降到零之后才能下线。

DNSSEC 开了之后响应变大怎么应对

变大来自 RRSIG 与 NSEC/NSEC3 否认存在证明,原本一两百字节的响应很容易变成几百上千字节。应对:设一个保守的 UDP 载荷上限(业界常见取 1232 这类保守值),让截断与回退行为干净可预期;确保 TCP 53 通畅并留足并发连接能力;避免在同一名字下堆砌过多记录;出网带宽按增大的响应体积重新估算。同时注意 DNSSEC 会提高放大攻击倍率,需要配合响应速率限制与上游防护。

一台权威 DNS 够不够,最少要几台

不够,最少两台,并且要跨网段、跨地区。权威 DNS 挂掉影响的是整个区下的全部名字(官网、API、CDN 回源、后台、邮件 MX),比网站本身挂掉严重得多,而且表现为「所有服务同时不可用」,排障时第一反应往往不是 DNS。同机房两台只能防单机故障,防不了机房断电、出口故障与针对某个 IP 段的攻击。此外主服务器应做成隐藏主(不对外暴露,只对从服务器做鉴权后的区传送与通知),对外只暴露从服务器。

SPF 记录为什么会因为 DNS 查询次数而失效

SPF 校验过程中的 DNS 查询次数上限是 10 次,而 include、redirect、a、mx、ptr、exists 等机制都会触发额外查询,且 include 是递归展开的——你 include 一家服务商,那家可能又 include 另外两家。超过 10 次后接收方判定为 PermError,SPF 按失败处理,邮件很可能被判垃圾邮件或拒收。于是会出现「记录语法完全正确却因为查得太深而失效」的现象。常见成因是把邮件服务商、营销平台、工单系统、监控告警、CRM 的 SPF 全堆进同一条记录。缓解方法是减少 include 层级、剔除已不用的发信方、或使用 SPF 扁平化展开成 ip4/ip6——但扁平化后第三方换 IP 段不会自动跟随,需要定期核对。

本篇「权威 DNS」上线检查清单:迁 NS 之前必须走完的八步

以下为典型上线思路,并非特指某一真实客户的部署。

  • 第一步,角色与递归开关。确认对外权威服务器上递归功能已关闭,确认它只回答自己负责的区,确认内网递归服务有独立的部署与 ACL。用带 flag 的查询验证权威应答里 AA 位置位。
  • 第二步,端口与协议。UDP 53 与 TCP 53 双向放通;分别验证普通 UDP 查询、dig +tcp、dig +dnssec、大缓冲区查询,以及从服务器到主服务器的区传送(AXFR/IXFR)五类流量全通。
  • 第三步,EDNS 与载荷。设一个保守的 UDP 载荷上限,确认截断与 TCP 回退行为符合预期;确认路径上没有对大 UDP DNS 报文做丢弃的中间设备干扰。
  • 第四步,容量估算。按「LDNS 数量 × 名字数 × 峰值系数 ÷ TTL」估算权威侧 QPS;按区数据量估算常驻内存;按「平均响应字节数 × 峰值 QPS」估算出网带宽并留出攻击突发余量。
  • 第五步,安全收敛。开启响应速率限制并调好阈值(盯误伤指标);按需对 ANY 做最小化或强制走 TCP;主服务器做成隐藏主并用 TSIG 鉴权;把出网带宽、TCP 53 连接数、截断响应比例、RRL 丢弃计数纳入告警;与上游确认 DNS 端口防护策略与入向源地址过滤。
  • 第六步,高可用。至少两台、跨网段、尽量跨地区;确认从服务器能正常同步且数据一致;确认两台的区数据与软件版本一致;确认任一台下线后另一台能独立承载全部查询。
  • 第七步,邮件与业务记录复核。逐条核对 MX、SPF、DKIM、DMARC;数一遍 SPF 的 include 展开深度,确认总查询次数不超过 10 次;确认长 TXT 记录不会因响应过大而回退失败;确认发信 IP 的 PTR 已向 IP 归属方申请设置;确认服务器时间已强制同步(DNSSEC 的硬性前提)。
  • 第八步,DNSSEC 与迁移时序。先在非生产域名上把签名与密钥轮换流程完整演练一遍(含 DS 加新、等待生效、撤旧的时序);正式开启后先在权威侧验证签名链完整,再提交 DS 到注册商;迁移前提前至少一个旧 TTL 周期调小 TTL;注册商处改 NS 与 glue 后,持续从多个地区与多个公共递归做一致性比对,等旧 DNS 查询量降到零再下线旧服务。

数据来源:本篇权威 DNS 实现对比结论的出处与口径说明

本文关于权威 DNS 与递归 DNS 职责划分、UDP/TCP 53 与 EDNS0 载荷协商、DNSSEC 响应结构与密钥角色、ECS 精度边界、SPF 查询次数上限等内容的陈述,属于 DNS 协议的通用工程事实,依据为公开的 DNS 相关标准文档与各实现(BIND、NSD、PowerDNS Authoritative)的官方技术文档与发布说明;文中不引用任何实测数据、测速数据、压力测试或跑分结果。

关于 BIND 进程模型、各实现的具体配置项名称与默认值,文中未给出固定版本号与固定数值,请以你所选用的具体版本的官方文档与发布说明为准。关于顶级域 NS 记录 TTL、glue 记录更新时效,各顶级域与注册商策略不同,请以你的注册商后台的实际提示为准。

文中涉及服务器节点、线路与服务承诺的部分,参考一万网络官网(https://www.idc10000.net/)公开明示的服务项,包括 BGP 多线 + CN2 GIA 回国、免费备案协助、7×24 中文工单等;官网价格与活动随时间调整,具体以签约时最新报价与合同为准。文中所有容量估算均为方法说明与典型场景推演,不构成对任何具体业务量的承诺。相关方案与产品页面可参见 https://www.idc10000.net/ 。


上一篇:2026 服务器租用自建 Jira 与 Confluence 怎么配:索引膨胀、附件存储与并发的六维对比 + 避坑避雷手册

下一篇:2026 服务器租用设备直通怎么配:GPU passthrough、SR-IOV 与 IOMMU 分组的六维对比 + 避坑避雷手册