raspberry pi でネットワークモニターを作ってみた
※この記事に乗っているntopngのインストール方法は古いので、最新のインストール方法を知りたい方はこちらをご参照ください
きっかけ
前回書いた自宅のネットワーク再構築で、WiFiも繋がらなくなるようなこともなくなり一応ネットワーク環境は快適になった。
だが快適かつ色々と自分で設定できる環境になるとやってみたくなる事が出てきて「折角だからネットワークのモニターもしてみるか」と調べてみたところraspberry piを使ったネットワークモニターの記事を発見。
記事の構成では、ポートミラーリング設定可能なスイッチや有線ルーターを使っているが、自分の場合はRTXを使っているためここはひとつにまとめられそうで、監視用のraspberry piがあれば構成できそうだったので挑戦してみることにした。
準備
監視用のraspberry pi については、最新でありUSB3.0のポートと内臓NICがGbpsネットワークにフル対応したraspberry pi 4 の4GBモデルを購入。
標準のNICの他にモニター用NICとしてELECOMのUSB-GIGALANポートを購入してUSB3.0のポートに取り付けた。
Raspberry Piの設定
OSのインストールはrasbian から名前が変わったraspberry pi OSイメージをmicroSDに書き込み、書き込み後にsshで接続するために/bootディレクトリに空のsshファイルを作成した後にraspberry piに差し込んで起動
起動後SSHでログイン、初期設定としてホスト名やログインユーザーの設定とパッケージのアップデートと再起動を行い、監視用アプリケーションのインストールへ移る。
監視アプリのインストールと設定
参考記事ではntopとなっていたが、現在はntopngとなっていたのでそちらをaptコマンドでインストール。
$ sudo apt install ntopng
インストール後、ipコマンドで監視対象のNICを確認し、設定ファイルに監視対象として設定。
$ ip a
~中略~
4: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP>~中略~
~中略~
$ sudo vi /etc/ntopng.conf
# This configuration file is similar to the command line, with the exception
# that an equal sign '=' must be used between key and value. Example: -i=p1p2
# or --interface=p1p2 For options with no value (e.g. -v) the equal is also
# necessary. Example: "-v=" must be used.
#
# DO NOT REMOVE the following option, required for daemonization.
~中略~
-i=eth1 ←この表記を追加して保存
その後、RTXにログインして監視対象のNICにつながっているLANポートへパケットをミラーするように設定した。
$ lan port-mirroring lan1 8 in 1 2 3 4 5 6 7
モニターへのアクセス
RTXの設定が終わったらservice コマンドでntopngを起動。
Webブラウザで "http://raspberry pi のIPアドレス:3000" へアクセスする。
初回起動時にパスワード設定を要求されるので、パスワードを設定してログインすると無事にモニター画面が表示された。
ntopng
ntopngはコミュニティ版と有償版があり、起動時はしばらくは有償版のモニター画面等が表示され、ユーザーがコミュニティ版に切り替えるかもしくは時間が来るとコミュニティ版へ戻るという動作になる。
現在3〜4ヶ月コミュニティ版での使用で、使っていて問題はないのだがチラ見せされる有償版は結構詳細な情報が表示されており、気になるようならライセンスを買うのもいいかもしれない。
メイン機能としてはネットワーク内で動作している機器の情報やリモートで通信をしているホストの情報の表示と、ネットワーク内の機器がリモートのどこに繋がっているかを表示する
加えてこれは地図情報のファイルを入手して設定するという条件付きだが、アクセスしている通信しているホストのおおよその位置を地図上に表示するという機能があり、見ていると中々面白い。
elasticと組み合わせることでもっと詳細な監視も可能らしいのだが、現状はこのまま使っていって適宜追加していくのがいいのかとも考えている。