インフラ作業支援ラボInfra Support Lab← ガイド一覧← 戻る

digのstatusの見方|NOERROR・NXDOMAIN・SERVFAIL・REFUSED・timeout

digで返るDNS応答を、NOERRORNXDOMAINSERVFAILREFUSED・timeoutに分けて確認します。応答コードだけで原因を断定せず、次に比較するDNSサーバーやレコードを判断します。

先に結論

NXDOMAINは「問い合わせた名前が存在しない」というDNS応答、SERVFAILはDNSサーバーが処理を完了できなかった状態、REFUSEDはサーバーが問い合わせを拒否した状態です。NOERRORでもANSWERが0件のケースがあります。

timeoutはstatusではない

timeoutやno servers could be reachedはDNS応答コードを受け取れていないケースです。DNSサーバー到達性・経路・Firewall・サーバー状態を別に確認します。

digでstatusを見る

dig example.com

応答が返った場合、ヘッダーにstatus: NOERRORなどが表示されます。statusだけではなく、ANSWER件数、AUTHORITY、問い合わせ先SERVERも合わせて確認します。

NOERROR:DNS処理は成功。ただしANSWER 0件もある

NOERRORはDNS応答の処理が成功したことを示しますが、要求したレコードタイプが存在しない場合はANSWERが0件になることがあります。これは名前自体が存在しないNXDOMAINとは別です。

dig A example.com dig AAAA example.com
確認ポイント:名前が存在するかと、要求したレコードタイプが存在するかは分けて考えます。

NXDOMAIN:問い合わせた名前が存在しない

NXDOMAINは、問い合わせ先DNSが「そのドメイン名は存在しない」と応答した状態です。入力ミス、FQDN、検索ドメイン、参照しているDNSビュー・ゾーンを確認します。

dig does-not-exist.example.com

別DNSサーバーへ問い合わせて結果が異なる場合は、キャッシュ、split DNS、社内DNSと外部DNSの差も確認します。

SERVFAIL:DNSサーバーが処理を完了できない

SERVFAILは原因を1つに決められるコードではありません。上流問い合わせ失敗、権威DNSへの到達問題、DNSSEC検証失敗、サーバー内部エラーなどで返ることがあります。

dig example.com dig @192.0.2.53 example.com

複数のresolverで比較し、「特定のDNSだけSERVFAIL」なのか「どこでも同じ」なのかを先に分けます。

DNSSEC:検証resolverではDNSSEC検証失敗がSERVFAILとして見えることがあります。BIND系resolverの調査では+cdとの比較がヒントになる場合がありますが、問題解決のためにDNSSEC検証を安易に無効化しないでください。

REFUSED:DNSサーバーが問い合わせを拒否

REFUSEDは、DNSサーバーがポリシーや設定により問い合わせを拒否した状態です。再帰問い合わせの許可範囲、ACL、送信元ネットワーク、問い合わせ先が権威DNSかrecursive resolverかを確認します。

timeout / no servers could be reached

これはNXDOMAINなどのDNS応答コードとは違い、期待したDNS応答を受け取れていない状態です。

ip route get 192.0.2.53 dig @192.0.2.53 example.com dig +tcp @192.0.2.53 example.com # 必要な場合のみ sudo tcpdump -ni any 'host 192.0.2.53 and port 53'

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サーバー差
SERVFAILDNS処理を完了できない別resolver、上流、権威DNS、DNSSEC
REFUSED問い合わせを拒否ACL、再帰許可、送信元、サーバー役割
timeout応答を受信できない経路、FW、UDP/TCP 53、サーバー状態

SERVFAILでDNSSECを疑うとき

dig @192.0.2.53 example.com A dig @192.0.2.53 example.com A +cd

検証を行うresolverで通常問い合わせだけSERVFAILし、+cdで応答が得られる場合はDNSSEC検証問題の手掛かりになります。ただし+cdは切り分け用であり、恒久対策として検証を無効にするための推奨ではありません。

ゴール:statusを「エラー名」として覚えるのではなく、応答を受け取れたか、名前が存在するか、resolver側処理が失敗したかを分けて次の調査へ進みます。

参考資料

DNS名前解決の全体切り分けへ戻る

どの確認から始めるか迷う場合は、getent・resolver・DNSサーバー・通信経路を順番に確認します。

DNSトラブル全体を見る