全球企业每年在DNS架构上烧掉的钱,够买3艘航母。但有个IP段让工程师集体失眠——35.199.192.0/19,谷歌Cloud DNS的"幽灵地址",企业防火墙见一个拦一个。
这不是配置错误,是设计层面的死结。一位刚踩完坑的架构师在GitHub吐槽:「我们花了两周排查,最后发现是谷歌自己埋的雷。」
那个删不掉的神秘路由
事情要从2024年说起。某跨国企业把核心业务迁上谷歌云,IT总监的要求很简单:本地Infoblox DNS必须继续做老大,云上的记录也得它说了算。
团队选了Cloud DNS的转发区(Forwarding Zone),把查询指向本地数据中心。测试当天,防火墙日志炸了——源地址35.199.192.0/19的请求被批量丢弃。
这个地址段的诡异之处在于:它看起来是公网IP,实际上只在谷歌云内部有意义。更离谱的是,每个VPC都有一条"隐形路由"指向它,控制台里看不见,API删不掉,VPC对等连接(VPC Peering)和Network Connectivity Center(网络连接中心,NCC)都不交换这条路由。
企业安全团队的反应高度一致:陌生公网段?封。等工程师查明真相申请放行,变更流程走两周,项目已经黄了一半。
谷歌文档里轻描淡写提了一句「某些防火墙可能需要放行」,但没解释为什么这个地址会出现在本不该出现的场景里。
DNS查询的"跨VPC死亡陷阱"
问题的根源比防火墙规则更深。Cloud DNS转发区有两种路由模式:标准模式走公网,私有模式走VPC内部网络。企业当然选私有模式——谁想把内网DNS查询暴露到互联网?
但私有模式有个致命副作用:查询源地址强制变成35.199.192.0/19。这个设计本意是让目标DNS服务器能正确回包,却在混合云场景里制造了连锁灾难。
假设你有两个VPC:App VPC跑业务,Infra VPC放DNS服务器。App VPC的Cloud DNS想把查询转发给Infra VPC的DNS VM。
查询包从App VPC出发,源地址35.199.192.0/19,目标地址是Infra VPC的DNS VM。NCC把路由交换得很好,包能到。但响应包返程时,Infra VPC的隐形路由生效了——35.199.192.0/19被认为在本地,根本不回App VPC。
查询消失在黑洞里。超时。重试。再超时。
工程师抓包看到请求出去了,响应没回来,第一反应是防火墙又抽风。折腾三天才发现,是谷歌自己的路由逻辑在搞事。
Network Connectivity Center的"最后一公里"悖论
NCC被谷歌定位为混合云网络的中枢,支持SD-WAN、专线、VPN多种接入方式。它的核心能力是在不同VPC和本地网络之间交换路由,让资源互通。
但在DNS这个特定场景,NCC有个盲区:它交换的是子网路由,不是那条特殊的35.199.192.0/19。这意味着即使你把所有VPC都挂到NCC上,Cloud DNS的跨VPC转发依然会掉进黑洞。
那位架构师的解决方案堪称暴力美学:在Infra VPC里部署一台BIND虚拟机,假装成IPAM(IP地址管理)平台的网格成员。App VPC不直接转发给这台VM,而是通过DNS对等(DNS Peering)把查询"嫁接"到Infra VPC的DNS上下文。
关键区别在于:DNS Peering不走数据平面,只在元数据层面把查询目标切换到另一个VPC的Cloud DNS实例。响应路径完全由Infra VPC自己处理,绕开了跨VPC路由的死亡陷阱。
整个架构用了三个VPC:App VPC跑业务负载,Infra VPC托管DNS桥接,SD-WAN VPC对接本地网络。NCC负责让App VPC知道怎么到达本地子网,但DNS查询的闭环完全在Infra VPC内完成。
企业IPAM的"权威执念"
为什么非要折腾这么复杂的拓扑?直接让Cloud DNS管所有记录不行吗?
不行。金融、医疗、制造业的合规部门有个执念:IPAM平台必须是唯一权威源。Infoblox、EfficientIP、BlueCat这些系统不只是DNS服务器,它们关联着IP分配、设备发现、安全策略,是网络治理的中枢神经。
让Cloud DNS自建权威区,等于在企业架构里制造"影子DNS",审计的时候解释不清。更现实的问题是:云上的VM IP地址要同步回IPAM,变更记录要留痕,这些都不是Cloud DNS的强项。
所以方案必须满足:本地IPAM继续当老大,云上查询能找它,响应能回来,防火墙不报警。
那位架构师的设计里,Cloud DNS只扮演"智能接线员"角色。四个托管区(Managed Zone)分工明确:两个Peering Zone负责把gcp.example.com和corp.example.com的查询导向Infra VPC,两个Forwarding Zone在Infra VPC内部完成到BIND VM的最后一跳。
所有转发都显式指定forwarding_path = "private",确保不走公网。BIND VM再向上游的企业IPAM发起递归查询,拿到结果后原路返回。
35.199.192.0/19的"薛定谔公网"属性
这个地址段的身份焦虑,折射出云计算的一个深层矛盾:什么是"内部"?什么是"外部"?
在AWS,类似的功能用不同的地址实现。Azure有自己的方案。谷歌选择了一个历史上属于IANA预留空间的范围,但没向企业防火墙厂商充分同步这个信息。
结果是一个经典的安全/可用性冲突:严格遵循安全最佳实践(屏蔽未知公网段)的防火墙,恰好破坏了云原生DNS的设计假设。
谷歌的文档在2024年更新了几次,增加了对35.199.192.0/19的解释,但"非可移除路由"这个设计决策没有动摇。工程师社区里有人提议用私有DNS解析器(Private DNS Resolver)作为替代方案,但那是另一个价格档位的产品。
那位架构师在复盘文档里写了一句:「理解Cloud DNS的转发路径,比配置它花的时间多十倍。」
查询流程的最终形态是这样的:App VM发起dig请求,命中App VPC的Peering Zone,查询被元数据重定向到Infra VPC的Cloud DNS实例;Infra VPC的Forwarding Zone把查询发给BIND VM,源地址35.199.192.0/19;BIND VM向企业IPAM递归,拿到10.0.2.10的A记录;响应沿原路返回,因为全程没离开Infra VPC的上下文,隐形路由恰好生效。
一个查询经历了三次DNS上下文切换,两次VPC边界穿越(逻辑上),最终靠"不穿越"的设计才成功。
SD-WAN设备的"双面间谍"角色
架构里的SD-WAN VM是个有趣的存在。它同时属于两个网络:通过VPC Network Interface(网络接口)接入谷歌云,通过外部网络接口对接本地MPLS或互联网专线。
NCC把它注册为Router Appliance Spoke(路由器设备分支),自动交换路由。App VPC因此学会了到达本地子网的路径,不需要手动配置静态路由。
但DNS流量不走SD-WAN VM。这是刻意的设计——如果把DNS查询也塞进SD-WAN隧道,源地址问题会更复杂,而且增加了单点故障风险。
SD-WAN VM只负责"东西向"的网络连通,DNS是"南北向"的控制平面,物理隔离。
这种分层在架构图上看起来干净,运维的时候却容易让人困惑:为什么网络通了,DNS还是超时?因为NCC解决的是IP可达性,不是DNS上下文的一致性。
从BIND VM到生产就绪的gap
那位架构师的方案用了BIND作为概念验证,但企业落地时通常会换成IPAM厂商提供的官方网格成员镜像。Infoblox有vNIOS,EfficientIP有SOLIDserver,BlueCat有类似产品。
这些镜像的核心价值不是功能,是合规——厂商认证、安全补丁、支持合同。用BIND POC可以,上生产得换。
另一个隐藏成本是HA设计。BIND VM单点部署是架构师的简化,真实环境需要至少两台,跨可用区分布,加上健康检查和自动故障转移。Cloud DNS的Peering Zone本身是高可用的,但背后的转发目标不能掉链子。
防火墙规则的管理也是持久战。35.199.192.0/19要放行,BIND VM的IP要放行,SD-WAN VM的接口要放行,任何一次安全策略收紧都可能误伤。
那位架构师建议:把DNS相关的防火墙规则单独成册,变更评审时必须有人懂这个地址段的特殊含义。
查询路径的调试工具也值得 investment。dig +trace能看到递归过程,但看不到VPC边界的元数据切换。谷歌云的Packet Mirroring(包镜像)可以抓包,但35.199.192.0/19的源地址在镜像流量里可能显示异常,因为那是内部实现细节。
最可靠的验证方法是端到端测试:在App VPC放一台VM,持续dig一个只有IPAM知道的内部域名,监控成功率和延迟。
Cloud DNS的产品边界
整个方案绕了一大圈,本质上是在填补Cloud DNS的产品缺口:它不提供原生的、跨VPC的私有DNS转发能力。
Peering Zone是个精巧的补丁,但它要求目标VPC必须有对应的托管区配置,不能直接把查询扔给任意IP。Forwarding Zone能指向任意IP,但受限于35.199.192.0/19的路由陷阱。
两者的组合实现了功能,但增加了架构复杂度。对比AWS Route 53的Resolver Endpoint,或者Azure Private DNS的虚拟网络链接,Cloud DNS的混合云故事确实更难讲。
谷歌的回应方向是Private DNS Resolver,一个托管的出站解析器,可以部署在VPC内部,避免35.199.192.0/19的问题。但价格、功能成熟度、与企业IPAM的集成度,都是待验证的变量。
那位架构师在文档结尾列了三个备选方案:继续维护BIND桥接、评估Private DNS Resolver、或者激进一点,把部分权威区迁移到Cloud DNS,降低对IPAM的依赖。
每个选项都有代价,没有银弹。
这个案例的启示或许是:云计算的"托管服务"承诺,在混合云场景里需要打折扣。当企业有强合规要求、复杂网络拓扑、遗留系统绑定的时候,云厂商的抽象层会露出接缝,需要工程师用创造性的脏活填补。
35.199.192.0/19就是那个接缝的标记。它不会消失,只会被更多人踩到。
那位架构师最后更新文档是在2024年12月,附了一张查询流程的ASCII艺术图,和一句备注:「如果谷歌哪天改了这条隐形路由的行为,整个方案会瞬间崩溃。但目前看来,他们动不了——太多存量依赖了。」
你的DNS架构里,有没有类似的"幽灵地址"在潜伏?
热门跟贴