\r\n\r\n

linuxでのdigコマンドの使い方

linux の dig コマンドは、dns サーバーに問い合わせを行い、dns ルックアップを実行することができます。また、ipアドレスが指すドメインも確認できます。その方法をお教えします!...

Linux の dig コマンドは、DNS サーバーへの問い合わせと DNS ルックアップを実行することができます。また、IPアドレスが指し示すドメインも確認できます。その方法をお教えします!

digコマンドの仕組み

Linuxのdigコマンドは、DNS(Domain Name System)サーバーに問い合わせるために使われます。digは、Domain Name Information Finderの頭文字をとったものです。digを使用すると、ホストアドレス、メール交換、ネームサーバー、および関連情報を含む様々なDNSレコードの情報を照会することができます。DNSの問題を診断するために使用するツールです。しかし、インターネットのルーティングトラフィックを維持するための中心的なシステムの1つであるDNSを閲覧し、より詳しく学ぶために使用することができます。

インターネットでは、ネットワーク上の「場所」を特定するためにIP(Internet Protocol)アドレスを使用しますが、人々はドメイン名を使っています。ウェブブラウザやSSHクライアントなどのアプリケーションにドメイン名を入力する場合、ドメイン名を実際のIPアドレスに変換する必要があります。そこで登場するのが、DNS(ドメインネームシステム)です。

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

DNSサーバーが最近、同じコンピューター上の他の誰かから同じリクエストを受け取った場合、その回答がキャッシュに残っている可能性があります。その場合は、同じ情報をプログラムに送り返すだけです。

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

ルートサーバーは、お客様のドメインが属するトップレベルドメイン(例:.COM、.ORG、.NET)を確認します。英国法人等そして、これらの種類のドメインを扱うトップレベルドメイン・サーバーのリストをDNSサーバーに送り返すのです。その後、DNSの前身となるサーバーは、トップレベルドメインのサーバーに再度リクエストを行うことができる。

トップレベルドメイン・サーバーは、権威あるネームサーバーの詳細(ドメインの詳細が保存されている場所)をDNSサーバーに送り返します。DNSサーバーは、最初にプログラムを入力したドメインをホストするゾーンの権威あるネームサーバーに問い合わせをします。権威あるネームサーバーは、IPアドレスをDNSサーバーに送り返し、DNSサーバーはそれをお客様に送り返します。

掘削物の設置

digは、弊社のubuntu 18.04とfedora30のPCにインストール済みです。ただし、Manjaro 18.04のパソコンには、以下のコマンドでインストールする必要があります。

sudo pacman -Sy bind-tools

digを始めるにあたって

最初の例では、ドメイン名と関連付けられたIPアドレスを返します。多くの場合、1つのドメイン名には複数のIPアドレスが関連付けられています。これは、例えばロードバランシングを使用している場合などによく起こります。

以下のように、+short queryオプションを使用することで、簡潔な回答が得られます。

dig tl80.cn +short

サーバーtl80.cnウェブサイトのドメインに関連するすべてのIPアドレスが私たちのためにリストされています。一方、+short queryオプションを使用しないと、出力が非常に長くなってしまう。

そこで、より少ないパイプで通過させるために、次のように入力します。

dig tl80.cn | less

出力は、以下のように少ない単位で表示されます。

以下は、その一覧です。

; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> tl80.cn ;; global opti***: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12017 ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;tl80.cn. IN A ;; ANSWER SECTION: tl80.cn. 3551 IN A 151.101.194.217 tl80.cn. 3551 IN A 151.101.130.217 tl80.cn. 3551 IN A 151.101.66.217 tl80.cn. 3551 IN A 151.101.2.217 ;; Query time: 0 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) ;; WHEN: Sun Mar 22 07:44:37 EDT 2020 ;; MSG SIZE rcvd: 106

ひとつひとつ分解してみましょう。

ハーベスティングテーブル

まず、タイトルの中身を見てみましょう。

; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> tl80.cn ;; global opti***: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12017 ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

