2026年6月11日

2026年6月11日

kdig と nslookup の違いと使い分け|同じ障害がそれぞれでどう表示されるかと、WordPress サーバーでの調べ分け

kdig と nslookup の違いがいちばんはっきり出るのは、名前解決がうまくいかないときです。nslookup は「見つからない」「サーバーが失敗した」といった要約を短く表示し、kdig は応答コード・フラグ・件数をそのまま表示します。要約で足りる場面では nslookup が手軽ですが、「名前が無いのか、種別が無いのか」「DNSSEC の検証で落ちたのか」を区別したいときは kdig が向いています。この記事では、代表的な障害が2つのツールでそれぞれどう見えるかを並べ、WordPress を動かす Linux サーバーで名前解決を調べるときの使い分けを説明します。

ツールの入手方法や基本的な書式の対応は別の記事で扱っているので、ここでは「障害時の見え方の違い」と「調べ分けの手順」に絞ります。

前提:2つの nslookup と kdig

nslookup には、Windows に標準で入っているものと、Linux・macOS で BIND に付属するもの(Debian・Ubuntu では bind9-dnsutils、RHEL 系では bind-utils)があり、表示が異なります。以下では両方の表示を挙げます。Windows 版の表示は、OS の表示言語が日本語なら一部が日本語になります。

kdig は Knot DNS に付属するツールで、Linux では knot-dnsutils(Debian・Ubuntu)などのパッケージで入ります(2026年10月現在)。出力の形は dig に近く、ヘッダーの status に応答コード、Flags の行にフラグと各セクションの件数が出ます。

障害ごとの見え方

名前が存在しない(NXDOMAIN)

  • Windows 版 nslookup:*** ... can't find nosuch.example.com: Non-existent domain の形で表示されます(日本語表示では「見つけられません」の文になります)。
  • BIND 版 nslookup:** server can't find nosuch.example.com: NXDOMAIN と表示されます。
  • kdig:ヘッダーに status: NXDOMAIN と出て、AUTHORITY に SOA が1件付きます。

この段階では3つとも分かりやすく、差はほとんどありません。サブドメインの綴りや、DNS 事業者の管理画面のホスト名の欄を見直します。

名前はあるが、その種別のレコードが無い(NODATA)

ここで差が出ます。

  • Windows 版 nslookup:エラーにならず、SOA の情報(primary name server など)だけが表示されることがあります。慣れないと「何か返ってきたので正常」と読み違えます。
  • BIND 版 nslookup:*** Can't find example.com: No answer と表示されます。
  • kdig:status: NOERROR で、ANSWER: 0 になります。

「MX を登録したはずなのに届かない」「AAAA を消したはずなのに残っている」といった確認では、NXDOMAIN と NODATA の違いが手がかりになります。kdig なら、応答コードと件数の組み合わせで機械的に判断できます。

問い合わせ先が失敗した(SERVFAIL)

  • Windows 版 nslookup:Server failed と表示されます。
  • BIND 版 nslookup:** server can't find ...: SERVFAIL と表示されます。
  • kdig:status: SERVFAIL と表示されます。

SERVFAIL の原因で多いのは、権威サーバーに届かないことと、DNSSEC の検証の失敗です。nslookup では両者を見分けられませんが、kdig では検証を外す +cdflag を付けて問い合わせ直せます。

# 検証ありで SERVFAIL、検証なしで値が返るなら DNSSEC の問題
kdig @1.1.1.1 www.example.com A
kdig @1.1.1.1 www.example.com A +cdflag

2つ目で値が返るなら、親ゾーンの DS とゾーンの鍵が合っていない可能性が高いと判断できます。DNS 事業者を移転した直後に起こりやすい症状です。

問い合わせを断られた(REFUSED)

  • Windows 版 nslookup:Query refused と表示されます。
  • BIND 版 nslookup:REFUSED を含む行が表示されます。
  • kdig:status: REFUSED と表示されます。

権威サーバーに、そのサーバーが担当していない名前を聞いた場合や、外部からの再帰問い合わせを許可していないキャッシュサーバーに聞いた場合に起こります。問い合わせ先の選び方を見直します。

