Windows DNS 遮蔽公网域名解析

1. 问题现象

公司内网环境中,部分域名(如 <managed-domain>)的公网权威解析已托管至第三方云 DNS 服务商(国科云、阿里云)。内网客户端访问此类域名时,若未在自建 Windows DNS 服务器上手动添加对应的公网解析记录,访问将失败,浏览器典型报错为「无法访问此网站」或「找不到服务器 IP 地址」(ERR_NAME_NOT_RESOLVED / DNS_PROBE_FINISHED_NXDOMAIN)。

2. 环境背景

组件配置情况
内网 DNS自建 Windows Server DNS(域控/成员服务器),作为内网客户端的唯一/首选 DNS
正向查找区域本地托管了 <managed-domain> 等多个主区域(多因 AD 域控或内部业务系统解析需要而创建)
转发器配置了公共 DNS(114.114.114.114、119.29.29.29 等),用于处理非本地管辖域名的递归解析
公网侧<managed-domain> 的实际解析记录(网站、邮箱等)托管于国科云、阿里云的权威 DNS

3. 根因分析

Windows DNS Server 的查询处理优先级(从高到低):

  1. 本地区域数据(主区域/AD 集成区域/存根区域)——以**权威应答(Authoritative Answer)**方式直接回复
  2. 条件转发器(Conditional Forwarder)
  3. 转发器(Forwarder,递归查询)
  4. 根提示(Root Hints,迭代查询)

根本原因:本地权威区域对解析请求产生"遮蔽效应"(Zone Shadowing)。

只要服务器对某域名持有主要区域,它即认定自身为该域的权威服务器,所有命中该区域(含全部子域)的查询都会在本地数据库内终结,绝不会转向转发器或根提示。故障触发链如下:

  1. 客户端向内网 DNS 发起 www.<managed-domain> 的解析请求;
  2. 服务器按最大匹配原则命中本地区域 <managed-domain>,进入权威应答模式;
  3. 仅检索本地区域数据库,未找到 www 记录,本地查询失败;
  4. 关键断点:由于服务器认定自己是权威,不会将请求转发至外部转发器(如 114 DNS),也不会向公网发起递归/迭代查询;
  5. 服务器直接向客户端返回 NXDOMAIN(RCODE=3,域名不存在)或空应答,客户端访问失败。

关键结论:转发器与根提示仅对「服务器不具权威性」的域名生效。即使为 <managed-domain> 配置了条件转发器,只要同名主区域仍然存在,本地区域始终优先,转发规则永远不会被触发——这也是方案二必须先删除/迁移本地区域的原因。

4. 解决方案

4.1 方案一:手动镜像公网记录(应急恢复,适用于记录极少)

操作方法:在 <managed-domain> 本地区域内,手动创建与公网完全一致的 A/CNAME 记录(以内网 DNS 服务器执行 nslookup www.<managed-domain> 223.5.5.5 获取的公网真实记录为准)。

  • 优点:立即生效,完全可控;可实现内外网差异化解析(例如内网解析至专线或内网负载均衡地址)。
  • 缺点:双重维护、数据易漂移;公网记录变更后若未同步,将再次引发故障,且无任何自动变更提醒机制。

4.2 方案二:配置条件转发器(中期优化,适用于内网记录较少)

适用场景:域名在公网有大量记录,内网仅需解析极少数特定子域名(如域控 dc01.<managed-domain>)。

操作步骤:

  1. 全面梳理并导出本地区域中仍在内网使用的记录(Get-DnsServerResourceRecord 或 dnscmd /zoneprint);
  2. 在公网权威侧(阿里云/国科云)补齐仍需内网可见的记录;
  3. 删除本地主区域 <managed-domain>(若该区域承载 AD 域信息,须先行迁移 _msdcs、DC 的 SRV 等记录,切勿直接删除);
  4. 为纯内网使用的子域名单独创建小区域(如创建 dc01.<managed-domain> 区域);
  5. 新建条件转发器:域名填 <managed-domain>,目标 DNS 填公网权威 NS 地址或公共 DNS(如 223.5.5.5)。
  • 优点:大幅降低维护成本;除内网指定子域名外,其余请求自动转发至公网查询,与公网记录保持实时一致。
  • 缺点:前提是必须准确梳理出哪些子域名为纯内网使用。

变体方案——存根区域(Stub Zone):以公网权威 NS 为主服务器创建存根区域,通过 NS 引导解析。对权威 NS 变更较为敏感,一般优先推荐条件转发器。

4.3 方案三:拆分命名空间(长期最佳实践 ★)

从架构根源上消除内外网域名冲突(Split-DNS 架构反模式规避)。

操作方法:内网业务及 AD 域不再复用公网域名:

  • 公网使用:<managed-domain>

  • 内网使用:internal.<managed-domain>、corp.<managed-domain>

  • 优点:内外网 DNS 命名空间物理隔离,彻底消除权威遮蔽问题,符合微软 Active Directory 部署的最佳实践。

  • 缺点:对已有大量历史业务的老域名,迁移成本较高,需分阶段推进(双解析过渡 → 流量切换 → 下线旧区域)。

方案对比

方案生效速度维护成本改动范围适用阶段
手动镜像记录立即高(需持续同步)仅新增记录应急恢复
条件转发器中期低(一次性配置)删区域+建转发中期优化
拆分命名空间慢长期最低架构级调整长期规划

5. 验证与排障步骤

服务端验证:

# 模拟客户端向内网 DNS 查询
Resolve-DnsName www.<managed-domain> -Server <internal-dns-ip>

# 通过公共 DNS 获取公网真实记录及权威 NS
Resolve-DnsName www.<managed-domain> -Server 223.5.5.5
Resolve-DnsName <managed-domain> -Type NS -Server 223.5.5.5

# 清除 DNS 服务器端缓存(旧版系统可用 dnscmd /clearcache)
Clear-DnsServerCache -ComputerName <dns-server-name> -Force

客户端验证:

ipconfig /flushdns
nslookup www.<managed-domain>

判定依据:若 nslookup 应答服务器为内网 DNS 且返回 NXDOMAIN,而同一记录经公共 DNS 查询正常,即可确认命中「本地权威遮蔽」故障。

6. 后续行动建议

  • 短期:对当前无法访问的域名,按方案一在 Windows DNS 中补齐记录,清除缓存后恢复业务访问。
  • 中期:盘点 <managed-domain> 等冲突域名的内网使用面,对「内网记录少」的域名实施方案二(条件转发),降低运维负担。
  • 长期:规划命名空间拆分,从架构上杜绝此类问题复发。
  • 客户端纪律:网卡 DNS 必须仅指向内网 Windows DNS,严禁同时混配公网 DNS(如 114.114.114.114),否则会导致 AD 域登录超时或解析结果随 DNS 顺序随机漂移。