digコマンドは、DNSサーバーに直接問い合わせて、名前解決の結果と応答の中身をそのまま表示するコマンドです。「dig ドメイン名」でAレコード、「@サーバー」で問い合わせ先、「+short」で答えだけを出せます。結果で最初に見るのはstatusとANSWERの2か所です。
この記事でわかること
- digコマンドの基本の書き方と、よく使うオプション
- 結果の各セクション・flags・TTLの読み方
- NOERROR・NXDOMAIN・SERVFAIL・REFUSEDの意味と次の一手
- 答えが0件なのにNOERRORになる場合の見分け方
- +norecurseと+traceでDNSの切り替えを確かめる手順
一次情報: BIND 9 Documentation「Manual Pages(dig)」(参照)/RFC 1035「Domain Names – Implementation and Specification」(参照)/RFC 2308「Negative Caching of DNS Queries」(参照)/Microsoft Learn「Resolve-DnsName」(参照)※2026年10月時点
「名前が引けない」の切り分けは、監視・運用の現場で最初に任される仕事の1つです。監視の仕事からインフラエンジニアへ進む道筋は、別の記事にまとめました。
digコマンドとは?DNSの応答をそのまま見るコマンド
digコマンドとは、DNSサーバーに問い合わせを送り、返ってきた応答を加工せずに表示するコマンドです。DNSのソフトとして広く使われるBINDに付いてくる道具で、名前はDomain Information Groperの頭文字から来ています。
nslookupと比べると、応答の状態やフラグ、TTL(キャッシュしてよい秒数)までそのまま見えるのが違いです。サーバー側の設定が正しいかを確かめる場面では、digが標準の道具になっています。
| 環境 | 使えるか | 入っていないときの入れ方 |
|---|---|---|
| Mac | 最初から使える | ― |
| RHEL・Rocky・AlmaLinux | 入っていないことがある | sudo dnf install bind-utils |
| Ubuntu・Debian | 入っていないことがある | sudo apt install dnsutils |
| Windows | 標準では入っていない | WSLのLinuxで使うか、PowerShellのResolve-DnsNameで代わりにする |
Windowsで手軽に済ませるなら、代わりの道具はResolve-DnsNameです。Microsoftの資料のとおり、-Serverで問い合わせ先、-Typeでレコードの種類を指定できます。
digコマンドの基本の書き方とよく使うオプション
書き方は「dig @問い合わせ先 名前 レコードの種類 オプション」です。@と種類を省くと、PCに設定されたDNSサーバーへ、Aレコード(IPv4アドレス)を問い合わせます。
dig www.example.com
dig example.com MX
dig @192.0.2.53 www.example.com
dig -x 192.0.2.10
dig www.example.com +short
アドレスは説明用の値です。-xを付けると、IPアドレスから名前を引く逆引きになります。
| やりたいこと | 書き方 | 補足 |
|---|---|---|
| 答えだけを見る | dig 名前 +short | アドレスだけが1行ずつ出る |
| 応答の部分だけを見る | dig 名前 +noall +answer | TTLも一緒に見たいとき |
| レコードの種類を指定 | dig 名前 MX(NS・TXT・CNAME・AAAA) | 種類は名前の後ろに書く |
| 問い合わせ先を指定 | dig @サーバー 名前 | 権威サーバーとキャッシュの比較に使う |
| 逆引き | dig -x アドレス | PTRレコードを引く |
| キャッシュを頼らず聞く | dig @サーバー 名前 +norecurse | そのサーバーが持つ情報だけを返させる |
| ルートから順にたどる | dig 名前 +trace | 委任のどこで止まるかを見る |
| TCPで問い合わせる | dig 名前 +tcp | UDPが通らない経路の確認 |
digの結果の見方|セクションごとの意味
オプションを付けずに打つと、結果はいくつかのセクションに分かれて出ます。先頭に「;」が付いた行は説明やコメントで、付いていない行が実際のレコードです。
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41235
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;www.example.com. IN A
;; ANSWER SECTION:
www.example.com. 300 IN A 192.0.2.10
;; Query time: 12 msec
;; SERVER: 192.0.2.53#53(192.0.2.53) (UDP)
| 部分 | 中身 | 見るところ |
|---|---|---|
| HEADER | 応答の状態 | statusと、ANSWERの件数 |
| flags | 応答の性質 | aaがあるか、raがあるか |
| QUESTION | 何を聞いたか | 名前と種類の打ち間違い |
| ANSWER | 答え | 値と、左から2つ目のTTL |
| AUTHORITY | その名前を管理するサーバー | 答えが無いときの手がかり |
| 末尾(Query time・SERVER) | かかった時間と回答したサーバー | 本当に聞きたいサーバーが答えたか |
ANSWERの1行は、左から「名前・TTL・クラス・種類・値」の順です。上の例なら、www.example.comのAレコードは192.0.2.10で、あと300秒はキャッシュしてよい、という意味になります。
flagsの読み方(qr・aa・rd・ra)
flagsの並びは、応答がどんな立場から返ってきたかを表します。RFC 1035で決められたフラグで、切り分けで見るのは特にaaとraの有無です。
| 文字 | 意味 | 読み方 |
|---|---|---|
| qr | 応答である | 応答なら常に付く |
| aa | 権威ある回答 | その名前を管理するサーバー自身が答えた |
| rd | 再帰を頼んだ | digは既定で付けて送る |
| ra | 再帰に応じられる | キャッシュサーバーなら付く |
aaが無い答えは、キャッシュサーバーが覚えていた値です。設定を変えた直後に「新しい値になっているか」を見るなら、aaの付いた答えを見る必要があります。
TTLは「あと何秒覚えておくか」
キャッシュサーバーに同じ名前を何度か聞くと、TTLの数字が少しずつ減っていきます。これは「キャッシュしてから残り何秒か」を表しているためです。
権威サーバーに聞くと、設定された元のTTLがそのまま返ります。古い値が残っているキャッシュサーバーでは、残りのTTLが0になるまで新しい値に替わりません。切り替えの完了まで待つ時間は、この数字で見積もれます。
statusの意味と、次に確かめること
statusは、問い合わせがどう終わったかを表す欄です。RFC 1035で決められた応答コードを、digが名前で表示しています。
| status | 意味 | 次に確かめること |
|---|---|---|
| NOERROR(ANSWERが1以上) | 正常に答えが返った | 値が想定どおりか |
| NOERROR(ANSWERが0) | 名前はあるが、その種類のレコードが無い | 種類の指定違い、レコードの登録漏れ |
| NXDOMAIN | その名前自体が存在しない | 名前の綴り、ゾーンへの登録 |
| SERVFAIL | サーバーが答えを作れなかった | 権威サーバーに届くか、DNSSECの検証 |
| REFUSED | サーバーが問い合わせを断った | そのサーバーを使ってよい端末か |
答えが0件のNOERRORは、RFC 2308でNODATAと呼ばれる状態です。たとえばAレコードだけを登録した名前にAAAAを聞くと、この形になります。NXDOMAINと取り違えやすいので、ANSWERの件数まで見て判断する習慣をつけておくと安全です。
statusすら出ずに「connection timed out; no servers could be reached」となるのは、DNSサーバーから返事が無い場合です。53番のポートが途中で止められていないか、問い合わせ先のアドレスが正しいかを先に見ます。
DNSの切り替えが反映されたかを確かめる手順
Webサーバーの移転などでレコードを書き換えた後は、「権威サーバーは新しい値か」「キャッシュはいつ替わるか」を分けて確かめます。digなら、この2つを別々に聞けるのが強みです。
- dig 名前 NS +shortで、そのドメインの権威サーバーを調べる
- dig @権威サーバー 名前 +norecurseで聞き、flagsにaaがあり、値が新しいかを見る
- dig @社内やプロバイダのDNS 名前で聞き、値と残りのTTLを見る
- キャッシュ側が古ければ、残りTTLの秒数が切り替わりの目安になる
- 権威サーバーが古いままなら、dig 名前 +traceで委任の途中を順にたどる
BINDの資料にあるとおり、+traceはルートサーバーから順に問い合わせ、委任先をたどった結果を1段ずつ表示します。どの段で古いサーバーへ案内されているかが見えるので、ドメインの登録先でNSを書き換え忘れた場合も見つけられます。
権威サーバーとキャッシュサーバーは、聞き分ける
- 書き方
- dig @権威サーバー 名前 +norecurse
- flags
- aaが付く
- わかること
- 今の設定が新しい値になっているか
- 書き方
- dig @社内のDNS 名前
- flags
- aaが無く、raが付く
- わかること
- 利用者に今見えている値と、残りのTTL
図:設定の正しさは権威サーバーで、利用者への反映はキャッシュサーバーで確かめる
よくある質問
Windowsでdigを使うにはどうすればいいですか?
Windowsには標準で入っていないため、WSLで動かしたLinuxの中で使うのが手軽です。インストールせずに済ませたいときは、PowerShellの「Resolve-DnsName 名前 -Server サーバー -Type 種類」で同じ問い合わせができます。
dig +shortで何も表示されません
答えが0件だったという意味です。名前が存在しないのか、名前はあるのに指定した種類のレコードが無いのかは、+shortでは区別がつきません。+shortを外して打ち直し、statusとANSWERの件数を見てください。
「WARNING: recursion requested but not available」と出ました
再帰の問い合わせを受け付けないサーバー(多くは権威サーバー)に聞いたときの表示で、エラーではありません。そのサーバーが管理する名前なら、答えは正しく返ってくるので心配いりません。気になる場合は+norecurseを付けて聞けば、この表示は出なくなります。
digでは新しい値なのに、ブラウザでは古いサイトが開きます
PCやブラウザが、別に名前解決の結果を覚えていることがあります。hostsファイルに古い値が書かれていないかもあわせて確かめてください。PC側のキャッシュを消してから、ブラウザを開き直すと替わることが多いです。
digとnslookupは、どちらを使えばいいですか?
フラグやTTLまで見て設定を確かめるならdig、Windowsで手早く引くだけならnslookupやResolve-DnsNameが向いています。どちらも同じDNSサーバーに聞けば、返る答えは同じです。
まとめ
- digコマンドは、DNSの応答を加工せずに見せる道具。「dig @サーバー 名前 種類」で打つ
- 最初に見るのはstatusとANSWERの件数。値の横の数字はTTL
- aaは権威サーバー自身の答え、raはキャッシュサーバーの印
- 答え0件のNOERRORは「その種類のレコードが無い」。NXDOMAINとは別物
- 切り替えの確認は、権威サーバーを+norecurseで、利用者側をキャッシュサーバーで聞き分ける
名前が正しく引けているのにつながらないなら、問題はDNSの先にあります。その場合は、相手のアドレスまで届くかをpingやtracertで、ポートまで届くかをtelnetやTest-NetConnectionで確かめていく順番になります。
DNSの設定まで自分で読めることは、運用から設計・構築の仕事へ移るときの強みです。未経験・CCNA・CCNPの段階別に、ネットワークエンジニアが使う転職エージェントを比べてまとめました。
免責事項
※本記事はBINDの公式資料・RFC・Microsoftの公式ドキュメントなどの公開情報をもとに整理したものです。コマンドの表示や挙動は、OSやソフトのバージョン・環境によって変わる場合があります。業務で使う環境では、所属先の手順と各製品の最新資料をあわせてご確認ください。

