DNS応答コード(RCODE)とは?NXDOMAIN・SERVFAIL・NOERRORの意味を理解する

DNS応答レコード

DNS応答コード(RCODE)とは?DNSエラーの意味を理解する

DNSを運用していると、名前解決に失敗することがあります。

その際、DNSサーバは単純に「失敗しました」と返すのではなく、失敗理由を応答コード(RCODE)として返しています。

例えば、存在しないドメインを問い合わせた場合と、DNSサーバ自身に障害が発生している場合では原因が異なります。

この違いを判断するために利用されるのがDNS応答コードです。

本記事では、DNS応答コードの種類や意味、トラブルシューティングでの活用方法について解説します。

DNS応答コードとは

DNS応答コード(Response Code:RCODE)とは、DNSサーバが問い合わせ結果を表すために返すステータスコードです。

DNSパケットのヘッダ内に含まれています。

クライアントはこの値を見て、問い合わせが成功したのか、失敗したのか、その理由は何なのかを判断します。

代表的なRCODE一覧

コード名称意味
0NOERROR正常終了
1FORMERR問い合わせ形式エラー
2SERVFAILサーバ内部エラー
3NXDOMAINドメインが存在しない
4NOTIMP未実装
5REFUSED問い合わせ拒否

NOERROR

NOERRORは最も一般的な応答です。

名前解決が正常に完了したことを意味します。

www.example.com
↓
93.184.216.34

DNSサーバは正常なIPアドレスを返します。

NXDOMAIN

NXDOMAINは「そのドメインは存在しません」という意味です。

例えば次の問い合わせです。

aaaabbbbcccc.example.com

DNSサーバに該当レコードが存在しない場合、NXDOMAINが返されます。

利用者の入力ミスやレコード未登録が原因で発生することが多いエラーです。

SERVFAIL

SERVFAILはDNSサーバ側で問題が発生したことを示します。

例えば次のようなケースです。

  • 権威DNSサーバへ到達できない
  • DNSSEC検証失敗
  • ゾーン情報取得失敗
  • 内部エラー

NXDOMAINと混同しやすいですが意味は大きく異なります。

SERVFAILは「存在するか分からない」、NXDOMAINは「存在しない」です。

REFUSED

REFUSEDはDNSサーバが問い合わせを拒否した場合に返されます。

例えばBINDで再帰問い合わせを許可していない場合です。

allow-recursion { none; };

許可されていないクライアントから問い合わせるとREFUSEDになります。

FORMERR

FORMERRはDNSパケットの形式が不正な場合に返されます。

通常の運用ではあまり見かけません。

独自実装のDNSクライアントや古い機器との通信時に発生することがあります。

NOTIMP

NOTIMPは問い合わせ内容に対応していない場合に返されます。

例えばサーバが特定のDNS機能を実装していない場合です。

現代のDNSサーバではあまり見かけません。

NXDOMAINとSERVFAILの違い

実務ではこの2つを区別できることが重要です。

項目NXDOMAINSERVFAIL
意味存在しない確認できない
原因未登録DNS障害
対処レコード確認DNSサーバ調査

digコマンドで確認する

DNS応答コードはdigコマンドで確認できます。

dig www.example.com

結果の例です。

;; ->>HEADER<<- opcode: QUERY, status: NOERROR

statusの部分がRCODEです。

NXDOMAINの例

dig aaaabbbbcccc.example.com

結果です。

status: NXDOMAIN

ドメインが存在しないことを示しています。

Wiresharkで確認する

Wiresharkでも確認できます。

フィルタです。


dns

応答パケット内にRCODEが表示されます。

DNSトラブル調査時には非常に役立ちます。

DNSサーバ運用で重要な理由

DNS障害が発生した場合、RCODEを確認することで原因を絞り込めます。

例えば次のように判断できます。

  • NXDOMAIN → レコード未登録
  • SERVFAIL → DNS障害
  • REFUSED → アクセス制御

応答コードを理解していると調査時間を大幅に短縮できます。

BINDログとの関係

BINDではログとRCODEを組み合わせて確認します。

特にSERVFAILが頻発している場合は、権威DNSサーバとの通信やDNSSEC関連を調査する必要があります。

クラウドDNSでも重要

Route53、Cloudflare DNS、Google Cloud DNSなどでも同様のRCODEが利用されています。

クラウド環境でもDNSトラブル調査の基本となる知識です。

まとめ

DNS応答コード(RCODE)は、DNS問い合わせ結果を示す重要な情報です。

特にNOERROR、NXDOMAIN、SERVFAIL、REFUSEDは実務で頻繁に遭遇します。

NXDOMAINは「存在しない」、SERVFAILは「障害により確認できない」という違いを理解しておくことが重要です。

digコマンドやWiresharkを利用してRCODEを確認できるようになると、DNSトラブルの切り分けが大幅に容易になります。