如何識別並對 Route 53 中的 DNSSEC 組態問題進行疑難排解?

4 分的閱讀內容
0

因 DNSSEC 設定錯誤,支援 DNSSEC (例如 8.8.8.8 或 1.1.1.1) 的解析器的 DNS 解析會在 Amazon Route 53 中傳回 SERVFAIL 回應。

解決方法

步驟一: 確認 DNSSEC 組態是否造成 DNS 解析失敗

1.    執行 dig 命令,透過 Google DNS 解析器 8.8.8.8 強制查詢。Google DNS 解析器支援 DNSSEC,如果 DNSSEC 設定錯誤,則傳回 SERVFAIL 回應。在下列範例命令中,使用您的網域取代 dnssec.example.live

$ dig dnssec.example.live @8.8.8.8

先前命令的輸出會顯示 SERVFAIL 回應:

;  <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2  <<>> dnssec.example.live @8.8.8.8
;; global options: +cmd
;; Got answer:
;; -->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 30778
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;dnssec.example.live.    IN    A

;; Query time: 24 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Apr 21 18:13:57 UTC 2022
;; MSG SIZE  rcvd: 52

2.    再次執行 dig 命令,並設定 cd 旗標。cd 旗標,會在不檢查 DNSSEC 的情況下解析該查詢。在下列範例命令中,使用您的網域取代 dnssec.example.live

$ dig dnssec.example.live @8.8.8.8 +cd

下列輸出範例確認 DNSSEC 設定錯誤造成 SERVFAIL 回應:

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> dnssec.example.live @8.8.8.8 +cd

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30235
;; flags: qr rd ra cd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;dnssec.example.live.    IN    A

;; ANSWER SECTION:
dnssec.example.live. 300    IN    A    10.10.10.10

;; Query time: 28 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Apr 21 18:15:51 UTC 2022
;; MSG SIZE  rcvd: 68

步驟二: 識別在父區域上建立的 DS 記錄

**注意:**註冊商新增 TLD 的 DS 記錄。因此,網域「example.com」的父區域是「.com」區域。在這個範例中,「dnssec.example.live」的父區域是「example.live」。

1.    執行 dig +trace 命令,檢視父區域的完整委派和名稱伺服器:

dig +trace dnssec.example.live

>>truncated for convenience

example.live.    3600    IN    NS    ns-xxx.awsdns-xx.net.
example.live.    3600    IN    NS    ns-xxxx.awsdns-xx.org.
example.live.    3600    IN    NS    ns-xxxx.awsdns-xx.co.uk.
example.live.    3600    IN    NS    ns-xxx.awsdns-xx.com.
example.live.    3600    IN    DS    28927 13 2 133329D78FFCD003D39BAB9386FC18A49807584CD42042B3F53E1293 8F63C5A7
example.live.    3600    IN    RRSIG    DS 8 2 3600 20220508154435 20220417144435 32325 live. HzdzyWb8+8G1vbzMWR/7usqN5GihWpuToRKnWv3NSXPnzzYaAFrkuYlU pX8izzvnXk/uyiCOcMShQPKfybgviNkm+yfyTwm3rOso8amJDz0Jz8ml lz7jhgH0k04gLbbT7i8Ez8k8qPLB9MVb1jtVz7rjl6k4Y4m38aHUMy0D lxk=
;; Received 404 bytes from 65.22.22.1#53(v0n2.nic.live) in 1 ms

dnssec.example.live. 10    IN    NS    ns-xxxx.awsdns-xx.org.
dnssec.example.live. 10    IN    NS    ns-xxx.awsdns-xx.com.
dnssec.example.live. 10    IN    NS    ns-xxxx.awsdns-xx.co.uk.
dnssec.example.live. 10    IN    NS    ns-xxx.awsdns-xx.net.
dnssec.example.live. 300    IN    DS    41670 13 2 DE085966266F92FA81BBE2829AD9CD8C2C7FC8109D748F49B5A99D2F A1893581
dnssec.example.live. 300    IN    RRSIG    DS 13 3 300 20220421192820 20220421172320 53547 example.live. xdwGnGasWO2sbZQoAfYdZK2bAMcpYOjMR+mg2ilt00XDIwrPc/Qac1k2 Lc2NpAcFpgb3KbhzFxpd3Z7qXjPsvw==
;; Received 352 bytes from 205.251.197.102#53(ns-xxxx.awsdns-xx.org) in 6 ms

