ルーターの動作状況を報告する

図 ルーターの動作状況を報告する

指定した show 系コマンドの出力結果を定期的にメールで通知するLuaスクリプトです。
遠隔地にあるルーターの動作状況を確認する場合に利用することができます。

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
pp enable 1
ip route default gateway pp 1

NATの設定

nat descriptor type 1 masquerade

DHCPの設定

dhcp service server
dhcp scope 1 192.168.0.2-192.168.0.100/24

DNSの設定

dns server (ISPより指定されたDNSサーバーのIPアドレス)
dns private address spoof on

フィルタの設定

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 * * netmeeting
ip filter dynamic 106 * * tcp
ip filter dynamic 107 * * udp
pp select 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 # 注釈1
pp enable 1

Luaスクリプトのスケジュール設定

schedule at 1 startup * lua (Luaスクリプトファイル名)

設定値

-- 監視間隔 (1-864000 秒)
idle_time = (監視間隔)

-- 監視間隔毎に結果を通知するshow系コマンドをカンマで区切って列挙する
cmd_tbl = {
 "(show系コマンド1)",
 "(show系コマンド2)"
}

-- メールの設定
mail_tbl = {
 smtp_address = "(SMTPサーバーのアドレス)",
 from = "(送信元メールアドレス)",
 to = "(宛先メールアドレス)"
}

-- メールの送信に失敗した時に出力する SYSLOG のレベル(info, debug, notice)
log_level = "(SYSLOGレベル)"

コマンドの実行結果を
出力する関数

function exec_command(cmd)
 local rtn, str

 rtn, str = rt.command(cmd)
 if (not rtn) or (not str) then
  str = "実行失敗\r\n"
 end

 return rtn, string.format("# %s\r\n%s\r\n", cmd, str)
end

現在の日時を取得する関数

function time_stamp()
 local t

 t = os.date("*t")
 return string.format("%d/%02d/%02d %02d:%02d:%02d",
  t.year, t.month, t.day, t.hour, t.min, t.sec)
end

メインルーチン

local rtn, str

while (true) do
 mail_tbl.text = ""
 for i, cmd in ipairs(cmd_tbl) do
  rtn, str = exec_command(cmd)
  mail_tbl.text = mail_tbl.text .. str
 end

 mail_tbl.subject = string.format("summary of show commands (%s)", time_stamp())
 rtn = rt.mail(mail_tbl)
 if (not rtn) then
  rt.syslog(log_level, "failed to send mail. (Luaスクリプトファイル名)")
 end

 rt.sleep(idle_time)
end

ページトップへ戻るReturn to Top