云上专有网络内部的“电话簿”:PrivateZone 高可用架构与跨 VPC 解析同步详解

云上的私有 DNS(PrivateZone)就像专有网络内部的电话簿,让云资源通过内网域名互访,避免暴露公网 IP。但单点故障、跨 VPC 无法互通是常见痛点。本文从零讲解 PrivateZone 的工作原理、高可用架构设计思路,以及如何实现跨 VPC 的 DNS 解析同步,帮助你构建更健壮的云网络。

云上专有网络内部的“电话簿”:PrivateZone 高可用架构与跨 VPC 解析同步详解
封面图:ZuCDN · ZuCDN 原创

关于DNS PrivateZone,最值得先弄清楚的是配置边界和排错顺序。当你把业务搬到云上,创建了一个又一个 VPC(虚拟私有云),分配给每台云服务器一个内网 IP,然后开始部署微服务、数据库、缓存集群……你会发现一个很实际的问题:服务之间怎么互相找到?

传统做法是写死 IP 地址,但一旦 IP 发生变化(比如重启后 IP 被 DHCP 换掉),所有依赖都要跟着改。或者你给每台机器分配一个弹性公网 IP,但这样既浪费公网带宽,又增加了安全风险。其实,最好的方式就是——内网 DNS。

你可能会说:“我知道 DNS,不就是把域名翻译成 IP 吗?” 没错,但我们这里说的是私有的 DNS,只在你的云上专有网络内部生效,外部互联网完全访问不到。这个私有 DNS 就是云厂商提供的 PrivateZone 服务(不同厂商的名字略有差异,但概念一致)。它的核心价值在于:让云资源通过有意义的内网域名(如 db.internalredis.prod)互相访问,而无需关心底层 IP 的变化

但现实挑战是:单区域的 VPC 很容易搭建 PrivateZone,可一旦涉及多 VPC、多区域、甚至跨账号,DNS 同步就会变得复杂。更关键的是,PrivateZone 本身也是一个服务,如果它挂了,你整个网络的内网域名解析都会瘫痪。所以,本文专门来聊两件事:PrivateZone 的高可用架构怎么设计跨 VPC 的 DNS 解析同步又该怎么做

为什么需要私有 DNS?从两个痛点说起——DNS PrivateZone

痛点一:IP 地址是变化的

云服务器在启动时会被分配内网 IP,但这不是永久绑定的。当机器因故障被自动修复、弹性伸缩扩缩容、或者更换子网时,内网 IP 可能完全变掉。如果你的代码里到处写死了 192.168.1.100,一旦这个 IP 变成了 192.168.1.200,整个系统就乱套了。

域名则不同。你给数据库集群的负载均衡器绑定一个域名 db.internal,无论背后 IP 怎么变化,只要解析记录及时更新,调用方就永远访问正确。这个“自动更新”的能力,正是 PrivateZone 和云 API 结合提供的。

痛点二:公网 DNS 泄露内网信息

有些团队图省事,直接把内网 IP 注册到公网 DNS 上,比如将 db.company.com 解析为 10.0.0.5。这样做隐患巨大:第一,公网 DNS 解析会暴露你的网络拓扑;第二,如果解析被污染或劫持,攻击者可能将你的域名指向恶意 IP;第三,公网 DNS 的解析链路更长,延迟更高。

PrivateZone 的私有 DNS 空间完全隔离在 VPC 内部,只有 VPC 内的虚拟机才能查询这些域名,既安全又低延迟。

PrivateZone 的工作原理:一个简化模型

故障定位思路

想象一下,你在云上创建了一个 PrivateZone,比如 internal.aws(AWS 的 Route53 Private Hosted Zone)或 local.aliyun(阿里云的 PrivateZone)。然后你在这个 Zone 里添加记录:mysql.internal.aws 指向 10.0.1.100。接下来,你需要把这个 Zone 关联到某个 VPC(或多个 VPC)。

当 VPC 里的任何一台虚拟机尝试解析 mysql.internal.aws 时,操作系统首先会向 VPC 默认的 DNS 服务器(通常是云厂商提供的 169.254.169.253 或类似地址)发送查询请求。这个 DNS 服务器经过判断,发现要查询的域名属于某个 PrivateZone,就会返回你设定的记录值。整个过程对外面互联网完全不可见。

关键点:PrivateZone 的解析请求是由 VPC 的默认 DNS 代理完成的,这个代理本身是云厂商构建的冗余服务,通常不会轻易宕机。但你可能会问:如果云厂商的这个 DNS 代理挂了怎么办?或者我有多区域、多云的需求,如何保证私有 DNS 的连续性?这就引出了高可用架构。

高可用架构:不止是依赖云厂商的承诺

任何一个云服务都有 SLA,但 SLA 不等于 100% 可用。为了真正实现高可用,你需要从多个层面进行冗余设计。

第一层:利用云厂商的原生架构

首先,了解你的云厂商 PrivateZone 的内部架构。通常,PrivateZone 的控制面(管理界面、API)和数据面(DNS 查询处理)是分离的。控制面出问题只影响配置变更,不影响现有解析。数据面通常部署在多个可用区中,并具备自动故障转移能力。你只需要将 PrivateZone 关联到 VPC 即可,无需额外操作。

但有一个容易被忽略的细节:PrivateZone 关联 VPC 时,是否能跨区域? 大多数云厂商允许同区域跨 VPC 关联,但不支持跨区域直接关联。也就是说,如果你在 us-east-1 区域创建了一个 PrivateZone,无法直接让 us-west-2 区域的 VPC 自动解析它。这就引出了跨区域、跨 VPC 的同步问题。

