VRRPと併用する冗長構成 : FWX120 コマンド設定

本設定例では、ルーターのL2MSマスター機能・Luaスクリプト機能と、L2スイッチのL2MSスレーブ機能を使用しています。L2MSを使って、ルーターから、スイッチが持つ機能の設定を行います。

ルーターの対応機種は、FWX120です。

L2スイッチの対応機種は、SWX2200-8GSWX2200-24GSWX2200-8PoEです。

L2MSマスター(ルーター)とL2MSスレーブ(L2スイッチ)の対応リビジョンは、技術資料「L2MS」でご確認ください。

図 Luaスクリプト構成図1 図 Luaスクリプト構成図2 図 Luaスクリプト構成図3 図 Luaスクリプト構成図4

FWX120を2台とSWX2200を2台利用したWAN、LAN両方を冗長化する構成です。
SWX2200(1) - Hub間、SWX2200(1) - FWX120(1)間のポートを、Luaスクリプトを使用して監視します。
ポートのダウンを検出した際には、該当するSWX2200-8G(2)のポートを開放し、通信経路を確保します。 また、FWX120(1)のWAN回線が不通となった場合には、FWX120(2)側のバックアップ回線に切り替わります。

本設定例は、SWX2200 - FWX120間を監視するLuaスクリプト例(1)を1つと、SWX2200 - Hub間を監視するLuaスクリプト例(2)をHubごとに計3つ使用します。

光回線に接続するためには、別途ONUが必要です。

対応機種のうち、設定例を掲載している機種は、以下のとおりです。

機種 掲載内容 備考
ルーター FWX120 コマンド設定例
Luaスクリプト例
L2MSマスター機能、
Luaスクリプト機能
L2スイッチ SWX2200-8G SWX2200-24G SWX2200-8PoE L2MSスレーブ機能

FWX120(1)の設定例

LANインターフェースの設定
(LAN1ポートを使用)
ip lan1 address 192.168.100.252/24
lan shutdown lan1 2
ip lan1 vrrp 1 192.168.100.254 priority=200
ip lan1 vrrp shutdown trigger 1 pp 1
WANインターフェースの設定
(LAN2ポートを使用)
pp select 1
pp always-on on
pppoe use lan2
pppoe auto disconnect off
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
ppp ipv6cp use off
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 server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.100.2-192.168.100.100/24 gateway 192.168.100.254
DNSの設定 dns server (ISP1より指定されたDNSサーバーのIPアドレス)
dns private address spoof 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.100.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.100.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-nolog lan1 * * * *
ip policy filter 1110 pass-nolog * * * * 102
ip policy filter 1122 static-pass-nolog * lan1 * * *
ip policy filter 1123 static-pass-nolog * local * * *
ip policy filter 1124 static-pass-log * * 192.168.100.0/24 * http
ip policy filter 1150 pass-nolog * pp1 * * *
ip policy filter 1500 reject-nolog pp* * * * *
ip policy filter 1520 pass-log * lan1 * * 101
ip policy filter 1700 pass-nolog local * * * *
ip policy filter 1710 static-pass-nolog * lan1 * * *
ip policy filter 3000 reject-nolog * * * * *
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
pp select 1
ip pp inbound filter list 1001 1002 1003 1004 1005 1006 1007 1099
L2MSの設定 switch select (SWX2200(1)のMACアドレス)
switch control function set port-use 3 on
switch control function set port-use 4 on
switch control function set port-use 5 on
switch select (SWX2200(2)のMACアドレス)
switch control function set port-use 3 off
switch control function set port-use 4 off
sswitch control function set port-use 5 off
switch control use lan1 on
Luaスクリプトのスケジュール設定 schedule at 1 startup * lua (Luaスクリプト例(1))
schedule at 3 startup * lua (Luaスクリプト例(2) ファイル名1)
schedule at 4 startup * lua (Luaスクリプト例(2) ファイル名2)
schedule at 5 startup * lua (Luaスクリプト例(2) ファイル名3)

FWX120(2)の設定例

LANインターフェースの設定
(LAN1ポートを使用)
ip lan1 address 192.168.100.253/24
ip lan1 vrrp 1 192.168.100.254
ip lan1 vrrp shutdown trigger 1 pp 1
WANインターフェースの設定
(LAN2ポートを使用)
pp select 1
pp always-on on
pppoe use lan2
pppoe auto disconnect off
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
ppp ipv6cp use off
ip pp mtu 1454
ip pp nat descriptor 1
pp enable 1
ip route default gateway pp 1
NATの設定 nat descriptor type 1 masquerade
DNSの設定 dns server (ISP2より指定されたDNSサーバーのIPアドレス)
dns private address spoof 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.100.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.100.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-nolog lan1 * * * *
ip policy filter 1110 pass-nolog * * * * 102
ip policy filter 1122 static-pass-nolog * lan1 * * *
ip policy filter 1123 static-pass-nolog * local * * *
ip policy filter 1124 static-pass-log * * 192.168.100.0/24 * http
ip policy filter 1150 pass-nolog * pp1 * * *
ip policy filter 1500 reject-nolog pp* * * * *
ip policy filter 1520 pass-log * lan1 * * 101
ip policy filter 1700 pass-nolog local * * * *
ip policy filter 1710 static-pass-nolog * lan1 * * *
ip policy filter 3000 reject-nolog * * * * *
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
pp select 1
ip pp inbound filter list 1001 1002 1003 1004 1005 1006 1007 1099

Luaスクリプト例(1)

