初心者のためのパケットキャプチャ徹底解説:ネットワーク解析の基本
ネットワーク解析における「パケットキャプチャ」は、トラブルシューティングやセキュリティの観点から非常に重要なスキルです。この記事では、パケットキャプチャの基本から、具体的なキャプチャ方法までを初心者向けに詳しく解説します。
目次
パケットキャプチャとは?
パケットキャプチャとは、ネットワーク上を流れるデータをリアルタイムで捕捉し、その内容を解析する技術です。ネットワークを通過するデータは、パケットと呼ばれる小さな単位に分割され、それぞれに送信元と送信先のIPアドレスやプロトコル情報が含まれています。パケットキャプチャを行うことで、これらの情報を詳細に解析し、ネットワークの挙動を正確に把握できます。
キャプチャされたデータは、通常pcapフォーマットで保存され、多様なツールで分析が可能です。特に、Wiresharkはこのpcapファイルを使用してパケットの詳細な解析を行える優れたツールです。
以下は、Wiresharkでpcapファイルを開いた画面です。
過去の記事「パケットキャプチャをする前に知っておきたいこと」もあわせて参照ください。
なぜ「パケットは嘘をつかない」のか?
ネットワークトラブルシューティングやセキュリティ解析の現場で、「Packets never lie(パケットは嘘をつかない)」という表現が使われます。この言葉の背景には、パケットキャプチャが持つ正確性と信頼性があります。
パケットキャプチャの正確性は、ネットワーク上を流れるデータをリアルタイムで直接収集することにあります。これにより、送信元と送信先のIPアドレス、ポート番号、プロトコル情報、そして実際のデータ(ペイロード)など、通信の詳細を正確に把握できます。また、各パケットにタイムスタンプが付けられるため、ネットワークの遅延やタイミング情報を正確に記録できます。このため、解析する際に時間のズレや誤差が生じにくくなります。パケットキャプチャは、ログファイルの解析などの間接的なデータ収集方法と比べて、記録ミスや解析エラーが発生しにくく、実際のデータフローを忠実に反映します。
信頼性についても、パケットキャプチャはネットワークを通過するパケットをリアルタイムで捕捉するため、データが改ざんされる可能性が非常に低いです。したがって、キャプチャされたデータは常に真実を反映し、非常に信頼性が高いといえます。さらに、ネットワーク上のすべてのパケットを包括的に収集することで、見落としがなく、ネットワーク全体の挙動を詳細に把握できます。
つまり、キャプチャされたデータは、ネットワークの真実を映し出す情報源です。パケットは常に正直で、ネットワーク上で何が起きているかを正確に伝えてくれます。
Wiresharkでパケットキャプチャする方法
パケットキャプチャツールはさまざまなものが存在します。ソフトウェア型、アプライアンス型、有償、無償、イーサネッㇳ対応、Wifi対応など提供方法や使用目的により異なります。ですが、初心者はまず「Wireshark」で試してみることをおすすめします。Wiresharkはオープンソースソフトウェアであり、Windows、Mac、Linuxの各種プラットフォームで無償で利用できます。インストールに際し登録は不要で、公式ページよりダウンロードしてPCにインストールするだけで、手軽にパケットキャプチャを行うことができます。
インストール後Wiresharkを起動すると、以下のようにキャプチャ可能な物理もしくは仮想のネットワークインターフェイスが表示されます。
キャプチャするインターフェイスをダブルクリックすると、パケットキャプチャが開始されます。その際、キャプチャフィルタをボックスに入力すると、定義されたパケットのみキャプチャされます。キャプチャ開始までの操作はとても簡単です。
パケットキャプチャの原理
ネットワークインターフェイスカード(NIC)がネットワーク上を流れるパケット(フレーム)を受信し、Wiresharkに転送するまでの一連のパケットキャプチャプロセスについての説明します。libcapから派生したドライバを利用しているツールはだいたい同じような機構で動作しています。
- 物理層で受信:
NICがネットワークケーブルからパケット(フレーム)を受信します。NICはハードウェアレベルで電気信号をデータに変換し、データリンク層へ渡します。 - NICドライバによる処理:
NICドライバが受信したフレームをシステムメモリのバッファにコピーします。このバッファは通常リングバッファとして実装され、一定のサイズを持ち、満杯になると古いフレームから順に上書きされます。 - カーネルによる処理:
OSのカーネルがNICドライバからフレームを受け取り、カーネルスペースのバッファに格納します。このバッファもリングバッファとして実装されることが多く、効率的にフレームを管理します。カーネルはフレームを解析し、必要に応じてネットワーク層のパケットに変換して適切なプロトコルスタックに渡します。 - パケットキャプチャライブラリの利用:
パケットキャプチャライブラリ(例: libpcap、WinPcap、Npcapなど)がカーネルバッファからパケットを読み取ります。このライブラリは、キャプチャされたパケット(フレーム)をユーザースペースに転送するためのインターファイスを提供します。 - Wiresharkへ転送:
Wiresharkは、パケットキャプチャライブラリを使用してユーザースペースに転送されたパケット(フレーム)を取得します。これにより、ツールはパケット(フレーム)の詳細を解析し、ユーザに表示します。
あえて「パケット(フレーム)」と記載した理由は、パケットキャプチャが本来、OSI参照モデルのデータリンク層(レイヤー)にあたる「フレーム」をキャプチャしているためです。正確さを期すため、このような表記にしました。
しかし、通常のネットワーク解析の文脈では、「パケット」という用語がより一般的に使用されます。「パケット」という用語は、ネットワーク通信全体のデータ単位を指すために広く認識されています。ネットワーク層以降のデータも含めて、総称的に「パケット」と呼ばれることが多いため、本ブログでは、レイヤーを意識する必要がある場合を除き「パケット」で統一しています。
なお、Wiresharkをはじめとする多くのパケットキャプチャツールでは、NICがプロミスキャスモードになっています。 NICは通常自分宛のパケット(MACアドレスが一致するパケット)やブロードキャスト、マルチキャストパケットのみを受信しますが、NICをプロミスキャスモードに変更した場合、自分宛ではないパケットもすべて受信します。Wiresharkのデフォルトでも、キャプチャを開始する際は、プロミスキャスモードが有効になっています。(Wireshark上でのプロミスキャスモードの設定の有効/無効は、[Capture] menu > [Options...]で変更可能です。)
下図は、通常の通信時とパケットキャプチャ時のNICの動作を表したものです。
NICの動作比較
自分宛て以外のパケットをキャプチャできるようにパケットキャプチャでは通常の通信とは異なるドライバを使用します。
パケットキャプチャの接続方法
パケットキャプチャの接続方法は、「キャプチャする回線に直接通信ポートを接続してキャプチャする方法」と「キャプチャする回線のモニタポートに接続してキャプチャする方法」があります。
キャプチャする回線に直接通信ポートを接続してキャプチャする方法
Wiresharkでパケットキャプチャする方法は、この方法です。NICのプロパティを変更しない限り、通常はそのPCが送信しているパケットもキャプチャデータに含まれます。キャプチャ対象は、そのPCが送受信できる範囲のみとなります。
リピーターHUBを利用することにより、そのHUBに接続された他のホストのパケットの送受信もキャプチャできるため、かつてはよく利用されていた方法でしたが、現在ではほとんど使用されていません。
通信ポートでキャプチャを行う場合は、キャプチャを行うPCのNICとCPUに負荷がかかるため、高トラフィック環境では性能に影響が出る可能性があります。そのため、他の重要なタスクを同時に実行しないよう注意が必要です。
キャプチャする回線のモニタポートに接続してキャプチャする方法
ネットワークスイッチにモニタポートを設定し、そのポートにキャプチャデバイスのNICを接続する方法です。モニタポートは、特定のポートやVLANのトラフィックをミラーリングする設定で、TAPを回線に設置するか、スイッチのSPAN(ポートミラーリング)機能を利用することで作成します。この方法は、リピーターHUBで接続する方法と比べてパケットを取得する範囲の柔軟性が高く、またネットワークに影響を与えないことから、SYNESISをはじめ多くのパケットキャプチャ製品ではこの接続でパケットキャプチャを行っています。
なお、TAPとSPANの特長やメリット、デメリットは、過去の記事(TAP vs SPAN どちらを使う?)で詳しく解説していますのであわせてご覧ください。
モニタポート(またはミラーリングポート)は、ネットワーク上のトラフィックを監視するために設定された特別なポートであり、指定されたネットワークトラフィックをコピーし、解析や監視を行うためのツールへパケットを転送します。モニタポートは、パケットキャプチャのほか、ネットワークのパフォーマンス監視やセキュリティ監視にも利用されます。
「SYNESIS」ではじめるパケットキャプチャ
弊社が開発、販売している「SYNESIS」は、100MEから100GEの回線をフルレートでロスなくパケットキャプチャできるアプライアンス製品です。パケットロスなくキャプチャすることは、正確なトラブルシューティング、セキュリティインシデントの検出、ネットワークおよびアプリケーションのパフォーマンス評価、データの完全性維持において非常に重要です。SYNESISは、Wiresharkでは実現が難しい高負荷ネットワーク環境におけるパケットロスのないキャプチャパフォーマンスを提供する製品です。
SYNESISのデモンストレーション動画を公開しています。ぜひこちらもご覧ください。
play_circle_filled 100G フルレートキャプチャ 「SYNESIS」
Spirent Test Centerを用い、100Gフルレートのトラフィックを実際にキャプチャしているデモンストレーション動画です。
play_circle_filled 200Gbps対応パケットキャプチャ「SYNESIS」ライブデモ
200GbpsをパケットロスなくSYNESISポータブルでキャプチャしているライブデモンストレーション動画です。
play_circle_filled SYNESISの「パケットリプレイヤー」 - 100Gbpsデータもリプレイ
パケットリプレイヤー機能で100Gbpsのトラフィックをリプレイしているデモンストレーション動画です。
SYNESIS製品のPoCやデモンストレーションをご希望の方は、以下よりお問い合わせください。
あとがき
これまで本ブログでたくさんパケットキャプチャのTIPSを公開してきましたが、「パケットキャプチャとはなにか?」という基本的な内容についてはあまり触れていませんでした。今回は、私が以前に新人向けに作成した資料をもとにパケットキャプチャの基礎を解説しました。パケットキャプチャを初めて行う方や、先輩の指示でパケットキャプチャをしているがその詳細を理解できていない方の参考になれば幸いです。
ほかにもパケットキャプチャについて、掲載してほしいことなどありましたら、ぜひSYNESIS エンジニアノート お問い合わせページよりお気軽にご意見をお寄せください。記事をアップデートしていく予定です。