如何疑難排解 Route 53 私有託管區域 DNS 解析問題?

4 分的閱讀內容
0

我想對 Amazon Route 53 私有託管區域的 DNS 解析問題進行疑難排解。

解決方法

**注意:**如果在執行 AWS Command Line Interface (AWS CLI) 指令時收到錯誤訊息,請確定您使用的是最新版本的 AWS CLI

確認您已在 VPC 中啟用 DNS 支援

若要允許私有託管區域記錄解析,您必須在虛擬私有雲 (VPC) 中開啟 DNS 支援。確認 VPC 中的 DNSSupportDNSHostnames 設定為 True

確認您已將正確的 VPC ID 與私有託管區域相關聯

將私有託管區域與 VPC 相關聯時,Route 53 解析器就會建立自動定義的規則,並將其與 VPC 相關聯。該 VPC 中的資源可以查詢解析器,藉此解析私有託管區域中的 DNS 記錄。

確認您已將正確的 VPC ID 與私有託管區域相關聯。此外,請確定您是從相同 VPC 內查詢網域的資源記錄。

若要取得與託管區域相關聯的 VPC 清單,請在 AWS CLI 中執行以下命令:

aws route53  list-hosted-zones-by-vpc --vpc-id VPC_ID --vpc-region REGION_ID

**注意:**將 VPC_IDREGION_ID 替換為您的相關值。

若要取得與特定 VPC 相關聯的私有託管區域清單,請在 AWS CLI 中執行以下命令:

aws route53 get-hosted-zone --id VPC_ID

**注意:**將 VPC_ID 替換為您的相關值。

確認您已為自訂 DNS 伺服器中的私有託管區域網域設定轉送規則,並將其設定為 Amazon 提供的 DNS 伺服器 (CIDR+2)。

如果您在 VPC 中的 DNS 的 DHCP 選項中設定了自訂 DNS 伺服器或作用中目錄伺服器,請檢查下列組態:

  • 在轉送規則中,確認您的伺服器是否將私有網域 DNS 查詢轉寄至您 VPC 之 Amazon 提供的 DNS 伺服器的 IP 地址。例如,如果 VPC 的主要 CIDR 範圍是 172.31.0.0/16,則 VPC DNS 伺服器的 IP 地址為 172.31.0.2。這是 VPC 網路範圍加上 2 的結果。
  • 確認您在自訂伺服器中設定的網域與私有託管區域不同。如果該網域與您的私有託管區域相同,則該伺服器對該網域具有權威性。在這種情況下,伺服器就不會聯絡 Amazon 提供的私有託管區域網域的 DNS 伺服器。

在 resolv.conf 中查看自訂設定

如果您遇到間歇性的 DNS 解析或回應,請在 resolv.conf 中檢閱來源執行個體的組態設定。

例如,您可以在 resolv.conf 設定輪換選項,以在 Amazon DNS 伺服器和公有 Google 解析器伺服器 (8.8.8.8) 之間負載平衡 DNS 查詢。在這種情況下,這些是 resolv.conf 設定:

options rotate; generated by /usr/sbin/dhclient-script
nameserver 8.8.8.8
nameserver 172.31.0.2

首次查詢公有 Google 解析器 (8.8.8.8) 時,您會收到預期的 NxDomain 回應。您會收到此回應,是因為解析器嘗試在公有託管區域尋找回應,而不是私有託管區域:

Private hosted Zone Record - resolvconf.local\[ec2-user@ip-172-31-253-89 etc\]$ curl -vks http://resolvconf.local
\* Rebuilt URL to: http://resolvconf.local/
\* Could not resolve host: resolvconf.local

15:24:58.553320 IP ip-172-31-253-89.ap-southeast-2.compute.internal.40043 > dns.google.domain: 65053+ A? resolvconf.local. (34)
15:24:58.554814 IP dns.google.domain > ip-172-31-253-89.ap-southeast-2.compute.internal.40043: 65053 NXDomain 0/1/0 (109)

但是,第二個查詢解析成功。第二個查詢成功,是因為其到達與您的私有託管區域相關聯的 VPC DNS 解析器:

