如何對 Route 53 私有託管區域中的 DNS 解析問題進行疑難排解?
我想對 Amazon Route 53 私有託管區域中的 DNS 解析問題進行疑難排解。
簡短描述
若要修復私有託管區域 DNS 問題,請確認 Amazon Virtual Private Cloud (Amazon VPC) 設定、區域關聯和 DNS 伺服器設定。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
確認 VPC 中的 DNS 支援
若要允許私有託管區域記錄解析,請完成下列步驟:
- 在您的 Amazon VPC 中開啟 DNS 支援。
- 確認 VPC 中的 DNSSupport 和 DNSHostnames 是否設定為 True。如需詳細資訊,請參閱檢視和更新 VPC 的 DNS 屬性。
確認 VPC ID 關聯正確
確認您已將正確的 VPC ID 與私有託管區域建立關聯。另外,請確保您從同一個 VPC 內查詢網域的資源記錄。
當您將私有託管區域與 VPC 建立關聯時:
- Route 53 Resolver 會建立一個自動定義的規則,並將其與您的 VPC 關聯。
- 您 VPC 中的資源可以查詢解析器,藉此解析私有託管區域中的 DNS 記錄。
若要列出與託管區域關聯的 VPC,請在 AWS CLI 中執行下列命令:
aws route53 get-hosted-zone --id VPC_ID
注意: 將 VPC_ID 替換為您的相關值。
若要列出與特定 VPC 相關聯的私有託管區域,請在 AWS CLI 中執行下列命令:
aws route53 list-hosted-zones-by-vpc --vpc-id VPC_ID --vpc-region REGION_ID
**注意:**將 HOSTED_ZONE_ID、VPC_ID 和 REGION_ID 替換為您的相關值。
檢查自訂 DNS 伺服器組態
如果您在 VPC 中 DNS 的 DHCP 選項中設定了自訂 DNS 伺服器或 Active Directory 伺服器,請確認下列項目:
- 轉送規則: 伺服器會將私有網域 DNS 查詢轉送至您 VPC 的 DNS 伺服器 IP 位址。
- 網域組態: 自訂伺服器中的網域與您的私有託管區域不同。
例如,如果 VPC 的主要 CIDR 範圍是 172.31.0.0/16,則 VPC DNS 伺服器的 IP 位址為 172.31.0.2。這是 Amazon VPC 網路範圍加上 2 的結果。
查看 Resolver 組態設定
如果您遇到間歇性 DNS 解析或回應,請檢查來源執行個體的 Resolver 組態設定:
- 對於 Linux 執行個體,請使用 cat /etc/resolv.conf 和 cat/etc/hosts 檔案。
- 對於 macOS,請在 macOS 使用者指南參閱在 Mac 上變更 DNS 設定。
- 對於 Windows,請完成下列步驟:
選擇 Settings (設定),然後選取 Network & internet (網路與網際網路)。
在 Advanced network settings (進階網路設定) 下,選取 Change adapter settings (變更介面卡設定)。
在網路連線上按一下滑鼠右鍵,然後選取 Properties (屬性)。
選擇 IPv4 properties (IPv4 屬性),然後在 DNS server addresses (DNS 伺服器位址) 中輸入偏好的 DNS IP 位址。
例如,如果您設定了 resolv.conf,那麼您可以使用 rotate (輪換) 選項在 Amazon DNS 和 Google DNS (8.8.8.8) 之間平衡查詢負載。resolv.conf 檔案類似以下內容:
options rotate; generated by /usr/sbin/dhclient-script nameserver 8.8.8.8 nameserver 172.31.0.2
當您第一次向公有 Google DNS (8.8.8.8) 發出查詢時,您會收到預期的 NXdomain 回應。Resolver 正在嘗試從公有託管區域中尋找回應,而不是從私有託管區域中尋找:
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)
確認私有託管區域沒有重疊的命名空間
當多個區域具有重疊命名空間時:
- Resolver 會根據最具體的相符項目來路由流量
- 如果存在符合的區域但沒有符合的記錄,則 Resolver 會傳回 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 +short 50.1.1.1
檢查私有託管區域中的區域/子網域委派
私有託管區域不支援區域/子網域委派。確認您沒有為父網域的私有託管區域中的子網域設定名稱伺服器 (NS) 記錄。如果您已設定委派,則用戶端將從 VPC 解析器收到「SERVFAIL」回應代碼。
以下是導致 SERVFAIL 的委派組態範例:
- 私有託管區域:abc.com
- 委派 NS 記錄:kc.abc.com
- 資源記錄: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
確認路由政策支援
確認您在資源記錄中設定了私有託管區域支援的路由政策。如需詳細資訊,請參閱私有託管區域中記錄的支援路由政策。
檢查 Resolver 規則和傳出 Resolver 端點使用情況
確認您使用的是具有傳出端點的 Resolver。如果滿足以下條件,則 Resolver 規則具有優先權:
- 您有一個 Resolver 規則,用於將流量路由到您私有託管區域網域的網路。
- 您有一個與相同 VPC 關聯的 Resolver 規則,該 VPC 也與私有託管區域關聯。
如需詳細資訊,請參閱解析 VPC 與您網路之間的 DNS 查詢。
防止查詢迴圈
若要避免建立迴圈,請完成以下步驟:
- 請勿在 Resolver 轉送規則中,建立指向 VPC 傳入端點的目標 IP 位址。
- 請勿將端點與私有託管區域關聯。
- 請勿將相同的 Resolver 規則與您的 VPC 關聯。
查詢迴圈的範例:
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)
若要解決此問題並打破迴圈,請移除中樞 VPC 與規則的關聯。成功回應的範例:
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)
確認內部部署 Resolver 傳送遞迴請求
對於從內部部署到 Route 53 Resolver 的查詢:
- 使用 Resolver 傳入端點轉送 DNS 查詢。
- 確認內部部署 Resolver 傳送遞迴 (而非反覆查詢) 查詢。
若要確認解析類型,請完成以下步驟:
- 在內部部署 DNS 解析器上使用封包擷取。
- 檢查 DNS 標誌 (所需遞迴 = 0)。
- 使用 +norecurse dig 命令進行測試,或使用 nslookup 設定 norecurse。
失敗的反覆查詢範例:
[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 規則優先權是否正確
當用戶端執行個體向 Resolver 傳送查詢時,Resolver 會驗證執行個體的規則,以確定將請求路由到何處。
以最具體的規則優先。例如,如果存在 test.example.com Resolver 規則和 test.example.com 私有託管區域,則 Resolver 規則優先。查詢轉送至規則中設定的伺服器或目標 IP 位址。
如果規則位於相同的網域層級,則其優先順序如下所述:
- Resolver 規則
- 私有託管區域規則
- 內部規則
相關資訊
- 語言
- 中文 (繁體)

