管理番号:YMHSW-4155
本設定例では、ルーターのL2MSマスター機能・Luaスクリプト機能と、L2スイッチのL2MSスレーブ機能を使用しています。L2MSを使って、ルーターから、スイッチが持つ機能の設定を行います。
ルーターの対応機種は、FWX120です。
L2スイッチの対応機種は、SWX2300シリーズ、SWX2200シリーズ、SWX2100シリーズです。
L2MSマスター(ルーター)とL2MSスレーブ(L2スイッチ)の対応リビジョンは、技術資料「L2MS」でご確認ください。
SWX2200のポートを監視し、ブロードキャストストームの発生を検知した際、受信量の最も多いSWX2200のポートのブロードキャストパケットに関する受信帯域を絞り、ブロードキャストストームを抑制します。
また、本設定例はマルチキャストパケットについても同様の処理を行い、マルチキャストストームを抑制することができます。
光回線に接続するためには、別途ONUが必要です。
本設定例は、Luaスクリプト例とブロードキャストパケットおよびマルチキャストパケットの抑制を行うためのモジュールファイルを使用します。このモジュールファイルをルーターにコピーする必要があります。
本設定例は、以下の流れで設定します。
対応機種のうち、設定例を掲載している機種は、以下のとおりです。
機種 | 掲載内容 | 備考 | |
---|---|---|---|
ルーター | FWX120 | コマンド設定例 Luaスクリプト例 モジュールファイル |
L2MSマスター機能、 Luaスクリプト機能 |
L2スイッチ | SWX2200-8G SWX2200-24G | L2MSスレーブ機能 |
pp auth myname (ISPに接続するID) (ISPに接続するパスワード) dns server (ISPより指定されたDNSサーバーのIPアドレス) |
[解説] 上記のように設定例で赤字で記述されている設定値は、適切な値に変更してください。 |
FWX120にはTFTPを使用してPCからルーターに設定ファイルをコピーすることができます。 この方法については取扱説明書をご参照ください。 |
[解説] モジュールファイル名はLuaスクリプトの動作にも関係がありますので、本設定例では変更せずそのままご使用ください。 |
[解説] ルーターコンソールはシリアルケーブルやtelnetで接続して使用します。 使用方法については取扱説明書をご参照ください。 |
[ルーターコンソール] # copy usb1:/lua_rtx1200_storm-limit.lib /lua_rtx1200_storm-limit.lib # |
[解説] copyコマンドの詳細は こちらをご参照ください。 ファイルをルーターのルートディレクトリー以外にも格納することができます。 その場合は、ディレクトリーを作成してから、そのディレクトリーにコピーします。 そちらの方法については 参考資料をご参照ください。 技術資料 「RTFS」-「コマンド一覧」-「ディレクトリの作成」 モジュールファイルをディレクトリーにコピーした場合、環境変数LUA_PATHでそのディレクトリーを指定する必要があります。そちらの方法は 参考資料をご参照ください。 技術資料 「Lua スクリプト機能」 - 「詳細」にある「5.ルーターの環境変数 」をご参照ください。 モジュールファイルの名前を変更した場合、Luaスクリプト内の「require関数」の引数の名前も変更する必要があります。 |
[補足] 本設定例のモジュールファイルを、copyコマンドではなくTFTPを使用してRTFSへコピーする場合は、バイナリモードでコピーしてください。 |
[解説] Luaスクリプトのダウンロードから実行までの手順はLuaスクリプト導入手順マニュアルをご覧ください。 |
環境変数の設定 | set LUA_PATH="./\?.lib;" #注釈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 inbound filter list 1001 1002 1003 1004 1005 1006 1007 1099 ip pp nat descriptor 1 ip pp mtu 1454 pp enable 1 ip route default gateway pp 1 |
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 |
フィルターの設定 | ip inbound filter 1001 reject-nolog * * tcp,udp * 135 ip inbound filter 1002 reject-nolog * * tcp,udp 135 * ip inbound filter 1003 reject-nolog * * tcp,udp * netbios_ns-netbios_ssn ip inbound filter 1004 reject-nolog * * tcp,udp netbios_ns-netbios_ssn * ip inbound filter 1005 reject-nolog * * tcp,udp * 445 ip inbound filter 1006 reject-nolog * * tcp,udp 445 * ip inbound filter 1007 reject-nolog 192.168.0.0/24 * * * * ip inbound filter 1099 pass-nolog * * * * * ip policy interface group 101 name=Private local lan1 ip policy address group 101 name=Private 192.168.0.0/24 ip policy address group 102 name=Any * ip policy service group 101 name="Open Services" ip policy service group 102 name=General dns ip policy service group 103 name=Mail pop3 smtp ip policy filter 1100 reject-log lan1 * * * * ip policy filter 1110 pass-log * * * * 161 ip policy filter 1122 static-pass-log * lan1 * * * ip policy filter 1123 static-pass-log * local * * * ip policy filter 1124 static-pass-log * * 192.168.0.0/24 * http ip policy filter 1150 pass-nolog * pp1 * * * ip policy filter 1500 reject-log pp* * * * * ip policy filter 1520 pass-log * lan1 * * 101 ip policy filter 1700 pass-log local * * * * ip policy filter 1710 static-pass-log * lan1 * * * ip policy filter 3000 reject-log * * * * * ip policy filter set 101 name="Internet Access" 1100 [1110 1123 [1124] 1122 1150] 1500 [1520] 1700 [1710] 3000 ip policy filter set enable 101 |
Luaスクリプトのスケジュール設定 | schedule at 1 startup * lua (Luaスクリプトファイル名) |
注釈1:
モジュールファイルをロードするために使用するパスを設定します。
Lua ではモジュール名の置換記号として "?" を使いますが、ルーターコンソールで '?' を入力するとヘルプが表示されてしまうため、'?' を入力する前にエスケープシーケンスの '\' を入力しています。
require関数の引数と環境変数LUA PATHの設定値についての詳細は こちら
設定値 | -- 転送レート上限 broadcast_rate = 5 multicast_rate = 5 -- 監視対象のスイッチをカンマで区切って列挙する -- MACアドレスかルーターからスイッチまでの接続ポートの経路情報で指定 -- ("00:a0:de:xx:xx:xx" または "lan1:2-3") sw_list = { "lan1:1" } -- パケットストームの監視間隔(1 - 864000 秒) idle_time = 60 -- パケットストーム連続検出閾値 (1 - 864000) -- 推奨値は 3 continue_time = 3 -- ブロードキャストストーム検出時のメール送信設定 -- (送る: true / 送らない: false) mail = false -- メールの設定 mail_tbl = { smtp_address = "(SMTP サーバーのアドレス)", from = "(送信元メールアドレス)", to = "(宛先メールアドレス)" } -- スイッチの状態、メール送信失敗等の情報を出力する SYSLOG のレベル (info, debug, notice) log_level = "info" |
---|---|
グローバル変数の設定 | -- 転送制限が連続した回数 limit_cnt = {0, 0, 0, 0, 0, 0, 0, 0} -- 転送制限設定とカウンター設定の状態 limit_cfgd = {nil, nil, nil, nil, nil, nil, nil, nil} -- 転送制限が始まったときのカウンター値 cnt_save = {nil, nil, nil, nil, nil, nil, nil, nil} |
ロードするモジュールの指定 | require("lua_rtx1200_storm-limit") |
スイッチの機種を取得する関数 | function switch_model_read(sw) rtn, str = rt.command(cmd) str = string.format("failed to get model name : %s\r\n", sw) |
スイッチの名前を取得する関数 | function switch_sys_name_read(sw) rtn, str = rt.command(cmd) |
スイッチのカウンタータイプを設定する関数 | function switch_set_counter(port, cnt_num) return rt.command(cmd) |
スイッチのカウンターを読みだす関数 | function switch_read_frame_counter(sw, rx_tx, port, cnt_num) rtn, val = rt.command(cmd) |
受信カウンタータイプをbroadcast-and-multicast-packetsに設定する関数 | function set_counter_watch_pkts(sw) rtn = rt.command(cmd) rtn, str = switch_model_read(sw) if (string.find(str, "SWX2200-8G", 1, true)) then for i = 1, port_num do cmd = "switch select none" |
受信した抑制対象フレーム数を取得する関数 | function read_counter_watch_pkts(sw) rtn, str = switch_model_read(sw) if (not rtn) or (not str) then if (string.find(str, "SWX2200-8G", 1, true)) then for i = 1, port_num do |
現在の日時を取得する関数 | function time_stamp() t = os.date("*t") |
カウンターの増加量が最も大きいポートを取得する関数 | function get_port_cntinc_max(curr, prev) if (curr == nil) or (prev == nil) then |
パケットストームの状態検出を行う関数 | function get_storm_status(idx, sw) -- SWX2200の転送制限フラグを確認する |
スイッチごとに状態監視を行う関数 | function watch_switch(idx, sw) if (not limit_cfgd[idx]) then if (limit_cfgd[idx]) then if (limit) then if (storm) then |
メインルーチン | local rtn, rtn2, str, storm, limit, msg while (true) do if (storm) and (mail) then if (limit) and (not storm) then |
ご相談・お問い合わせ