バックアップ動作を監視する

管理番号:YMHRT-4596 
(最終更新日: 2023/7/26)

本設定例では、Luaスクリプト機能とIPsecトンネル機能を使用しています。

Luaスクリプト機能の対応機種は、RTX5000RTX3510RTX3500RTX1300RTX1220RTX1210RTX1200(Rev.10.01.16以降)、RTX830RTX810NVR700WNVR510NVR500FWX120SRT100(Rev.10.00.52以降)、vRXです。

IPsecトンネル機能の対応機種は、RTX5000RTX3510RTX3500RTX1300RTX1220RTX1210RTX1200RTX830RTX810NVR700WFWX120SRT100vRXです。

図 バックアップ動作を監視する:正常時 下矢印:障害発生 図 バックアップ動作を監視する:バックアップ時 下矢印:復旧 図 バックアップ動作を監視する:メイン回線に復帰時

VPNのバックアップ動作を監視し、バックアップ回線への切り替え、およびメイン回線への復帰を管理者へメールで通知するLuaスクリプトです。
トンネルバックアップ、またはネットワークバックアップについて、バックアップ動作の際に出力されるログをLuaスクリプトで監視しています。

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

機種 掲載内容 備考
RTX5000 RTX3510 RTX3500 RTX1300 RTX1220 RTX1210 RTX1200 ルーター(1) トンネルバックアップの設定例
ルーター(2) ネットワークバックアップの設定例
Luaスクリプト例
Luaスクリプト機能、
IPsecトンネル機能

ルーター(1) トンネルバックアップの設定例

