
IPマスカレードの使用ポート数を監視し、閾値を超えた場合にメールで通知するLuaスクリプトです。
使用するポート数の多い内側IPアドレスを抽出し、それぞれのIPアドレスが使用するポート数を通知します。
通知された内側IPアドレスが非常に多くのポートを占有している場合、そのアドレスに対してIPマスカレード変換セッション数制限機能で使用可能なポート数に制限をかけることにより、各ホストが均等に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 秒) -- 使用状況を監視するIPマスカレードのNATディスクリプタ番号(1 - 2147483647) -- 使用ポート数の閾値(1 - NAT同時セッション数の最大値) -- 抽出する内側IPアドレスの個数(1, 2 ..) -- メールの設定 -- メールの送信に失敗した時に出力する SYSLOG のレベル(info, debug, notice) |
|---|---|
| IPマスカレードの使用ポート数を返す関数 |
function natmsq_use_status(id) return rtn, num, str |
| IPマスカレードの使用ポート数を内側IPアドレス毎に求める関数 |
function nattbl_info(str, num) rt_name = string.match(_RT_FIRM_REVISION, "(%w+) ") |
| IPマスカレードの使用ポート数を内側IPアドレス毎に求める関数 (RTX1200、NVR500) |
function nattbl_info_rtx1200(str, num) n = 1 if (n + 1 > num) then if (n < num) then result = string.format("ポート使用数の多い内側IPアドレス(上位%d個)\r\n", num) return result |
| IPマスカレードの使用ポート数を内側IPアドレス毎に求める関数 (SRT100) |
function nattbl_info_srt100(str, num) for v in string.gmatch(str, ptn) do n = 0 bubble_sort(a, true) if (n < num) then result = string.format("ポート使用数の多い内側IPアドレス(上位%d個)\r\n", num) return result |
| 配列の並び替えを行う関数 |
function bubble_sort(t, reverse) for i = 1, #t do |
| 2つの値を入れ替える関数 |
function swap(x, y) temp = x |
| 現在の日時を取得する関数 |
function time_stamp() t = os.date("*t") |
| メインルーチン |
local rtn, nat_use, str while (true) do rtn, nat_use, str = natmsq_use_status(nat_descriptor) if (mail_tbl.text:len() > 0) then rt.sleep(idle_time) |