多服务商 DNS 冗余:以 OpenResty Edge 为唯一数据源,同步给多家 DNS 服务商
2016 年 10 月 21 日,DNS 服务商 Dyn 遭到 Mirai 僵尸网络的 DDoS 攻击,Twitter、GitHub、Netflix 等大量网站一度无法访问。问题并不出在这些网站本身,而是用户解析不到它们的地址。只要权威 DNS 只托管在一处,不管这一处是某家服务商还是您自建的服务器,它一旦不可用,所有依赖它的业务都会一起下线。
多服务商 DNS 冗余,就是让两家以上的服务商同时对外应答同一个区域,一家宕机,其他家继续应答。它的难点不在于多买一家服务商,而在于冗余和智能解析很难兼得:能在几家之间原样复制的只有静态记录,地域调度、健康检查这类能力没法跟着复制过去。OpenResty Edge 的做法是分工:OpenResty Edge 继续做权威 DNS,负责智能调度;其他 DNS 服务商作为从服务器,通过 AXFR 区域传输同步同一份区域,和 OpenResty Edge 一起对外应答,负责兜底。
本文说明这套分工如何运作,以及哪些区域适合这样做。具体配置步骤见 OpenResty Edge 文档:DNS 区域传送与 TSIG。
多服务商 DNS 的行业难题:冗余与智能解析难以兼得
递归解析器会在域名委派的 NS 列表里挑一台服务器查询,通常偏向响应更快的那台,查不通就换下一台。所以当 NS 列表里有两家服务商时,一家宕机,解析器会转向另一家,解析不中断。这个机制有一个前提:两家必须返回相同的记录,否则同一个域名在不同时刻、对不同用户会解析出不同的结果。
让几家服务商保持一致,常见的做法有两种:
- 多主:每家服务商都作为主服务器,通过各家的 API 或同步工具分别写入同一份记录。问题在于每家的记录类型、私有功能和接口都不一样,时间一长,各家的配置容易出现偏差;而且每多接入一家,就多一套接口要适配和维护。
- 一主多从:只在一处写入,其他服务商作为从服务器,通过区域传输(AXFR)定期拉取完整区域。只有一个写入点,一致性由协议保证。
无论选哪种,能在几家之间保持一致的,都只有各家都支持的标准静态记录。地域调度、健康检查、流量调度这类能力,解析结果是服务器在收到查询时,按查询来源和实时状态当场算出来的;各家的实现互不兼容,区域数据里也装不下"怎么算"。以 IBM NS1 为例,它的文档写明,Filter Chain 流量调度配置和 ALIAS 等私有记录都不会出现在对外的区域传输里。结果是,为了冗余,往往只能退回各家共有的最小功能集,放弃智能调度。
落到业务上,这是在两种风险之间二选一:只用一家服务商,要承担它宕机时解析全部中断的风险;为了冗余退回静态记录,又要放弃就近访问和故障节点自动摘除,一部分用户会被解析到更远、甚至已经不可用的地址。
OpenResty Edge 的做法:主服务器负责智能调度,从服务商负责兜底
如果您已经在 OpenResty Edge 的内建权威 DNS 里管理区域,开启区域传输后,整体架构如下:
您(Edge Admin 控制台:编辑 → 发布)
│
OpenResty Edge(主服务器,唯一数据源)
│ │ AXFR over TCP + TSIG 签名
│ ┌─────┴─────┐
│ 从服务商 A 从服务商 B
│ │ │
└──────────┬─────────┴───────────┘
公网 NS 委派同时列出 OpenResty Edge 和各家从服务商
│
递归解析器 / 用户
- 您仍然只在 OpenResty Edge 上增删改记录,从服务商通过 AXFR 拉取整份区域,传输过程可以用 TSIG 密钥鉴权。
- OpenResty Edge 继续照常应答公网查询,开启区域传输不影响原有的解析。公网 NS 委派同时列出 OpenResty Edge 和各家从服务商:在注册商处保留 OpenResty Edge 的 NS,再加入各家从服务商的 NS。
这样分工之后:
- 智能调度照常生效。 问到 OpenResty Edge 的查询,仍按查询来源和实时状态得到地域线路、网关调度和健康检查的结果:健康检查失败的节点会自动从解析中移除,GSLB 还能按机器负载、请求速率等业务指标在集群之间调整流量。
- 静态记录获得多服务商冗余。 各家从服务商应答同一份静态记录,OpenResty Edge 或任何一家服务商不可用时,其他家继续应答。
- 从服务商可以按需增减和更换。 同步只依赖 AXFR 区域传输这一标准协议,不依赖任何一家的私有接口;更换从服务商时,新服务商通过区域传输拉取整份区域即可。
- 地域线路记录也有兜底。 为地域线路记录配好默认线路,从服务商就能用默认线路的结果应答。
- 兜底时间充足。 OpenResty Edge 生成的 SOA 中,expire 默认为 604800 秒(7 天),可以按需调整。从服务器每次成功刷新后,在这段时间内都能用手上的副本继续应答,即使 OpenResty Edge 暂时不可用。
落到业务上,冗余不必再以牺牲访问体验为代价:平时用户仍被引导到就近、健康的网关集群;任何一家服务商出故障,都不会再像 Dyn 事件那样让业务整体下线;更换服务商不需要迁移或重新录入记录,业务也就不会被某一家服务商绑定;即使 OpenResty Edge 本身出现故障,团队也有充足的时间排查和恢复,对外解析不会中断。
把唯一数据源放在 OpenResty Edge 上,还有四点好处:
- 所有改动都经过权限控制。 DNS 应用按用户组授权,可以把读写权限分开;普通用户默认看不到 DNS 功能,也看不到未授权给其用户组的 DNS 应用,详见在 OpenResty Edge 中管理 DNS 应用的访问权限。
- 改动有版本记录,发布后才生效。 OpenResty Edge 从 25.9.17 版开始对 DNS 配置做版本控制,区域传输配置也和记录一样,发布后才下发到节点。
- serial 自动维护。 从服务器通过比较 SOA 中的 serial 判断区域有没有更新。如果自建主服务器,这个数字要由人或脚本负责递增,一旦漏掉,从服务器就不会拉取新数据。OpenResty Edge 会自动维护 serial,并且只在可传输的内容确实变化时才在发布时递增,从服务器因此能可靠地判断需不需要重新拉取。
- 唯一数据源本身也有保护。 DNS 应用和其他应用的配置一样存放在 Edge Admin 数据库中,OpenResty Edge 为它提供异机定时备份、主从流复制和自动故障转移三层保护,详见 OpenResty Edge 数据库备份与故障转移。
对团队来说,这意味着 DNS 可以像其他生产配置一样被治理:多个团队共用一个平台时各管各的区域,不会误改别人的记录;改动不会在编辑时就影响线上解析,事后也能追溯每一次变更;从服务商不会悄悄停在旧数据上,少了一类难以察觉的故障;而把数据集中到一处,也不等于把风险集中到一处。
哪些区域适合这样做
- 需要应对整家 DNS 服务商宕机风险的区域;
- 以静态记录为主,或地域线路记录都配有默认线路的区域。
结语:冗余、智能调度和治理,不必再三选二
DNS 是所有业务的第一跳。过去要在这一跳上做冗余,就得在几家服务商之间退回共有的最小功能集,智能调度和统一治理都要让步。以 OpenResty Edge 为唯一数据源之后,这笔账可以换一种算法:
- 智能调度只需要建设一处。 地域线路、健康检查和 GSLB 都集中在 OpenResty Edge,从服务商只需提供标准的从服务器能力,不必在每家重复采购、重复配置智能 DNS。
- 不被任何一家服务商绑定。 从服务商通过标准协议同步,可以按需增减和更换,不需要迁移记录。
- 治理成本不随服务商数量增加。 不管接入几家,改动都只在 OpenResty Edge 上经过同一套权限、版本和发布流程。
- DNS 和网关在同一个平台。 记录直接解析到网关集群,节点健康状态直接反映在解析结果里,DNS Flood 防护也内建其中,不用在 DNS 和网关两套系统之间来回对齐。
这套架构尤其适合以下场景:
- 解析中断即营收中断的在线业务,如电商、在线支付和游戏:服务商级故障时其他家继续应答,平时仍保留就近访问。
- 多地域、多集群部署的业务:地域调度和跨集群容灾是核心能力,不能为了冗余而放弃。
- 自建私有 CDN 的企业:OpenResty Edge 作为权威 DNS 承接私有 CDN 的入口,多服务商冗余保护的正是整张边缘网络的第一跳。
- 多团队共用、对变更审计有要求的组织,如金融和政企:每个团队只管自己的区域,每一次改动都有记录可追溯。
建议先挑一个静态记录为主、流量不大的区域,接入一家从服务商,按文档完成配置,用 dig 对比 OpenResty Edge 和从服务商的应答,确认一致后,再在注册商处把从服务商加入 NS 委派。
常见问题
OpenResty Edge 可以作为 Cloudflare Secondary DNS 的主服务器吗?
可以。OpenResty Edge 26.9.1-1 起支持 AXFR 区域传输和 TSIG 鉴权,可以作为 Cloudflare Secondary DNS 等从服务商的主服务器。Cloudflare 的区域传输功能只对 Enterprise 客户开放。
接入从服务商后,OpenResty Edge 的地域解析和 GSLB 还能用吗?
能。OpenResty Edge 仍在公网 NS 列表里,照常按查询来源和实时状态应答地域线路、网关调度和健康检查记录。从服务商同步的是区域中的静态记录,负责在任何一家不可用时继续应答。
接入从服务商后,需要把 OpenResty Edge 隐藏起来吗?
不需要。智能调度只在 OpenResty Edge 自己应答时生效,从服务商同步到的是静态记录和默认线路。让 OpenResty Edge 和从服务商一起列在公网的 NS 委派里,问到 OpenResty Edge 的查询就能得到就近、健康的调度结果,任何一家不可用时再由其他家继续应答。
关于 OpenResty Edge
OpenResty Edge 是一款专为微服务和分布式流量架构设计的全能型网关软件,由我们自主研发。它集流量管理、私有 CDN 构建、API 网关、安全防护等功能于一体,帮助您轻松构建、管理和保护现代应用程序。OpenResty Edge 拥有业界领先的性能和可扩展性,能够满足高并发、高负载场景下的苛刻需求。它支持调度 K8s 等容器应用流量,并可管理海量域名,轻松满足大型网站和复杂应用的需求。
→ 权威 DNS 只是 OpenResty Edge 的能力之一,其余能力见什么是 OpenResty Edge。
关于作者
章亦春是开源 OpenResty® 项目创始人兼 OpenResty Inc. 公司 CEO 和创始人。
章亦春(Github ID: agentzh),生于中国江苏,现定居美国湾区。他是中国早期开源技术和文化的倡导者和领军人物,曾供职于多家国际知名的高科技企业,如 Cloudflare、雅虎、阿里巴巴, 是 “边缘计算“、”动态追踪 “和 “机器编程 “的先驱,拥有超过 22 年的编程及 16 年的开源经验。作为拥有超过 4000 万全球域名用户的开源项目的领导者。他基于其 OpenResty® 开源项目打造的高科技企业 OpenResty Inc. 位于美国硅谷中心。其主打的两个产品 OpenResty XRay(利用动态追踪技术的非侵入式的故障剖析和排除工具)和 OpenResty Edge(最适合微服务和分布式流量的全能型网关软件),广受全球众多上市及大型企业青睐。在 OpenResty 以外,章亦春为多个开源项目贡献了累计超过百万行代码,其中包括,Linux 内核、Nginx、LuaJIT、GDB、SystemTap、LLVM、Perl 等,并编写过 60 多个开源软件库。
关注我们
如果您喜欢本文,欢迎关注我们 OpenResty Inc. 公司的博客网站 。也欢迎扫码关注我们的微信公众号:
翻译
我们提供了英文版和中文版(本文)。我们也欢迎读者提供其他语言的翻译版本,只要是全文翻译不带省略,我们都将会考虑采用,非常感谢!




















