digのstatusの見方|NOERROR・NXDOMAIN・SERVFAIL・REFUSED・timeout
digで返るDNS応答を、NOERROR・NXDOMAIN・SERVFAIL・REFUSED・timeoutに分けて確認します。応答コードだけで原因を断定せず、次に比較するDNSサーバーやレコードを判断します。
先に結論
NXDOMAINは「問い合わせた名前が存在しない」というDNS応答、SERVFAILはDNSサーバーが処理を完了できなかった状態、REFUSEDはサーバーが問い合わせを拒否した状態です。NOERRORでもANSWERが0件のケースがあります。
timeoutはstatusではない
timeoutやno servers could be reachedはDNS応答コードを受け取れていないケースです。DNSサーバー到達性・経路・Firewall・サーバー状態を別に確認します。
digでstatusを見る
応答が返った場合、ヘッダーにstatus: NOERRORなどが表示されます。statusだけではなく、ANSWER件数、AUTHORITY、問い合わせ先SERVERも合わせて確認します。
NOERROR:DNS処理は成功。ただしANSWER 0件もある
NOERRORはDNS応答の処理が成功したことを示しますが、要求したレコードタイプが存在しない場合はANSWERが0件になることがあります。これは名前自体が存在しないNXDOMAINとは別です。
NXDOMAIN:問い合わせた名前が存在しない
NXDOMAINは、問い合わせ先DNSが「そのドメイン名は存在しない」と応答した状態です。入力ミス、FQDN、検索ドメイン、参照しているDNSビュー・ゾーンを確認します。
別DNSサーバーへ問い合わせて結果が異なる場合は、キャッシュ、split DNS、社内DNSと外部DNSの差も確認します。
SERVFAIL:DNSサーバーが処理を完了できない
SERVFAILは原因を1つに決められるコードではありません。上流問い合わせ失敗、権威DNSへの到達問題、DNSSEC検証失敗、サーバー内部エラーなどで返ることがあります。
複数のresolverで比較し、「特定のDNSだけSERVFAIL」なのか「どこでも同じ」なのかを先に分けます。
+cdとの比較がヒントになる場合がありますが、問題解決のためにDNSSEC検証を安易に無効化しないでください。REFUSED:DNSサーバーが問い合わせを拒否
REFUSEDは、DNSサーバーがポリシーや設定により問い合わせを拒否した状態です。再帰問い合わせの許可範囲、ACL、送信元ネットワーク、問い合わせ先が権威DNSかrecursive resolverかを確認します。
timeout / no servers could be reached
これはNXDOMAINなどのDNS応答コードとは違い、期待したDNS応答を受け取れていない状態です。
UDPとTCPの両方、Firewall、VPN、ルーティング、DNSサーバーの待受状態を確認します。TCP/53だけ接続できてもDNS全体が正常とは判断しません。
status別の次の確認
| 結果 | 意味 | 次の確認 |
|---|---|---|
| NOERROR + ANSWERあり | 要求したレコードを取得 | アプリ側/NSS経路が失敗するならgetentと比較 |
| NOERROR + ANSWER 0 | 名前は存在するが要求タイプがない可能性 | A/AAAA/CNAME等のタイプ、AUTHORITYを確認 |
| NXDOMAIN | 名前が存在しない | FQDN、ゾーン、split DNS、DNSサーバー差 |
| SERVFAIL | DNS処理を完了できない | 別resolver、上流、権威DNS、DNSSEC |
| REFUSED | 問い合わせを拒否 | ACL、再帰許可、送信元、サーバー役割 |
| timeout | 応答を受信できない | 経路、FW、UDP/TCP 53、サーバー状態 |
SERVFAILでDNSSECを疑うとき
検証を行うresolverで通常問い合わせだけSERVFAILし、+cdで応答が得られる場合はDNSSEC検証問題の手掛かりになります。ただし+cdは切り分け用であり、恒久対策として検証を無効にするための推奨ではありません。