MyDNS更新用luaスクリプト

投稿日:

これまでFreeBSDのサーバーのcronで実行していたMyDNSのIPv4アドレス更新動作が途絶えていたので,RTX810のluaスクリプトに移植した.

動作は

  1. syslogからNetVolante DNSの更新を検出したらMyDNSにも更新に行く
  2. 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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です