dig コマンドの解説
この記事では、dig コマンドの機能や、そのインストール方法、使用方法について解説します。また、その制限事項を回避する方法についても説明します。
要約:これを知っておくべきこと dig コマンドについて知っておくべきこと
dig は、DNS サーバーにクエリを送信するためのコマンドラインツールです。
ドメイン名を指定すると、DNSクエリが送信され、生の応答結果――IPアドレス、レコードタイプ、TTL、応答したサーバー、および処理にかかった時間――が表示されます。これはDNSのトラブルシューティングに欠かせないツールですが、いくつかの制限があります。
| 制限事項 | 回避策 |
| デフォルトの出力は情報量が多すぎて、明確な答えを得るだけでもあまりにも多くのフラグを指定しなければなりません。 | よりシンプルな出力を得るには、nslookup コマンドに切り替えるか、自動化用に構造化された JSON データが必要な場合は、専用の DNS Lookup API を使用してください。 |
| Windowsにはデフォルトではプリインストールされていません | インストールするか、OSに依存しない方法として、nslookup またはDNS Lookup API をご利用ください。 |
| 結果には、再帰的リゾルバーからのキャッシュされた応答が含まれている可能性があります | +traceフラグを使用すると、ローカルキャッシュをバイパスし、digにルートDNSサーバーから権威サーバーに至る最新の委任パスをたどらせることができます。あるいは、DNS Lookup API を使用すると、ローカルのリゾルバーとは関連付けられていないグローバルなパブリックDNSサーバーから、新しいクエリを実行することができます。 |
| クエリを連続して多数実行すると、DNSリゾルバーのレート制限がトリガーされる可能性があります | 大量の検索処理に対応するように設計されたDNS Lookup API をご利用ください |
なぜ「Dig」と呼ばれるのでしょうか?
それは、文字通りDNSサーバーからデータを「掘り起こす」からというわけではありません。「dig」という名称は、かつて「Domain Information Groper」の略語であると言われていましたが、開発者の公式ドキュメントでは2017年にその略語の説明が削除され、現在では単にDNS検索ユーティリティとして説明されています。
その仕組みは dig digコマンドの仕組み
dig コマンドを実行すると、このツールは DNS クライアントとして動作し、以下の処理を行います:
- ターミナルで「dig」コマンド(dig example.com)を入力します。 ネームサーバーを指定しない場合 、dig はオペレーティングシステムのデフォルトのリゾルバーを使用します。これは通常、resolv.conf ファイルで設定されています。また、@ 記号を使用することで、特定のネームサーバーを指定することもできます(dig @8.8.8.8 example.com)。
- digはそのリゾルバーに対して再帰的なクエリを送信します。これは 、リゾルバーに対し、digに代わって答えを探し出してもらうよう依頼しているのです 。
- リゾルバーはキャッシュを確認します。 有効な回答がすでにキャッシュされている場合は 、すぐにそれを返します。これは、最近誰かが同じリゾルバーを使ってそのドメインを照会し、その結果が一時的に保存されていた場合に起こります。
- 回答がキャッシュされていない場合、リゾルバーはユーザーに代わって反復的なDNSクエリを実行します。まず、 ルートネームサーバーにクエリを送信します。 ルートサーバーは、トップレベルドメイン(TLD)のネームサーバー(例:.com)を指し示し、TLDサーバーはそのドメインの権威あるDNSサーバーを指し示します。
- 権威サーバーは、ドメイン名のDNSレコードを返します。たとえば、Aレコードの検索ではIPアドレスを、TXTレコードの検索では任意のテキストを返します。
- リゾルバーは結果をdigに返します。digはそれを整形して、ターミナルに表示します。
なお、+trace フラグを指定すると、この処理の流れが変更されます。再帰処理をリゾルバに任せるのではなく、dig はリゾルバに対して 1 回だけクエリを送信して現在のルートサーバー一覧を取得し、その後、ルートサーバーから順に、自身で反復的なクエリを実行します。これは、設定済みの再帰リゾルバをバイパスして、実際の委任パスを確認したい場合に役立ちます。
インストール方法 dig コマンドのインストール方法は?
dig を使用するには、まずインストールする必要がある場合があります。インストール手順は、お使いの OS によって異なります。まず、ターミナルで次のコマンドを実行して、すでにインストールされているかどうかを確認してください:
dig -v
「dig」がインストールされている場合は、「DiG 9.18.39」のようなバージョン番号が表示されます。インストールされていない場合は、お使いの OS に応じて以下の手順に従ってください。
Linux の dig コマンド
多くのLinuxディストリビューションでは、bind9-dnsutils(Debian/Ubuntu)またはbind-utils(RHEL/CentOS/Fedora)パッケージの一部として、digが最初からインストールされています。もしインストールされていない場合は、お使いのディストリビューションのパッケージマネージャーを使用してインストールしてください。
Debian/Ubuntu の場合:
sudoapt install bind9-dnsutils
RHEL/CentOS/Fedora の場合:
sudodnf install bind-utils
実行 dig -v その後、確認してください。
その 掘る Windows でのコマンド
掘る Windowsにはプリインストールされていません。最も簡単な方法は、Windows Subsystem for Linux(WSL)を使用することです。これにより、完全なLinuxシェルを利用できるようになります。その手順については、こちらの記事で詳しく解説しています。 host コマンド 詳しい解説は割愛しますが、手順を簡単にまとめると以下の通りです:
- PowerShell で WSL を有効にする(管理者として):
wsl--install
これにより、Microsoft Storeからお使いのコンピューターにUbuntuが自動的にインストールされます。
- 再起動してください。
- Ubuntuを起動し、dnsutilsをインストールしてください:
sudoapt-get install bind9-dnsutils
- 以下の点をご確認ください
dig -v.
dig Macでの「dig」コマンド
macOSにはdigが最初からインストールされています。ターミナルを開き、「dig -v」を実行して確認してください。バージョン番号が表示されれば、問題なく使用できます。何らかの理由でインストールされていない場合は、Homebrewからインストールしてください:
brew installbind
確認のため、もう一度「dig -v」を実行してください。
Homebrew自体がまだインストールされていない場合は、brew.sh にある公式のインストールスクリプトを実行してください:
/bin/bash -c"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
dig コマンドの構文、オプション、および引数
基本的な構文
dig [@server] [type] [domain] [options]
dig コマンドの使用例を以下に示します:
dig@8.8.8.8MX gmail.com+short
これにより、次のような結果が返されました:

