Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

トラブルシューティング

最終更新 Markdown で表示Agent セットアップ

DNSSEC の問題をトラブルシューティングする方法を説明します。

dig で DNSSEC をテストする

dig は、ネームサーバーに DNS レコードを問い合わせるコマンドラインツールです。

たとえば dig で、DNS リゾルバーに www.cloudflare.com の IP アドレスを尋ねられます。

dig www.cloudflare.com +short
198.41.215.162
198.41.214.162

+short オプションは、結果だけを出力します。

レコードが署名されていることを確認するには +dnssec を使います。

dig www.cloudflare.com +dnssec +short
198.41.214.162
198.41.215.162
A 13 3 300 20180927180434 20180925160434 35273 cloudflare.com. DYYZ/bhHSAIlpvu/HEUsxlzkC9NsswbCQ7dcfcuiNBrbhYV7k3AI8t46 QMnOlfhwT6jqsfN7ePV6Fwpym3B0pg==

この例では、出力の最後の行が RRSIG レコードです。RRSIG はレコードに付く DNSSEC 署名です。RRSIG を使って、DNS リゾルバーは DNS 応答が信頼できるかを判断します。

dig で、DNS レコードの検証に使う公開鍵 DNSKEY も取得できます。

dig DNSKEY cloudflare.com +short
257 3 13 mdsswUyr3DPW132mOi8V9xESWE8jTo0dxCjjnopKl+GqJxpVXckHAeF+ KkxLbxILfDLUT0rAK9iUzy1L53eKGQ==
256 3 13 koPbw9wmYZ7ggcjnQ6ayHyhHaDNMYELKTqT+qRGrZpWSccr/lBcrm10Z 1PuQHB3Azhii+sb0PYFkH1ruxLhe5g==

ドメインの DNS レコードは、すべて同じ公開鍵で署名されます。そのため、サブドメイン(www.cloudflare.com)ではなく、apex ドメイン(cloudflare.com)の公開鍵を問い合わせてください。

DNS 応答には 2 つのレコードが含まれます。

  • DNSKEY レコード 256 は、ゾーン署名鍵(ZSK)と呼ばれる公開鍵です。ZSK は AMXCNAMESRV などの DNS レコード署名の検証に使います。
  • DNSKEY レコード 257 は、鍵署名鍵(KSK)です。KSK は DNSKEYCDSCDNSKEY レコードの署名の検証に使います。

dig+short オプションを使わない場合、応答ヘッダーに ad フラグがあれば、その DNS 応答は DNSSEC 認証済みです。

dig www.cloudflare.com
[...]
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65326
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
[...]
;; QUESTION SECTION:
;www.cloudflare.com.        IN  A
[...]
;; ANSWER SECTION:
www.cloudflare.com. 15  IN  A   198.41.215.162
www.cloudflare.com. 15  IN  A   198.41.214.162

DNSViz で DNSSEC 検証をトラブルシューティングする

DNSSEC の潜在的な問題を可視化して見つける手順は次のとおりです。

  1. https://dnsviz.net/ を開きます。
  2. 表示されたテキスト欄にドメイン名を入力します。
  3. DNSViz がそのサイトを一度も解析していない場合は、Analyze を選択します。
  4. DNSViz がそのサイトを以前解析している場合は、Update Now を選択します。

権威ネームサーバーで RRSIG レコードが欠落または不正な場合の例

以下は、権威ネームサーバーが TLD ネームサーバーの公開 DS レコードと一致する有効な DNSKEY レコードを返さないとき、dnsviz.net が不正な委任をどう表示するかの例です。

有効な DNSKEY レコードが提供されない場合の不正な委任

dig で DNSSEC の信頼チェーンを確認する

ドメイン署名(例: cloudflare.com)の完全な検証では、トップレベルドメイン(例: .com)の鍵署名鍵を検証します。

同様の検証を、ルートサーバーレベルで .com の鍵署名鍵を確認して行います。DNSSEC のルート鍵は DNS クライアントに配布され、信頼チェーンを完成させます。

