Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
如何疑難排解 Route 53 私有託管區域 DNS 解析問題?
我想對 Amazon Route 53 私有託管區域的 DNS 解析問題進行疑難排解。
解決方法
**注意:**如果在執行 AWS Command Line Interface (AWS CLI) 指令時收到錯誤訊息,請確定您使用的是最新版本的 AWS CLI。
確認您已在 VPC 中啟用 DNS 支援
若要允許私有託管區域記錄解析,您必須在虛擬私有雲 (VPC) 中開啟 DNS 支援。確認 VPC 中的 DNSSupport 和 DNSHostnames 設定為 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_ID 和 REGION_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。
例如,假設您有兩個私有託管區域,其中包含以下記錄:
私有託管區域名稱 | 記錄名稱 | 值 |
local | overlap.privatevpc.local | 60.1.1.1 |
privatevpc.local | overlap.privatevpc.local | 50.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 網域。
如果規則位於相同的網域層級,則其優先順序如下所述:
- 解析器規則
- 私有託管區域
- 內部規則
例如:如果有一個 test.example.com 解析器規則和一個 test.example.com 私有託管區域,則以解析器規則優先。查詢會轉送至規則中設定的伺服器或目標 IP 地址。
相關資訊

相關內容
- 已提問 5 個月前lg...
- 已提問 3 個月前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 2 年前