Route 53 の DNSSEC 設定の問題を特定してトラブルシューティングする方法を教えてください。
DNSSEC (たとえば、8.8.8.8 または 1.1.1.1) をサポートしているリゾルバーの DNS 解決では、DNSSEC の設定ミスが原因で、Amazon Route 53 で SERVFAIL レスポンスが返されます。
解決方法
ステップ 1: 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
ステップ 2: 親ゾーンで作成された 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 レコードを設定します。次に、DS レコードを子ゾーンのパブリック KSK のハッシュ値と照合して、DS レコードが正確であることを確認します。
ステップ 3: ホストゾーンの 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 レコードをレジストラから削除します。
ステップ 4: 親ゾーンで作成された正しい 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
ステップ 5: ステップ 4 で取得した DS レコードを、ステップ 2 で取得した DS レコードと照合します。
親ゾーンで作成された DS レコードが、ステップ 4 で取得した DS レコードと一致していることを確認します。
ステップ 2 から:
41670 13 2 DE085966266F92FA81BBE2829AD9CD8C2C7FC8109D748F49B5A99D2F A1893581 << Incorrect string
ステップ 4 から:
41670 13 2 DE085966266F92FA81BBE2829AD9CD8C2C7FC8109D748F49B5A99D2FA1893580
前の例では、親ゾーン (ステップ 2 から) で設定されている DS レコードのハッシュ値が正しくありません。この不一致により、DNS 解決の問題が発生します。
この問題を解決するには、レジストラ側 (親ゾーン) で正しい DS レコード値を作成します。Route 53 に登録されているドメインの場合は、[get-dnssec] コマンドを使用して正しい情報を取得し、ドメインの公開鍵を追加します。
**注記:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、最新バージョンの AWS CLI を使用していることを確認してください。
$ aws --region us-east-1 route53 get-dnssec --hosted-zone-id $hostedzone_id
関連するコンテンツ
- 質問済み 2日前lg...
- 質問済み 2日前lg...
- 質問済み 2年前lg...
- 質問済み 2年前lg...
- AWS公式更新しました 1年前
- AWS公式更新しました 2年前
- AWS公式更新しました 1年前
- AWS公式更新しました 1年前