さて、これが何を意味するかというと

  • 1行目:digのバージョンとクエリのドメイン。
  • グローバルオプション:これから説明するように、digを使って複数のドメインを同時に照会することができます。この行は、すべてのドメインクエリに適用されたオプションを表示します。この例では、デフォルトの+cmd(コマンド)オプションだけです。
  • Opcode: query: 要求された操作のタイプで、この場合はクエリである。DNSシステムの状態をテストするだけであれば、この値は逆引きクエリiqueryやstatusでもよい。
  • ステータス:エラーなし:エラーなし、リクエストは正しく解決されました。
  • ID:12017:このランダムなIDがリクエストとレスポンスを結合する。
  • フラグ:qr rd ra: クエリ、必要な再帰、利用可能な再帰を示す。再帰はDNSルックアップの1つの形式です(もう1つは反復)。また、AAと表示されることがありますが、これはauthoritative answerの略で、権威のあるネームサーバーから提供された応答であることを意味します。
  • Query:1:このセッションでのクエリーの数を1にします。
  • 回答:4:この回答では、回答数は、4です。
  • Authority:0:権威あるネームサーバーからの回答数で、この場合は0です。DNSサーバーのキャッシュから応答が返されます。回答には権威ある部分はないでしょう。
  • 追加:1:追加のメッセージがあります。 (不思議なことに、値が2以上でないと何も表示されません)。

オプト擬似セクション

次に、Optセクションで次のように表示されます。

;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494

分解してみよう。

  • EDNS:Version 0: 使用する DNS 拡張システムのバージョン edns は、UDP(User Datagram Protocol)パケットのサイズを拡張して、拡張データおよびフラグを送信する。これは可変サイズフラグで示される。
  • ロゴ:ロゴは使用していません。
  • udp:4096:udpのパケットサイズ。

質問コーナー

質問コーナーでは、次のようなことが書かれています。

;; QUESTION SECTION: ;tl80.cn. IN A

ということです。

  • tl80.cnウェブサイト:お問い合わせのドメイン名です。
  • インターネット教室の問い合わせを行っています。
  • A: 私たちが特に指定しない限り、digはDNSサーバーにA(アドレス)レコードを要求します。

回答編

回答欄には、DNSサーバーから受け取った以下の4つの回答が記載されています。

tl80.cn. 3551 IN A 151.101.194.217 tl80.cn. 3551 IN A 151.101.130.217 tl80.cn. 3551 IN A 151.101.66.217 tl80.cn. 3551 IN A 151.101.2.217

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

  • 3551:TTL(Time To Live)。32 ビットの符号付き整数で、レコードのキャッシュ可能な時間間隔を保持する。データの有効期限が切れると、DNSサーバーをリフレッシュする前に、リクエストに対するレスポンスで使用する必要があります。
  • 中略)インターネットの授業検索を行いました。
  • A:DNSサーバーにはAレコードの提供をお願いしています。

統計部門

統計は最後のセクションで、次のような内容が含まれています。

;; Query time: 0 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) ;; WHEN: Sun Mar 22 07:44:37 EDT 2020 ;; MSG SIZE rcvd: 106

以下のような情報があります。

  • クエリータイム:0ミリ秒:レスポンスの取得に要した時間。
  • Server: 127.0.0.53#53 (127.0.0.53): 応答のあったDNSサーバーのIPアドレスとポート番号です。この例では、ローカルキャッシュスタブリゾルバーを指している。これは、設定されたすべてのアップストリームDNSサーバーにDNSリクエストを転送します。マナジロのテスト用パソコンでは、ここに記載されているアドレスは、GoogleのパブリックDNSサービスである「8.8.8.8#53」となっています。
  • Time: Sun Mar 22 07:44:37 EDT 2020: リクエストの時間です。
  • MSG SIZE rcvd:106:DNSサーバーから受信したメッセージのサイズです。

選択肢がある

口が堅いか、おしゃべりかの両極端である必要はありません。digコマンドを使えば、結果からセクションを選択的に含めたり、除外したりすることができます。

以下のクエリオプションを指定すると、結果からそのセクションが削除されます。

  • + コメントなし:コメント行は表示されません。
  • +許可なし:許可欄が表示されない。
  • + no additional:追加パーツは表示されません。
  • +nostats:統計情報セクションは表示されません。
  • + 無回答:回答欄を表示しない。
  • +ノエル:何も見せないで!

クエリーオプションの+noallは、上記のオプションと組み合わせて、あるセクションを結果に含めるためによく使われます。したがって、複数のセクションを閉じるために長いクエリーオプションのリストを入力するのではなく、+noallを使用してすべてのセクションを閉じることができます。