第二层:跨区域主从 DNS 架构

为了实现跨区域的高可用,你需要搭建一组辅助 DNS 服务器。常见方案是:在区域 A 的主 VPC 中部署主 DNS 服务器(比如 Bind9 或 CoreDNS),它从 PrivateZone 定期同步记录;然后在区域 B 的 VPC 中部署从 DNS 服务器,从主服务器上拉取区域数据。所有 VPC 内的虚拟机将其默认 DNS 指向这些自建的 DNS 服务器,而不是直接使用云厂商的 VPC DNS。

这种架构的好处是:即使云厂商的区域级 PrivateZone 完全不可用(极端情况),你的自建 DNS 仍然能基于最后同步的数据继续提供解析服务。当然,代价是你需要维护多台 DNS 服务器,并处理同步、监控、故障恢复等问题。

第三层:缓存与客户端冗余

在应用层,你还可以配置 DNS 客户端的 TTL(生存时间)和重试策略。比如将私有域名的 TTL 设置得稍微长一些(例如 300 秒),这样即使 DNS 服务器短暂宕机,客户端缓存还能继续工作。同时,在应用程序中使用多个 DNS 服务器地址(如主 DNS 和备用 DNS),一旦主 DNS 无响应,自动切换到备用服务器。

跨 VPC 解析同步:本质是“数据”的传递

跨 VPC 解析同步的核心难点在于:PrivateZone 本身被限定在一个区域。要实现跨区域或跨账号的私有 DNS 解析,你必须把一份 DNS 记录复制到另一个地方。这里有几种常见的实现方式:

方式一:通过云厂商的解析器转发(条件转发)

大部分云厂商都提供了 Outbound Resolver 或 Conditional Forwarder 功能。你可以配置:当 VPC A 中的虚拟机查询某个特定域名(如 .internal.zone)时,VPC 的默认 DNS 不是自己解析,而是将请求转发到你指定的 DNS 服务器(比如你在另一个 VPC 中部署的权威 DNS)。

这样,你只需要在 VPC B 维护 PrivateZone 的权威数据,VPC A 通过转发规则去查询。但缺点是增加了网络延迟,且依赖跨 VPC 的连通性(需要建立 VPC Peering 或 Transit Gateway)。

方式二:自定义同步脚本 + API

如果你希望保持每个 VPC 都能独立、低延迟地提供解析,更好的办法是:利用云厂商的 API,定时(或事件驱动)从一个区域的 PrivateZone 中读取所有记录,然后通过 API 写入到另一个区域的 PrivateZone。这本质上是“数据同步”。

实现时可以这样:在中心部署一个 Lambda 函数或定时任务,每 5 分钟调用一次 ListResourceRecordSets API(AWS Route53 的 API 之一),然后调用 ChangeResourceRecordSets 将记录同步到目标区域的 PrivateZone。当然要注意增量更新和冲突处理。这个方案的优点是可控性强,无额外网络依赖,缺点是需要开发维护,且同步存在延时(通常在几分钟级别)。

方式三:多云/多厂商的 DNS Federation

当你需要同时使用阿里云和 AWS 时,私有 DNS 的同步更加复杂。你可以在每个云上各部署一套 PrivateZone,然后用自定义脚本双向同步。也可以抽象出一个外部权威 DNS 层(比如运行在自建机房或托管区域的 CoreDNS 集群),所有云的 VPC 都配置条件转发到这套权威 DNS。这样,权威数据统一管理,各个云的 VPC 都是“解析者”而非“管理者”。

DNS PrivateZone:实践中的注意事项

实际操作要点

在搭建 PrivateZone 高可用和跨 VPC 同步时,有几个容易被忽视的陷阱:

  • 循环解析:如果 VPC 的默认 DNS 把查询转发到自建 DNS,而自建 DNS 又回去查询默认 DNS,就会形成死循环。一定要在转发规则中明确区分公有和私有域名。
  • TTL 与同步频率的权衡:同步频率越高,数据一致性越好,但 API 调用成本也越高。根据业务允许的最终一致性来设置 TTL 和同步间隔。比如,如果数据库 IP 变更后允许 5 分钟内的不一致,那么 TTL 可以设为 60 秒,同步间隔设为 120 秒。
  • 灾难恢复与回滚:所有的 DNS 变更都要记录版本。当同步出错导致错误记录被传播时,能否快速回滚?建议每次同步前备份当前记录集。
  • 安全加固:PrivateZone 中的记录可能包含敏感信息(如数据库 IP),跨 VPC 同步时一定要通过加密通道(VPC Peering 加密或 TLS)。有条件的话,建议限制谁可以修改 PrivateZone,并开启操作审计日志。

总结:从“能用”到“好用”的必经之路

我的处理经验

PrivateZone 是云上网络的基础设施之一,就像大楼里的弱电系统,平时看不见,一旦出问题就乱了套。对于初入云端的团队,直接使用云厂商的 PrivateZone 关联 VPC 就能满足大部分需求。但当业务发展到多区域、多账号甚至多云时,单靠云厂商的原生能力往往不够。

理解其背后的原理和局限,掌握跨 VPC 同步的方法,并且学会设计冗余的高可用架构,才能让你的云网络真正健壮起来——无论底层发生什么变化,服务之间的“电话簿”始终准确可用。把这些步骤跑通后,DNS PrivateZone基本就能稳定落地。

延伸阅读