当用户访问我的网站时,Amazon Route 53 基于延迟的路由返回距离很远的区域中的服务器 IP 地址。例如,如果美国用户尝试访问我的网站,Route 53 会使用来自欧洲服务器的记录做出响应。如何解决用户被路由到次优区域的问题?

当您将多个 AWS 区域中的终端节点与相同的资源记录关联并使用基于延迟的路由策略时,Route 53 会根据 DNS 查询的位置解析为延迟最低的区域。

Route 53 根据以下因素计算延迟:

  • 将查询发送到 Route 53 权威名称服务器的递归 DNS 解析器的源 IP。
  • 发出递归查询的客户端的源 IP(仅当 DNS 解析器支持扩展 EDNS0-Client-Subnet 时)。
    注意: Route 53 名称服务器默认情况下支持 EDNS0-Client-Subnet。当支持 EDNS0-Client-Subnet 的递归 DNS 解析器向 Route 53 发送客户端 IP 地址的截断版本时,Route 53 会使用客户端 IP 地址来确定最低延迟区域。

警告: 延迟最低的区域可能不是物理位置上最接近发出请求的 DNS 解析器的区域。当客户端与 DNS 解析器不在同一个位置或解析器 IP 具有不同的位置信息时,您可能会遇到意外的路由行为。

查找 DNS 解析器 IP 和选播支持

检查特定区域中解析器使用的 IP 地址范围。运行以下命令 5 或 6 次,持续 11 秒。然后,每次记下输出内容。

在 Linux 或 macOS 上,使用 dig

for i in {1..10}; do dig +short resolver-identity.cloudfront.net; sleep 11; done;

在 Windows 上,使用 nslookup

nslookup resolver-identity.cloudfront.net

注意: 如果输出始终包含相同的单个 IP 地址,则 DNS 解析器不支持选播。如果多次运行该命令时 IP 地址发生变化,则 DNS 解析器支持选播。如果 DNS 解析器支持选播,则 DNS 解析器有多个边缘站点,并且基于最佳延迟来选择用户的边缘站点,这可能会导致出现解析器 IP 地址的意外位置。

查找客户端 IP 地址

在客户端计算机上,在浏览器中访问以下 URL 以查看客户端 IP 地址:http://checkip.amazonaws.com/

或者,在 AWS 命令行界面 (AWS CLI) 中使用 curl

curl http://checkip.amazonaws.com/

检查 DNS 解析器是否支持 EDNS0-Client-Subnet

在继续之前,请务必确认 DNS 解析器是否支持选播,如上文所述。然后,使用以下命令检查 DNS 解析器是否支持 EDNS0-Client-Subnet,并记下输出内容。

在 Linux 或 macOS 上,使用 dig

dig +nocl TXT o-o.myaddr.l.google.com @<DNS Resolver>

在 Windows 上,使用 nslookup:

nslookup -type=txt o-o.myaddr.l.google.com <DNS Resolver>

在查询输出中,应答部分中返回的第一条 TXT 记录是最近的公告选播的 DNS 服务器:

  • 如果没有第二条 TXT 记录,则 DNS 解析器不支持 EDNS0-Client-Subnet。
  • 如果有第二条 TXT 记录,则 DNS 解析器还支持 EDNS0-Client-Subnet。解析器提供并接着将截断的客户端子网(/24 或 /32)发送到 Route 53 权威名称服务器。

注意: 确保响应的 TTL 值为 60 秒。如果 TTL 不是 60 秒,则响应是缓存的响应。重复运行该命令,直到响应 TTL 值为 60 秒。

从 DNS 解析器或客户端 IP 地址模拟查询

使用 Route 53 DNS 检查工具模拟来自特定 DNS 解析器或客户端 IP 地址的查询,以查找 Route 53 返回的延迟资源记录集。

  • 如果 DNS 解析器不支持 EDNS0-Client-Subnet,请指定解析器 IP 地址作为工具中的值。
  • 如果 DNS 解析器支持 EDNS0-Client-Subnet,请指定 EDNS0 客户端子网 IP 作为工具中的值。选择更多选项,然后同时指定子网掩码。不要指定解析器 IP 地址

注意: 此工具直接查询 Route 53 延迟测量数据库,以确定 AWS 区域与 Internet 网络之间的预先计算的延迟。该工具实际上并不通过 Internet 或任何 DNS 解析器发送 DNS 查询。模拟工具不检查 DNS 解析器是否支持 EDNS0-Client-Subnet。来自模拟器和实际 DNS 查询的结果可能会不同。

如果您无法访问 Route 53 DNS 检查工具,请使用 dig 通过EDNS0-Client-Subnet 查询您的托管区域的 Route 53 权威名称服务器,以从您的源 IP 确定最低延迟 AWS 区域:

dig lbr.example.com +subnet=<Client IP>/24 @ns-xx.awsdns-xxx.com +short

注意: 由于网络连接和路由的变化,Internet 上主机之间的延迟不会一成不变。

支持 EDNS0-Client-Subnet 的客户端

如果解析器支持 EDNS0-Client-Subnet,则客户端 DNS 查询可能会从与客户端不同的位置退出,从而导致意外的路由行为。

将客户端 DNS 查询退出位置更改为在地理位置上更靠近客户端的位置。

不支持 EDNS0-Client-Subnet 的客户端

如果解析器不支持 EDNS0-Client-Subnet,则客户端 DNS 查询可能会使用与客户端位于不同地理位置的 DNS 解析器,从而导致意外的路由行为。

将客户端使用的 DNS 解析器更改为地理位置上更靠近客户端的其他递归 DNS 解析器。

可选: 如果 DNS 解析器不支持 EDNS0-Client-Subnet,从而导致 Route 53 将用户路由到次优区域,请切换到支持 EDNS0-Client-Subnet 的公有递归 DNS 解析器。然后,将 Route 53 的旧延迟路由响应结果与新结果进行比较。目前支持 EDNS0-Client-Subnet 的一些公有 DNS 解析器包括 GoogleDNS(8.8.8.8 和 8.8.4.4)和 OpenDNS(208.67.222.222 和 208.67.220.220)。

故障排除示例

一家公司在弗吉尼亚州 (us-east-1) 和爱尔兰 (eu-west-1) 的两个 Elastic Load Balancer 使用基于延迟的路由记录。美国用户使用位于欧洲的公司 DNS 解析器,或通过 VPN 连接到欧洲的公司办公室。

如果公司 DNS 解析器无法将 EDNS0-Client-Subnet 数据(截断的客户端 IP 地址信息)发送到权威名称服务器,则 Route 53 会将欧洲的 DNS 解析器 IP 地址视为查询的来源。然后,Route 53 在其延迟数据库中执行查找,并错误地确定爱尔兰的负载均衡器具有最低延迟。

不过,如果公司 DNS 解析器能够发送 EDNS0-Client-Subnet 数据,则 Route 53 会将美国的截断的客户端 IP 地址视为 DNS 查询的来源。然后,Route 53 在其延迟数据库中执行查找,并正确地确定弗吉尼亚的负载均衡器具有最低延迟。


此页面对您有帮助吗? |

返回 AWS Support 知识中心

需要帮助? 请访问 AWS 支持中心

发布时间: 2017-09-06

更新时间: 2018-08-15