Linuxでdigコマンドを使用する方法

公開: 2022-01-29
Linuxシステムの定型化されたターミナルウィンドウ。
Fatmawati Achmad Zaenuri / Shutterstock

Linux digコマンドを使用すると、DNSサーバーにクエリを実行してDNSルックアップを実行できます。 IPアドレスが戻るドメインを見つけることもできます。 方法をお見せします!

digコマンドのしくみ

人々はdigコマンドを使用して、ドメインネームシステム(DNS)サーバーにクエリを実行します。 digは、Domain InformationGroperの頭字語です。 digを使用すると、ホストアドレス、メール交換、ネームサーバー、関連情報など、さまざまなDNSレコードに関する情報をDNSサーバーに照会できます。 これは、DNSの問題を診断するためのツールとなることを目的としていました。 ただし、これを使用して、インターネットルーティングトラフィックを維持する中央システムの1つであるDNSについて詳しく調べることができます。

インターネットはインターネットプロトコル(IP)アドレスを使用して、Web上の「場所」を識別しますが、人々はドメイン名を使用します。 WebブラウザやSSHクライアントなどのアプリケーションにドメイン名を入力する場合、何かをドメイン名から実際のIPアドレスに変換する必要があります。 これがドメインネームシステムの出番です。

インターネットに接続されたプログラムでドメイン名を使用すると、ローカルルーターはドメイン名を解決できません(以前のリクエストからキャッシュされていない限り)。 したがって、ルーターは、インターネットサービスプロバイダー(ISP)のDNSサーバー、またはシステムで使用するように構成したその他のサーバーにクエリを実行します。 これらはDNSプリカーサーサーバーと呼ばれます。

DNSサーバーが最近、同じコンピューター上の他の誰かから同じ要求を受信した場合、その答えはキャッシュにある可能性があります。 その場合は、同じ情報をプログラムに送り返すだけです。

DNSプリカーサーサーバーがキャッシュ内のドメインを見つけることができない場合、DNSルートネームサーバーに接続します。 ルートサーバーは、ドメイン名をIPアドレスに解決するために必要な情報を保持しませんが、要求に役立つサーバーのリストを保持します。

広告

ルートサーバーは、.COM、.ORG、.CO.UKなど、ドメイン名が属するトップレベルドメインを調べます。 次に、これらのタイプのドメインを処理するトップレベルドメインサーバーのリストをDNSプリカーサーサーバーに送り返します。 その後、DNSプリカーサーサーバーは、トップレベルドメインサーバーに対してもう一度要求を行うことができます。

トップレベルドメインサーバーは、権限のあるネームサーバー(ドメインの詳細が保存されている場所)の詳細をDNSプリカーサーサーバーに送り返します。 次に、DNSサーバーは、プログラムに最初に入力したドメインのゾーンをホストしている権限のあるネームサーバーにクエリを実行します。 権限のあるネームサーバーはIPアドレスをDNSサーバーに送り返し、DNSサーバーはそれをDNSサーバーから送り返します。

digのインストール

digはすでにUbuntu18.04およびFedora30コンピューターにインストールされています。 ただし、次のコマンドを使用してManjaro18.04コンピューターにインストールする必要がありました。

 sudo pacman -Sy bind-tools 

dig入門

最初の例では、ドメイン名に関連付けられたIPアドレスを返します。 多くの場合、複数のIPアドレスが単一のドメイン名に関連付けられています。 これは、たとえば、負荷分散が使用されている場合によく発生します。

以下に示すように、 +short queryオプションを使用します。これにより、簡潔な応答が得られます。

 howtogeek.com + shortを掘る

howtogeek.comドメインに関連付けられているすべてのIPアドレスが一覧表示されます。 スペクトルの反対側では、 +short queryオプションを使用しない場合、出力は非常に冗長になります。

広告

したがって、次のように入力して、パイプをlessします。

 howtogeek.comを掘る| 以下

以下に示すように、出力はlessで表示されます。

完全なリストは次のとおりです。

 ; << >> DiG 9.11.3-1ubuntu1.11-Ubuntu << >> howtogeek.com
;; グローバルオプション:+ cmd
;; 答えを得た:
;; ->> HEADER <<-オペコード:QUERY、ステータス:NOERROR、ID:12017
;; フラグ:qr rd ra; 質問:1、回答:4、権限:0、追加:1

