如何解决 Route 53 地理位置路由问题?

3 分钟阅读
0

我的 DNS 查询返回一个在不同 AWS 区域中的网络服务器的 IP 地址。例如,一位美国用户的流量被路由到一个位于欧洲的网络服务器的 IP 地址。

解决方案

Route 53 地理位置路由问题是由以下问题引起的:

  • 您的地理位置路由设置中缺少默认位置。
  • DNS 解析器不支持 EDNS0 的 edns0-client-subnet 扩展。这会导致对您的位置的判断不准确。
  • DNS 解析器分布在不同的地理位置。
  • 有资源记录的 DNS 变化还没有传播到全球。

要解决这些问题,请执行以下操作:

1.确认 Route 53 托管区的资源记录已针对您的用例进行了正确配置。此外,请确认已有一个默认资源记录集。在 Route 53 控制台中,检查您的 Route 53 托管区配置中指定的默认位置。

**示例:**考虑以下输出示例:

>> dig images.example.com

; <<>> DiG
9.8.2rc1-RedHat-9.8.2-0.37.rc1.45.amzn1 <<>> images.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR,
id: 51385
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1,
ADDITIONAL: 0

;; QUESTION SECTION
;images.example.com.    IN            A

;; AUTHORITY SECTION:
images.example.com.    60          IN           SOA        ns-1875.awsdns-42.co.uk.awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400

;; Query time: 65 msec
;; SERVER: 172.31.0.2#53(172.31.0.2)
;; WHEN: Tue Feb  7 22:02:30 2017
;; MSG SIZE  rcvd: 124

在前面的示例中,地理位置路由配置中没有指定一个默认位置。因此,对于不匹配的地理位置,DNS 响应会在 rcode 字段中返回 NOERROR,并且 ANSWER 部分将不包含任何结果。要更正此问题,请在您的地理位置路由配置中添加一个默认位置。

2.要检查相关 DNS 解析器的 IP 地址范围,请运行以下命令,然后记下输出。

在 Linux 或 macOS 上,使用 dig

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

在 Windows 上,使用 nslookup

for /l %i in (1,1,10) do (nslookup resolver-identity.cloudfront.net && timeout /t 11 /nobreak)

3.使用以下命令之一检查相关 DNS 解析器是否支持 edns0-Client-Subnet,并记下输出。

在 Linux 或 macOS 上,使用 dig

dig +nocl TXT o-o.myaddr.l.google.com

在 Windows 上,使用 nslookup

nslookup -type=txt o-o.myaddr.l.google.com

查看输出的 ANSWER 部分返回的第一条 TXT 记录。第一条 TXT 记录值是 DNS 解析器的 IP 地址。如果没有第二条 TXT 记录,则表示此 DNS 解析器不支持 edns0-client-subnet。如果有第二条 TXT 记录,则表示此 DNS 解析器支持 edns0-client-subnet。此解析器向 Route 53 权威域名服务器提供一个截断的客户端子网 IP 地址(/24 或 /32)。有关更多信息,请参阅如何确定我的公共 DNS 解析器是否支持 EDNS 客户端子网 (ECS) 扩展?

4.使用检查工具中的 Route 53 测试记录集来确定针对特定请求返回的资源记录 有关更多信息,请参阅使用检查工具查看 Amazon Route 53 如何响应 DNS 查询

如果相关 DNS 解析器不支持 edns0-client-subnet,则在此工具中指定该 DNS 解析器的 IP 地址作为您的值。

如果相关 DNS 解析器支持 edns0-client-subnet,则在此工具中指定 EDNS0 客户端子网 IP 地址作为您的值。选择更多选项,然后指定子网掩码。不要指定解析器 IP 地址

5.(可选)如果您无权访问检查工具,那么可以使用 dig 向 Route 53 权威域名服务器查询您的启用了 EDNS0-Client-Subnet 的托管区。使用输出结果来确定您的源 IP 地址的权威地理位置记录响应:

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

6.Route 53 域名服务器支持 EDNS0 的 edns0-client-subnet 扩展。该解析器或本地 DNS 服务器将 edns0-client-subnet 附加到 DNS 查询中,以根据客户端的源 IP 子网进行 DNS 查询。如果查询请求中未传递这些数据,则 Route 53 使用 DNS 解析器的源 IP 地址来大致确定客户端的位置。然后,Route 53 使用解析器位置的 DNS 记录来响应地理位置查询。EDNS0 数据必须传递到 Route 53,并且客户端必须使用地理位置更近的递归域名服务器。如果这些没有做到,查询结果就是一个次优位置,为 DNS 查询返回错误的资源记录。

要修复此配置问题,请更改支持 edns0-client-subnet 的递归 DNS 服务器。执行 DNS 解析,然后共享输出。如果递归 DNS 服务器不支持 edns0-client-subnet,则尝试使用支持该扩展的域名服务器。支持 edns0-client-subnet 的域名服务器包括谷歌 DNS 解析器和 OpenDNS 解析器。

7.使用 MaxMind 网站上的 GeoIP 数据库,或者您首选的 GeoIP 数据库,检查客户端子网 IP 地址的地理位置。确认相关 DNS 解析器在地理位置上是否接近客户端的公共 IP 地址。如果 MaxMind 网站上的回答或国家/地区与 Route 53 给出的回答不一致,那么 Route 53 的生产地理数据可能已经过时。如果存在过时的路由,请联系 AWS Support

8.使用工具(例如 OpenDNS 网站上的 CacheCheck 等)检查 DNS 传播是否存在问题。

9.(可选)确定基于地理位置的路由记录是否与 Route 53 运行状况检查相关联。并且,确定别名记录的评估目标运行状况 (ETH) 是否已启用。如果存在以上任一情况,则 Route 53 将返回与源位置最匹配的运行正常的端点。

在 Route 53 控制台中检查 Route 53 运行状况检查的状态。如果 ETH 已开启,则检查记录端点的运行状况状态。如果至少有一个后端实例运行正常,Route 53 会将开启 ETH 的经典负载均衡器的端点视为运行正常。对于应用程序负载均衡器和网络负载均衡器,每个有目标的目标组必须包含至少一个运行正常的目标,才能被视为运行正常。没有注册目标的目标组被视为运行不正常。如果任何目标组仅包含运行不正常的目标,则负载均衡器会被视为运行不正常。

**示例:**您有美国得克萨斯州、美国、北美和所有地点(位置为“默认”)的记录。而且,您有源自德克萨斯州的查询,其端点运行状况不正常。Route 53 按顺序检查美国、北美,然后所有地点,直到找到一个包含运行正常的端点的记录。如果美国记录运行状况正常,则 Route 53 将返回此端点。否则,Route 53 将返回默认记录。如果所有适用记录的运行状况都不正常,则 Route 53 使用最小地理区域的记录值响应 DNS 查询。

**请注意:**对别名地理位置资源记录的更改最多可能需要 60 秒来传播。

相关信息

如何解决 Route 53 运行状况检查运行不正常问题?

当我使用“评估目标运行状况”时,为什么我的指向应用程序负载均衡器的别名记录被标记为运行不正常?

检查来自 Amazon Route 53 的 DNS 响应

AWS 官方
AWS 官方已更新 1 年前