ネットワークの状態を監視し異常をLINEで通知する

管理番号:YMHRT-21128

本設定例では、ルーターのLuaスクリプト機能・L2MSマスター機能・スナップショット機能と、スイッチのL2MSスレーブ機能を使用しています。

ルーターのLuaスクリプト機能の対応機種は、RTX5000RTX3500RTX1210RTX830NVR700WNVR510です。
NVR500FWX120は、一部の機能に対応していないため、対応機種から除いています。

ルーターのL2MSマスター機能、スナップショット機能の対応機種は、RTX1210RTX830NVR700WNVR510NVR500FWX120です。

スイッチのL2MSスレーブ機能の対応機種は、ヤマハスイッチ 全機種です。

L2MSマスター(ルーター)とL2MSスレーブ(スイッチ)の対応リビジョンは、 技術資料「L2MS」でご確認ください。

図 構成図

ネットワークの接続状態を監視し、異常を検出した場合にLINEで通知するLuaスクリプトです。

LANマップ機能のひとつ「スナップショット機能」を利用すると、機器の接続状態が変化したときに以下のSYSLOGを出力できます。本設定例では、これらのSYSLOGを、Luaスクリプトで監視します。

 ・SnapShot(interface): Unknown. [Info]
 ・SnapShot(interface): Route difference. [Info]
 ・SnapShot(interface): Not found. [Info]
 ・SnapShot(interface): Status recovered. [Info]

スナップショット機能 および SYSLOG の詳細は、技術資料「LANマップ機能」でご確認ください。

※「LINE」およびそのロゴマークは、LINE株式会社の商標または登録商標です。

光回線に接続するためには、別途ONUが必要です。
NVR700WとNVR510は、本体のONUポートに小型ONUを装着することで、光回線に接続できます。

対応機種のうち、設定例を掲載している機種は、以下のとおりです。

機種 掲載内容 備考
RTX1210 RTX830 NVR700W NVR510 コマンド設定例
Luaスクリプト例
Luaスクリプト機能、
L2MSマスター機能、
スナップショット機能
ヤマハスイッチ 全機種 L2MSスレーブ機能

環境準備

本設定例では、LINEを利用するため、事前にLINE Developersの設定が必要です。
次の手順で、環境の準備を行います。

  1. ルーターにConfigを設定
  2. ネットワークの構成を構築
  3. ルーターのWeb GUI「LANマップ」で、スナップショットを保存
  4. LINE Developers を設定
  5. Luaスクリプトを実行

ルーターの設定例

※ネットワーク機器を安全にお使いいただくために、管理パスワードの変更を奨励します。

ゲートウェイの設定 ip route default gateway pp 1
LANインターフェースの設定
(LAN1ポートを使用)
ip lan1 address 192.168.0.1/24
WANインターフェースの設定
(LAN2ポートを使用)
pp select 1
pp always-on on
pppoe use lan2
pp auth accept pap chap
pp auth myname (ISPに接続するID) (ISPに接続するパスワード)
ppp lcp mru on 1454
ppp ipcp ipaddress on
ppp ipcp msext on
ip pp mtu 1454
ip pp nat descriptor 1
ip pp secure filter in 1020 1030 2000
ip pp secure filter out 1010 1011 1012 1013 1014 1015 3000 dynamic 100 101 102 103 104 105 106 107
pp enable 1
フィルターの設定 ip filter source-route on
ip filter directed-broadcast on
ip filter 1010 reject * * udp,tcp 135 *
ip filter 1011 reject * * udp,tcp * 135
ip filter 1012 reject * * udp,tcp netbios_ns-netbios_ssn *
ip filter 1013 reject * * udp,tcp * netbios_ns-netbios_ssn
ip filter 1014 reject * * udp,tcp 445 *
ip filter 1015 reject * * udp,tcp * 445
ip filter 1020 reject 192.168.0.0/24 *
ip filter 1030 pass * 192.168.0.0/24 icmp
ip filter 2000 reject * *
ip filter 3000 pass * *
ip filter dynamic 100 * * ftp
ip filter dynamic 101 * * www
ip filter dynamic 102 * * domain
ip filter dynamic 103 * * smtp
ip filter dynamic 104 * * pop3
ip filter dynamic 105 * * submission
ip filter dynamic 106 * * tcp
ip filter dynamic 107 * * udp
NATの設定 nat descriptor type 1 masquerade
DHCPの設定 dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.0.2-192.168.0.100/24
DNSの設定 dns server (ISPより指定されたDNSサーバーのIPアドレス)
dns private address spoof on
L2MSの設定 switch control use lan1 on terminal=on
LANマップの設定 lan-map snapshot use lan1 on terminal=on
lan-map log on
Luaスクリプトのスケジュール設定 schedule at 1 startup * lua (Luaスクリプトファイル名)