;; オプトシュードセクション:
; EDNS:バージョン:0、フラグ:; udp:65494
;; 質問セクション:
; howtogeek.com。 で

;; 回答セクション:
howtogeek.com。 3551 IN A 151.101.194.217
howtogeek.com。 3551 IN A 151.101.130.217
howtogeek.com。 3551 IN A 151.101.66.217
howtogeek.com。 3551 IN A 151.101.2.217

;; クエリ時間:0ミリ秒
;; サーバー:127.0.0.53#53(127.0.0.53)
;; 日時:Sun Mar 22 07:44:37 EDT 2020
;; MSGサイズrcvd:106

その部分を少しずつ分析してみましょう。

ヘッダ

まず、ヘッダーにあるものを見てみましょう。

 ; << >> DiG 9.11.3-1ubuntu1.11-Ubuntu << >> howtogeek.com
;; グローバルオプション:+ cmd
;; 答えを得た:
;; ->> HEADER <<-オペコード:QUERY、ステータス:NOERROR、ID:12017
;; フラグ:qr rd ra; 質問:1、回答:4、権限:0、追加:1

さて、これがそのすべての意味です:

  • 最初の行: digのバージョンと照会されたドメイン。
  • グローバルオプション:これから説明するように、 digを使用して複数のドメインを同時にクエリできます。 この行は、すべてのドメインクエリに適用されたオプションを示しています。 簡単な例では、これはデフォルトの+cmd (コマンド)オプションでした。
  • オペコード:クエリ:これは、要求された操作のタイプであり、この場合はqueryでした。 この値は、逆クエリの場合はiquery 、DNSシステムの状態をテストしている場合はstatusにすることもできます。
  • ステータス:エラーなし:エラーはなく、リクエストは正しく解決されました。
  • ID:12017 :このランダムIDは、要求と応答を結び付けます。
  • フラグ:qr rd ra:これらは、 queryrecursion desired 、およびrecursion available 。 再帰はDNSルックアップの1つの形式です(もう1つは反復です)。 また、 AAは、Authoritative Answerの略で、Authoritative NameServerが応答を提供したことを意味します。
  • クエリ:1:このセッションのクエリ数は1つでした。
  • 回答:4:この回答の回答数は4です。
  • 権限:0:権限のあるネームサーバーからの回答の数。この場合はゼロでした。 応答は、DNSプリカーサーサーバーのキャッシュから返されました。 応答には信頼できるセクションはありません。
  • 追加:1:追加情報が1つあります。 (不思議なことに、この値が2以上でない限り、何もリストされません。)

疑似セクションを選択する

次に、OptPseudosectionに次のように表示されます。

 ;; オプトシュードセクション:
; EDNS:バージョン:0、フラグ:; udp:65494

それを分解しましょう:

  • EDNS:バージョン0:使用されているDNSの拡張システムのバージョン。 EDNSは、ユーザーデータグラムプロトコル(UDP)パケットのサイズを拡張することにより、拡張データとフラグを送信します。 これは、可変サイズのフラグによって示されます。
  • フラグ:使用中のフラグはありません。
  • udp4096: UDPパケットサイズ。

質問セクション

質問セクションには、次のように表示されます。

 ;; 質問セクション:
; howtogeek.com。 で

これが意味することは次のとおりです。

  • howtogeek.com:クエリしているドメイン名。
  • IN:インターネットクラスのクエリを作成しています。
  • A:特に指定がない限り、 digはDNSサーバーにA(アドレス)レコードを要求します。

回答セクション

Answerセクションには、DNSサーバーから受け取った次の4つの回答が含まれています。

 howtogeek.com。 3551 IN A 151.101.194.217
howtogeek.com。 3551 IN A 151.101.130.217
howtogeek.com。 3551 IN A 151.101.66.217
howtogeek.com。 3551 IN A 151.101.2.217

これらの回答の意味は次のとおりです。

  • 3551:これはTime to Live(TTL)であり、レコードをキャッシュできる時間間隔を保持する32ビットの符号付き整数です。 有効期限が切れると、DNSサーバーによって更新されるまで、データをリクエストへの応答で使用する必要があります。
  • IN:インターネットクラスのクエリを作成しました。
  • A: DNSサーバーにAレコードを要求しました。

