ネットワークのトラブル解決には、ネットワーク上を流れる通信をのぞいてみるのが一つの方法です。そのときのツールといえば、やはり「Wireshark」が定番でしょう。
[ツール名]Wireshark
[対象]Windows、Mac OS X、Linux、FreeBSD、NetBSD、Solaris
[提供元]Wireshark Foundation、オープンソース(GPLv2)
[ダウンロード先][URL]https://www.wireshark.org/
スタンドアロンでコンピューターを利用しているのでない限り、コンピューターにとってネットワークは欠かせないインフラストラクチャです。企業であれば、インターネットと接続された有線LAN(ローカルエリアネットワーク)や無線LANが導入されているのは当然ですし、WAN(ワイドエリアネットワーク)やVPN(仮想プライベート回線)で遠隔地の拠点とも相互接続しているでしょう。
個人であっても、通信回線で直接的に、あるいはブロードバンドルーターを介してインターネットに接続されているはずです。ブロードバンドルーターで接続する場合、家庭内には有線または無線ベースの小規模なLANが存在します。最近では、タブレット端末やスマートフォンもWi-Fi接続でコンピューターと同じネットワークに接続されるようになりました。
コンピューターやアプリケーションのトラブルに、ネットワークが関係していることは少なくありません。ネットワークトラブルの解決方法はいろいろありますが、上級者が行う方法の一つに、ネットワーク上を流れるパケット(正確にはプロトコル階層によって、フレーム、パケット、セグメント、データグラムなど呼び方が変わります)を取得(キャプチャ)して解析し、問題を調査する方法があります。
そのときに使用するツールが、ネットワークプロトコルアナライザーです。LANアナライザー、パケットスニファー、あるいはパケットキャプチャツールと呼ばれることもあります。
数あるツールの中でも、「Wireshark」はネットワーク管理者の定番といってもよいネットワークプロトコルアナライザーでしょう。Wiresharkは、オープンソース(GPLv2)で公開されている無償のツールであり、Windows、Mac OS X、Linuxなどさまざまなプラットフォームで利用できます。かつては「Ethereal」として知られていましたが、商標などの関係で現在はWiresharkプロジェクトとして開発が続けられています。
WiresharkのWindowsおよびMac OS X版は「https://www.wireshark.org/」からダウンロードできるインストーラーで簡単に導入できます(画面1)。Linuxの場合は、多くのLinuxディストリビューションの標準パッケージとなっており、OS標準のソフトウェア管理機能を利用して、インストールメディアまたはオンラインのリポジトリから導入できます(画面2)。
Wiresharkは、パケットキャプチャライブラリとしてオープンソースの「libpcap」または「WinPcap」(Windows版)に依存しますが、これらのコンポーネントはWiresharkのインストール時に不足していれば同時に導入されます。
Wiresharkは非常に高機能なツールであり、膨大なキャプチャデータの中から、プロトコルごとのカラー表示、キャプチャフィルター、表示フィルター、高度な検索機能などで、問題のトラフィックを識別したり、統計・グラフ機能で分析したりすることができます。
このツールを使いこなすためには、ネットワークの知識、特にTCP/IPの知識があることが大前提です。例えば、プロトコル階層の考え方、イーサネットにおけるMACアドレス間の通信、IPネットワークにおけるIPv4アドレスやIPv6アドレス間の通信、アプリケーションに近いTCPやUDPのトランスポートの通信の仕組みなどです。逆に、Wiresharkを用いてネットワーク上の普段の通信を参照して、ネットワークの知識を学ぶことも可能です。
ネットワークの知識があれば、初めて触れる人でも、Wiresharkの基本的な機能だけでパケットのキャプチャと解析はできるでしょう。キャプチャフィルター(Capture Filter)や表示フィルター(Display Filter)を使いこなせるようになれば、さらに効率的な解析が可能になります。以下に表示フィルターのサンプルがあるので参考にしてください。
次の二つの画面は、Ubuntu 14.04 LTS標準のVNCサーバー(リモート制御のサーバー機能)である「デスクトップの共有」に対してWindowsのVNCクライアントから接続できないというトラブルの原因を、Wiresharkを用いて調査した例です。
マルチプラットフォームなので、画面3のようにLinuxのVNCサーバー側でキャプチャすることもできますし、画面4のようにWindowsのVNCクライアント側でキャプチャすることもできます。IPネットワークに問題がなければ、どちら側でも同じパケットをキャプチャします。
VNCは既定でTCPポート「5900」を使用します。表示フィルターに「tcp.port == 5900」または「tcp.port eq 5900」と入力すれば、膨大なキャプチャデータからVNCの通信だけをフィルターして表示させることができます。
本連載の本題とは外れますが、このトラブルの原因について、参考のために説明しておきましょう。トラブルの原因は、Ubuntu 14.04 LTSの「デスクトップの共有」が既定で暗号化接続のみを受け付け、他のセキュリティタイプ(VNCで標準的なVNC(2))や暗号化なしの接続に対応していないことでした。サーバー側が要求するセキュリティタイプ(TLS(18))にWindowsのVNCクライアントが対応していないため、接続が拒否されたのです。
そのようなことが、アプリケーション層のやりとりから読み取れます。この問題を解決するには、VNCサーバー側で暗号化なしの接続を許可(詳しくは、require-encryption falseで検索)するか、VNCサーバー側の要求するセキュリティタイプに対応したVNCクライアントに入れ替える必要があります。ただし、筆者が知る限り、Windows版ではそのようなVNCクライアントはなさそうです。
山市 良(やまいち りょう)
岩手県花巻市在住。Microsoft MVP:Hyper-V(Oct 2008 - Sep 2014)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手がける。個人ブログは『山市良のえぬなんとかわーるど』。
Copyright © ITmedia, Inc. All Rights Reserved.