設定値 -- 出力する SYSLOG のレベル (info, debug, notice)
log_level = "info"
--[[
SWX2200-8GのMACアドレス
mac_sw1にSWX2200(1)のMACアドレス、mac_sw2にSWX2200(2)のMACアドレスを設定
]]
mac_sw1 = "(SWX2200-8G(1)のMACアドレス)"
mac_sw2 = "(SWX2200-8G(2)のMACアドレス)"
メインルーチン

while (true) do
  SW1 = nil
  --FWX120 LAN1 port1 がリンクダウン(SW1 の detect down ログを監視)
  log = "%p" ..mac_sw1.. "%p: detect down"
  rt.syslogwatch(log, 1)

  -- FWX120 LAN1 port2 の shutdown を解除 --
  rt.command("no lan shutdown lan1 2")
  rt.syslog(log_level,"no lan shutdown lan1 2")

  -- SW2 発見ログを監視 --
  log = "%p" .. mac_sw2.. "%p: find switch"
  rt.syslogwatch(log, 1)
  rt.sleep(2)

  --[[
  SW1のMACアドレス検索。発見できなかった場合、SW1のport1ケーブルの切断
  ではなくSW1の電源が切断されていると判断し、SW2のport3,4,5 をリンクアップ
  ]]
  rtn,str = rt.command("show status switching-hub macaddress " ..mac_sw1)
  if (rtn) and (str) then
    port = string.match(str,"port (%d):")
    if (port == nil) then
      SW1="PW-down"
      rtn, str = rt.command("switch select " ..mac_sw2)
      if (rtn) then
        rt.command("switch control function set port-use 3 on")
        rt.syslog(log_level,"SW2 port-use 3 on")
        rt.command("switch control function set port-use 4 on")
        rt.syslog(log_level,"SW2 port-use 4 on")
        rt.command("switch control function set port-use 5 on")
        rt.syslog(log_level,"SW2 port-use 5 on")
      end
    end
  end

  --[[
  FWX120 LAN1 port1 がリンクアップ
   SW1 の電源投入によって復旧した場合 → SW2のport8の復旧ログを監視
   SW1 のport1ケーブルが復旧した場合 → SW1のport1の復旧ログを監視
  ]]
  if (SW1 == "PW-down") then
    log = "%p" ..mac_sw2.. "%p: PORT8 link up"
    rt.syslogwatch(log, 1)
  else
    log = "%p" ..mac_sw1.. "%p: PORT1 link up"
    rt.syslogwatch(log, 1)
  end

  --[[
  ループを防ぐため、上記ログが出たらすぐにSW2とFWX120の設定を初期状態に戻す
  SW1 の電源投入によって復旧した場合、SW2のport3,4,5とFWX120のLAN1 port2を
  リンクダウンさせる
  SW1 のport1ケーブルが復旧した場合、FWX120のLAN1 port2をリンクダウンさせる
  ]]
  if (SW1 == "PW-down") then
    rtn, str = rt.command("switch select" ..mac_sw2)
    if (rtn) then
      rt.command("switch control function set port-use 3 off")
      rt.syslog(log_level,"SW2 port-use 3 off")
      rt.command("switch control function set port-use 4 off")
      rt.syslog(log_level,"SW2 port-use 4 off")
      rt.command("switch control function set port-use 5 off")
      rt.syslog(log_level,"SW2 port-use 5 off")
    end
  end

  rtn, str = rt.command("lan shutdown lan1 2")
  rt.syslog(log_level,"lan shutdown lan1 2")
  rt.sleep(3)
end

Luaスクリプト例(2)

設定値 -- 出力する SYSLOG のレベル (info, debug, notice)
log_level = "info"
--[[
監視するポート(3,4.5のいずれかを指定)
]]
port = "(監視するポート番号)"
--[[
SWX2200のMACアドレス
mac_sw1にSWX2200(1)のMACアドレス、mac_sw2にSWX2200(2)のMACアドレスを設定
]]
mac_sw1 = "SWX2200-8G(1)のMACアドレス"
mac_sw2 = "SWX2200-8G(2)のMACアドレス"
指定したスイッチのポートをUP/DOWNする関数

function port_use(on_off, sw, port, swname)
  rtn, str = rt.command("switch select " ..sw)
  if (rtn) then
    rt.command("switch control function set port-use "..port.." "..on_off)
    rt.syslog(log_level, swname.." port-use "..port.." "..on_off)
  end
end

メインルーチン

while (true) do
  -- SW1 port のdown監視 --
  log = "%p" ..mac_sw1.. "%p: PORT" ..port.. " link down"
  rt.syslogwatch(log, 1)
  rt.sleep(1)

  -- SW2 port をリンクアップ --
  port_use("on", mac_sw2, port, "SW2")

  -- SW1 port のup監視 --
  log = "%p"..mac_sw1.."%p: PORT" ..port.. " link up"
  rt.syslogwatch(log, 1)

  -- SW2 port をリンクダウン --
  port_use("off", mac_sw2, port, "SW2")

  --[[
  上記のSW1 port5 のup 検知が遅れた場合、まれにループが始まりSW2の設定が
  正常にできない場合がある。
  その場合は、SW2の同期処理が終了するまでSW1のポートを閉じてループを回避する。
  ]]
  rtn, array = rt.syslogwatch("sync start", 1, 6)
  rt.sleep(1)
  if (rtn > 0) then
    port_use("off", mac_sw1, port, "SW1")
    d = 0
    while (d < 1) do
      rt.syslogwatch("sync done", 1)
      d = d + 1
    end
    rt.sleep(1)
    port_use("on", mac_sw1, port, "SW1")
  end
end

【ご注意】
本設定例は、設定の参考例を示したもので、動作を保証するものではございません。
ご利用いただく際には、十分に評価・検証を実施してください。