これまでFreeBSDのサーバーのcronで実行していたMyDNSのIPv4アドレス更新動作が途絶えていたので,RTX810のluaスクリプトに移植した.
動作は
- syslogからNetVolante DNSの更新を検出したらMyDNSにも更新に行く
- NetVolante DNSの更新が一定時間なくてもMyDNSに更新をする.
2の方は,一定時間更新がないとアカウントを消されてしまうので,そのための対処.基本的なアドレスの変更通知は1の方になる.
以下,そのスクリプト.
-- update_mydns.lua -- polling Netvolante DNS update log with timeout -- parameters for HTTP request http_req = { url = "http://ipv4.mydns.jp/login.html", method = "GET", auth_type = "basic", auth_name = "mydnsxxxxxx", auth_pass = "xxxxxxxxxxx" } -- monitoring eventlog pattern SYSLOG_PATTERN = "%[DDNS%] Update succeeded" SYSLOG_NMATCH = 1 SYSLOG_TIME = 2 * 24 * 60 * 60 -- entry point (main) while true do -- polling netvolante dns update log rtn, str = rt.syslogwatch(SYSLOG_PATTERN, SYSLOG_NMATCH, SYSLOG_TIME) -- http request for update IP address after: -- (1) netvolante dns update log detected -- (2) syslogwatch timer timed out rtn_http = rt.httprequest(http_req) rt.syslog("info", "[LUA][MyDNS] HTTP request for update IP address done") -- logging if rtn_http.code == 200 then if rtn > 0 and str then rt.syslog("info", "[LUA][MyDNS] Update succeeded (Netvolante DNS update detected)") else rt.syslog("info", "[LUA][MyDNS] Update succeeded (Force update)") end else rt.syslog("info", "[LUA][MyDNS] Update failed") end end
これをsftpでRTX810に転送する.ユーザー権限だとファイルの書き込みができず少し悩んだが,通常のユーザー名を指定しつつも,ログインパスワードを管理者パスワードにすれば管理者権限付でログインできることが分かった.
時間間隔は以前と同様2日間隔とするが,cronと違って正確に2日間隔にはならない.が,サーバー側の負荷軽減を考えると少しずれてるくらいの方がいいと思うので,ここは特にこだわらないことにする.
このファイルを / 直下に置いて,実行してみる.
# lua /update_mydns.lua
これでPPPoEを切断してNetvolante DNSの更新をさせてみる.で,以下のようなログが記録された.
2014/01/17 12:10:42: PPPOE[01] PPPoE Connect 2014/01/17 12:10:43: PP[01] PPP/IPCP up (Local: 125.30.x.x, Remote: x.x.x.x) 2014/01/17 12:10:43: [DDNS] netvolante-dns go PP[01] (auto) 2014/01/17 12:10:43: [DDNS] Update succeeded 2014/01/17 12:10:50: [LUA][MyDNS] HTTP request for update IP address done 2014/01/17 12:10:50: [LUA][MyDNS] Update succeeded (Netvolante DNS update detected)
あとは,起動時にスクリプトを実行するように設定して終わり.
schedule at 1 startup * lua /update_mydns.lua