その後、以下の包括的なクエリオプションを使用して表示されるクエリオプションを再度開くことができます。

  • +Comment: コメント行を表示します。
  • + パーミッション:パーミッションセクションを表示します。
  • +Additional: 追加のセクションを表示します。
  • +stats:統計情報セクションを表示します。
  • + Answer: 回答欄を表示します。
  • +All:すべてのコンテンツを表示します。

リクエストの発行とコメント行を除外するために以下のように入力します。

dig tl80.cn +nocomments

以下のように、+noallクエリーオプションだけを使用した場合、有用な出力は得られません。

dig tl80.cn +noall

閲覧するセクションを選択的に追加することができます。回答セクションを追加するには、次のように入力します。

dig tl80.cn +noall +answer

また、次のように入力して+statisticsを有効にすると、統計の項目が表示されます。

dig tl80.cn +noall +answer +stats

通常、+noall+answerの組み合わせが使用されます。必要に応じて、他のセクションをコマンドラインに追加することができます。dig を使うたびにコマンドラインで +noall+ の答えを入力するのを避けたい場合は、ホームディレクトリにある ".digrc" という設定ファイルに書いておくとよいでしょう。

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

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

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

cat .digrc

この2つのオプションは、今後発掘されるすべての用途に、以下のように適用されることになります。

dig ubuntu.org dig linux.org dig github.com

このdig設定ファイルは、本書の残りの例で使用されます。

DNSレコード

digリクエストに対して返される情報は、DNSサーバーに保持されているさまざまな種類のレコードから抽出される。私たちが別のものを要求しない限り、digはA(アドレス)レコードを照会します。ディグでよく使われるレコードタイプは以下の通りです。

  • レコード:ドメインをIPバージョン4のアドレスにリンクさせる。
  • MXレコード:メール交換レコードは、ドメインに送信されたメールを直接正しいメールサーバーに送ります。
  • NSレコード:ネームサーバーレコードは、ドメイン(またはサブドメイン)を一連のDNSサーバーに委任するものです。
  • TXTレコード:テキストレコードは、ドメインに関するテキストベースの情報を保存します。一般的には、なりすましや偽造された電子メールを抑制するために使用されることがあります。
  • SOAレコード:Start of Authorityレコードは、ドメインに関する多くの情報を保持しています。ここには、プライマリネームサーバ、責任者、変更のタイムスタンプ、ゾーンリフレッシュの頻度、再試行と中止の一連の時間制限などが記載されています。
  • TTL:Time to liveは、DNSレコードごとの設定で、DNSプレフィックスサーバーが各DNSクエリーをキャッシュするのに許容される時間を指定するものです。この時間が経過すると、それ以降の要求に対してデータをリフレッシュする必要がある。
  • ANY:これは、digが返すことのできるすべてのタイプのDNSレコードを返すように指示します。

Aレコードの種類を指定しても、以下のようにアドレスレコードを照会してIPアドレスを取得するというデフォルトの動作は変わりません。

dig redhat.com A

メール交換記録を照会するために、以下のMXフラグを使用します。

dig yahoo.com MX

ネームサーバーフラグは、トップレベルドメインに関連するルートネームサーバーの以下の名称を返す。

dig fedora.com NS

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

dig manjaro.com SOA

TTLフラグは、DNSサーバーのキャッシュにあるデータの生存時間を示す。一連の要求を行うと、生存時間がゼロになり、その後、開始時の値までジャンプするのがわかります。

以下のように入力します。

dig usa.gov TTL

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

dig usa.gov TXT

dnsサーバーを指定する

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

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

dig usa.gov +stats

ここで、8.8.8.8のGoogle Public DNSサーバを使用するために、次のように入力します。

dig @8.8.8.8 usa.gov +stats

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

マイニングのコマンドラインでは、以下のように複数のフィールドを渡すことができます。

dig ubuntu.org fedora.org manjaro.com

フィールドのセットを定期的にチェックする場合、それらをテキストファイルに保存してdigに渡せば、ファイル内のすべてのフィールドが順番にチェックされます。

ファイル名は「domain.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アドレスを逆順に、-address: arpaの末尾に記述する必要があります。

dig ptr 148.188.51.209.in-addr.arpa

同じ結果を得たのだから、少し努力すればいいのだ。

掘れるか?

私たちは毎日インターネットを使っていますが、好奇心の強い人は、ブラウザにウェブサイトの名前を入力するときに、このマジックがどのように起こるのか不思議に思うことがよくあります。digを使えば、ウェブジャグリングのプロセスを探ることができます。

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