応答が返らない(タイムアウト)

  • Windows 版 nslookup:DNS request timed out. の行が繰り返し表示されます。
  • BIND 版 nslookup:connection timed out; no servers could be reached と表示されます。
  • kdig:;; WARNING や ;; ERROR で始まる行が出て、ヘッダーは表示されません。

DNS の設定ではなく通信の問題です。kdig では +tcp で TCP に切り替えて結果が変わるかを見ると、UDP だけが止められているかを切り分けられます。nslookup でも -vc で TCP を使えますが、版によって挙動が違うため、詳しく調べるなら kdig のほうが確かめやすくなります。

WordPress サーバーでの調べ分け

WordPress の管理画面の「サイトヘルス」で外部への通信の失敗が報告される、更新やプラグインのダウンロードが cURL error 6(名前解決の失敗)で止まる、といったときの調べ方です。

手順1:PHP と同じ経路で引けるかを確かめる

PHP の通信は、OS の名前解決の仕組み(/etc/hosts と /etc/resolv.conf など)を使います。一方、nslookup と kdig は DNS サーバーに直接問い合わせ、/etc/hosts を参照しません。まず OS と同じ経路の結果を見ます。

# OS の名前解決の仕組みを通して引く
getent ahosts api.wordpress.org

ここで失敗し、次の手順の kdig では引けるなら、/etc/hosts の誤った記述や、/etc/resolv.conf の問い合わせ先の誤りを疑います。Docker などのコンテナで WordPress を動かしている場合は、コンテナの中で同じコマンドを実行します。コンテナには独自の resolv.conf があるためです。

手順2:設定された DNS サーバーに kdig で聞く

# resolv.conf に書かれたサーバー(例:192.0.2.53)に直接聞く
kdig @192.0.2.53 api.wordpress.org A

# 公開 DNS と比べる
kdig @1.1.1.1 api.wordpress.org A

設定されたサーバーだけが SERVFAIL やタイムアウトになるなら、そのサーバーの不調か、サーバーから外への通信の制限が原因です。ホスティング事業者の DNS を使っている場合は、事業者に状況を問い合わせます。

手順3:定期的な確認は kdig で状態を読む

障害が断続的に起こる場合は、応答コードを記録して傾向を見ます。kdig の出力から status の値を取り出す例です。

# 応答コードだけを取り出して日時と一緒に記録する
st=$(kdig @192.0.2.53 api.wordpress.org A \
  | awk -F'status: ' '/status:/ {split($2, a, ";"); print a[1]; exit}')
echo "$(date '+%F %T') ${st:-NO_RESPONSE}" >> dns-check.log

コマンドの終了コードは、ツールや版によって「応答を受け取れたか」と「答えが得られたか」のどちらを表すかが違います。スクリプトでは終了コードに頼らず、このように応答コードそのものを読むほうが判断がぶれません。

使い分けのまとめ方

  • Windows の PC から、利用者と同じ状態で引けるかをすぐに確かめたい:nslookup
  • NXDOMAIN と NODATA を区別したい、DNSSEC の失敗かどうかを見分けたい:kdig
  • UDP と TCP の違い、暗号化 DNS の経路を確かめたい:kdig
  • WordPress サーバーで PHP の名前解決の失敗を調べたい:まず getent、次に kdig

まとめ

  • NXDOMAIN は両者とも分かりやすく表示されますが、NODATA は Windows 版 nslookup では SOA だけが出て読み違えやすく、kdig なら NOERROR と ANSWER: 0 で判断できます。
  • SERVFAIL は nslookup では原因を見分けられません。kdig の +cdflag で DNSSEC の検証の失敗かどうかを切り分けます。
  • タイムアウトは通信の問題で、kdig の +tcp で UDP だけの遮断かを確かめます。
  • WordPress サーバーでは、nslookup と kdig が /etc/hosts を使わない点に注意し、まず getent ahosts で PHP と同じ経路を確かめてから kdig で DNS サーバーを調べます。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