国旗
| 旗 | 説明 | クエリの例 |
@server | クエリを送信するネームサーバーを指定します。 | dig @8.8.8.8 example.com |
-b アドレス | クエリの発信元IPアドレスを設定します。 | dig -b 192.168.1.10 example.com |
-c クラス | クエリクラスを設定します。デフォルトは IN(Internet)であり、これはすべての標準的な DNS 検索を網羅しています。他に使用される可能性のあるクラスは CH(Chaosnet)のみであり、これは特定のレコードタイプと組み合わせて、ネームサーバーの識別情報やソフトウェアのバージョンを照会するために使用されます。 | dig @8.8.8.8 TXT hostname.bind CH |
-f ファイル名 | バッチモードで実行されます。ファイルからクエリを読み込み、1行につき1つのクエリを処理します。 | dig -f domains.txt |
-h | 引数とオプションの概要を表示します。 | dig -h |
-k キーファイル | DNSクエリに署名するためのTSIGキーファイルを指定します。 | dig -k auth.key example.com |
-m | メモリ使用量のデバッグを有効にします。 | dig -m example.com |
-p ポート番号 | デフォルトのポート 53 ではなく、標準以外のポートに対してクエリを実行します。 | dig -p 5353 example.com |
-q 名前 | クエリ名を明示的に設定します。 | dig -q example.com |
-t タイプ | A、MX、NS、AXFR、TXTレコードなどのクエリの種類を設定します。 | dig -t MX example.com |
-u | クエリの実行時間をミリ秒単位ではなく、マイクロ秒単位で表示します。 | dig -u example.com |
-v | バージョン番号を表示して終了します。 | dig -v |
-x アドレス | PTRレコードを使用して、IPアドレスをホスト名に紐付ける逆DNSルックアップを実行します。 | dig -x 8.8.4.4 |
-y [hmac:]name:key | コマンドライン上で直接 TSIG キーを指定します。 | dig -y hmac-sha256:user1:pass123 example.com |
-4 | ツールにIPv4のみを使用するように強制します。 | dig -4 example.com |
-6 | ツールにIPv6のみを使用させるように強制します。 | dig -6 example.com |
出力形式を変更するクエリオプション
ツールの出力形式を制御するためのパラメータを設定することができます:
| オプション | 説明 | クエリの例 |
+短 | 詳細な出力ではなく、回答の要約版を返します。 | dig example.com +short |
+コメントなし | 出力から一部のコメント行を非表示にします。 | dig example.com +nocomments |
+noanswer | 出力の解答部分を非表示にします。 | dig example.com +noanswer |
+noauthority | 出力の「権限」セクションを表示または非表示にします。 | dig example.com +noauthority |
+追加なし | 返信の追加部分を非表示にします。 | dig example.com +noadditional |
+noquestion | 質問セクションを非表示にします。 | dig example.com +noquestion |
+nostats | 応答時間や返信サイズなどのクエリ統計情報を非表示にします。 | dig example.com +nostats |
+noall | すべての表示フラグをクリアし、その後、特定のセクションを有効にするために使用します。 | dig example.com +noall +answer |
+複数行 | レコードを、人間が読みやすい複数行形式で出力します。 | dig example.com +multiline |
+nottlid | レコードを出力する際に、TTL値を非表示にします。 | dig example.com +nottlid |
+ttlunits / +nottlunits | TTLを日や時間といった人間が理解しやすい単位で表示または非表示にし、+ttlidを暗黙的に指定します。 | dig example.com +ttlunits |
クエリの動作を変更するクエリオプション
また、ツールがクエリを実行する方法を変更するオプションもあります:
| オプション | 説明 | クエリの例 |
+trace | ルートネームサーバーから回答に至るまでの完全な委任経路を追跡します。 | dig example.com +trace |
+norecurse | 再帰クエリを無効にします。 | dig example.com +norecurse |
+tcp | この設定により、ツールはUDPの代わりにTCPを使用するようになります。なお、ほとんどのクエリではUDPがデフォルトとなっています。 | dig example.com +tcp |
+検索 | /etc/resolv.conf で定義されている検索リストを使用します。 | dig internal-host +search |
+nssearch | ゾーンの権威ネームサーバーを検索し、そのSOAレコードを表示します。 | dig example.com +nssearch |
+DNSsec | DNSSECレコードの要求を有効/無効に切り替えます(DOビットを設定します)。これにより、DNSSEC関連のレコード(RRSIG、DNSKEY)が表示されます。 | dig example.com +dnssec |
+time=T(新しいディストリビューションの場合は +timeout=T) | クエリの時間を秒単位で設定します(デフォルトは5です)。 | dig example.com +timeout=2 |
+試行回数=T | クエリの実行試行回数を設定します(デフォルトは3回です)。 | dig example.com +tries=5 |
+retry=T | サーバーごとの再試行回数を設定します。ただし、最初のクエリはカウントしません(デフォルトは 2 です)。 | dig example.com +retry=1 |
+失敗 | +fail を指定すると、SERVFAIL を受信した際にツールが次のサーバーへの接続を試みなくなります。+nofail(デフォルト)を指定すると、接続を試み続けます。 | dig example.com +fail |
「 dig コマンドはどのような働きをするのでしょうか?(例付き)
1. ウェブサイトのIPアドレスを確認する
これが最も基本的な使用例です。dig コマンドは、そのドメインの A レコード(IPv4 アドレス)を返します。
example.com を dig する

