今までヤマハルータを使って様々なネットワーク構築例を紹介しました。
今回はネットワーク構築ではなく、ルータの状態を定期的にメールで通知したり、動作を通知する設定を紹介します。
Luaスクリプト機能
ヤマハルータではLuaスクリプトを実行することができます。今回はヤマハで公開している様々なLuaスクリプトを参考に設定を行ってきます。
尚、Luaスクリプト機能を利用することで以下のようなことができるようになります。
- ルータの動作状況(showコマンドの出力結果)を定期的にメールで通知
- 特定のパソコンまたは複数のパソコンとの通信監視
- ログの監視
- ルータの状態(CPU使用率やメモリ使用率)などを定期的にメールで通知
- ルータの異常な状態時(ハードウェアや回線の過負荷)にメールで通知
Luaスクリプトの実行までの手順
ここからはLuaスクリプトをルータで実行させるまでの手順を紹介します。
ルータの設定内容
まずは今回使用するルータの設定内容です。
1 2 3 4 5 6 7 |
login password * administrator password * console character euc ip lan1 address 192.168.0.1/24 dhcp service server dhcp server rfc2131 compliant except remain-silent dhcp scope 1 192.168.0.101-192.168.0.200/24 |
今回の検証ではルータからパソコンへIPアドレスを割り当てるDHCPの設定が必要です。
Luaスクリプト ファイルの作成
まずは確認も簡単なLuaスクリプトで試したいと思います。
ヤマハのサイトで公開されているLuaスクリプトを使わせて頂きます。
このLuaスクリプトはLANネットワークに接続されたホストの利用状況をSYSLOGに履歴として出力して管理します。DHCPのログを監視してパソコンが接続されたLANポートの番号を出力します。
下記の内容をメモ帳などにコピーし「dhcp_log_watch.lua」のファイル名で保存します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
--[[ ●LANネットワークのホストの履歴取得スクリプト DHCPDのSYSLOGを監視し、検出したら当該のSYSLOGと接続ポートを SYSLOGに出力します。 <説明> ・このファイルを RTFS か外部メモリに保存してください。 ・スクリプトを停止するときは terminate lua コマンドを実行してください。 ・再度、Lua スクリプトを実行する場合は lua コマンドで実行してください。 ・★マークの付いた設定値は変更が可能です。 <ノート> ・show log | grep "Host detect" で実行結果の一覧を取得できます。 ・本スクリプトが出力する SYSLOG レベルを指定することができます。 SYSLOG のレベルを指定するには、log_level を設定してください。 debug レベル、notice レベルの SYSLOG を出力するためには、それぞれ以下の設定 が必要です。 debug レベル ・・・ syslog debug on notice レベル・・・ syslog notice on ・本スクリプトファイルを編集する場合、文字コードは必ず Shift-JIS を使用してく ださい。 ]] --------------------------## 設定値 ##-------------------------------- -- 検出したい SYSLOG の文字列パターン ptn = "%[DHCPD%]" -- MACアドレス検出の文字列パターン mac_ptn = "%x%x:%x%x:%x%x:%x%x:%x%x:%x%x" -- 出力する SYSLOG のレベル (info, debug, notice) log_level = "info" -- ★ ------------------------------------------------------------ -- ホスト検索 -- ------------------------------------------------------------ function search_host(mac) sw_route = nil route = nil port = nil rtn, str = rt.command("show status switching-hub macaddress " .. mac) port = string.match(str, "port (%d):") if (port) then route = "LAN1" else rtn, str = rt.command("show arp lan2") if (string.match(str, mac)) then route = "LAN2" else rtn, str = rt.command("show arp lan3") if (string.match(str, mac)) then route = "LAN3" end end end return route, port end ------------------------------------------------------------ -- メインルーチン -- ------------------------------------------------------------ local rtn, str local buf while (true) do rtn, str = rt.syslogwatch(ptn) mac = string.match(str[1], mac_ptn) if (mac) then route, port = search_host(mac) if (route) then buf = str[1] buf = buf .. " at " .. route if (port) then buf = buf .. " : port " .. port end rt.syslog(log_level, "[Lua] Host detect " .. buf) end end end |
上記はヤマハのサイトで公開されているLuaスクリプトですが修正箇所はありません。
Luaスクリプトをルータへコピー
保存した「dhcp_log_watch.lua」のファイルをルータにコピーします。
今回はUSBメモリを使用してルータへファイルをコピーします。ヤマハのサイトではtftpを使った方法も紹介されています。
- USBメモリをパソコンに接続して「dhcp_log_watch.lua」のファイルをUSBメモリにコピーします。
- USBメモリをルータに接続します。
- ルータのコンソール画面を開きます。今回はtelnetで接続しました。
- 管理者権限でログイン後、下記コマンドでUSBメモリからルータへ「dhcp_log_watch.lua」ファイルをコピーします。
1 |
# copy usb1:/dhcp_log_watch.lua /dhcp_log_watch.lua |
ファイルがコピーされたか下記コマンドで確認します。
1 |
# show file list / |
下記がコマンドの結果です。
ルータに「dhcp_log_watch.lua」ファイルがコピーされています。
Luaスクリプトの実行
ルータにコピーした「dhcp_log_watch.lua」ファイルを実行してみましょう。
下記のコマンドでLuaスクリプトが実行できます。
1 |
# lua /dhcp_log_watch.lua |
Luaスクリプトの実行状況が下記コマンドで確認できます。
1 |
# show status lua |
Luaスクリプトの実行前と実行後の上記コマンド結果です。
■実行前
■実行後
Luaコマンド実行後は「dhcp_log_watch.lua」が動作しているのが確認できます。
動作確認
「dhcp_log_watch.lua」はDHCPのログを監視しLANネットワークに接続されたパソコンがルータのどのLANポートに接続されたかログに出力するLuaスクリプトです。
確認方法としてますDHCPでIPアドレスを取得するパソコンをルータのLAN1ポート8に接続します。
接続した時点でルータのログに出力されているのでコンソール画面から確認します。
1 |
# show log |
上記コマンドでも確認できますがルータが起動した時点からのログが記録されているので、今回のLuaスクリプトで出力されたログを探すのは大変なので下記コマンドで絞り込みを行います。
1 |
# show log | grep "Host detect" |
絞り込みした結果が下記になります。
LAN1ポート8に接続したパソコンがログにちゃんと出力されています。
まとめ
Luaスクリプト機能を利用することで上記以外にもルータのいろいろな情報や状況を得ることができます。これはセキュリティ面や通信状態を保守するうえで大変貴重な情報となります。
次回はルータの情報や状態をメールで通知するLuaスクリプトを紹介します。