管理番号:YMHSW-4149
本設定例では、ルーターのL2MSマスター機能・Luaスクリプト機能と、L2スイッチのL2MSスレーブ機能を使用しています。L2MSを使って、ルーターから、スイッチが持つ機能の設定を行います。
ルーターの対応機種は、RTX1220、RTX1210、RTX1200(Rev.10.01.16以降)、RTX830、RTX810、NVR700W、NVR510、NVR500、FWX120です。
L2スイッチの対応機種は、SWX2322Pシリーズ、SWX2320シリーズ、SWX2310Pシリーズ、SWX2310シリーズ、SWX2300シリーズ、SWX2210Pシリーズ、SWX2210シリーズ、SWX2200シリーズ、SWX2110Pシリーズ、SWX2110シリーズ、SWX2100シリーズです。
L2MSマスター(ルーター)とL2MSスレーブ(L2スイッチ)の対応リビジョンは、技術資料「L2MS」でご確認ください。
SWX2200のポートを監視し、ブロードキャストストームの発生を検知した際、受信量の最も多いSWX2200のポートのブロードキャストパケットに関する受信帯域を絞り、ブロードキャストストームを抑制します。
また、本設定例はマルチキャストパケットについても同様の処理を行い、マルチキャストストームを抑制することができます。
光回線に接続するためには、別途ONUが必要です。
NVR700WとNVR510は、本体のONUポートに小型ONUを装着することで、光回線に接続できます。
本設定例は、Luaスクリプト例とブロードキャストパケットおよびマルチキャストパケットの抑制を行うためのモジュールファイルを使用します。このモジュールファイルをルーターにコピーする必要があります。
本設定例は、以下の流れで設定します。
対応機種のうち、設定例を掲載している機種は、以下のとおりです。
機種 | 掲載内容 | 備考 | |
---|---|---|---|
ルーター | RTX1220 RTX1210 RTX1200 RTX830 RTX810 NVR700W NVR510 | コマンド設定例 Luaスクリプト例 モジュールファイル |
L2MSマスター機能、 Luaスクリプト機能 |
L2スイッチ | SWX2200-8G SWX2200-24G | L2MSスレーブ機能 |
pp auth myname (ISPに接続するID) (ISPに接続するパスワード) dns server (ISPより指定されたDNSサーバーのIPアドレス) |
[解説] 上記のように設定例で赤字で記述されている設定値は、適切な値に変更してください。 |
ルーターには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 mtu 1454 ip pp nat descriptor 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 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 host lan1 dns server (ISPより指定されたDNSサーバーのIPアドレス) dns private address spoof on |
L2MSの設定 | switch control use lan1 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 * * submission ip filter dynamic 106 * * tcp ip filter dynamic 107 * * udp |
Luaスクリプトのスケジュール設定 | schedule at 1 startup * lua /swx2200_lua_bc_storm_ctl_rtx1200.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 |
ご相談・お問い合わせ