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

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

ルーターの対応機種は、RTX1210RTX1200(Open in new windowRev.10.01.16以降)、RTX810NVR700WNVR510NVR500
FWX120です。

L2スイッチの対応機種は、SWX2300-8GSWX2300-16GSWX2300-24GSWX2200-8GSWX2200-24G
SWX2200-8PoESWX2100-8GSWX2100-16GSWX2100-24GSWX2100-5PoESWX2100-10PoEです。

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

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

図 矢印

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

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

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

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

実行例:lua /swx_ping.lua

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

機種 掲載内容 備考
ルーター

RTX1210 RTX1200 RTX810 NVR700W NVR510 NVR500 FWX120

コマンド設定例
Luaスクリプト例

L2MSコントローラー機能、
Luaスクリプト機能

L2スイッチ

SWX2200-8G SWX2200-24G SWX2200-8PoE SWX2100-8G SWX2100-16G

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.3

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

スイッチの設定

switch control use lan1 on

設定値

-- 監視間隔
intvl = 10

-- 監視対象SWX2200数(最大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

【ご注意】

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

ページトップへ戻るReturn to Top