ルーターの名前の設定 set ROUTER_NAME=(ルーターの名前)
ゲートウェイの設定 ip route (グローバルアドレス3) gateway pp 1
ip route (グローバルアドレス4) gateway pp 2
ip route 172.16.1.0/24 gateway tunnel 1
LANインターフェースの設定
(LAN1ポートを使用)
ip lan1 address 172.16.100.1/24
WANインターフェースの設定
(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 msext on
ppp ccp type none
ip pp address (グローバルアドレス1)
ip pp nat descriptor 1
pp enable 1
WANインターフェースの設定
(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 msext on
ppp ccp type none
ip pp address (グローバルアドレス2)
ip pp nat descriptor 2
pp enable 2
VPN(IPsec)の設定
(主系)
tunnel select 1
ipsec tunnel 101
ipsec sa policy 101 1 esp aes-cbc sha-hmac
ipsec ike always-on 1 on
ipsec ike keepalive use 1 on
ipsec ike local address 1 172.16.100.1
ipsec ike pre-shared-key 1 text (パスワード1)
ipsec ike remote address 1 (グローバルアドレス3)
tunnel backup tunnel 2
tunnel enable 1
VPN(IPsec)の設定
(従系)
tunnel select 2
ipsec tunnel 102
ipsec sa policy 102 2 esp aes-cbc sha-hmac
ipsec ike always-on 2 on
ipsec ike keepalive use 2 on
ipsec ike local address 1 172.16.100.1
ipsec ike pre-shared-key 2 text (パスワード2)
ipsec ike remote address 2 (グローバルアドレス4)
tunnel enable 2
VPN(IPsec)の設定
(共通項目)
ipsec auto refresh on
NATの設定 nat descriptor type 1 masquerade
nat descriptor address outer 1 (グローバルアドレス1)
nat descriptor masquerade static 1 1 172.16.100.1 udp 500 # 注釈1
nat descriptor masquerade static 1 2 172.16.100.1 esp # 注釈1
nat descriptor type 2 masquerade
nat descriptor address outer 2 (グローバルアドレス2)
nat descriptor masquerade static 2 1 172.16.100.1 udp 500 # 注釈1
nat descriptor masquerade static 2 2 172.16.100.1 esp # 注釈1
DHCPの設定 dhcp service server
dhcp scope 1 172.16.100.2-172.16.100.100/24
Luaスクリプトの
スケジュール設定
schedule at 1 startup * lua (Luaスクリプトファイル名)

ルーター(1) ネットワークバックアップの設定例

ルーターの名前の設定 set ROUTER_NAME=(ルーターの名前)
ゲートウェイの設定 ip route (グローバルアドレス3) gateway pp 1
ip route (グローバルアドレス4) gateway pp 2
ip route 172.16.1.0/24 gateway tunnel 1 keepalive 1 gateway tunnel 2 weight 0
IPキープアライブの設定 ip keepalive 1 icmp-echo 10 6 (グローバルアドレス3) log=on
LANインターフェースの設定
(LAN1ポートを使用)
ip lan1 address 172.16.100.1/24
WANインターフェースの設定
(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 msext on
ppp ccp type none
ip pp address (グローバルアドレス1)
ip pp nat descriptor 1
pp enable 1
WANインターフェースの設定
(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 msext on
ppp ccp type none
ip pp address (グローバルアドレス2)
ip pp nat descriptor 2
pp enable 2
VPN(IPsec)の設定
(主系)
tunnel select 1
ipsec tunnel 101
ipsec sa policy 101 1 esp aes-cbc sha-hmac
ipsec ike always-on 1 on
ipsec ike keepalive use 1 on
ipsec ike local address 1 172.16.100.1
ipsec ike pre-shared-key 1 text (パスワード1)
ipsec ike remote address 1 (グローバルアドレス3)
tunnel enable 1
VPN(IPsec)の設定
(従系)
tunnel select 2
ipsec tunnel 102
ipsec sa policy 102 2 esp aes-cbc sha-hmac
ipsec ike always-on 2 on
ipsec ike keepalive use 2 on
ipsec ike local address 1 172.16.100.1
ipsec ike pre-shared-key 2 text (パスワード2)
ipsec ike remote address 2 (グローバルアドレス4)
tunnel enable 2
VPN(IPsec)の設定
(共通項目)
ipsec auto refresh on
NATの設定 nat descriptor type 1 masquerade
nat descriptor address outer 1 (グローバルアドレス1)
nat descriptor masquerade static 1 1 172.16.100.1 udp 500 # 注釈1
nat descriptor masquerade static 1 2 172.16.100.1 esp # 注釈1
nat descriptor type 2 masquerade
nat descriptor address outer 2 (グローバルアドレス2)
nat descriptor masquerade static 2 1 172.16.100.1 udp 500 # 注釈1
nat descriptor masquerade static 2 2 172.16.100.1 esp # 注釈1
DHCPの設定 dhcp service server
dhcp scope 1 172.16.100.2-172.16.100.100/24
Luaスクリプトの
スケジュール設定
schedule at 1 startup * lua (Luaスクリプトファイル名)

ルーター(2)の設定例

ゲートウェイの設定 ip route (グローバルアドレス1) gateway pp 1
ip route 172.16.100.0/24 gateway tunnel 1
LANインターフェースの設定
(LAN1ポートを使用)
ip lan1 address 172.16.1.1/24
WANインターフェースの設定
(LAN2ポートを使用)
pp select 1
pp always-on on
pppoe use lan2
pp auth accept pap chap
pp auth myname (ISP3に接続するID) (ISP3に接続するパスワード)
ppp lcp mru on 1454
ppp ipcp msext on
ppp ccp type none
ip pp address (グローバルアドレス3)
ip pp nat descriptor 1
pp enable 1
VPN(IPsec)の設定 tunnel select 1
ipsec tunnel 101
ipsec sa policy 101 1 esp aes-cbc sha-hmac
ipsec ike keepalive use 1 on
ipsec ike local address 1 172.16.1.1
ipsec ike pre-shared-key 1 text (パスワード1)
ipsec ike remote address 1 (グローバルアドレス1)
tunnel backup lan1 172.16.1.2
tunnel enable 1
VPN(IPsec)の設定
(共通項目)
ipsec auto refresh on
NATの設定 nat descriptor type 1 masquerade
nat descriptor address outer 1 (グローバルアドレス3)
nat descriptor masquerade static 1 1 172.16.1.1 udp 500 # 注釈1
nat descriptor masquerade static 1 2 172.16.1.1 esp # 注釈1
DHCPの設定 dhcp service server
dhcp scope 1 172.16.1.11-172.16.1.100/24

ルーター(3)の設定例

ゲートウェイの設定 ip route (グローバルアドレス2) gateway pp 1
ip route 172.16.100.0/24 gateway tunnel 1
LANインターフェースの設定
(LAN1ポートを使用)
ip lan1 address 172.16.1.2/24
WANインターフェースの設定
(LAN2ポートを使用)
pp select 1
pp always-on on
pppoe use lan2
pp auth accept pap chap
pp auth myname (ISP4に接続するID) (ISP4に接続するパスワード)
ppp lcp mru on 1454
ppp ipcp msext on
ppp ccp type none
ip pp address (グローバルアドレス4)
ip pp nat descriptor 1
pp enable 1
VPN(IPsec)の設定 tunnel select 1
ipsec tunnel 101
ipsec sa policy 101 1 esp aes-cbc sha-hmac
ipsec ike keepalive use 1 on
ipsec ike local address 1 172.16.1.2
ipsec ike pre-shared-key 1 text (パスワード2)
ipsec ike remote address 1 (グローバルアドレス2)
tunnel enable 1
VPN(IPsec)の設定
(共通項目)
ipsec auto refresh on
NATの設定 nat descriptor type 1 masquerade
nat descriptor address outer 1 (グローバルアドレス4)
nat descriptor masquerade static 1 1 172.16.1.2 udp 500 # 注釈1
nat descriptor masquerade static 1 2 172.16.1.2 esp # 注釈1

Luaスクリプト例

設定値

-- バックアップに切り替え/切り戻りを検出するパターンを選択(1 - 3)
-- 1 ... トンネルバックアップで出力されるログ
-- 2 ... ip keepalive コマンドの実行結果ログ
-- 3 ... ip route change log=on で出力されるログ (# 注釈2)
log_ptn = (ログパターン)

-- バックアップに切り替わった時に通知するshow系コマンドをカンマで区切って列挙する
cmd_switch_tbl = {
 "(show系コマンド1)",
 "(show系コマンド2)"
}

-- メインに復帰した時に通知するshow系コマンドをカンマで区切って列挙する
cmd_recover_tbl = {
 "(show系コマンド1)",
 "(show系コマンド2)"
}

-- メールの設定
mail_tbl = {
 smtp_address = "(SMTPサーバーのアドレス)",
 from = "(送信元メールアドレス)",
 to = "(宛先メールアドレス)"
}

-- メールの送信に失敗した時に出力する SYSLOG のレベル(info, debug, notice)
log_level = "(SYSLOGレベル)"

コマンドの実行結果を出力する関数

function exec_command(cmd)
 local rtn, str

 rtn, str = rt.command(cmd)
 if (not rtn) or (not str) then
  str = "実行失敗\r\n"
 end

 return rtn, string.format("# %s\r\n%s\r\n", cmd, str)
end

設定された環境変数
"ROUTER_NAME"を取得する関数

function router_name()
 local cmd = "show config"
 local ptn = "ROUTER_NAME=(%w+)"
 local rtn, str, name

 rtn, str = rt.command(cmd)
 if (rtn) and (str) then
  name = str:match(ptn)
 end

 return name
end

現在の日時を取得する関数

function time_stamp()
 local t

 t = os.date("*t")
 return string.format("%d/%02d/%02d %02d:%02d:%02d",
  t.year, t.month, t.day, t.hour, t.min, t.sec)
end

メインルーチン

local rtn, str, rt_name

-- ログの中で検出したい文字列
-- バックアップに切り替わったログ
local ptn_switch_tbl = {
 "TUNNEL%[1%]%: switched to backup",
 "%[KEEPALIVE%]%s+1%: unreachable",
 "Change IP route 172%.16%.1%.0/24 via TUNNEL%[2%] by Static"
}
-- メインに戻ったログ
local ptn_recover_tbl = {
 "TUNNEL%[1%]%: recovered from backup",
 "%[KEEPALIVE%]%s+1%: reachable",
 "Change IP route 172%.16%.1%.0/24 via TUNNEL%[1%] TUNNEL%[2%] by Static"
}

rt_name = router_name()
assert(rt_name, "環境変数 \"ROUTER_NAME\" を設定してください。")

while (true) do
 rtn, str = rt.syslogwatch(ptn_switch_tbl[log_ptn])
 if (rtn) and (str) then
  mail_tbl.text = "回線をバックアップに切り替えました。\r\n\r\nルーターの識別名: "
  mail_tbl.text = mail_tbl.text .. rt_name .. "\r\n\r\n"

  for i, cmd in ipairs(cmd_switch_tbl) do
   rtn, str = exec_command(cmd)
   mail_tbl.text = mail_tbl.text .. str
  end

  mail_tbl.subject = string.format("switched to backup (%s)", time_stamp())
  rtn = rt.mail(mail_tbl)
  if (not rtn) then
   rt.syslog(log_level, "failed to send mail. (Luaスクリプトファイル名)")
  end
 end

 rtn, str = rt.syslogwatch(ptn_recover_tbl[log_ptn])
 if (rtn) and (str) then
  mail_tbl.text = "回線をメインに戻しました。\r\n\r\nルーターの識別名: "
  mail_tbl.text = mail_tbl.text .. rt_name .. "\r\n\r\n"

  for i, cmd in ipairs(cmd_recover_tbl) do
   rtn, str = exec_command(cmd)
   mail_tbl.text = mail_tbl.text .. str
  end

  mail_tbl.subject = string.format("recovered from backup (%s)", time_stamp())
  rtn = rt.mail(mail_tbl)
  if (not rtn) then
   rt.syslog(log_level, "failed to send mail. (Luaスクリプトファイル名)")
  end
 end
end

[注釈の説明]

注釈1:
VPN(IPsec)に関係するパケットを通過させる設定です。

注釈2:
パターン3を使用する場合は、ルーター(1)の設定に以下のコマンドを追加してください。
ip route change log on

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

メール

ご相談・お問い合わせ