
指定したIPアドレス宛てに一定の間隔でpingを実行し、pingへの応答が無かった場合に、管理者へメールで通知するLuaスクリプトです。
pingを実行する宛先IPアドレスには、複数のホストを指定することができます。
RTX1200の設定例
| LANの インタフェースの設定 (LAN1ポートを使用) |
ip lan1 address 192.168.0.1/24 |
|---|---|
| WANの インタフェースの設定 (LAN2ポートを使用) |
pp select 1 |
| NATの設定 |
nat descriptor type 1 masquerade |
| DHCPの設定 |
dhcp service server |
| DNSの設定 |
dns server (ISPより指定されたDNSサーバーのIPアドレス) |
| フィルタの設定 |
ip filter source-route on |
| Luaスクリプトのスケジュール設定 |
schedule at 1 startup * lua (Luaスクリプトファイル名) |
Luaスクリプト例
| 設定値 |
-- 監視間隔 (1-864000 秒) -- pingを実行する宛先IPアドレス -- ping への応答がない、または応答が回復したと判断する連続回数(1, 2 ..) -- 応答が回復したときにもメールを送るか否か(送る:true / 送らない:false) -- メールの設定 -- メールの送信に失敗した時に出力する SYSLOG のレベル(info, debug, notice) |
|---|---|
| pingを実行し、到達したか どうかを返す関数 |
function ping_reach(adr) rtn, str = rt.command(cmd) return rtn, reach, str |
| 連続何回pingに応答がないかを 示すカウンタの処理関数 |
function count_proc(t, reach, th) if (not reach) then return rtn |
| メール本文を作成する関数 |
function make_pingmsg(tbl, reach, adr, cnt, sec, down) rtn = count_proc(tbl, reach, cnt) return str |
| 連続不応答回数を記録する テーブルの初期化関数 |
function init_count_tbl(n, cnt_t) |
| 現在の日時を取得する関数 |
function time_stamp() t = os.date("*t") |
| メインルーチン |
local rtn, reach, str, adr init_count_tbl(#dst_tbl, cnt_tbl) while (true) do for i, adr in ipairs(dst_tbl) do if (mail_tbl.text:len() > 0) then rt.sleep(idle_time) |