管理番号:YMHRT-18635
(最終更新日: 2023/7/26)
本設定例では、Luaスクリプト機能とFQDNフィルター機能を使用しています。
Luaスクリプト機能の対応機種は、RTX5000、RTX3510、RTX3500、RTX1300、RTX1220、RTX1210、RTX830、NVR700W、NVR510、vRXです。
※FWX120は、一部の機能に対応していないため、対応機種から除いています。
FQDNフィルター機能の対応機種は、RTX5000(Rev.14.00.26以降)、RTX3510、RTX3500(Rev.14.00.26以降)、RTX1300、RTX1220、RTX1210(Rev.14.01.26以降)、RTX830(Rev.15.02.03以降)、NVR700W(Rev.15.00.10以降)、NVR510(Rev.15.01.13以降)、FWX120(Rev.11.03.25以降)、vRXです。
トラフィックが増加する中、インターネット回線が1本だけの場合、輻輳を招く恐れがあります。クラウドアプリケーションやWindows Update だけ、別のインターネット回線でアクセス(インターネットブレイクアウト)することで、輻輳を回避して負荷を軽減できます。
本設定例では、Luaスクリプトを利用した、Office 365、Windows Update、G Suite のインターネットブレイクアウトをご紹介します。
ルーターでサンプルLuaスクリプトを実行すると、以下のように動作します。
(1) ネットワーク経由で、マイクロソフト社が公開しているOffice 365のURLリストを取得
(2) Office 365のURLリストのバージョンを、Luaスクリプトで記憶
(3) 取得したリストに記載されているFQDN・IPアドレスから、Office 365用のフィルターをルーターに定義
(4) マイクロソフト社が公開しているWindows UpdateのFQDN(固定)から、Windows Update用のフィルターをルーターに定義
(5) Google社が公開しているG SuiteのFQDN(固定)から、G Suite用のフィルターをルーターに定義
(6) ルーターに経路を設定 (フィルター型ルーティング)
(7) 定期的にOffice 365のURLリストのバージョンを確認し、(2) のバージョンと比較
(8) バージョンが上がっていた場合、(3)~(6) を実施
※ Office 365 および Windowsは、米国 Microsoft Corporation の米国およびその他の国における登録商標または商標です。
※ G Suiteは、Google LLCの登録商標または商標です。
光回線に接続するためには、別途ONUが必要です。
対応機種のうち、設定例を掲載している機種は、以下のとおりです。
1. ルーターコンソールを開きます。
[解説] ルーターコンソールはシリアルケーブルやtelnetで接続して使用します。 使用方法については取扱説明書をご参照ください。 |
2. 管理者権限でログインして、EMFSファイルを作成します。
[ルーターコンソール] # embedded file (Luaスクリプトファイル名) <<EOF : : : Luaスクリプト(本体を貼り付ける) : : EOF |
[解説] コマンドの詳細はEMFSファイルの作成、削除をご参照ください。 Luaスクリプトファイル名は、任意の文字列を設定してください。 |
3. Luaスクリプトがルーターに作成されたことを確認します。
[ルーターコンソール] # show file list emfs:/ 2019/06/21 14:42:24 12742 (Luaスクリプトファイル名) |
[解説] コマンドの詳細はファイル情報の一覧の表示をご参照ください。 |
※ネットワーク機器を安全にお使いいただくために、管理パスワードの変更を奨励します。
ゲートウェイの設定 | ip route default gateway pp 1 |
---|---|
LANインターフェースの設定 (LAN1ポートを使用) |
ip lan1 address 192.168.100.1/24 |
WANインターフェースの設定1 (LAN2ポートを使用) |
pp select 1 pp always-on on pppoe use lan2 pp auth accept pap chap pp auth myname (ISP1に接続するID) (ISP1に接続するパスワード) ppp lcp mru on 1454 ppp ipcp ipaddress on ppp ipcp msext on ppp ccp type none 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 ip pp nat descriptor 1 pp enable 1 |
WANインターフェースの設定2 (LAN3ポートを使用) |
pp select 2 pp always-on on pppoe use lan3 pp auth accept pap chap pp auth myname (ISP2に接続するID) (ISP2に接続するパスワード) ppp lcp mru on 1454 ppp ipcp ipaddress on ppp ipcp msext on ppp ccp type none ip pp nat descriptor 2 pp enable 2 |
フィルターの設定 | 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.100.0/24 * ip filter 1030 pass * 192.168.100.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 * * tcp ip filter dynamic 106 * * udp |
NATの設定 | nat descriptor type 1 masquerade nat descriptor type 2 masquerade |
DHCPの設定 | dhcp service server dhcp server rfc2131 compliant except remain-silent dhcp scope 1 192.168.100.2-192.168.100.100/24 |
DNSの設定 | dns host lan1 dns server select 5001 pp 1 any . restrict pp 1 dns server select 5002 pp 2 any . restrict pp 2 dns private address spoof on |
Luaスクリプトのスケジュール設定 | schedule at 1 startup * lua emfs:/(Luaスクリプトファイル名) |
設定値 |
-- コマンドパラメーター -- -- FQDNフィルターに使用するフィルターIDのプレフィックス -- Office 365 インターネットブレイクアウトのSYSLOGのプレフィックス -- サーバーへの問い合わせ間隔(秒) -- ルーター起動時の PPPoE 接続の待機時間(秒) -- ルーター起動時の PPPoE 接続の確認回数(回) check_connection_count = 5 -- 5回 -- HTTPS リクエスト -- -- パス -- url -- リクエストテーブル -- Windows Update の接続先URLリスト(テーブル) -- G Suite の接続先URLリスト(テーブル) -- 出力する SYSLOG のレベル(info, debug, notice) -- メッセージ -- |
---|---|
ログメッセージをSYSLOGに出力する関数 | function write_to_log(msg_fmt, ...) log_msg = string.format(msg_fmt, ...) |
UUIDを生成する関数 | function generate_uuid() math.randomseed(os.time()) return string.gsub(template, "[xy]", function (c) end |
Officeサーバーからバージョンを取得する関数 | function get_version_from_server(uuid) path = string.format(path_version, uuid) if (res_tbl.rtn1) and (res_tbl.code) and (res_tbl.code == 200) then return cur_ver |
Officeサーバーからエンドポイントを取得する関数 | function get_endpoints_from_server(uuid) path = string.format(path_endpoint, uuid) if (res_tbl.rtn1) and (res_tbl.code) and (res_tbl.code == 200) then return nil |
CSV形式の1行をテーブルに変換する関数 | function ParseCSVLine(line) return res |
チャンク転送であるか否かを取得する関数 | function is_transenc_chunked(hdr) if hdr:match(ptn) then return false |
レスポンスデータからURLリストを取得する関数 | function get_urls(body) if (body ~= nil) then return urls_list |
URLリストから重複を削除、ソートする関数 | function del_duplicate_urls(urls_list) for urls in each(urls_list) do for k, v in pairs(flist_temp) do table.sort(flist) return flist |
URLのリストを一定の条件で連結する関数 | function concatenate_urls(urls_list) for url in each(urls_list) do if (string.len(str_urls) > urls_len) then if (str_urls ~= "") then return flist |
FQDNフィルターを削除する関数 | function exec_no_filter_cmd(num) for i = 0, (num - 1) do end |
2つのリストを結合する関数 | function joint_tables(table_1, table_2) for v in each(table_1) do for v in each(table_2) do return table_new |
FQDNフィルターを設定する関数 | function exec_filter_cmd(urls_list) for v in each(urls_list) do return flist |
ip routeコマンドを設定する関数 | function exec_ip_route_cmd(flist) if (#flist == 0) then for v in each(flist) do cmd = string.format("ip route default gateway %s filter %s gateway %s", gateway_offload, buf, gateway_default) end |
メインルーチン | local buf, cur_ver -- PPPoE 接続を待つ -- PPPoE 接続していない場合に、エラーメッセージを出力し、サーバーへの問い合わせ間隔分待機する -- UUIDを生成 while (true) do -- Officeサーバーからバージョンを取得 -- 保存したバージョンと比較 -- Officeサーバーからエンドポイントを取得 if (urls ~= nil) then if (urls ~= nil) then -- G SuiteのURLのリストを結合する -- URLのリストをフィルター単位に分割する -- FQDNフィルターを削除 -- FQDNフィルターを設定 if (filters ~= nil) then -- コンフィグを保存 err = 0 if (cur_ver == 0) or (err == 1) then rt.sleep(idle_time) |
ご相談・お問い合わせ