Luaスクリプト導入手順マニュアル

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

Luaスクリプト実行手順

Luaスクリプトを導入する一連の流れをサンプルのLuaスクリプトを使用して説明します。

はじめに

本導入手順の説明では、ルーターの設定は初期状態とします。
説明に使用するサンプルのLuaスクリプトは、ルーターのDHCPサーバー機能が動作していることが必要です。

サンプルのLuaスクリプトでは、次の処理を行います。

  1. DHCP機能によって出力されるSYSLOGを監視します。
  2. SYSLOGを検出した際、その内容から当該ホストが接続されているルーターのポートを割り出します。
  3. 検出したSYSLOGに 2. で割り出したポート番号を付加したSYSLOGを出力します。

1.LuaスクリプトをホームページからPCにダウンロードする

1-1.LuaスクリプトをホームページからPCにダウンロードします。
サンプルのLuaスクリプト

1-2.保存を選択し、LuaスクリプトをPCに保存します。

1-3.必要に応じてLuaスクリプトに記述されている設定値を変更します。

本導入手順では設定値を変更しません。

各スクリプトの★がついている設定値は、変更することができます。
必要に応じて、メモ帳などのテキストエディターを使用してLuaスクリプトを開き、設定値を書き換えて保存します。

2.LuaスクリプトをPCからルーターにコピーする

ホームページからPCにダウンロードして保存したLuaスクリプトを、ルーターにコピーします。

ファイルをPCからルーターにコピーするために、USBメモリを使用してコンソールコマンドを利用する方法を説明します。

この方法の他に、TFTPを使用してPCからルーターにファイルをコピーすることもできます。
そちらの方法については、参考資料をご参照ください。
技術資料「RTFS」-「詳細」-「tftpを用いたファイル転送」

2-1.PCにUSBメモリを接続して、ダウンロードしたLuaスクリプトをUSBメモリにコピーします。

2-2.USBメモリをPCから取り外し、ルーターに接続します。
ルーターのUSBランプが点灯します。

2-3.ルーターコンソールを開きます。

[解説]
ルーターコンソールはシリアルケーブルやtelnetで接続して使用します。
使用方法については取扱説明書をご参照ください。

2-4.管理者権限でログインし、コマンドでルーターにコピーします。
copyコマンドを使用します

copy (コピー元のファイル) (コピー先のファイル)

ファイルを指定するパスとして相対パスは利用できません。絶対パスを使用してください。

USBメモリのルートディレクトリーからルーターのルートディレクトリーにLuaスクリプトをコピーする場合:

[ルーターコンソール]
# copy usb1:/dhcp_log_watch.lua /dhcp_log_watch.lua
#
[解説]
copyコマンドの詳細はこちらをご参照ください。
ファイル名を変更する場合は適宜合わせてください。
USBメモリの代わりにmicroSDメモリカードを使用することもできます。
microSDメモリカードを使用する場合は「usb1:」に代えて「sd1:」とします。

2-5.Luaスクリプトがルーターに正しくコピーされたことをコマンドで確認します。
show file listコマンドを使用します。

[ルーターコンソール]
# show file list /
2011/03/22 17:46:46 2033 dhcp_log_watch.lua
#
[解説]
show file listコマンドの詳細はこちらをご参照ください。

3.ルーターでLuaスクリプトを実行する

3-1.コピーしたLuaスクリプトをコマンドで実行します。
luaコマンドを使用します。

lua (Luaスクリプト名)

Luaスクリプト名は絶対パスで指定してください。

ルーターのルートディレクトリーにあるLuaスクリプトを実行する場合:

[ルーターコンソール]
# lua /dhcp_log_watch.lua
#
[解説]
luaコマンドの詳細はこちらをご参照ください。
ルーターの起動時からLuaスクリプトを実行させておきたい場合は、scheduleコマンドを利用できます。
例:schedule at 1 startup * lua /dhcp_log_watch.lua

3-2.Luaスクリプトの実行状況を確認します。
show status luaコマンドを使用します。

[ルーターコンソール]
# show status lua
Luaライブラリバージョン: Lua 5.1.4
Luaスクリプト機能バージョン: 1.03

[running]
LuaタスクID (状態): 1 (WATCH)
走行トリガー: 'lua' コマンド
コマンドライン: lua /dhcp_log_watch.lua
スクリプトファイル: /dhcp_log_watch.lua
監視文字列: "%[DHCPD%]"
開始日時: 2011/03/23 15:21:30
経過時間: 6秒

[history]
過去の走行履歴はありません
#
#

[解説]
Luaスクリプトが正常に実行されていれば、上記のような表示となります。
もし上記の表示と異なる内容が表示されている場合には、次の項目からのLuaスクリプトが実行できないを確認し、問題の解決を行ってください。
show status luaコマンドの詳細はこちらをご参照ください。

