Amazon Route 53 ​基于延迟的路由返回远离客户端的 AWS 区域中的服务器。例如,当美国用户尝试访问我的网站时,Route 53 将返回欧洲的服务器的 IP 地址。我如何防止客户端路由至远离其位置的 AWS 区域?

如果满足以下条件,则 Route 53 将根据 DNS 查询的位置解析到具有最低延迟的 AWS 区域:

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

  • 将查询发送到 Route 53 权威名称服务器的递归 DNS 解析器的源 IP。
  • 如果 DNS ​解析程序支持扩展 EDNS0-Client-Subnet,则为​进行递归查询的客户端的源 IP​。

默认情况下,Route 53 ​名称服务器支持 EDNS0-Client-Subnet。如果递归 DNS 解析程序支持 EDNS0-Client-Subnet,则该 DNS 解析程序会向 Route 53 发送客户端的 IP 地址的截断版本。之后,Route 53 使用该截断的 IP 地址来确定具有​最低延迟的 AWS 区域。

具有最低延迟的 AWS 区域可能在物理上不是最接近 DNS 解析程序的区域。如果客户端与 ​DNS 解析程序不在同一个位置,或者解析程序的 IP 地址具有不同的位置信息,则可能会遇到不需要的路由行为。

使用以下步骤解决不需要的基于延迟的路由行为:

1.检查特定 AWS 区域中 DNS 解析程序使用的 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

2.使用输出来确认 DNS 解析程序是否支持选播。如果输出始终包含相同的单个 IP 地址,则 DNS 解析器不支持选播。如果多次运行该命令时 IP 地址发生变化,则 DNS 解析器支持选播。

当 DNS 解析程序支持选播时,DNS 解析程序会有多个边缘站点,并且基于最佳延迟来选择用户的边缘站点,这可能导致出现解析程序 IP 地址的意外位置。

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

或者使用 curl:​

curl https://checkip.amazonaws.com/

4.使用下列命令之一检查 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>

5.检查输出的 Answer (答案) 部分中返回的第一条 TXT 记录。此值是最近的公告选播的 DNS 服务器。如果没有第二条 TXT 记录,则 DNS 解析器不支持 EDNS0-Client-Subnet。如果有第二条 TXT 记录,则 DNS 解析器还支持 EDNS0-Client-Subnet。解析器提供并接着将截断的客户端子网(/24 或 /32)发送到 Route 53 权威名称服务器。

6.检查响应的 TTL 值是否为 60 秒。如果 TTL 不是 60 秒,则响应是缓存的响应。重复运行您的 dignslookup 命令,直到响应 TTL 值为 60 秒。

7.如果您有权访问 Route 53 DNS 检查工具,请模拟来自特定 DNS 解析程序或客户端 IP 地址的查询。使用这些查询查找 ​Route 53 所返回的延迟资源记录集。

如果 DNS 解析器不支持 EDNS0-Client-Subnet,请指定解析器 IP 地址作为工具中的值。

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

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

8.(可选)如果您无法访问 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 上主机之间的延迟可能会随时间而变化。​

9.对于支持 EDNS0-Client-Subnet 的客户端,将客户端 DNS 查询出口点更改为​在地理上更靠近客户端的位置。如果解析器支持 EDNS0-Client-Subnet,则客户端 DNS 查询可能会从与客户端不同的位置退出,从而导致意外的路由行为。

对于不支持 EDNS0-Client-Subnet 的客户端,​将客户端使用的 DNS 解析程序更改为地理位置更靠近客户端的其他递归 DNS 解析程序。如果解析器不支持 EDNS0-Client-Subnet,则客户端 DNS 查询可能会使用与客户端位于不同地理位置的 DNS 解析器,从而导致意外的路由行为。

10.(可选)如果 DNS 解析程序不支持 EDNS0-Client-Subnet,则​切换到支持 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 年 9 月 6 日

更新时间:2018 年 11 月 20 日