dnssec.example.live. 300    IN    A    1.1.1.1
dnssec.example.live. 300    IN    RRSIG    A 13 3 300 20220421192821 20220421172321 51615 dnssec.example.live. sMzXesnw+7pSHK2Mlkossyjml8sK7RhgKyu50J/P3/TEeChPzia8EfDb nbv3fFDxXQcbqPH+M+6KlQ7JrAmBig==
;; Received 187 bytes from 205.251.192.150#53(ns-xxx.awsdns-xx.com) in 14 ms

2.    若要檢查父區域的 DS 記錄,請透過父區域的名稱伺服器 (在此範例中為 example.live) 執行以下查詢:

`$ dig DS dnssec.example.live @ns-xxx.awsdns-xx.net. +short `
41670 13 2 DE085966266F92FA81BBE2829AD9CD8C2C7FC8109D748F49B5A99D2F A1893581

在父區域設定 DS 記錄。然後,對照子區域的公共 KSK 雜湊值檢查 DS 記錄,確認 DS 記錄是否準確。

步驟三: 確認已為託管區域啟用 DNSSEC 簽署

執行下列命令以確認已為託管區域啟用 DNSSEC 簽署:

$ dig DNSKEY dnssec.example.live @ns-xxxx.awsdns-xx.org +noall +answer +multiline

下列輸出確認 DNSSEC 簽署已啟用,並列出區域中存在的公開金鑰。

`; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> DNSKEY dnssec.example.live @ns-xxxx.awsdns-xx.org +noall +answer +multiline`  
`;; global options: +cmd`  
`dnssec.example.live. 3600 IN DNSKEY    256 3 13 (`  
`                4xMqBH+v21Ria6T00Oq08fY8S3FxA9XFp34uDQm0dBpk`  
`                l6MwBNLZxpwpzS35yunxEYKwHkoPnMtu1bckRFauJg==`  
`                ) ; ZSK; alg = ECDSAP256SHA256 ; key id = 51615`  
`dnssec.example.live. 3600 IN DNSKEY    257 3 13 (`  
`                pvoQ+Q2TvJKRuxdv8yuJhLkJhdrYUf/ZA2REWUTAXsfS`  
`                laK0MFDzCurSXXjlQxQoVGauDe5CwGufXl40fVzt/w==`  
`                ) ; KSK; alg = ECDSAP256SHA256 ; key id = 41670`

如果命令未產生回應,就不會在託管區域中啟用 DNSSEC 簽署。如果 DNSSEC 未啟用,請從註冊商移除 DS 記錄。

步驟四: 識別在父區域上建立的正確 DS 記錄

1.    執行下列命令,以安裝 bind 和 bind-ultis:

$ sudo yum install bind bind-utils -y

2.    執行下列命令,以取得在父區域上建立的正確 DS 記錄:

$ dig DNSKEY dnssec.example.live @ns-xxxx.awsdns-xx.org. | dnssec-dsfromkey -2 -f - dnssec.example.live

dnssec.example.live. IN DS 41670 13 2 DE085966266F92FA81BBE2829AD9CD8C2C7FC8109D748F49B5A99D2FA1893580

步驟五: 將步驟四中取得的 DS 記錄與步驟二中取得的 DS 記錄進行比對

確認在父區域上建立的 DS 記錄與您在步驟四中取得的 DS 記錄相符。

來自步驟二:

41670 13 2 DE085966266F92FA81BBE2829AD9CD8C2C7FC8109D748F49B5A99D2F A1893581 << Incorrect string

來自步驟四:

41670 13 2 DE085966266F92FA81BBE2829AD9CD8C2C7FC8109D748F49B5A99D2FA1893580

在前述範例中,在父區域 (來自步驟二) 設定的 DS 記錄的雜湊值不正確。此不相符會造成 DNS 解析問題。

若要解決此問題,請在註冊商端 (父區域) 建立正確的 DS 記錄值。對於使用 Route 53 註冊的網域,請使用 get-dnssec 命令取得正確的資訊,為您的網域新增公開金鑰

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

$ aws --region us-east-1 route53 get-dnssec --hosted-zone-id $hostedzone_id
AWS 官方
AWS 官方已更新 1 年前