2. ドメインのMXレコードを確認する
以下のコマンドを実行すると、dig コマンドは、そのドメインを担当するメールサーバーを返します。
dig MX google.com

以下の内容を追加することができます。 +短 メールサーバーのみを取得するオプションです。
dig MX google.com+short

3. 利用可能なすべてのDNSレコードを照会する
dig を使用すれば、ANY オプションを用いてドメインのすべてのレコードタイプを照会することができます。ただし、RFC 8482 に基づき、DNS 増幅攻撃を抑制するため、多くの権威ネームサーバーでは、完全なレコードセットではなく、最小限の応答のみを返すようになっています。また、Cloudflare の 1.1.1.1 などの一部のパブリックリゾルバーでは、ANY クエリを完全に拒否しています。
dig example.comANY

回避策として、いかなるリクエストもブロックしないリゾルバーを指定することができます。ただし、そのドメインの権威ネームサーバーがこの種のクエリを制限している場合は、代わりに各レコードタイプごとに個別にクエリを実行する必要があります。
dig@8.8.8.8example.comANY

4. DNSパスを追跡する
dig を有効にすることで、設定済みのリゾルバを使用する代わりに、ルートサーバーにクエリを送信し、委任チェーンをたどって権威ネームサーバーまで追跡することができます。「trace」オプションは、伝播の問題を診断したり、どのサーバーが権威サーバーであるかを確認したりするのに役立ちます。
dig example.com +trace


5. ドメインを担当するネームサーバーを確認する
ドメイン名のネームサーバーを取得するには、次のコマンドを使用してください:
dig NS example.com

以下の +短 レスポンス内のその他の詳細をすべて非表示にするオプションです。
dig NS example.com+short

6. TLDを担当するネームサーバーを探す
また、dig を使用すると、特定のトップレベルドメイン(TLD)のネームサーバーを取得することもできます。
dig NS com+short

~がなければ +短 パラメータを設定すると、その他の詳細が表示されます。

