Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
如何解决 Route 53 私有托管区的 DNS 解析问题?
我想解决我的 Amazon Route 53 私有托管区的 DNS 解析问题。
简短描述
要修复私有托管区 DNS 问题,请验证 Amazon Virtual Private Cloud (Amazon VPC) 设置、区域关联和 DNS 服务器设置。
解决方法
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
确认 VPC 中的 DNS 支持
要允许解析私有托管区记录,请完成以下步骤:
- 在您的 Amazon VPC 中启用 DNS 支持。
- 验证您的 VPC 中的 DNSSupport 和 DNSHostnames 是否设置为 True。有关详细信息,请参阅查看和更新 VPC 的 DNS 属性。
确认正确的 VPC ID 关联
确认已将正确的 VPC ID 与您的私有托管区相关联。此外,确保您在同一 VPC 中查询域的资源记录。
当您将私有托管区与您的 VPC 相关联时:
- Route 53 Resolver 会创建自动定义的规则并将其与您的 VPC 相关联。
- 您的 VPC 中的资源可以查询 Resolver 以解析私有托管区中的 DNS 记录。
要列出与托管区关联的 VPC,请在 AWS CLI 中运行以下命令:
aws route53 get-hosted-zone --id VPC_ID
注意: 请将 VPC_ID 替换为您的相关值。
要列出与特定 VPC 关联的私有托管区,请在 AWS CLI 中运行以下命令:
aws route53 list-hosted-zones-by-vpc --vpc-id VPC_ID --vpc-region REGION_ID
**注意:**将 HOSTED_ZONE_ID、VPC_ID 和 REGION_ID 替换为您的相关值。
检查自定义 DNS 服务器配置
如果您在 VPC 中的 DNS 的 DHCP 选项中配置了自定义 DNS 服务器或 Active Directory 服务器,请验证以下配置:
- 转发规则: 服务器将私有域 DNS 查询转发到您的 VPC 的 DNS 服务器 IP 地址。
- 域配置: 自定义服务器中的域与您的私有托管区不同。
例如,如果您的 VPC 的主要 CIDR 范围为 172.31.0.0/16,则 VPC DNS 服务器的 IP 地址为 172.31.0.2。这是 Amazon VPC 网络范围加上 2。
查看 Resolver 配置设置
如果您遇到 DNS 解析或响应的间歇性中断问题,请查看源实例的 Resolver 配置设置:
- 对于 Linux 实例,使用 cat/etc/resolv.conf 和 cat/etc/hosts 文件。
- 对于 macOS,请参阅 macOS 用户指南中的在 Mac 上更改 DNS 设置。
- 对于 Windows,请完成以下步骤:
选择 Settings(设置),然后选择 Network & internet(网络和互联网)。
在 Advanced network settings(高级网络设置)下,选择 Change adapter settings(更改适配器设置)。
右键单击网络连接,然后选择 Properties(属性)。
选择 IPv4 properties(IPv4 属性),然后在 DNS 服务器地址中输入首选的 DNS IP 地址。
例如,如果您配置了 resolv.conf,则可以使用 rotate(轮换)选项在 Amazon DNS 和 Google DNS (8.8.8.8) 之间对查询进行负载平衡。resolv.conf 文件将如下所示:
options rotate; generated by /usr/sbin/dhclient-script nameserver 8.8.8.8 nameserver 172.31.0.2
在您向公共 Google DNS (8.8.8.8) 发出的第一个查询中,您收到了预期的 NXdomain 响应。Resolver 正尝试在公有托管区而不是私有托管区中查找响应:
Private hosted Zone Record - resolvconf.local [ec2-user@ip-172-31-253-89 etc]$ curl -vks http://resolvconf.local* Rebuilt URL to: http://resolvconf.local/ * Could not resolve host: resolvconf.local 15:24:58.553320 IP ip-172-31-253-89.ap-southeast-2.compute.internal.40043 > dns.google.domain: 65053+ A? resolvconf.local. (34) 15:24:58.554814 IP dns.google.domain > ip-172-31-253-89.ap-southeast-2.compute.internal.40043: 65053 NXDomain 0/1/0 (109)
但是,第二个查询解析成功。第二个查询到达与您的私有托管区关联的 VPC DNS 解析器:
[ec2-user@ip-172-31-253-89 etc]$ curl -vks http://resolvconf.local* Rebuilt URL to: http://resolvconf.local/* Trying 1.1.1.1... * TCP_NODELAY set * Connected to resolvconf.local (1.1.1.1) port 80 (#0) 15:25:00.224761 IP ip-172-31-253-89.ap-southeast-2.compute.internal.51578 > 172.31.0.2.domain: 7806+ A? resolvconf.local. (34) 15:25:00.226527 IP 172.31.0.2.domain > ip-172-31-253-89.ap-southeast-2.compute.internal.51578: 7806 1/0/0 A 1.1.1.1 (50)
确认私有托管区没有重叠的命名空间
当多个区域的命名空间重叠时:
- Resolver 根据最具体的匹配来路由流量
- 如果存在匹配区域但没有匹配的记录,则 Resolver 返回 NXDOMAIN
确认在最相关私有托管区中配置了正确的记录,以成功进行 DNS 解析。
例如,如果您有两个带有以下记录的私有托管区:
| 私有托管区 | 记录名称 | 值 |
| local | overlap.privatevpc.local | 60.1.1.1 |
| privatevpc.local | overlap.privatevpc.local | 50.1.1.1 |
然后,您将收到来自最相关匹配的私有托管区的以下查询结果:
[ec2-user@IAD-BAS-INSTANCE ~]$ dig overlap.privatevpc.local +short 50.1.1.1
检查私有托管区中的区域/子域委派
私有托管区不支持区域/子域委派。确认您在父域的私有托管区中没有为子域配置名称服务器 (NS) 记录。如果配置了委派,则客户端将从 VPC 解析器获得“SERVFAIL”响应代码。
以下是导致 SERVFAIL 的委派配置示例:
- 私人托管区:abc.com
- 委派 NS 记录:kc.abc.com
- 资源记录:test.kc.abc.com
[ec2-user@ip-172-31-0-8 ~]$ dig test.kc.abc.com ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 63414 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;test.kc.abc.com IN A ;; Query time: 15 msec ;; SERVER: 172.31.0.2#53(172.31.0.2) ;; WHEN: Fri Apr 16 15:57:37 2021 ;; MSG SIZE rcvd: 48
确认路由策略支持
确认您在资源记录中配置了私有托管区支持的路由策略。有关详细信息,请参阅私有托管区中的记录支持的路由策略。
检查 Resolver 规则和出站 Resolver 端点使用情况
确认您使用的是带有出站端点的 Resolver。在以下情况下,Resolver 规则优先:
- 您有一条 Resolver 规则,将流量路由到您私有托管区的域的网络。
- 您有一条与同一 VPC 关联的 Resolver 规则,该规则也与私有托管区相关联。
有关详细信息,请参阅解析 VPC 与您的网络之间的 DNS 查询。
防止查询循环
为避免创建循环,请完成以下步骤:
- 不要在 Resolver 转发规则中创建指向 VPC 的入站端点的目标 IP 地址。
- 不要将端点与私有托管区相关联。
- 不要将同一 Resolver 规则与您的 VPC 相关联。
查询循环示例:
ubuntu@ip-172-32-254-37:~$ dig overlap.privatevpc.local ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 9007 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; QUESTION SECTION: ;overlap.privatevpc.local. IN A ;; Query time: 2941 msec ;; SERVER: 172.32.0.2#53(172.32.0.2)
要解决此问题并打破循环,请删除中心 VPC 与规则的关联。成功响应的示例:
ubuntu@ip-172-32-254-37:~$ dig overlap.privatevpc.local ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58606 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;overlap.privatevpc.local. IN A ;; ANSWER SECTION: overlap.privatevpc.local. 0 IN A 50.1.1.1 ;; Query time: 5 msec ;; SERVER: 172.32.0.2#53(172.32.0.2)
确认本地 Resolver 发送了递归请求
对于从本地到 Route 53 Resolver 的查询:
- 使用 Resolver 入站端点转发 DNS 查询。
- 确保本地 Resolver 发送递归(非迭代)查询。
要验证分辨率类型,请完成以下步骤:
- 在本地 DNS Resolver 上使用数据包捕获。
- 查看 DNS 标志(所需递归 = 0)。
- 使用 +norecurse dig 命令进行测试,或使用 nslookup 设置 norecurse。
迭代查询失败的示例:
[ec2-user@IAD-BAS-INSTANCE ~]$ dig @172.31.253.150 overlap.privatevpc.local +norecurse ;; <<>> DiG 9.11.0rc1 <<>> @172.31.253.150 overlap.privatevpc.local +norecurse; (1 server found) ;; global options: +cmd ;; connection timed out; no servers could be reached
递归查询成功的示例:
[ec2-user@IAD-BAS-INSTANCE ~]$ dig @172.31.253.150 overlap.privatevpc.local ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19051 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;overlap.privatevpc.local. IN A ;; ANSWER SECTION: overlap.privatevpc.local. 0 IN A 50.1.1.1 ;; Query time: 200 msec ;; SERVER: 172.31.253.150#53(172.31.253.150)
验证 Amazon 提供的 DNS 的正确规则优先级
当客户端实例向 Resolver 发送查询时,Resolver 会验证实例的规则,确定将请求路由到何处。
最相关的规则优先。例如,如果存在 test.example.com Resolver 规则和 test.example.com 私有托管区,则 Resolver 规则优先。查询会转发到规则中配置的服务器或目标 IP 地址。
如果规则位于同一域级别,则它们具有以下优先级:
- Resolver 规则
- 私有托管区规则
- 内部规则
相关信息
- 语言
- 中文 (简体)

