当我在 Windows Server DNS 服务器或 AWS Directory Service DNS 设置中使用条件转发器时,会遇到 CNAME 记录解析问题。
简短描述
当您在以下环境中使用 Windows DNS 服务器或 AWS Directory Service 及其条件转发器时,会出现 CNAME 记录解析问题:
- 处于私有本地设置的 Windows DNS 服务器会使用条件转发器向 Amazon Route 53 解析器的入站端点发送 DNS 查询。
- 私有 Amazon Virtual Private Cloud (VPC) 设置中的 Windows DNS 服务器会使用条件转发器向 Route 53 解析器发送 DNS 查询。
解决方法
DNS 客户端收到 NOERROR 响应,但无法解析私有托管区上的 CNAME 记录值
当 Windows DNS 服务器为 CNAME 记录 (cname.example.com) 提供了条件转发器,但没有为 CNAME 记录值 (example.net) 提供条件转发器时,就会出现此问题。
当 Windows DNS 服务器向 Amazon Route 53 转发查询时,Route 53 解析器会解析 cname.example.com 和 example.net,并以 A 记录进行响应。此响应根据每条记录的生存时间 (TTL) ,缓存在 Windows DNS 服务器上。如果 DNS 服务器有 cname.example.com 的有效缓存,但 example.net 的缓存已过期,则 DNS 服务器仅返回 CNAME 记录值。有关 Route 53 解析器如何管理 CNAME 查询的更多信息,请参阅 Amazon Route 53 DNS 最佳实践中的 CNAME 记录。
以下示例输出显示了不同的条件转发器配置。
托管区信息
Public Hosted Zone (example.com)
cname.example.com CNAME Simple - No example.net 300
Private Hosted Zone (example.net)
example.net A Simple - No 10.0.0.100 10 - - -
使用条件转发器进行初始挖掘查询,该转发器仅为 cname.example.com 创建,没有用于记录的缓存
$ dig cname.example.com. +noedns +noquestion
; <<>> DiG 9.16.48-RH <<>> cname.example.com.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38053 <- NOERROR response
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; ANSWER SECTION:
cname.example.com. 300 IN CNAME example.net.
example.net. 10 IN A 10.0.0.100 <- A record IP address of example.net
;; Query time: 10 msec
;; SERVER: 10.0.0.53#53(10.0.0.53) <- a client's own Windows DNS server
;; WHEN: Sat Mar 09 22:11:34 UTC 2024
;; MSG SIZE rcvd: 110
使用条件转发器进行挖掘查询,该转发器仅为 cname.example.com 创建,有效缓存,仅用于 cname.example.com
$ dig cname.example.com. +noedns +noquestion
; <<>> DiG 9.16.48-RH <<>> cname.example.com.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47918 <- NOERROR response
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; ANSWER SECTION:
cname.example.com. 280 IN CNAME example.net. <- No IP address returned
;; Query time: 0 msec <- Query time is 0 because it's a cache response
;; SERVER: 10.0.0.53#53(10.0.0.53) <- a client's own Windows DNS server
;; WHEN: Sat Mar 09 22:11:54 UTC 2024
;; MSG SIZE rcvd: 94
使用条件转发器进行挖掘查询,该转发器为两种记录创建
$ dig cname.example.com. +noedns +noquestion
; <<>> DiG 9.16.48-RH <<>> cname.example.com.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38153 <- NOERROR response
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; ANSWER SECTION:
cname.example.com. 280 IN CNAME example.net.
example.net. 10 IN A 10.0.0.100 <- A record IP address of example.net
;; Query time: 10 msec
;; SERVER: 10.0.0.53#53(10.0.0.53) <- a client's own Windows DNS server
;; WHEN: Sat Mar 09 22:11:54 UTC 2024
;; MSG SIZE rcvd: 110
要解决此错误,请执行以下操作:
- 对于您的 Windows DNS 服务器,将 example.net 的条件转发器设置到 Route 53 解析器的入站端点。有关更多信息,请参阅 Microsoft 网站上的创建条件转发器。
- 对于您的 Directory Service DNS 设置,将 example.net 的条件转发器配置为 Route 53 解析器。
**注意:**要解析私有托管区记录,请在您的亚马逊 VPC 上将enableDNSHostnames 和 enableDnsSupport 属性设置为 True。