我有一个带有本地 DNS 服务器的虚拟私有云(VPC)。我设置了 Amazon Route 53 Resolver 反向规则和出站端点来解析来自这台服务器的反向 DNS 查询。但是,它们没有按预期工作。
解决方案
确定预期和实际的 DNS 响应
使用 dig 或 nslookup 直接查询您的本地 DNS 服务器的 IP 地址。这些工具会尝试解析正确的记录名称。
要使用 dig 执行反向 DNS 解析,请使用 -x 参数。当您使用此参数时,dig 会自动添加名称、类别和类型参数。请参阅 QUESTION SECTION,检查 dig 是否自动查询了正确的名称、类别和记录类型。
例如,您想使用以下值解析 IP 地址 172.31.2.23:
Name: 23.2.31.172.in-addr.arpa.
Class: IN
Record type: PTR
在此示例中,命令 dig -x 172.31.2.23 返回以下输出:
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.amzn2.0.2 <<>> -x 172.31.2.23;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58812
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;;
OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;23.2.31.172.in-addr.arpa. IN PTR
;;
ANSWER SECTION:
23.2.31.172.in-addr.arpa. 60 IN PTR example.com.
对于 nslookup,命令 nslookup 172.31.2.23 返回以下输出:
23.2.31.172.in-addr.arpa. name = example.com.
**注意:**意外的响应代码可能并不表示规则或端点配置存在问题:
- NXDOMAIN 可能是意外但有效的 DNS 响应。此响应表示查询的服务器没有请求的记录。
- SERVFAIL 表示查询的路径上存在超时或其他问题。此响应需要进一步调查。
- 在 ANSWER SECTION 部分中的意外应答可能表示您使用了其他规则。
确定查询是否到达了 VPC DNS 解析器
要让查询匹配 VPC 上的规则,此查询必须到达 VPC DNS 解析器。检查 VPC 设置以确认您已激活 DNS 支持。
要检查解析器 IP 地址,请参阅 dig 或 nslookup 中的 server 字段:
dig
;; SERVER: 172.16.0.2#53(172.16.0.2)
nslookup
Server: 172.16.0.2
**注意:**对于 VPC,VPC DNS 是 VPC CIDR 加 2。在这些示例中,VPC 的 IP 地址为 171.16.0.2。
找到匹配的最具体的规则
当查询到达 VPC DNS 解析器时,必须匹配该 VPC 上的规则。对规则进行评估时,将匹配最具体的规则。要找到此规则,请完成以下步骤:
- 确定 VPC 和连接的 VPC 上的任何自动定义规则。对于通过传输网关(支持 DNS)连接的对等 VPC 或 VPC,请记下每个连接的 CIDR 的反向解析的所有规则。
注意:当 DNS 主机名被设置为 true 时,解析器会创建这些自动定义的规则。如果要覆盖自动定义的规则,可以为同一个域名创建条件转发规则。您也可以停用自动定义的规则。
- 如果您启用了 DNSSupport 和 DNSHostnames,请记下与 VPC 关联的所有私有托管区。
**注意:**如果解析器转发器规则和私有托管区的规则重叠,则优先使用解析器规则。在这种情况下,查询将转发到本地服务器。
- 将您的规则列表和关联的私有托管区与查询进行比较,以确定选择了哪个规则以及查询的去向。
故障排除出站端点问题
要对出站端点进行故障排除,请确认以下配置:
- 您的出站端点必须将查询发送到规则指定的目标 IP 地址。确保解析器规则具有本地 DNS 服务器的正确 IP。
- 确认出站端点的安全组允许出站 TCP 和 UDP 流量流向本地 DNS 服务器的 IP 地址和端口。
- 确认访问控制列表(ACL)允许 TCP 和 UDP 流量流向本地 DNS 服务器的 IP 地址和端口。ACL 还必须允许流量流向临时端口(1024-65535)。
- 出站端点的子网路由表必须包含本地服务器的 IP 地址到 VPN 或 AWS Direct Connect 连接的路由。
有关更多信息和故障排除步骤,请参阅如何解决 Route 53 Resolver 端点的 DNS 解析问题?
检查出站端点是否可以通过其路由表中指定的连接发送查询
验证 VPN 或 Direct Connect 连接是否允许通信。为此,请直接针对本地 DNS 解析器的 IP 地址运行 dig 或 nslookup 命令。要进一步故障排除连接问题,请 ping 一下允许互联网控制消息协议(ICMP)的本地主机。
**注意:**您必须从与出站端点位于同一子网的 EC2 实例上执行此测试。