RTX810のNAPTテーブル、ARPテーブル、DHCPの使用状況をZabbixに記録する


概要

時折、社員から無線LANで接続が切れる、という情報が寄せられている。
最近の社員増加に伴って端末が増え、ルータ(RTX810)のNAPTテーブルが溢れているのではないか?

残念ながらSNMPを用いてRTX810のNAPTテーブルの使用量を調べることはできなかったので、外部チェックスクリプトを仕込んで調べてみた。
その他、ARPテーブルとDHCPのリース状況も調べた。

環境

  • ルータ: YAMAHA RTX810
  • NAPT、DHCPサーバ、Web管理画面をON

外部チェックのスクリプト

NAPTテーブル

nat_table_usage.sh
#!/bin/bash

HOST=$1
PASS=(RTXのウェブ管理画面のパスワード)
COMMAND="show nat descriptor address"

SESSION=`wget --http-user="" --http-password="${PASS}" http://${HOST}/detail/command.html -O - 2>/dev/null \
 | grep HTTPD_SESSION_ID | awk -F'"' '{print $6}'`

wget --http-user="" --http-password="${PASS}" http://${HOST}/detail/command_set.html \
 --post-data="HTTPD_SESSION_ID=${SESSION}&COMMAND=${COMMAND}&x=10&y=10" -O - 2>/dev/null \
 | iconv -f Shift-JIS -t UTF-8 | grep "個使用中" |  awk -F' |個' '{print $10}'

やっていることは、以下の通り。

  1. Web管理画面の「コマンドの実行」ページを表示し、<input type="hidden" name="HTTPD_SESSION_ID" value="********">を取得
  2. コマンドにshow nat descriptor addressを指定して実行
  3. 帰ってきた結果をShift-JISからUTF-8に変換して、テーブルの使用量をawkで抜き出す

このスクリプトをZabbixサーバの/usr/lib/zabbix/externalscripts/に配置し、
chmod +x nat_table_usage.shで実行可能にしておく。
正確にはNATではなくNAPTなのだが、RTX側のコマンド名に合わせた。

dockerでZabbixサーバを起動する場合は、alpineに入っているwgetのバージョンが古いため、alpineベースのものではなくUbuntuベースのものがおすすめ。

ARPテーブル

arp_table_usage.sh
#!/bin/bash

HOST=$1
PASS=(RTXのウェブ管理画面のパスワード)
COMMAND="show arp"

SESSION=`wget --http-user="" --http-password="${PASS}" http://${HOST}/detail/command.html -O - 2>/dev/null \
 | grep HTTPD_SESSION_ID | awk -F'"' '{print $6}'`

wget --http-user="" --http-password="${PASS}" http://${HOST}/detail/command_set.html \
 --post-data="HTTPD_SESSION_ID=${SESSION}&COMMAND=${COMMAND}&x=10&y=10" -O - 2>/dev/null \
 | iconv -f Shift-JIS -t UTF-8  | grep "カウント数" |  awk -F':' '{print $2}'

DHCP

dhcp_status.sh
#!/bin/bash

HOST=$1
PASS=(RTXのウェブ管理画面のパスワード)
COMMAND="show status dhcp"

SESSION=`wget --http-user="" --http-password="${PASS}" http://${HOST}/detail/command.html -O - 2>/dev/null \
 | grep HTTPD_SESSION_ID | awk -F'"' '{print $6}'`

wget --http-user="" --http-password="${PASS}" http://${HOST}/detail/command_set.html \
 --post-data="HTTPD_SESSION_ID=${SESSION}&COMMAND=${COMMAND}&x=10&y=10" -O - 2>/dev/null \
 | iconv -f Shift-JIS -t UTF-8  | grep "割り当て中アドレス数" |  awk -F':' '{print $2}'

Zabbixの設定

Item

Zabbixサーバにアクセスして、「Configuration」「Hosts」または「Templates」からRTX810の「Item」を選択。

「Create Item」をクリックして、アイテムを作成し、各項目を設定。

  • Name: 「NAT Table Usage」
  • Type: 「External check」
  • Key: 「nat_table_usage.sh["{HOST.CONN}"]
  • Host interface: RTX810のIPアドレス
  • Update interval: 1m ⇒ 1分

同様にarp_table_usage.sh["{HOST.CONN}"]dhcp_status.sh["{HOST.CONN}"]のItemも作成する。

"{HOST.CONN}"の部分には、Host interfaceに指定されたIPアドレスが入る。

Graph

次に「Graph」から「Create Graph」を使ってグラフを作成する。

  • Items: 「Add」から上で作成したItem(NAT Table Usage)をSelect

見た目はお好みで。

結果

しばらくデータを貯めたら、グラフを見てみる。
最大で3000行ぐらい使っているようだが、RTX810は最大10000まで行けるので、
まだまだ溢れてはいないようだ。

次に怪しいのはAPの同時接続数なので、次はそちらを調査する。