はじめに
この実験では、Wireshark の Tshark ユーティリティを使用して DNS クエリのトラブルシューティングを行う方法を、実践的な演習を通じて学習します。「udp port 53」フィルタを使用して DNS トラフィックをキャプチャし、「dns.qry.name」などの表示フィルタを使用してクエリを分析し、「dns,tree」オプションを使用してタイミング統計を調べます。
この実験では、DNS パケットを分離するための実用的な手法、クエリのタイミングを可視化する方法、および「-V」フラグを使用して詳細なパケット情報を抽出する方法を案内します。これらの演習を完了することで、専門的なパケット分析手法を使用して DNS の問題を診断するための重要なスキルを身につけることができます。
-f "udp port 53" で DNS をキャプチャする
このステップでは、Wireshark のキャプチャフィルタを使用して DNS トラフィックをキャプチャする方法を学びます。DNS (Domain Name System) はインターネットの電話帳のようなもので、人間が読めるドメイン名 (例:example.com) をマシンが読める IP アドレスに変換します。ほとんどの DNS クエリは UDP ポート 53 を使用します。これはクエリが小さく高速だからです。一方、大きなレスポンスには TCP が使用されることがあります。
まず、まだ開いていない場合は LabEx 仮想マシン (VM) でターミナルを開きます。すべてのコマンドはデフォルトの作業ディレクトリ
~/projectで実行されます。ここにキャプチャファイルを保存します。次のコマンドを使用してターミナルから Wireshark を起動します。
wireshark &
& 記号は Wireshark をバックグラウンドで実行します。これにより、Wireshark が開いたままでもターミナルを引き続き使用できます。ネットワーク分析中に他のコマンドを実行する必要がある場合に便利です。
Wireshark のメインインターフェイスで:
- アクティブなネットワークインターフェイス (通常は
eth1) を選択します。これにより、Wireshark に監視するネットワーク接続を指定します。 - キャプチャフィルタフィールドに
udp port 53と入力します。このフィルタにより、Wireshark は DNS トラフィックのみをキャプチャし、他のネットワークアクティビティによるノイズを減らします。 - サメのヒレのアイコンをクリックしてパケットのキャプチャを開始します。インターフェイスにネットワークアクティビティが表示され始めます。
- アクティブなネットワークインターフェイス (通常は
テスト用の DNS トラフィックを生成するには、別のターミナルを開き、次のコマンドを実行します。
nslookup example.com
このコマンドは、システムに "example.com" の IP アドレスを照会させ、キャプチャしたい DNS トラフィックを生成します。これは、監視が機能しているかどうかを確認するためのテストコールのようなものです。
Wireshark では、キャプチャされた DNS パケットが表示されるはずです。これらはメインウィンドウに行として表示され、通常はクエリとレスポンスが表示されます。十分なトラフィックを確認したら、赤い四角のボタンをクリックしてキャプチャを停止します。
後で分析するためにキャプチャファイルを保存します。
- 「ファイル」→「名前を付けて保存」を選択します。
~/projectディレクトリにdns_capture.pcapngとして保存します。このファイル形式は、詳細な調査のために元のパケットデータをすべて保持します。
理解すべき要点:
-f "udp port 53"は DNS トラフィックのみを記録するキャプチャフィルタです。これは、DNS の会話のみを聞く特殊なマイクをセットアップするのと似ています。- DNS は主に UDP ポート 53 を使用します。これは小さなクエリに効率的だからです。一方、TCP (Transmission Control Protocol) は信頼性の高い配信が必要な大きなレスポンスに使用されます。
- キャプチャファイルには元の形式の生のネットワークパケットが含まれています。これを後のステップで分析して、DNS 解決中に正確に何が起こっているかを理解します。
-Y "dns.qry.name" でクエリをフィルタリングする
このステップでは、Wireshark の表示フィルタを使用して DNS クエリをフィルタリングする方法を学びます。DNS (Domain Name System) はインターネットの電話帳のようなもので、人間が読めるドメイン名をマシンが読める IP アドレスに変換します。ネットワークの問題をトラブルシューティングする際に、DNS トラフィックを調べることで重要な手がかりが見つかることがあります。
ここでは dns.qry.name フィールドに焦点を当てます。このフィールドは、DNS クエリで要求されているドメイン名を具体的に示します。前のステップで作成したキャプチャから特定のウェブサイトやサービスに関連するトラフィックを調べる必要がある場合に、これは特に有用です。
- まず、先ほど保存したキャプチャファイルを Wireshark で開きましょう。末尾の
&はコマンドをバックグラウンドで実行するため、ターミナルを引き続き使用できます。
wireshark ~/project/dns_capture.pcapng &
- Wireshark の表示フィルタバー(ツールバーのすぐ下の空のフィールド)に、この正確なフィルタを入力して、"example.com" への DNS クエリのみを表示します。
dns.qry.name == "example.com"
この厳密な等価フィルタ (==) は、照会されたドメインが "example.com" と正確に一致するパケットのみを表示します。
- 要求されるドメインに関係なくすべての DNS クエリを表示するには、単にフィールド名をそのまま使用します。
dns.qry.name
これにより、DNS クエリ名を含むすべてのパケットが表示され、ネットワーク上でどのドメインが照会されているかを理解するのに役立ちます。
- DNS クエリ(要求)とレスポンスの両方を表示するより完全なビューを得るには、DNS レスポンスフラグをチェックするこのフィルタを使用します。
dns.flags.response == 0 || dns.flags.response == 1
ここで、dns.flags.response == 0 はクエリ(要求)を表示し、dns.flags.response == 1 はレスポンスを表示します。
- 時には、特定の組織やサービスに関連するすべてのクエリを見つけたいことがあります。「contains」演算子を使用して部分的なドメイン一致をフィルタリングしてみましょう。
dns.qry.name contains "example"
これは、"example" を含むすべてのドメイン、例えば "example.com"、"test.example.org"、"example.net" などに一致します。
理解すべき要点:
-Yは Wireshark の表示フィルタオプションです(フィルタバーに入力するのと同等)dns.qry.nameは DNS パケット内の特定のフィールドで、照会されるドメイン名が含まれています- 表示フィルタは、関係のないパケットを非表示にすることで、特定のトラフィックパターンに焦点を当てるのに役立ちます
- フィルタはさまざまな比較演算子を使用できます:
- 完全一致には
== - 除外には
!= - 部分一致には
contains
- 完全一致には
- DNS プロトコルには、クエリ (
response == 0) とレスポンス (response == 1) を区別するためのフラグが含まれています
-z dns,tree でタイミングを分析する
DNS (Domain Name System) はインターネットの電話帳のようなもので、人間が読めるドメイン名をマシンが読める IP アドレスに変換します。ネットワークの問題をトラブルシューティングする際に、DNS の応答時間を分析することで、パフォーマンスのボトルネックを明らかにすることができます。このステップでは、Wireshark の組み込み統計機能を -z dns,tree オプションとともに使用して、DNS サーバがクエリにどれだけ迅速に応答するかを測定します。
- 開始する前に、Wireshark が実行されていないことを確認してください。ターミナルから事前にキャプチャした DNS トラフィックファイルを分析します。末尾の
&は、Wireshark が実行されている間もターミナルを使用可能にします。
wireshark -z dns,tree ~/project/dns_capture.pcapng &
「DNS Statistics」というラベルの付いた新しいウィンドウが開き、ツリー構造で 3 つの主要な情報が表示されます。
- すべての DNS クエリとそれに対応するレスポンス
- 各クエリがレスポンスを取得するのにかかった時間
- 各ドメインが要求された頻度
統計情報の列を注意深く調べてみましょう。
- 「Count」は、システムが各ドメインを照会した回数を示します。
- 「Average」は、各ドメインの典型的な応答時間を示します。
- 「Min」と「Max」は、最良および最悪のケースの応答時間を示します。
分析でより興味深いデータを見るために、新しい DNS クエリを生成しましょう。新しいターミナルウィンドウを開き、これらの一般的な照会コマンドを実行します。
nslookup google.com
nslookup labex.io
- これらのコマンドを実行した後、「DNS Statistics」ウィンドウに戻り、「Reload」をクリックして、新しく生成したクエリで統計情報を更新します。
覚えておくべき重要な概念:
-z dns,treeコマンドは、Wireshark の特殊な DNS 分析モードを有効にします。- 応答時間の測定は、低速な DNS サーバやネットワークの遅延を特定するのに役立ちます。
- ツリービューは、関連するクエリをまとめて表示し、分析を容易にします。
- 新しい DNS アクティビティの後は、常にキャプチャファイルを再読み込みして最新の統計情報を表示してください。
-V で結果を表示する
このステップでは、Wireshark の -V オプションを使用した詳細表示モードを使って、DNS パケットを詳細に調査する方法を探ります。DNS の問題をトラブルシューティングする際に、プロトコルのすべての詳細を見ることは、ネットワークトラフィックで実際に何が起こっているかを理解するために重要です。
- 開始する前に、混乱を避けるために開いているすべての Wireshark ウィンドウを閉じてください。次に、このコマンドを実行して、完全なプロトコル詳細を含むキャプチャファイルを開きます。
wireshark -V -r ~/project/dns_capture.pcapng &
-V フラグは、Wireshark に詳細な出力を表示するよう指示します。これにより、基本的なパケットの概要だけでなく、利用可能なすべてのプロトコル情報が表示されます。
Wireshark インターフェイスで、「Packet Details」と呼ばれる中央のパネルに注目します。DNS 情報を調査する方法は次の通りです。
- 「Domain Name System」の横にある矢印をクリックして展開します。
- 次のような完全な DNS メッセージ構造が表示されます。
- クエリかレスポンスか
- 要求と応答をペアにする一意のトランザクション ID
- 成功またはエラーを示すステータスフラグ
- 交換されるすべてのリソースレコード
DNS クエリパケット(通常はクライアントからサーバに送信されます)を見るときは、次の点に特に注意してください。
- クエリタイプ:要求されているレコードの種類を示します(IPv4 の場合は A、IPv6 の場合は AAAA、メールサーバの場合は MX)
- クエリクラス:ほとんどの場合、インターネットクラスを表す「IN」
- トランザクション ID: このクエリとその応答をマッチングするのに役立つランダムな番号
DNS レスポンスパケット(サーバからクライアントに送信されます)の場合は、次の重要なフィールドを確認してください。
- レスポンスコード:「0」はエラーが発生していないことを意味します。
- 回答数:返されたレコードの数
- TTL 値:これらの DNS 回答をキャッシュできる時間
- 実際のデータ:A レコードを照会するときの IP アドレスなど
この詳細な分析を後で見直したり、同僚と共有したりするために保存するには、次のコマンドを実行します。
tshark -V -r ~/project/dns_capture.pcapng > ~/project/dns_analysis.txt
これにより、キャプチャのすべての詳細出力を含むテキストファイルが作成されます。
覚えておくべき重要な概念:
-Vオプションは、各パケットの完全なプロトコルの内訳を明らかにします。- DNS プロトコルスタックのすべてのレイヤーを見ることができます。
- 複雑な DNS 問題を診断する際には、このレベルの詳細が必要です。
- フィルタ(例:
dns)と組み合わせることで、完全な詳細を保持しながら特定のパケットに焦点を当てることができます。
まとめ
この実験では、Wireshark の Tshark ユーティリティを使用して DNS クエリのトラブルシューティングを行う方法を学びました。この演習では、UDP ポート 53 フィルタを使用して DNS トラフィックをキャプチャし、dns.qry.name のようなターゲット表示フィルタを通じてクエリを分析する方法を示しました。
nslookup を使用してテストトラフィックを生成し、分析用にキャプチャを保存する練習を行い、DNS プロトコルの動作と、特定のドメイン要求を分離するための Wireshark の強力なフィルタリング機能についての洞察を得ました。これらのスキルは、ネットワークのトラブルシューティングや DNS 関連の調査に不可欠です。