LINE Developersの設定

すでに、スマートフォンなどでLINEアプリを利用していることを前提として説明します。もし、LINEアプリをご利用でない場合は、先にLINEアプリをインストールして、LINEアカウントを作成してください。

トライアルアカウントの作成・Messaging APIの初期設定

1. LINE Developers にアクセスします。

2. プロダクトの「Messaging API」をクリックします。

説明画像

3.「今すぐはじめよう」をクリックします。

4. LINEアカウント(LINEアプリに登録しているメールアドレスとパスワード)でログインします。
 ※メールアドレスは、LINE アプリの [設定] - [アカウント] で確認できます。

5. 開発者名(任意の文字列)とメールアドレスを入力し、「アカウントを作成」をクリックします。

6.「新規プロバイダー作成」をクリックします。

7. 入力必須項目を設定し、「作成」をクリックします。

チャネルの確認・アクセストークンの発行

1.「Messaging API設定」をクリックします。

説明画像

2. ボット情報のQRコードをLINEアプリで読み取り、友達登録をします。

3. チャネルアクセストークンの「再発行」をクリックします。
 (現在のチャネルアクセストークンが無効になるまでの時間は「0時」のままで問題ありません)
 ※発行したアクセストークンは、Luaスクリプトの作成で利用しますので、ひかえておいてください。

Luaスクリプト例

設定値

-- 検出する SYSLOG の文字列
ptn = string.regexp("SnapShot(.*): Status recovered|SnapShot(.*): Unknown|SnapShot(.*): Route difference|SnapShot(.*): Not found")

-- LINE送信用リクエストテーブル
req_tbl = {
 url = "https://api.line.me/v2/bot/message/broadcast",
 method = "POST",
 auth_type = "bearer",
 auth_token = "(LINE Developers で発行したアクセストークン)",
 post_text = "",
 content_type = "application/json"
}

-- 出力する SYSLOG のレベル (info, debug, notice)
log_level = "(SYSLOGレベル)"

LINEに通知するデータ

-- POSTデータ
post_data = '{"messages":[{"type":"text","text":"%s"}]}'

SYSLOGメッセージをJSON用にエスケープする関数

function escape_json(str)
 str = string.gsub(str, "\\", "\\\\")
 str = string.gsub(str, "\"", "\\\"")
 str = string.gsub(str, "\/", "\\/")
 str = string.gsub(str, "\n", "\\n")
 str = string.gsub(str, "\r", "\\r")
 str = string.gsub(str, "\t", "\\t")

 return str
end

メインルーチン

local rtn, str
local res_tbl

while (true) do
 rtn, str = rt.syslogwatch(ptn)
 req_tbl.post_text = ""

 if rtn > 0 then
  req_tbl.post_text = string.format(post_data, escape_json(str[1]))

  -- LINEで通知
  res_tbl = rt.httprequest(req_tbl)
  if (res_tbl.rtn1) and (res_tbl.code) and (res_tbl.code == 200) then
   -- 送信成功
   rt.syslog(log_level, "[Lua] success to send message.")
  else
   -- 送信失敗
   rt.syslog(log_level, "[Lua] failed to send message.")
  end

  req_tbl.post_text = ""
 end
end

LINEへの通知

スナップショット機能で接続状態の異常を検出すると、以下のようなイメージでLINEに通知されます。

説明画像

【ご注意】
本設定例は、設定の参考例を示したもので、動作を保証するものではございません。
ご利用いただく際には、十分に評価・検証を実施してください。

メール

ご相談・お問い合わせ