DNSSEC を有効にすると、レジストラの DNS に DS レコードが必要です。DS レコードには、鍵署名鍵の公開鍵のハッシュと、その鍵のメタデータが含まれます。

DS レコードを探すには dig を使います。

dig +short DS cloudflare.com
2371 13 2 32996839A6D808AFE3EB4A795A0E6A7A39A76FC52FF228B22B76F6D6 3826F2B9

+trace オプションを使うと、dig は応答が cloudflare.com のネームサーバーから返ったか、.com のネームサーバーから返ったかを確認します。この例では、cloudflare.comDS レコードは e.gtld-servers.net から返っています。

dig DS cloudflare.com +trace
[...]
cloudflare.com.     86400   IN  DS  2371 13 2 32996839A6D808AFE3EB4A795A0E6A7A39A76FC52FF228B22B76F6D6 3826F2B9
[...]
com.            172800  IN  NS  e.gtld-servers.net.
[...]
;; Received 1213 bytes from 2001:502:1ca1::30#53(e.gtld-servers.net) in 37 ms

上記の手順を手動で実行するより簡単な方法は、サードパーティツールの DNSViz を使うことです。


dig で DNSSEC 検証をトラブルシューティングする

権威 DNS プロバイダーを変更したときに、レジストラ側の古い DNSSEC レコードを更新または削除しないと、問題が起きます。

dig A brokendnssec.net @1.0.0.1
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 10663

SERVFAIL 応答が DNSSEC に関係するかどうかは、dig+cd オプションを付けて確認します。+cd オプションは、DNSSEC 検証なしで DNS 結果を返します。

dig A brokendnssec.net @1.0.0.1 +dnssec +cd +short
104.20.49.61
104.20.48.61

この例では、+cd オプションでは正しい DNS 応答が返り、DNSSEC を使うクエリでは SERVFAIL になる場合、DNSSEC の設定が誤っています。権威ネームサーバーを変更したのに DS レコードを更新していないときに、よく起きます。攻撃者がクエリへの応答を偽装しようとした場合にも起きることがあります。


DNSSEC 無効化後に残る DNSKEY レコードを削除する

DNSSEC を無効にしたあとでも、DNSKEY レコードは DNS クエリとゾーン転送に現れ続けます。disabled 状態でも、Cloudflare はゾーンに署名し、RRSIG、NSEC、DNSKEY レコードを返します。これは想定どおりの動作であり、設定ミスやエラーではありません。詳細は DNSSEC の状態RFC 8078 を参照してください。

ただし、一部のセキュリティベンダーや監査ツールは、これらの DNSKEY レコードを問題として扱い、「DS レコードがないのに DNSKEY レコードがある」と報告し、セキュリティ結果を「Provably Insecure」とすることがあります。API を使って DNSKEY レコードを削除できます。

残っている DNSKEY レコードを削除する

Delete DNSSEC API を使い、ゾーンを deleted 状態に移行します。これですべてのゾーン署名が止まり、すべての DNSSEC レコードタイプ(RRSIG、NSEC、DNSKEY、CDS、CDNSKEY)が削除されます。

Required API token permissions

At least one of the following token permissions is required:
  • DNS Write
Delete DNSSEC recordsbash
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dnssec" \
	--request DELETE \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

DNSSEC の状態の詳細は、DNSSEC の状態 を参照してください。

DNSKEY の削除を確認する

DNSKEY レコードを削除したあと、DNS 応答に現れなくなったことを確認します。空の応答なら、削除は完了しています。

dig DNSKEY example.com +short

DNSKEY レコードがまだ見える場合は、TTL(Time to Live) の期限切れを待ってください。DNSKEY レコードは TTL が長め(多くの場合 3600 秒以上)なので、伝播に 1 時間以上かかることがあります。


次のステップ

DNSSEC の実装に問題が見つかった場合は、ドメインのレジストラに連絡し、DS レコードが権威 DNS プロバイダーの指定と一致していることを確認してください。Cloudflare が権威 DNS プロバイダーなら、Cloudflare で DNSSEC を設定する 手順に従ってください。

役に立ちましたか?