[ec2-user@ip-172-31-253-89 etc]$ curl -vks http://resolvconf.local* Rebuilt URL to: http://resolvconf.local/
*   Trying 1.1.1.1...
* TCP_NODELAY set
* Connected to resolvconf.local (1.1.1.1) port 80 (#0)

15:25:00.224761 IP ip-172-31-253-89.ap-southeast-2.compute.internal.51578 > 172.31.0.2.domain: 7806+ A? resolvconf.local. (34)
15:25:00.226527 IP 172.31.0.2.domain > ip-172-31-253-89.ap-southeast-2.compute.internal.51578: 7806 1/0/0 A 1.1.1.1 (50)

確認私有託管區域沒有重疊的命名空間

如果多個區域具有重疊的命名空間 (例如 example.com 和 test.example.com),解析器就會根據最具體的相符項目,將流量路由到託管區域。如果有相符區域,但沒有與請求中的網域名稱和類型相符的記錄,解析器就不會轉發請求。相反地,解析器會將 NXDOMAIN (不存在的網域) 傳回用戶端。

確認是否在最具體的私有託管區域設定正確記錄,以成功解析 DNS。

例如,假設您有兩個私有託管區域,其中包含以下記錄:

私有託管區域名稱記錄名稱
localoverlap.privatevpc.local60.1.1.1
privatevpc.localoverlap.privatevpc.local50.1.1.1

該請求會從最具體的相符私有託管區域獲得以下答案:

[ec2-user@IAD-BAS-INSTANCE ~]$ dig overlap.privatevpc.local +short50.1.1.1

確認私有託管區域中沒有設定區域委派

私有託管區域不支援區域委派。如果已設定委派,則用戶端會從 VPC 解析器收到「Servfail」回應碼。

使用 AWS CLI 確認未在私有託管區域中設定區域委派,如以下範例所示:

Private hosted zone:abc.com Delegation NS record for: kc.abc.com Resource record: test.kc.abc.com

[ec2-user@ip-172-31-0-8 ~]$ dig test.kc.abc.com;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 63414
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;test.kc.abc.com        IN      A
;; Query time: 15 msec
;; SERVER: 172.31.0.2#53(172.31.0.2)
;; WHEN: Fri Apr 16 15:57:37 2021
;; MSG SIZE  rcvd: 48

確認私有託管區域支援資源記錄的路由原則。

確認您在資源記錄中設定了私有託管區域支援的路由原則:

  • 簡便路由
  • 容錯移轉路由
  • 多值答案路由
  • 加權路由
  • 延遲為基礎的路由
  • 地理位置路由

確認解析器規則及其輸入端點解析為不同的 VPC

當解析器規則中的輸出端點指向與規則共用 VPC 的輸入端點時,結果為迴圈。在此迴圈中,查詢會持續在輸入端點和輸出端點之間傳遞。

您仍然可以將轉送規則關聯至與其他帳戶共享的其他 VPC 中。若要這麼做,請使用 AWS Resource Access Manager (AWS RAM)。與 Hub 或中央 VPC 相關聯的私有託管區域會從查詢開始解析到傳入端點。轉送解析器規則不會變更此解析,例如下列範例所示:

Hub VPC: VPC A - CIDR 172.31.0.0/16 Spoke VPC: VPC B-CIDR 172.32.0.0/16 輸入 IP 地址: 轉送規則中的目標 IP 地址 172.31.253.100 和 172.31.2.100: 與 VPC 相關聯的 172.31.253.100 和 172.31.2.100 規則: VPC A 和 VPC B 用戶端: 172-32-254-37

ubuntu@ip-172-32-254-37:~$ dig overlap.privatevpc.local;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 9007
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;overlap.privatevpc.local. IN A
;; Query time: 2941 msec
;; SERVER: 172.32.0.2#53(172.32.0.2)

在此輸出中,DNS 請求會在輸出端點和輸入端點之間持續快速移動。此請求會檢查與 VPC A 相關聯的規則,並將查詢傳送回輸出端點。經過多次嘗試,查詢逾時並回應 Servfail 回應碼。

若要修正此問題並中斷迴圈,請解除 Hub VPC 與規則的關聯 (VPC A)。然後,您會從私有託管區域獲得成功的回應:

ubuntu@ip-172-32-254-37:~$ dig overlap.privatevpc.local;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58606
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;overlap.privatevpc.local. IN A
;; ANSWER SECTION:
overlap.privatevpc.local. 0 IN A 50.1.1.1
;; Query time: 5 msec
;; SERVER: 172.32.0.2#53(172.32.0.2)

確認內部部署解析器傳送遞迴請求

如果您在內部部署和 Route 53 解析器之間查詢,則可以將 DNS 查詢從網路上的解析器轉送至 VPC 解析器。若要這麼做,請使用解析器輸入端點。此動作可讓您解析 AWS 資源的網域名稱,例如私有託管區域中的記錄。

在某些情況下,您可能會發現私有託管區域未從內部部署解析器處成功解析。之所以發生這種情況,是因為內部部署解析器正在傳送迭代查詢,而不是遞迴請求。輸入端點支援遞迴查詢,以便成功解析 DNS。

若要驗證解析類型,請使用 DNS 解析器 (內部部署) 上的封包擷取。然後,檢閱 DNS 標誌 (recursion desired = 0)。如要測試解決方法,請使用 +norecurse dig 命令發送迭代請求,或者使用 nslookup 設定 norecurse

**輸入端點 IP 地址:**172.31.253.150

**內部部署解析器 IP 地址:**10.0.4.210

輸入 IP 地址的迭代查詢失敗會產生下列輸出:

[ec2-user@IAD-BAS-INSTANCE ~]$ dig @172.31.253.150 overlap.privatevpc.local +norecurse; <<>> DiG 9.11.0rc1 <<>> @172.31.253.150 overlap.privatevpc.local +norecurse
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached

成功的遞迴查詢會產生下列輸出:

[ec2-user@IAD-BAS-INSTANCE ~]$ dig @172.31.253.150 overlap.privatevpc.local;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19051
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;overlap.privatevpc.local.      IN      A
;; ANSWER SECTION:
overlap.privatevpc.local. 0     IN      A       50.1.1.1
;; Query time: 200 msec
;; SERVER: 172.31.253.150#53(172.31.253.150)

確認您為 Amazon 提供的 DNS 設定了正確的規則優先級

當用戶端執行個體傳送查詢至解析器 (AWS 提供的 DNS 伺服器) 時,解析器會驗證請求路由目的地的執行個體規則。

一般而言,以最具體的規則為優先。如果有一個 test.example.com 解析器規則和一個 longest.test.example.com 私有託管區域,則請查詢與私有託管區域相符的 longest.test.example.com 網域。

如果規則位於相同的網域層級,則其優先順序如下所述:

  1. 解析器規則
  2. 私有託管區域
  3. 內部規則

例如:如果有一個 test.example.com 解析器規則和一個 test.example.com 私有託管區域,則以解析器規則優先。查詢會轉送至規則中設定的伺服器或目標 IP 地址。

相關資訊

使用私有託管區域

我需要開啟哪些 Amazon VPC 選項才能使用私有託管區域?

使用解析器端點避免迴圈組態

AWS 官方
AWS 官方已更新 10 個月前