統計セクション

統計は最後のセクションであり、次の情報が含まれています。

 ;; クエリ時間:0ミリ秒 
;; サーバー:127.0.0.53#53(127.0.0.53) 
;; 日時:Sun Mar 22 07:44:37 EDT 2020 
;; MSGサイズrcvd:106

これが私たちが持っているものです:

  • クエリ時間:0ミリ秒:応答を取得するのにかかった時間。
  • サーバー:127.0.0.53#53(127.0.0.53):応答したDNSサーバーのIPアドレスとポート番号。 この場合、ローカルキャッシングスタブリゾルバーを指しています。 これにより、DNS要求が構成されているアップストリームDNSサーバーに転送されます。 Manajroテストコンピュータでは、ここにリストされているアドレスは、GoogleのパブリックDNSサービスである8.8.8.8#53でした。
  • いつ:Sun Mar 22 07:44:37 EDT 2020:リクエストが行われたとき。
  • MSG SIZE rcvd:106: DNSサーバーから受信したメッセージのサイズ。

選択的であること

あなたはタイトな唇と傲慢の2つの極端に落ち着く必要はありません。 digコマンドを使用すると、結果にセクションを選択的に含めたり除外したりできます。

次のクエリオプションは、結果からそのセクションを削除します。

  • + nocomments:コメント行を表示しません。
  • + noauthority:権限セクションを表示しません。
  • + noadditional:追加のセクションを表示しません。
  • + nostats:統計セクションを表示しません。
  • + noanswer:回答セクションを表示しません。
  • + noall:何も表示しないでください!
広告

+noallクエリオプションは通常、上記のいずれかと組み合わせて、結果にセクションを含めます。 したがって、クエリオプションの長い文字列を入力して複数のセクションをオフにする代わりに、 +noallを使用してすべてのセクションをオフにすることができます。

次に、次の包括的なクエリオプションを使用して、表示したいオプションをオンに戻すことができます。

  • +コメント:コメント行を表示します。
  • + Authority:権限セクションを表示します。
  • +追加:追加セクションを表示します。
  • + stats:統計セクションを表示します。
  • + answer:回答セクションを表示します。
  • + all:すべてを表示します。

次のように入力してリクエストを行い、コメント行を除外します。

 howtogeek.com + nocommentsを掘る

以下に示すように、 +noallクエリオプションを単独で使用すると、有用な出力は得られません。

 howtogeek.com + noallを掘る

見たいセクションを選択的に追加できます。 回答セクションを追加するには、次のように入力します。

 howtogeek.comを掘る+ noall + answer 

次のように入力して+statsをオンにすると、統計セクションも表示されます。

 howtogeek.com + noall + answer + statsを掘る

広告

+noall +answerの組み合わせがよく使用されます。 必要に応じて、コマンドラインに他のセクションを追加できます。 digを使用するたびにコマンドラインで+noall +answerと入力しないようにする場合は、それらを「.digrc」という構成ファイルに入れることができます。 それはあなたのホームディレクトリにあります。

次のように入力して、 echoを使用して作成します。

 echo "+ noall + answer"> $ HOME / .digrc

次に、次のように入力して内容を確認できます。

 cat .digrc 

これらの2つのオプションは、以下に示すように、今後のdigのすべての使用に適用されます。

 ubuntu.orgを掘る
linux.orgを掘る
github.comを掘る

このdig構成ファイルは、この記事の残りの例で使用されます。

DNSレコード

digリクエストに返される情報は、DNSサーバーに保持されているさまざまなタイプのレコードから取得されます。 別のことを要求しない限り、 digはA(アドレス)レコードを照会します。 以下は、 digで一般的に使用されるレコードのタイプです。

  • レコード:ドメインをIPバージョン4アドレスにリンクします。
  • MXレコード:メール交換は、ドメインに送信された直接メールを正しいメールサーバーに記録します。
  • NSレコード:ネームサーバーレコードは、ドメイン(またはサブドメイン)を一連のDNSサーバーに委任します。
  • TXTレコード:テキストレコードには、ドメインに関するテキストベースの情報が格納されます。 通常、これらはなりすましまたは偽造された電子メールを抑制するために使用されます。
  • SOAレコード:オーソリティレコードの開始は、ドメインに関する多くの情報を保持できます。 ここでは、プライマリネームサーバー、責任者、変更のタイムスタンプ、ゾーンの更新の頻度、および再試行と放棄の一連の時間制限を確認できます。
  • TTL:存続時間は、DNSプリカーサーサーバーが各DNSクエリをキャッシュできる期間を指定する各DNSレコードの設定です。 その時間が経過すると、後続のリクエストのためにデータを更新する必要があります。
  • ANY:これは、可能なすべてのタイプのDNSレコードを返すようにdigに指示します。
