如何排查 Route 53 规则和出站终端节点的反向 DNS 问题?

上次更新时间:2020 年 7 月 16 日

我设置了 Amazon Route 53 解析程序规则和出站终端节点。这些规则和终端节点旨在管理我在本地 DNS 服务器上的 Virtual Private Cloud (VPC) 的反向 DNS。但是,它们未按预期方式工作。我应该如何排查此问题?

简短描述

您可以使用反向 DNS 查找来返回 IP 地址的域名。反向 DNS 记录的格式在命名空间“in-addr.arpa.”的涵盖范围之内,其子域表示为倒序的 IP 地址八进制数。记录类型为指针 (PTR)。

例如,假设您有一个 CIDR 范围为 172.31.0.0/16 的 Virtual Private Cloud (VPC)。在 VPC 中,您有一个 IP 地址为 172.31.2.23 的实例。此 VPC 的反向区域是 31.172.in-addr.arpa。此实例的 IP 地址的反向记录是 23.2.31.172.in-addr.arpa。

您可以通过运行 dig 或 nslookup 来检查 DNS 响应。这些工具允许您直接测试 IP 地址并代表您自己执行反向查找。在以下输出示例中,请注意查询直接发送到 IP 地址 172.31.2.23。dig 和 nslookup 都针对名称 23.2.31.172.in-addr.arpa 执行解析。

在 dig 中使用 -x 参数,您就可以执行反向 DNS 解析。当您使用此参数时,dig 将自动添加名称、类和类型参数。请参阅“问题部分”以观摩 dig 自动查询正确的名称 (23.2.31.172.in-addr.arpa.)、类 (IN) 和记录类型 (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    testresolution.com.

nslookup 对 IP 地址执行反向查找:

nslookup 172.31.2.23
23.2.31.172.in-addr.arpa    name = testresolution.com.

解决方法

了解查询流程

请务必了解使用关于 VPC 和出站终端节点的解析规则时的查询流程。了解该流程可帮助您找出可能出现潜在问题的位置并指导您完成排查。该流程如下所示:

  1. VPC 中的客户端对同一 VPC 内的地址执行反向 DNS 解析。
  2. 查询到达 VPC DNS 解析程序(VPC CIDR 范围 + 2)。
  3. 查询由 VPC 上的解析程序规则匹配。
  4. 该查询由出站终端节点通过 VPN 或 AWS Direct Connect 连接发送到目标 IP 地址。
    注意:目标 IP 地址是管理该 VPC 的 CIDR 范围的反向 DNS 的本地 DNS 服务器。

识别预期和实际 DNS 响应

使用 dig 和 nslookup 直接对您的本地 DNS 服务器的 IP 地址执行查询。这些工具尝试解析正确的记录名称。请务必记下返回的实际 DNS 响应代码。请记住,意外响应代码可能并不表示存在规则或终端节点配置问题。例如:

  • NXDOMAIN 可能是意外但有效的 DNS 响应。此响应表示正在查询的服务器不包含请求的记录。
  • SERVFAIL 表示查询路径上存在超时或其他问题。此响应需要进一步调查,本文中随后将会阐述。
  • ANSWER SECTION 中的意外回复可能表示使用了不同的规则。

确定查询是否到达了 VPC DNS 解析程序

为了使查询可被 VPC 上的规则匹配,该查询必须到达 VPC DNS 解析程序。检查 VPC 设置以确认启用了 DNS Support(DNS 支持)。

请参阅 dig 和 nslookup 中的服务器字段以检查解析程序 IP 地址。

dig:

;; SERVER: 172.31.0.2#53(172.31.0.2)

nslookup:

Server:		172.31.0.2

查找正在匹配的最具体的规则

当查询到达 VPC DNS 解析程序时,它必须被 VPC 上的规则匹配。评估规则时,将会匹配最具体的规则。在内部,创建规则以涵盖对源和连接的 VPC 内的每个 IP 地址进行的所有反向查找。这些规则不显示在 AWS 管理控制台中。这些规则称为自动定义规则,它们由 Route 53 解析程序创建。

  1. 识别 VPC 和连接的 VPC 上的任何自动定义规则。如果您有对等 VPC 或通过传输网关连接的 VPC(并启用了 DNS 支持),请记下为连接的每个 CIDR 的反向解析创建的所有规则。
    注意:当 DNS 主机名设置为 true 时,解析程序创建这些自动定义规则。如果您想覆盖自动定义规则,您可以为相同域名创建条件转发规则。
  2. 如果已启用 DNSSupport 和 DNSHostnames,请注意关联到该 VPC 的任何私有托管区域。
    注意:如果解析程序转发规则和私有托管区域重叠,则解析程序规则优先。然后,该查询会被转发到本地服务器。
  3. 对照查询比较您的规则列表和关联的私有托管区域,以确定哪些规则已被选定以及查询发送到的位置。

排查您的出站终端节点

  • 确认您的出站终端节点已配置为将查询发送到规则中指定的目标 IP 地址。
  • 确认出站终端节点所用的安全组允许至本地 DNS 服务器的 IP 地址和端口的出站 TCP 和 UDP 流量。
  • 确认访问控制列表 (ACL) 允许至本地 DNS 服务器的 IP 地址和端口的 TCP 和 UDP 流量。该 ACL 还必须允许至临时端口 (1024-65535) 的流量。
  • 确认出站终端节点的路由表中包含本地服务器的 IP 地址至 VPN 或 Direct Connect 连接的路由。

检查出站终端节点是否可通过其路由表中指定的连接发送查询

您可以直接对本地 DNS 解析程序的 IP 地址运行 dig 或 nslookup,以验证 VPN 或 Direct Connect 连接允许通信。您还可以向允许 Internet 控制消息协议 (ICMP) 的本地主机发送 ping 以排除连接问题。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?