接続ホスト履歴出力

本設定例では、ルーターの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」でご確認ください。

図 接続ホスト履歴出力

LANネットワークに所属するホストの利用状況を履歴ファイルに出力する設定例です。
スイッチに接続されたホストに対するDHCPのSYSLOGを監視し、検出した際にホストが接続されているスイッチのポート番号と該当のログを指定のファイルに出力します。

本設定例は、ルーター起動時にLuaスクリプトを実行します。設定が完了したら、ルーターを再起動してください。

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

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

RTX1210 RTX1200 RTX810 NVR700W NVR510 NVR500 FWX120

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

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

L2スイッチ

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

L2MSスレーブ機能

LANインターフェースの設定
(LAN1ポートを使用)

ip lan1 address 192.168.100.1/24

DHCPの設定

dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.100.2-192.168.100.191/24

スイッチの設定

switch control use lan1 on

Luaスクリプトのスケジュール設定

schedule at 1 startup * lua /swx_lua_host_record.lua

設定値

-- 履歴を保存するファイル名(絶対パスで指定)
filename = "usb1:/host_record.txt"
-- 出力する SYSLOG のレベル (info, debug, notice)
log_level = "debug"
-- 検出したい SYSLOG の文字列パターン
ptn = "%[DHCPD%]"
-- MACアドレス検出の文字列パターン
mac_ptn = "%x%x:%x%x:%x%x:%x%x:%x%x:%x%x"

ホスト検索

function search_host(mac)
  sw_route = nil
  route = nil
  port = nil

  rtn, str = rt.command("show status switching-hub macaddress " .. mac)
  port = string.match(str, "port (%d):")
  if (port) then
    route = "LAN1:" .. port
  else
    rtn, str = rt.command("show arp lan2")
    if (string.match(str, mac)) then
      route = "LAN2"
    else
      rtn, str = rt.command("show arp lan3")
      if (string.match(str, mac)) then
        route = "LAN3"
      end
    end
  end

  if (not route) then
    return
  end

  while true do
    rtn, str = rt.command("switch control function get status-macaddress-addr " ..
                   mac .." " .. route)
    if (rtn) and (str ~= "0 entry\r\n") then
      port = string.match(str, "(%d+)")
      sw_route = route
      route = route .."-" ..port
    else
      break
    end
  end
  return sw_route, port
end

メインルーチン

local rtn, str
local fhs, estr, ecode
local buf

while (true) do
  rtn, str = rt.syslogwatch(ptn)
  mac = string.match(str[1], mac_ptn)
  if (mac) then
    sw_route, port = search_host(mac)
    if (sw_route) and (port) then
      fh, estr, ecode = io.open(filename, "a")
      if (not fh) then
        rt.syslog(log_level, "file open error (" .. estr ..")")
      else
        buf = str[1]
        rtn, str = rt.command("switch control function get system-name " ..
                       sw_route)
        name = string.match(str, "(.-)\r\n")
        if (name) then
          buf = buf .. " at " .. name
        else
          buf = buf .. " at " .. sw_route
        end
        buf = buf .. " : port " .. port
        buf = buf .. "\r\n"
        fh:write(buf)
        fh:flush()
        fh:close()
      end
    end
  end
end

【ご注意】

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

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