広告

以下に示すように、Aレコードタイプを指定しても、アドレスレコードをクエリしてIPアドレスを取得するというデフォルトのアクションは変更されません。

 redhat.comを掘るA 

メール交換レコードを照会するには、次のMXフラグを使用します。

 yahoo.comMXを掘る

ネームサーバーフラグは、トップレベルドメインに関連付けられているルートネームサーバーの次の名前を返します。

 fedora.comNSを掘る

権限レコードの開始を照会するには、次のSOAフラグを入力します。

 manjaro.comのSOAを掘る

TTLフラグは、DNSサーバーのキャッシュ内のデータの存続時間を示します。 一連のリクエストを行うと、存続時間がゼロになり、最初の値に戻ります。

次のように入力します。

 usa.govTTLを掘る

テキストレコードを表示するには、TXフラグを入力します。

 usa.govTXTを掘る

DNSサーバーの指定

リクエストに特定のDNSサーバーを使用する場合は、アットマーク( @ )を使用して、コマンドラインパラメーターとしてdigに渡すことができます。

広告

デフォルトのDNSサーバー(以下を参照)では、 digは127.0.0.53のローカルキャッシングスタブリゾルバーを参照します。

 uda usa.gov + stats

ここで、次のように入力して、8.8.8.8でGoogleのパブリックDNSサーバーを使用します。

 掘る@ 8.8.8.8 usa.gov + stats 

複数のドメインでdigを使用する

以下に示すように、コマンドラインでdigために複数のドメインを渡すことができます。

 掘るubuntu.orgfedora.org manjaro.com 

ドメインのセットを定期的にチェックする場合は、それらをテキストファイルに保存し、それをdigに渡すことができます。 ファイル内のすべてのドメインが順番にチェックされます。

私たちのファイルは「domains.txt」と呼ばれます。 catを使用してその内容を表示し、それを渡して-f (ファイル)オプションを指定してdigます。 次のように入力します。

 cat domains.txt
 dig -f domains.txt 

DNSルックアップの逆引き

IPアドレスがあり、それがどこに行くのかを知りたい場合は、DNS逆引き参照を試すことができます。 DNSサーバーに登録されているサーバーに解決される場合は、そのドメインを見つけることができる場合があります。

広告

できるかどうかは、PTR(ポインターレコード)の存在に依存します。 PTRは、IPアドレスを完全修飾ドメイン名に解決します。 ただし、これらは必須ではないため、ドメインに常に存在するとは限りません。

IPアドレス209.51.188.148が私たちをどこに連れて行くかを見つけることができるかどうか見てみましょう。 -x (逆ルックアップ)オプションを使用して、次のように入力します。

 dig -x 209.51.188.148 

プレスト! IPアドレスはgnu.orgに解決されます。

PTRはDNSレコードであり、 digが指定されたDNSレコードを要求できることがわかっているので、 digにPTRを取得するように依頼することはできませんか? はい、できますが、もう少し作業が必要です。

以下に示すように、IPアドレスを逆の順序で指定し、最後に.in-addr.arpaを追加する必要があります。

 dig ptr 148.188.51.209.in-addr.arpa 

広告

同じ結果が得られます。 もう少し手間がかかりました。

あなたはそれを掘ることができますか?

私たちは皆、毎日インターネットを使用しています。好奇心旺盛な人々は、ブラウザにWebサイトの名前を入力すると、魔法がどのように発生するのか疑問に思うことがよくあります。 digを使用すると、ネットワークを活用するプロセスを調べることができます。

関連:開発者と愛好家のための最高のLinuxラップトップ