OpenWRT ベースの無線LANルーターでネットワーク通信量を監視する

## はじめに
OpenWRT ベースの無線LANルーターでは、LuCI アプリケーションを追加して機能拡張することができます。今回は、ネットワーク通信量の監視に役立つアプリケーションを追加します。[前回の記事で初期設定](https://qiita.com/strysd/items/8cf0ba6b305044787f97)した無線LANルーター GL-MT300N-V2 を引き続き使用します。

## 統計グラフ
### インストールと表示されるグラフ
前回、「高級機能」画面を日本語化した時のように、上の横方向のバーのメニューから「システム」＞「ソフトウェア」を選びます。次に「インストール可能なパッケージ」タブに移動し、LuCI を日本語化するためのパッケージを探します。フィルタ欄に luci*ja と入力して一覧表示を待ちます。
![30_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27855/9eddfb9c-96e4-732e-48b9-4c4eb41460ec.png)

下記の luci-i18n-statistics-ja を探してインストールボタンを押します。
![30statistics.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27855/de30bb1b-15fb-029f-1123-b787dad564b7.png)

下記がインストールされます。
> libltdl (2.4.6-1)
> collectd (5.8.0-5)
> librrd1 (1.0.50-2)
> rrdtool1 (1.0.50-2)
> collectd-mod-rrdtool (5.8.0-5)
> collectd-mod-iwinfo (5.8.0-5)
> collectd-mod-cpu (5.8.0-5)
> collectd-mod-memory (5.8.0-5)
> collectd-mod-interface (5.8.0-5)
> collectd-mod-load (5.8.0-5)
> collectd-mod-network (5.8.0-5)
> luci-app-statistics (git-18.196.56128-9112198-1)
> luci-i18n-statistics-ja (git-18.196.56128-9112198-1)

上の横方向のバーのメニューから一度何かのメニューを選ぶと、「統計」メニューが追加で表示されるようになります。そこで「統計」＞「グラフ」を選びます。下の画像の例では、「インターフェース」タブを選択して、有線 LAN 回線のバイト数およびパケット数のグラフを表示しています[^1]。

![31a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27855/c2f259bf-b239-7ba4-e1d1-7e90b40a9ac5.png)

[^1]: デフォルトでは30秒間隔でのモニタリングです。例示したグラフは、120秒間隔に変更した後のグラフです。

### 表示期間をカスタマイズ
(5月5日追記) デフォルトでは、表示期間の選択肢が、1hour, 1day, 1week, 1month, 1year (1時間、1日、1週間、1か月、1年)となっています。この選択肢を変えることができます。

![monitor1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27855/584218b1-3f90-291e-b99f-9ebb14dd4eff.png)
「出力プラグイン」タブの RRFTool タブで「保存する期間の範囲」を書き換えます。上の画像の例では、1時間、3時間、8時間の3種類の選択肢にしてみました。[^2]

下の画像のようにグラフ表示の選択肢に反映されます。
![monitor2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27855/39a4b1b5-0728-f8d9-7111-a988210e4e99.png)

[^2]: hour や day を複数形に変更する必要はありません。なお、その後、昼の休憩中に勤務開始以降のグラフを見たい、終業後に勤務開始以降のグラフを見たい、というニーズに一番都合のよさそうな 1hour, 4hour, 10hour の３種類の選択肢にしています。

## 帯域幅モニター
### インストールと表示されるグラフ
これも便利な機能です。luci-i18n-nlbwmon-ja を選んでインストールボタンを押します。
下記がインストールされます。
> nlbwmon (2017-12-05-75accd64-1)
> luci-app-nlbwmon (git-18.196.56128-9112198-1)
> luci-i18n-nlbwmon-ja (git-18.196.56128-9112198-1)

上の横方向のバーのメニューから「帯域幅システム」＞「ソフトウェア」を選びます。下記のような円グラフが表示されます。http、https などのプロトコルごとの通信量が確認できたり、「トラフィック内訳」タブでPCやスマートフォン１台ごとのネットワーク使用量が確認できたりします。
![36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27855/fc37fa3f-d04d-8049-ff91-925477d45297.png)

### プロトコル マッピング
(4月20日追記)ちなみに、プロトコル マッピングを自分で追加することもできます。各行の1つ目の値は[プロトコル番号](https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB%E7%95%AA%E5%8F%B7%E4%B8%80%E8%A6%A7)、2つ目の値は[ポート番号](https://ja.wikipedia.org/wiki/TCP%E3%82%84UDP%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%9D%E3%83%BC%E3%83%88%E7%95%AA%E5%8F%B7%E3%81%AE%E4%B8%80%E8%A6%A7)です。
![37add_mapping.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27855/a6669dc0-98b2-d7c9-b5b4-c75fb972a7fd.png)

例えば、Stream Control Transmission Protocol (プロトコル番号132番)、Lightweight User Datagram Protocol (プロトコル番号136番)、Real Time Streaming Protocol(ポート番号554番 TCP/UDPプロトコル両方あり、なのでプロトコル番号の6番と17番の両方を使用)、QuickTime Streaming Server(ポート番号1220番 TCPプロトコルなのでプロトコル番号6番を使用) を監視したい場合、下記のように追加できます。
> 132 0 SCTP
> 136 0 UDPLite
> 6 554 RTSP
> 17 554 RTSP
> 6 1220 QuickTime

#### Zoom 通信の監視
(4月24日追記) 最近リモート会議で使用される機会の多い、Zoom の通信量を監視するには、下記を追加すると良いでしょう[^3]。ただし、Zoom Phone の20000番以降は省きます。
> 17 3478 NAT-traversal
> 17 3479 Zoom
> 6 5090 Zoom-Phone
> 17 5090 Zoom-Phone
> 6 5091 Zoom-Phone
> 6 8801 Zoom
> 6 8802 Zoom
> 17 8801 Zoom
> 17 8802 Zoom
> 17 8803 Zoom
> 17 8804 Zoom
> 17 8805 Zoom
> 17 8806 Zoom
> 17 8807 Zoom
> 17 8808 Zoom
> 17 8809 Zoom
> 17 8810 Zoom

[^3]: ネットワークファイアウォール設定についての Zoom のドキュメントを参考にしました。

#### Teams 通信の監視
(7月9日追記) 相手によって Microsoft Teams, Cisco Webex を使い分ける必要が生じたので、使用するポート番号を調べました。プロトコル番号17 (UDP) の3478番と3479番は、Zoom と共通のポートを使用するんですね。なので 3479番の表記は Zoom_or_Teams [^4] としました。
> 6 587 Teams
> 17 3478 NAT-Traversal
> 17 3479 Zoom_or_Teams
> 17 3480 Teams
> 17 3481 Teams
> 17 9000 Webex
> 6 5004 Webex

[^4]: Zoom or Teams と定義すると、Microsoft Teams を使用した通信でも「or」以降が切り捨てられて Zoom と判断されてしまいます。そのためスペースを使用せずにアンダーラインにしています。

#### HTTP, NTP および HTTPS の UDP 通信も監視する
(5月5日追記) ちなみに実際のネットワーク通信を見ていると、HTTP, NTP および HTTPS の UDP のデータが取れていませんでした。足してあげると良いでしょう。
> 17 80 HTTP-over-UDP
> 17 123 NTP
> 17 443 HTTPS-over-UDP

#### GL-MT300N-V2 を通過する VPN 通信の監視
(7月9日追記) オフィスと自宅の PC との間で VPN 接続していて、GL-MT300N-V2 は通過しているだけの場合の監視です。[^5] 厳密に監視したい場合は、VPN 提供業者もしくは VPN ソフトウェアごとの定義を増やす必要があるかと思います。
> 6 1723 PPTP
> 17 1723 PPTP
> 17 500 ISAKMP
> 17 4500 IPSec-NAT-Traversal

[^5]: GL-MT300N-V2 の OpenVPN 機能を使用していないので誰得なのだろう。

#### その他
(11月28日追記) 以上のほかに netstat コマンドで見つけたポート番号です。クライアントは Windows 10 前提です。5228 は、ブラウザの Google Chrome が使っているようです。それ以外のポート番号を見かける機会は低いかもしれません。(2021/2/1追記) LDAP は、Samba サーバー機能を使用した時に見かけました。

> 6 5228 Google
> 17 5228 Google
> 6 5357 WSDAPI
> 17 5357 WSDAPI
> 6 5358 WSDAPI
> 17 5358 WSDAPI
> 6 88 Kerberos
> 17 88 Kerberos
> 6 135 EPMAP
> 17 135 EPMAP
> 17 139 NetBIOS
> 6 389 LDAP
> 17 389 LDAP

#### オフィスで使用するとき
(4月20日追記)オフィスで使用するときは、下記のプロトコルも監視したくなるかもしれません。(2021/2/11追記)それぞれ、AFP は Apple Filing Protocol、IPP は Internet Printing Protocol、WINS は Windows Internet Name Service、WSUS は Windows Server Update Services の略です。Domino は、Notes/Domino で使用しているらしいポート番号です。
> 6 548 AFP
> 6 631 IPP
> 17 631 IPP
> 6 1512 WINS
> 17 1512 WINS
> 6 8530 WSUS
> 6 8531 WSUS
> 6 1352 Domino

## VnStat
luci-i18n-vnstat-ja のインストールボタンを押すと、下記がインストールされます。
> libjpeg (9a-1)
> libpng (1.6.34-1)
> libgd (2.2.5-1)
> vnstat (1.18-1)
> vnstati (1.18-1)
> luci-app-vnstat (git-18.196.56128-9112198-1)
> luci-i18n-vnstat-ja (git-18.196.56128-9112198-1)

上の横方向のバーのメニューから「ステータス」＞「VnStat トラフィックモニタ」を選びます。下記のような円グラフが表示されます。
![85vnstat.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27855/30202035-f5c2-a7ef-de48-880cfceebfd7.png)

この VnStat は、統計グラフと帯域幅モニターで代替できると考え、アンインストールしました。
アンインストールするときは、上の横方向のバーのメニューから「システム」＞「ソフトウェア」を選び、「インストール済みパッケージ」で下記の順に２回に分けてアンインストールします。
1回目: vnstat
2回目: vnstati