--[[ ●v6Direct用 緊急時経路再設定URL 呼び出し サンプルスクリプト 本スクリプトは、RTX1210 Rev.14.01.41 のWebGUI設定で「v6プラス」固定IPを 設定した際、自動生成されたLuaスクリプトをベースに外部ファイル化したものです。 FWアップデート後に生成されるLuaスクリプトが変更になる場合があるようなので ルータ停止無く、Luaスクリプトを変更したい場合などは最新のLuaスクリプトを 外部ファイル化して適用するのが良いかもしれません。 【 緊急時経路再設定URL 呼び出し用設定 】 ipv6 lan1 prefix change log on lan linkup send-wait-time lan2 5 schedule at 1 startup * lua /lua/v6direct-up.txt 上記「lan2」部分はインターネット接続側回線のLANとして下さい。 ---------------------------------------------------------------------------- 以下、オープンサーキット v6Direct 動作確認用 2022.12.24 Ver.3.00 オープンサーキット動作確認版 実際にはIPv6プレフィクスが変化することはほとんど無いため ルータ再起動が出来ない場合は、シリアルコーンソール ログインをトリガーとしてURL呼び出し動作の確認を お勧めします。 また、本番設定にした後、ルータを再起動したときも起動時に IPv6プレフィクス変化を検出して動作するため、再起動が可能 な場合は、再起動後の正常動作を確認頂く事をお勧めします。 シリアルログインをトリガーとしてURL呼び出し動作させる場合 88行目のLOG_PTN を有効にするため先頭のコメントを表す 「--」を削除して動作確認を行って下さい。 再起動が可能な場合は、シリアルログイントリガーでの動作 確認は不要です。 通知の「緊急時経路再設定URL」をもとに 下記の様に変更して利用して下さい。 74行目 UPD_SV (「http」ではじまり、「?」の前までのURL) 77行目 USERNAME (「user=」の次から、「&」の前まで) 80行目 PASSWORD (「pass=」の次から最後まで) 2023.03.30 Ver.3.01 IPv6 DNS取得失敗発生時の取得リトライ機能追加 RTX1210 の場合は、Rev.14.01.41 以前の場合、 特定の条件の時、回線側からIPv6 DNS取得失敗となり その後名前解決ができない状態が継続する問題の対処版 86行目 はIPv6 DNS取得するLANを指定してください。 LAN2,LAN3など ]] ---------------------------------------- -- 設定値 -- ---------------------------------------- -- アップデートサーバーの URL UPD_SV = "緊急時経路再設定URLから設定して下さい" -- ユーザー名 USERNAME = "緊急時経路再設定URLから設定して下さい" -- パスワード PASSWORD = "緊急時経路再設定URLから設定して下さい" -- IPv6 アドレスを設定するインターフェース名 WAN_IF = "LAN1" -- IPv6 DNS取得側インターフェース名 DHCPv6_IF = "LAN2" -- 本番動作用 LOG_PTN = "Add%s+IPv6%s+prefix.+%(Lifetime%:%s+%d+%)%s+via%s+" .. WAN_IF .. "%s+by" -- テスト動作用 -- LOG_PTN = "Login succeeded for Serial" -- SYSLOGのレベル LOG_LEVEL = "info" -- SYSLOGのプレフィックス LOG_PFX = "[v6plus]" -- 通知失敗時のメッセージ FAIL_MSG = "Failed to notify IPv6 address to the update server. (remaining retry: %d time(s))" DHCPv6_IR_CMD = "ipv6 " .. string.lower(DHCPv6_IF) .. " dhcp service client ir=on" ---------------------------------------- -- 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?user=%s&pass=%s", UPD_SV, USERNAME, PASSWORD) req_t.method = "GET" -------------------- -- 監視 while true do rtn = rt.syslogwatch(LOG_PTN) if rtn then count = 3 while true do res_t = rt.httprequest(req_t) if res_t.rtn1 then logger("Notified IPv6 address to the update server.") if res_t.code == 200 then result = "Succeeded" else result = "Failed" end log = string.format("%s to update IPv6 address. (code=%d, body=%s)", result, res_t.code, res_t.body) logger(log) break else log = string.format("%s RETRY", DHCPv6_IR_CMD) logger(log) rt.command(DHCPv6_IR_CMD) end count = count - 1 if count > 0 then logger(string.format(FAIL_MSG, count)) rt.sleep(10) else logger("Failed to notify IPv6 address to the update server.") break end end end end