3-3.Luaスクリプトの動作を確認します。
サンプルのLuaスクリプトは、実行結果をSYSLOGに出力します。
動作を確認するために、SYSLOGを確認します。

  1. ルーターのLAN1にPCを接続してください。PCはDHCPサーバーからIPアドレスを取得できるように設定しておく必要があります。
  2. PCがアドレスを取得した後、SYSLOGを確認し、Luaスクリプトの実行結果を確認します。
    show logコマンドを使用します。
    Luaスクリプトが出力する文字列"Host detect"で絞り込むことで、Luaスクリプトの実行結果のログだけを表示することができます。
[ルーターコンソール]
# show log | grep "Host detect"
Searching ...
2011/03/24 14:32:19: [Lua] Host detect 2011/03/24 14:32:18: [DHCPD] LAN1(port1)
Allocates 192.168.100.3: 00:25:64:68:ee:15 at LAN1 : port 1
[解説]
外部メモリへのリダイレクト機能を使うと、実行結果を外部メモリのファイルに出力することができます。

以上で導入手順は完了です。

ホームページで掲載している他のLuaスクリプトについても、同じ手順で実行できます。 なお、設定例によって、Luaスクリプト以外にもファイルのコピーが必要な場合があります。 ファイルのコピー方法は、Luaスクリプトのコピー方法と同じです。詳細は各スクリプトの説明をご参照ください。

Luaスクリプトが実行できない

Luaスクリプトが実行できない、いくつかのパターンを掲載します。
正しく動作していない場合、まずshow logコマンドでluaに関するログを確認してください。

luaコマンドで指定したファイルまたはディレクトリーが間違っている

# lua /test.lua
#
# show log
2011/03/23 15:41:06: lua: cannot open /test.lua: No such file or directory
#
#
[解説]
指定したLuaスクリプトファイル名またはディレクトリーが見当たらないためエラーが発生しています。
指定したファイル名およびディレクトリーが正しいことを確認してください。

設定値が間違っている

<ルーターコンソール>
# lua /dhcp_log_watch.lua
#
# show status lua running
[running]
LuaタスクID (状態): 1 (WATCH)
走行トリガー: 'lua' コマンド
コマンドライン: lua /dhcp_log_watch.lua
スクリプトファイル: /dhcp_log_watch.lua
監視文字列: "%[DHCPD%]"
開始日時: 2011/03/23 19:08:17
経過時間: 12秒
#
#
# show log
2011/03/23 19:09:06: LAN1: PORT1 link up (100BASE-TX Full Duplex)
2011/03/23 19:09:13: [DHCPD] LAN1(port1) Allocates 192.168.100.3: 00:25:64:68:e
e:15
2011/03/23 19:09:13: lua: /dhcp_log_watch.lua:82: 'rt.syslog': argument #1
value is invalid.
#

<Luaスクリプト>
82行目
rt.syslog(log_level, "[Lua] Host detect" .. buf)

[解説]
設定値"log_level"の値が間違っているため、エラーが発生しています。
SYSLOGに、Luaスクリプトの82行目の"rt.syslog"の1つ目の値が無効な値のためエラーが発生したことを出力しています。
"log_level"の設定値を確認し、修正してください。

構成が間違っている

[解説]
ホームページで掲載しているLuaスクリプトの中には、掲載している「構成」と「設定」でだけ動作するものが含まれています。この場合、LANケーブルの接続ポート番号まで合わせる必要があります。もう一度、設定、構成を確認してください。

設定例

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

図 構成図

本手順で利用したLuaスクリプトを使用する設定例です。

LANネットワークに接続されたホストの利用状況を履歴としてSYSLOGに出力し、管理することができます。DHCPのSYSLOGを監視し、PCが接続されているポート番号をSYSLOGに出力します。

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

機種 掲載内容 備考
RTX1300 RTX1220 RTX1210 RTX1200 RTX830 RTX810 NVR700W NVR510 NVR500 FWX120 コマンド設定例
Luaスクリプト例
Luaスクリプト機能

ルーターの設定例

LANインターフェースの設定
(LAN1ポートを使用)
ip lan1 address 192.168.100.1/24
LDHCPの設定 dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.100.2-192.168.100.191/24

Luaスクリプト例

設定値 -- 検出したい SYSLOG の文字列パターン
ptn = "%[DHCPD%]"
-- MACアドレス検出の文字列パターン
mac_ptn = "%x%x:%x%x:%x%x:%x%x:%x%x:%x%x"
-- 出力するSYSLOGのレベル(info, debug, notice)
log_level = "info"
ホスト検索

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"
  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
  return route, port
end

メインルーチン

local rtn, str
local buf

while (true) do
  rtn, str = rt.syslogwatch(ptn)
  mac = string.match(str[1], mac_ptn)
  if (mac) then
    route, port = search_host(mac)
    if (route) then
      buf = str[1]
      buf = buf .. " at " .. route
      if (port) then
        buf = buf .. " : port " .. port
      end
      rt.syslog(log_level, "[Lua] Host detect" .. buf)
    end
  end
end

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

メール

ご相談・お問い合わせ