\r\n\r\n
Linux の dig コマンドは、DNS サーバーへの問い合わせと DNS ルックアップを実行することができます。また、IPアドレスが指し示すドメインも確認できます。その方法をお教えします!
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最初の例では、ドメイン名と関連付けられた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さて、これが何を意味するかというと
次に、Optセクションで次のように表示されます。
;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494分解してみよう。
質問コーナーでは、次のようなことが書かれています。
;; QUESTION SECTION: ;tl80.cn. IN 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これらの回答が意味するところは、次のとおりです。
統計は最後のセクションで、次のような内容が含まれています。
;; 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コマンドを使えば、結果からセクションを選択的に含めたり、除外したりすることができます。
以下のクエリオプションを指定すると、結果からそのセクションが削除されます。
クエリーオプションの+noallは、上記のオプションと組み合わせて、あるセクションを結果に含めるためによく使われます。したがって、複数のセクションを閉じるために長いクエリーオプションのリストを入力するのではなく、+noallを使用してすべてのセクションを閉じることができます。
その後、以下の包括的なクエリオプションを使用して表示されるクエリオプションを再度開くことができます。
リクエストの発行とコメント行を除外するために以下のように入力します。
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設定ファイルは、本書の残りの例で使用されます。
digリクエストに対して返される情報は、DNSサーバーに保持されているさまざまな種類のレコードから抽出される。私たちが別のものを要求しない限り、digはA(アドレス)レコードを照会します。ディグでよく使われるレコードタイプは以下の通りです。
Aレコードの種類を指定しても、以下のようにアドレスレコードを照会してIPアドレスを取得するというデフォルトの動作は変わりません。
dig redhat.com Aメール交換記録を照会するために、以下のMXフラグを使用します。
dig yahoo.com MXネームサーバーフラグは、トップレベルドメインに関連するルートネームサーバーの以下の名称を返す。
dig fedora.com NS開始認可レコードを照会するには、次のSOAフラグを入力します。
dig manjaro.com SOATTLフラグは、DNSサーバーのキャッシュにあるデータの生存時間を示す。一連の要求を行うと、生存時間がゼロになり、その後、開始時の値までジャンプするのがわかります。
以下のように入力します。
dig usa.gov TTLテキストレコードを表示するには、TX記号を入力します。
dig usa.gov TXTリクエストに特定の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 ubuntu.org fedora.org manjaro.comフィールドのセットを定期的にチェックする場合、それらをテキストファイルに保存してdigに渡せば、ファイル内のすべてのフィールドが順番にチェックされます。
ファイル名は「domain.txt」で、catで内容を表示し、-f(ファイル)オプションでdigに渡します。
cat domains.txt dig -f domains.txtIPアドレスをお持ちで、それがどこに行くのか知りたい場合は、DNSの逆引きを試してみてください。DNSサーバーに登録されたサーバーに解決される場合、そのドメインを見つけることができるかもしれません。
これが可能かどうかは、PTR(ポインターレコード)の存在に依存する。PTRは、IPアドレスを完全修飾ドメイン名に解決する。ただし、これらは強制ではないため、必ずしもドメイン内に表示されるとは限りません。
IPアドレス209.51.188.148の行き先を確認してみましょう。ここでは、-x(逆引き)オプションを使って、次のように入力します。
dig -x 209.51.188.148IPアドレスはgnu.orgに解決されます。
PTRはDNSレコードであり、digは指定されたDNSレコードを要求できることが分かっているので、digにPTRの取得を依頼することはできないのでしょうか?はい、できます。しかし、より多くの作業が必要です。
以下のように、IPアドレスを逆順に、-address: arpaの末尾に記述する必要があります。
dig ptr 148.188.51.209.in-addr.arpa同じ結果を得たのだから、少し努力すればいいのだ。
私たちは毎日インターネットを使っていますが、好奇心の強い人は、ブラウザにウェブサイトの名前を入力するときに、このマジックがどのように起こるのか不思議に思うことがよくあります。digを使えば、ウェブジャグリングのプロセスを探ることができます。