如何疑難排解 Route 53 地理位置路由問題?

3 分的閱讀內容
0

我的 DNS 查詢會傳回不同 AWS 區域中網路伺服器的 IP 位址。例如,美國的使用者被路由到位於歐洲的 Web 伺服器的 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,並且在「答案」部分中沒有結果。若要修正此問題,請在您的地理位置路由設定中新增預設位置。

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 以及 EDNS0-Client-Subnet 查詢您託管區域的 Route 53 授權名稱伺服器。使用輸出來決定來源 IP 位址的權威地理位置記錄回應:

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

6.    路由 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 的選項包括 Google DNS 和 OpenDNS 解析器。

7.    使用 MaxMind 網站上的 GeoIP 資料庫或您偏好的 GeoIP 資料庫,檢查用戶端子網路 IP 位址的地理位置。確認 DNS 解析器在地理位置上接近用戶端的公用 IP 位址。如果 MaxMind 網站上的答案或國家與 Route 53 給出的答案不相符,則 Route 53 的生產地理數據可能會過時。如果路由過時,請聯絡 AWS Support

8.    使用 OpenDNS 網站上的快取檢查等工具檢查 DNS 傳播的問題。

9.    (選用) 確定以地理位置為基礎的路由記錄是否與 Route 53 運作狀態檢查相關聯。然後確定是否開啟用於別名記錄的評估目標運作狀態 (ETH)。如果其中一項為真,則 Route 53 會傳回最符合來源位置的良好端點。

在 Route 53 主控台中檢查 Route 53 運作狀態檢查的狀態。如果 ETH 已開啟,請檢查記錄端點的運作狀態。如果至少有一個後端執行個體的運作狀態良好,Route 53 即會將開啟 ETH 的 Classic Load Balancer 端點視為良好。對於 Application Load Balancer 和 Network Load Balancer,每個具有目標的目標群組都必須至少包含一個運作狀態良好的目標,才能視為良好。沒有註冊目標的目標群組會被視為運作狀態不良。如果任何目標群組只包含運作狀態不良的目標,負載平衡器即會被視為不良。

**範例:**您有美國德州、美國、北美和所有地點的記錄 (位置為預設值)。而且,您有來自德州且端點運作狀態不良的查詢。Route 53 會按照該順序檢查美國、北美,然後檢查所有位置,直到找到良好端點的記錄為止。如果美國記錄不良,則 Route 53 傳回此端點。否則,Route 53 傳回一個預設記錄。如果所有適用的記錄都不良,則 Route 53 會使用最小地理區域的記錄值來回應 DNS 查詢。

**注意:**對別名地理位置資源記錄的變更最多可能需要 60 秒才能傳播。

相關資訊

如何疑難排解不良的 Route 53 運作狀態檢查?

當我使用「評估目標運作狀態」時,為什麼別名記錄指向標記為不良的 Application Load Balancer?

檢查 Amazon Route 53 的 DNS 回應

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