RTXのルータを用いて、「transix」網にアクセスする際には、アップデートサーバに通知する「lua」ファイルの作成が必須です。
そこで、作成方法とアップロードする方法をまとめました。
「transix IPv6アドレス通知用」の「lua」ファイルは、指定したインターフェースに新しいIPv6プレフィックスが付与されたとき、アップデートサーバーにIPv6アドレスの更新通知を行うスクリプトになっています。
目次
「lua」ファイルの作成
まずは、「lua」ファイルを作成します。
ファイルは2種類あり、「ひかり電話」を利用しているか、していないかでどちらを使用するか判別します。
- 「ひかり電話を契約していない」⇨「RAプロキシ」
- 「ひかり電話を契約している」⇨「DHCPv6-PDプロキシ」
では、上記の内容を把握した上で、実際の「lua」ファイルを確認してみます。
ひかり電話を契約していない「RAプロキシ」の場合
----------------------------------------
-- 設定値 --
----------------------------------------
-- アップデートサーバーのURL
UPD_SV = "アップデートサーバーのURL"
-- ユーザー名
USERNAME = "ユーザー名"
-- パスワード
PASSWORD = "パスワード"
-- IPIPトンネルを貼るインターフェース名
TUNNEL_IF = "LAN1"
-- WANインターフェース名
WAN_IF = "LAN2"
-- IPv6プレフィックスが追加されたときの
-- SYSLOGパターン
LOG_PTN = "Add%s+IPv6%s+prefix.+%(Lifetime%:%s+%d+%)%s+via%s+" .. TUNNEL_IF .. "%s+by"
-- ステートレスDHCPv6でDNS情報を取得するコマンド
DHCPv6_IR_CMD = "ipv6 " .. string.lower(WAN_IF) .. " dhcp service client ir=on"
-- リトライの間隔 (s)
RETRY_INTVL = 10
-- リトライ回数
RETRY_NUM = 3
-- SYSLOGのレベル
LOG_LEVEL = "info"
-- SYSLOGのプレフィックス
LOG_PFX = "[transix]"
-- 通知失敗時のメッセージ
FAIL_MSG = "アップデートサーバーへの通知に失敗しました。 (リトライ: 残り%d回)"
----------------------------------------
-- SYSLOGを出力する関数 --
----------------------------------------
function logger(msg)
rt.syslog(LOG_LEVEL, string.format("%s %s", LOG_PFX, msg))
end
----------------------------------------
-- メインルーチン --
----------------------------------------
local rtn, count, log, result
local req_t = {}
local res_t
--------------------
-- 初期化
-- HTTPリクエストの準備
req_t.url = string.format("%s?username=%s&password=%s", UPD_SV,
USERNAME, PASSWORD)
req_t.method = "GET"
--------------------
-- 監視
while true do
-- SYSLOGを監視する
rtn = rt.syslogwatch(LOG_PTN)
-- パターンにマッチした
if rtn then
-- リトライ回数をリセット
count = RETRY_NUM
while true do
-- HTTPリクエストを実行
res_t = rt.httprequest(req_t)
if res_t.rtn1 then
-- リクエストに成功
logger("アップデートサーバーへの通知を実行しました。")
-- アップデートの結果をログに出力する
if res_t.code == 200 then
result = "成功"
else
result = "失敗"
end
log = string.format("アップデートに%sしました。(code=%d, body=%s)",
result, res_t.code, res_t.body)
logger(log)
-- ループを抜け、SYSLOGの監視を再開する
break
else
-- リクエストの応答がない場合、DNS情報が取得できていない可能性があるため
-- DNS情報を再取得する
rt.command(DHCPv6_IR_CMD)
end
-- リクエストに失敗
count = count - 1
if count > 0 then
-- (RETRY_INTVL)秒後、リトライ
logger(string.format(FAIL_MSG, count))
rt.sleep(RETRY_INTVL)
else
-- リトライ上限を超えたので諦め、SYSLOGの監視を再開する
logger("アップデートサーバーへの通知に失敗しました。")
break
end
end
end
end
ひかり電話を契約している「DHCPv6-PD」の場合
----------------------------------------
-- 設定値 --
----------------------------------------
-- アップデートサーバーのURL
UPD_SV = "アップデートサーバーのURL"
-- ユーザー名
USERNAME = "ユーザー名"
-- パスワード
PASSWORD = "パスワード"
-- IPIPトンネルを貼るインターフェース名
TUNNEL_IF = "LAN1"
-- IPv6プレフィックスが追加されたときの
-- SYSLOGパターン
LOG_PTN = "Add%s+IPv6%s+prefix.+%(Lifetime%:%s+%d+%)%s+via%s+" .. TUNNEL_IF .. "%s+by"
-- リトライの間隔 (s)
RETRY_INTVL = 10
-- リトライ回数
RETRY_NUM = 3
-- SYSLOGのレベル
LOG_LEVEL = "info"
-- SYSLOGのプレフィックス
LOG_PFX = "[transix]"
-- 通知失敗時のメッセージ
FAIL_MSG = "アップデートサーバーへの通知に失敗しました。 (リトライ: 残り%d回)"
----------------------------------------
-- SYSLOGを出力する関数 --
----------------------------------------
function logger(msg)
rt.syslog(LOG_LEVEL, string.format("%s %s", LOG_PFX, msg))
end
----------------------------------------
-- メインルーチン --
----------------------------------------
local rtn, count, log, result
local req_t = {}
local res_t
--------------------
-- 初期化
-- HTTPリクエストの準備
req_t.url = string.format("%s?username=%s&password=%s", UPD_SV,
USERNAME, PASSWORD)
req_t.method = "GET"
--------------------
-- 監視
while true do
-- SYSLOGを監視する
rtn = rt.syslogwatch(LOG_PTN)
-- パターンにマッチした
if rtn then
-- リトライ回数をリセット
count = RETRY_NUM
while true do
-- HTTPリクエストを実行
res_t = rt.httprequest(req_t)
if res_t.rtn1 then
-- リクエストに成功
logger("アップデートサーバーへの通知を実行しました。")
-- アップデートの結果をログに出力する
if res_t.code == 200 then
result = "成功"
else
result = "失敗"
end
log = string.format("アップデートに%sしました。(code=%d, body=%s)",
result, res_t.code, res_t.body)
logger(log)
-- ループを抜け、SYSLOGの監視を再開する
break
end
-- リクエストに失敗
count = count - 1
if count > 0 then
-- (RETRY_INTVL)秒後、リトライ
logger(string.format(FAIL_MSG, count))
rt.sleep(RETRY_INTVL)
else
-- リトライ上限を超えたので諦め、SYSLOGの監視を再開する
logger("アップデートサーバーへの通知に失敗しました。")
break
end
end
end
end
「lua」ファイルの編集
ファイルは一部修正が必要な箇所があるので、注意してください。
主な変更箇所は以下の通りです。
プロバイダから発行された設定情報シートに明記されているので、「lua」ファイルに反映させた上でファイルを保存します。
「TUNNEL_IF」の項目は、実際に割り当てるインターフェース名に変更してください。
- UPD_SV = “アップデートサーバーのURL”
- USERNAME = “ユーザー名”
- PASSWORD = “パスワード”
- TUNNEL_IF = “LAN1”
修正が完了したら、次のステップに進みます。
「tftp」を使ってアップロード
以下の手順でファイルをRTX本体にアップロードします。
# 作成した「lua」ファイルがある階層に移動します。
cd C:\Users\Administrator\Desktop\
# RTXのIPアドレスを入力し、tftpでアップロードします。(パスワードは設定済みのものを入力してください。)
tftp 192.168.1.1 put update.lua /update.lua/"RTXのパスワード”
以上で、アップロード完了です。
アップロード完了の確認
RTXルータのコンソールから、ファイルがアップロードされているか下記コマンドで確認します。
show file list /