きっかけ
発端としてはプロジェクトの中で、あるネットワーク(ネットワークA)
にある仮想マシンから、別のネットワーク(ネットワークB)の仮想マシンに向けて
どのポートを使用した通信を行っているか調べる必要性が発生したことでした。
具体的には、ネットワークAとネットワークBの間にはFWがあり、
必要な通信以外はブロックされている状態だったのですが、特定の処理に必要なポートを
開けたにも関わらず、処理に30秒近く時間がかかってしまいました。
そこで問題の切り分けのため、全ポートでの通信を許可したところ、想定通り1~2秒で
処理が完了しました。結果的に「本来通信に必要なポートが開いていない」ということが判明し、調査のためWireSharkを利用することになりました。
使用方法
使用方法は非常に簡単で、以下のURLからインストールして実行するだけです。
Wireshark • Go Deep | Download
インストールされた仮想マシンで発生する全ての通信ログが表示されます。
上記のように、宛先・使用ポート・通信結果などなど…。
特に、再送処理やドロップの際には該当箇所が分かりやすく赤や黒で表示されるため、
問題がありそうな部分を簡単に特定できました。
また非常に多くのログが生成されてしまうということで、
目的のログを見つけるのは大変じゃないか?という懸念があるかもしれませんが、
以下のように送信元/送信先のIPアドレスやポート番号でフィルタリングをかけることができるので、今回の場合は本当に簡単に目的の通信を調査できました。
vs Azure Network Watcher
さて、ここからはAzure Network Watcher(Azureのネットワーク監視サービス。以下ANW)と比較を行っていきたいと思います。プロジェクトでは検証環境としてMicrosoft Azureを使用していたので、ANWだったらより簡単に問題解決ができたのか、それともWireSharkがベストだったのか…という部分を比較していきたいと思います。
IPフロー検証
IPフロー検証は、「仮想マシン」「NIC」を1つ選択し、パケットのプロトコルや通信の方向、IPアドレスやポート番号を指定し、NSGがその通信を許可しているかどうかをシミュレーションできます。
今回のプロジェクトでは「必要なポートを確認する」ことが目的だったので有用ではなさそうですが、NSGやFireWallに多くのルールを設定しているような場合はこの機能だけで通信の可否がわかるので非常に使いやすい機能だと思います。
パケットキャプチャ
パケットキャプチャはパケットレベルでの分析をすることができます…が、IPフロー検証などとは異なり、取得したパケットのデータは一度ストレージアカウントに保存されます。すぐにデータを見れるわけではないことや、結局取得したファイルはWireSharkなどで開いて中身を確認することになるため、直接WireSharkが使用できない場合に有用そうだと感じました。
結論として、今回のケースではWireSharkの利用がベストだったと思いました。ただし、上記にも記載した通り目的に応じて必要になる機能も変化するため、各サービスの特徴を正確に把握しておくことが迅速な問題解決に繋がると思います。