企業ネットワークにトラブルが発生したとき、ネットワーク管理の担当者はネットワークコマンドを実行したり、各機器のログを見たりしてその原因を探る。それでも原因がわからなければ、サーバーやネットワーク機器の通信をキャプチャーして、解決の糸口を見つけようとする。

 前回は、このキャプチャーに必要なツール「Wireshark」の導入方法と、キャプチャーするためにネットワークの経路を分岐する方法を紹介した。今回は、特定のサーバーに対して経路を分岐できないときに、その通信データをキャプチャーする方法を紹介する。

 経路を分岐できないというのは、外出時にサーバーの調子が悪いという連絡を受けたり、離れた拠点に設置しているサーバーだったりといった、サーバーに直接手が届かない状況を指す。経路を分岐するためのリピーターハブミラーポート付きのLANスイッチを準備できないときも当てはまる。なおサーバーで稼働しているOSは、Webやメールのサーバーを構築するときによく使われるLinuxのケースで解説していこう。

通信データをダンプして解析する

 経路を分岐できないサーバーの通信データをキャプチャーする一般的な方法として、(1)Wiresharkをサーバーにインストールする方法と、(2)通信データをダンプする方法──などがある。

 (1)は、サーバーにWiresharkをインストールして、サーバー上で通信データを解析するか、Wiresharkでキャプチャーしたデータをいったん保存して、別のコンピュータにそれをコピーしてから解析する。WiresharkにはLinux用も用意されているので、Linuxサーバーでも利用できる。ただLinuxの操作が苦手だと、リモートアクセス環境でインストールするのにてこずることがある。サーバーにソフトを追加するのを避けたい場合にも向かない。

 (2)のダンプとは、データの内容を画面に表示したり、保存したりすること。不具合の生じたプログラムの解析をするときに、ディスクやメモリーの内容をダンプするという手法がよく使われる。通信時のトラブルを解決するときは、通信データをダンプする。

図1●tcpdumpコマンドを使ってLinuxサーバーの通信データをキャプチャーする方法
図1●tcpdumpコマンドを使ってLinuxサーバーの通信データをキャプチャーする方法
この方法ならLinuxサーバーにWiresharkなどのソフトを追加する必要がない。
[画像のクリックで拡大表示]

 Linuxには、通信データをダンプするtcpdumpというコマンドがある。ほぼすべてのLinuxディストリビューションで標準のまま使える。インストールする手間は必要ない。コマンドラインで実行できるので、リモートアクセス環境で手軽に使える。

 tcpdumpコマンドを使ってキャプチャーする手順は、至って簡単だ(図1)。まず、サーバー上でtcpdumpコマンドを実行して通信データをダンプする(図1の(1))。次に、ダンプしたデータを別のコンピュータにコピーする(同(2))。最後に、コピーしたデータをWiresharkで取り込んで解析する(同(3))。では、この手順を細かく見ていこう。

管理者権限に切り替える

 まずはtcpdumpコマンドを実行して、通信データをダンプする。このために、コマンドの実行環境を準備しておく。

 準備ができたら、キーボードから「tcpdump」と入力して最後にEnterキーを押す。

# tcpdump

このとき、tcpdumpコマンドの実行に管理者権限が必要になる。

 LinuxなどのUNIX系OSでは、ユーザーを「管理者」と「一般ユーザー」の二つに分けてコマンドの実行権限などを管理している。管理者権限と一般ユーザー権限の違いは、プロンプト文字で判断できる。プロンプト文字でよく見るのは、Windowsでコマンドプロンプトを利用するときに表示される「>」である。Linuxでは、管理者は標準で「#」、一般ユーザーは「$」となる

図2●tcpdumpコマンドの実行には管理者権限が必要になる
図2●tcpdumpコマンドの実行には管理者権限が必要になる
Linuxでは通常、ユーザー権限を「管理者」と「一般ユーザー」の二つに分けて管理している。
[画像のクリックで拡大表示]

 一般ユーザーのままtcpdumpコマンドを実行すると、「Operation not permitted」(実行権限がない)という警告が表示される(図2)。このときは、権限を変更できるsuコマンドで管理者に切り替えておこう