我的 DNS 查询返回了不同区域的 Web 服务器的 IP 地址。例如,美国的某个用户被路由到位于欧洲的某个 Web 服务器的 IP 地址。如何排查和解决 Amazon Route 53 地理位置路由问题?

Route 53 地理位置路由问题可能是因以下几个原因导致的:

  • 地理位置路由设置中缺少默认位置
  • DNS 解析器部支持 EDNS0 的 edns-client-subnet 扩展,这可能导致对位置的确定不准确
  • 地理上多样化的 DNS 解析器
  • 未全球发布的资源记录 DNS 更改

1.    确保 Route 53 托管区域的资源记录配置正确,并且存在默认的资源记录集。例如,从 AWS 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.    使用来自检查工具的 Route 53 测试记录集来确定具体的请求返回了哪个资源记录。有关更多信息,请参阅 使用检查工具查看 Amazon Route 53 如何响应 DNS 查询

3.    Route 53 支持 EDNS0edns-client-subnet 扩展。递归解析器或本地名称服务器将 edns-client-subnet 附加到 DNS 查询中,以在客户端的源 IP 子网上进行 DNS 查询。

如果该数据没有随请求通过,则 Route 53 会使用 DNS 解析器的源 IP 地址来大致确定客户端的位置,并以解析器位置的 DNS 记录来响应地理位置查询。如果 EDNS 数据未通过 Route 53,并且客户端正在使用地理上多元化的递归名称服务器,这将导致位置信息不佳,为 DNS 查询提供了不正确的资源记录。

如要解决这一问题,请修改支持 edns-client-subnet 的递归 DNS 服务器,执行 DNS 解析,然后共享输出。如果递归 DNS 服务器不支持 EDNS 客户端子网,请尝试使用支持的客户端子网;例如 Google DNS、OpenDNS 和 Amazon DNS 服务器。对于 EC2-Classic,Amazon DNS 服务器的位置为 172.16.0.23。对于 EC2-VPC,Amazon DNS 服务器位于 VPC 网络范围起始地址 + 2 的位置。

4.    请检查客户端 DNS 解析器,以验证其在地理上接近其位置。Route 53 使用 resolver-identity.cloudfront.net 来寻找 DNS 查询的来源 IP 地址。如要收集解析器的 IP 地址,请使用命令每分钟运行或调度 Cron 任务。例如使用如下命令:

dig resolver-identity.cloudfront.net

nslookup resolver-identity.cloudfront.net

使用 Maxmind 的 GeoIP 数据库 (maxmind.com/en/geoip-demo) 或您喜爱的 GeoIP 数据库来检查解析器返回的 IP 地址的位置,然后验证 DNS 解析器接近客户端的公共 IP 地址。

考虑如下示例输出:

dig resolver-identity.cloudfront.net

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.45.amzn1 <<>> resolver-identity.cloudfront.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45073
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;resolver-identity.cloudfront.net.            IN        A

;; ANSWER SECTION:
resolver-identity.cloudfront.net.    10       IN        A    x.y.z.w
;; Query time: 11 msec
;; SERVER: 172.31.0.2#53(172.31.0.2)
;; WHEN: Tue Feb  7 22:45:00 2017
;; MSG SIZE  rcvd: 66

;; Query time: 11 msec
;; SERVER: 172.31.0.2#53(172.31.0.2)
;; WHEN: Tue Feb  7 22:45:00 2017
;; MSG SIZE  rcvd: 66

5.    使用您喜爱的工具,检查 DNS 传播是否有任何问题,例如 cachecheck.opendns.com

注意:别名地理位置资源记录可能需要 60 秒才会反映更改。


此页面对您有帮助吗? |

返回 AWS Support 知识中心

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

发布时间:2017 年 3 月 15 日