7. AレコードのTTL値を確認してください
ドメインのAレコードのTTL値のみを表示するには、+noallおよび+answerパラメータを指定する必要があります。これにより、answerセクション以外のすべての情報が表示されなくなります。コマンドは次のようになります:
dig example.com +noall +answer
ただし、WSL上でこれを実行する場合、一部のWSL構成では、DNS応答内のTTL値がゼロになってしまうというよくある問題が発生する可能性があります。実際のTTL値を取得するには、外部のDNSサーバーに直接クエリを送信する必要があります。
dig@8.8.8.8example.com+noall +answer

8. ネームサーバーにゾーンが存在するかどうかを確認する
ネームサーバーにそのゾーンがない場合、見つかりませんでしたというエラー メッセージが返されます。
dig SOA example.com@ns1.example.com

dig SOA example.com@elliott.ns.cloudflare.com

9. リバースDNSルックアップを実行する
dig を使用して、PTR レコードを通じて IP アドレスをホスト名に紐づけることで、逆 DNS 検索を実行します。
dig-x 74.6.231.20

10. 一括で ドメイン名の検索
dig は、ファイルからドメイン名を読み込み、それぞれに対してクエリを実行することができます。これはドメイン名のリストを確認する際に役立ちますが、1台のマシンから大量のクエリを実行すると、DNSサーバーのレート制限が適用される可能性がある点にご注意ください。
dig -f domains.txt+short

各ドメインの完全なレスポンスを確認したい場合は、「+short」パラメータを削除してください。
「dig」コマンドを使うべき場合と、他のツールを使うべき場合
次のような場合に「dig」を使用してください:
- 低レベルのDNS診断を実行します。「dig」コマンドを使用すると、レコードタイプ、TTL、応答したサーバー、応答にかかる時間など、DNS応答の全情報を取得できます。DNSレベルで何が起きているかを正確に把握したい場合に、最適なツールです。
- +trace オプションを使用して解決パスを確認します。このオプションを使用すると、ルート DNS サーバーから権威ネームサーバーに至るまでのドメインの委任を追跡できます。これは、伝播の問題を診断したり、ドメインがどこから解決されているかを確認したりするのに役立ちます。
- 応答がキャッシュから返されたものか、権威サーバーから返されたものかを確認します。TTL値は、リゾルバーがキャッシュされた応答を更新するまで、どれくらいの期間保持するかを示す指標となります。TTL値が低い場合は、通常、そのレコードがすでにしばらくの間キャッシュされていることを意味します。
次のような場合には、dig の使用を避け、別のツールを使用することをお勧めします:
- 簡単な検索:IPアドレスやTXTレコードなど、手っ取り早く答えを知りたいだけの場合、hostやnslookupといったツールの方がシンプルで、余計なオプションを指定しなくてもすっきりとした結果が得られます。
- 大規模な自動化: 上記の例でもお分かりのように 、dig は構造化されていないテキストを出力するため、スクリプトでの解析が困難です。さらに、1 台のマシンから多数のクエリを連続して実行すると、DNS サーバーのレート制限に引っかかる可能性があります。A DNS Lookup API は、構造化されたJSONを返すうえ、大量の利用を想定して設計されているため、自動化にはより適しています。
- 監視:digはスクリプトを作成してスケジュール通りに実行させることはできますが、組み込みのアラート機能、ダッシュボード、履歴追跡機能は備えていません。DNSの状態を長期的に監視し、何らかの変化があった際に通知を受け取りたい場合は、専用の監視ツールの方が適しています。
よくある質問
「dig」と「nslookup」の違いは何ですか?
どちらのツールもDNSにクエリを送信しますが、その動作は異なります。
nslookup はよりシンプルで、Windows ではデフォルトで利用可能ですので、簡単な DNS 検索を行う際によく使われるツールです。
dig は、出力にさらに詳細な情報を表示します。これには、完全な DNS 応答、TTL、およびクエリ統計などが含まれます。また、nslookup ではできないような方法で、dig が DNS クエリを送信する方法や返す結果をカスタマイズすることも可能です。特に、次のようなフラグを使用することで、 +trace, +noall +answer、そして +複数行.
dig はTCPとUDPのどちらを使用していますか ?
デフォルトでは、dig はポート 53 の UDP を使用しますが、ANY および IXFR クエリの場合は自動的に TCP に切り替わり、AXFR(ゾーン転送)クエリの場合は常に TCP を使用します。UDP の方が高速であり、ほとんどの DNS クエリには十分です。ただし、次のオプションを使用することで、このツールに TCP の使用を強制することができます。 +tcp flag。