スイッチが制御可能な状態か否かをping応答に反映させる

管理番号:YMHSW-3759

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

ルーターの対応機種は、RTX1220RTX1210RTX1200(Rev.10.01.16以降)、RTX830RTX810NVR700WNVR510NVR500FWX120です。

L2スイッチの対応機種は、SWX2322PシリーズSWX2320シリーズSWX2310PシリーズSWX2310シリーズSWX2300シリーズSWX2210PシリーズSWX2210シリーズSWX2200シリーズSWX2110PシリーズSWX2110シリーズSWX2100シリーズです。

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

図 スイッチが制御可能な状態か否かをping応答に反映させる (1) 図 矢印 図 スイッチが制御可能な状態か否かをping応答に反映させる (2)

スイッチが制御可能な状態か否かを、ping応答に反映させるためのLuaスクリプトです。
スイッチ自身は直接pingに応答しませんが、ルーター内部でスイッチに対応付けしたIPアドレスへのpingにルーターが肩代わりで応答します。ルーターからスイッチが見えなくなった場合、pingに応答しなくなります。外部のping監視サーバーは、運用方法を変更することなく、LAN内のスイッチの正常性までを確認できるようになります。

本設定例では、pingを実行するPCは、スイッチが接続されているインターフェースとは別のインターフェースに接続している必要があります。

Luaスクリプトを実行する際は、luaコマンドを使用しLuaスクリプトファイル名を指定してください。
また、スクリプトを停止する際は、terminate luaコマンドを実行してください。

実行例:lua /swx_ping.lua

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

機種 掲載内容 備考
ルーター RTX1220 RTX1210 RTX1200 RTX830 RTX810 NVR700W NVR510 NVR500 FWX120 コマンド設定例
Luaスクリプト例
L2MSマスター機能、
Luaスクリプト機能
L2スイッチ SWX2210P SWX2210 SWX2200 SWX2110P SWX2110 SWX2100 L2MSスレーブ機能

ルーターの設定例

環境変数の設定

set SWX_PING_MAC1=(スイッチ(1)のMACアドレス)
set SWX_PING_IP1=10.0.0.2
set SWX_PING_MAC2=(スイッチ(2)のMACアドレス)
set SWX_PING_IP2=10.0.0.

LANインターフェースの設定
(LAN1ポートを使用)
ip lan1 address 10.0.0.1/24
LANインターフェースの設定
(LAN2ポートを使用)
ip lan2 address 172.16.0.1/24
DHCPの設定 dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 10.0.0.10-10.0.0.191/24
L2MSの設定 switch control use lan1 on

Luaスクリプト例

設定値

-- 監視間隔
intvl = 10

-- 監視対象スイッチ数(最大8)
swx_num = 2

-- setコマンドでの文字
set_mac = "SWX_PING_MAC"
set_ip = "SWX_PING_IP"

-- ログ表示
log_level = "info"
log_pfx = "[LUA_SWX_PING] SWX "

-- 関連コマンド文字列
cmd1 = "console character ascii"
cmd2 = "show status switch control"
cmd3 = "ip loopback"
cmd4 = " address "
mac_ptn = "%x%x:%x%x:%x%x:%x%x:%x%x:%x%x"
ip_ptn = "%d+%.%d+%.%d+%.%d+"

SYSLOGを
出力

function swx_syslog(msg)
  rt.syslog(log_level, log_pfx .. msg)
end

IPアドレスの
初期登録処理

function init_swx_list()
  local t = {}
  local mac, ip
  local set_par

  for i = 1, swx_num do
    set_par = set_mac .. i
    mac = os.getenv(set_par)
    set_par = set_ip .. i
    ip = os.getenv(set_par)
    if mac and ip then
      table.insert(t, {mac = mac, ip = ip, stat = false})
    end
  end

  -- 設定無し
  if #t < 1 then
    return false, "no set param."
  end

  -- 管理テーブルを返す
  return t
end

メインルーチン

local swx_inf, rtn, str

-- IPアドレスの初期登録処理
swx_inf, str = init_swx_list()

-- 管理テーブル登録失敗
assert(swx_inf, str)

-- スイッチ制御状態の定期監視
while true do
  -- 状態を確認 --
  rt.command(cmd1)
  rtn, str = rt.command(cmd2)

  if rtn and str then
    for i, t in ipairs(swx_inf) do
      if str:match(t.mac) then
        if not t.stat then
          -- 認識できる状態に変化した場合 --
          rt.command(cmd3 .. i .. cmd4 .. t.ip)
          t.stat = true
          swx_syslog("Found.")
          swx_syslog("Adds the IP " .. t.ip)
        end
      else
        if t.stat then
          -- 認識できない状態に変化した場合 --
          rt.command("no " .. cmd3 .. i .. cmd4)
          t.stat = false
          swx_syslog("Detect down...")
          swx_syslog("Deletes the IP " .. t.ip)
        end
      end
    end
  end

  -- 一定時間待つ
  rt.sleep(intvl)
end

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

メール

ご相談・お問い合わせ