接続ホスト履歴出力

管理番号:YMHSW-3943

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

図 接続ホスト履歴出力

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

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

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

機種 掲載内容 備考
ルーター RTX1220 RTX1210 RTX1200 RTX830 RTX810 NVR700W NVR510 NVR500 FWX120 コマンド設定例
Luaスクリプト例
L2MSマスター機能、
Luaスクリプト機能
L2スイッチ SWX2210P SWX2210 SWX2200 SWX2110P SWX2110 SWX2100 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
L2MSの設定 switch control use lan1 on
Luaスクリプトのスケジュール設定 schedule at 1 startup * lua /swx_lua_host_record.lua

Luaスクリプト例

設定値 -- 履歴を保存するファイル名(絶対パスで指定)
filename = "usb1:/host_record.txt"
-- 出力する SYSLOG のレベル (info, debug, notice)
log_level = "info"
-- 検出したい 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

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

メール

ご相談・お問い合わせ