rabbit51

it's since Nov.30 2005
May.29 2014, transferred from broach

NVR-500でDynDNSの登録更新をしてみた

2011-10-16 21:38:16 | NVR500
WZR-HP-G300NHを使用していた時は、DynDNSを使用してDDNSに登録していた。
NVR-500に変更してからは、Netvolante DNSを使用してDDNS利用ができるようサポートされていたため利用を始めた。
DynDNSで使用していたFQDNの方が覚えやすい。
NVR-500でDynDNSに自動登録するためLUAスクリプトを作成してみた。

概ねうまく動いているようだ。
しばらく動作させ様子を見ることにする。

スクリプトは、次の通り

file名=dyndns-update.lua
--[[
Oct.10 '2011 Rabbit51

DynDNSへのIPアップデート
PPPoEで設定されたlocal側のIPアドレスを取得し、登録中のIPアドレスと異なれば
取得したIPアドレスで更新する
登録しようとするIPアドレスが同じであれば更新しない
WatchInterval*UpdateInterval(秒)で設定された期間登録が更新されない場合
強制的にIPアドレスを更新する

]]

--------------------------## 設定値 ##--------------------
-- debug
dbg = false

-- DynDNS user account
username="your dyndns account id"
password="your dyndns account password"
UpFQDN="registerd fqdn"

-- IP取得するPP番号
PPnum=1

-- syslogwatch time 86400/day, max 864000(10days)
-- WatchInterval * UpdateInterval
WatchInterval=86400
UpdateInterval=10

-- DynDNS server address
UpHost="members.dyndns.org"
UpPort="80"
UpIP=""
UpUrl="http://" .. UpHost .. "/nic/update?hostname=" .. UpFQDN .. "&myip=" .. UpIP .. "&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG"

----------------------## 設定値ここまで ##----------------

------------------------------------------------------------
-- 指定されたPPのPPPで取得したlocal IPを返す関数 --
------------------------------------------------------------
function get_local_ip(id)
local rtn, str, ipadr
local cmd = "show status pp " .. tostring(id)
local ptn = "PP IP Address Local:%s+(%d+%.%d+%.%d+%.%d+)"

rtn, str = rt.command(cmd)
if (rtn) and (str) then
ipadr = str:match(ptn)
if (ipadr == nil) then
rtn =false
ipadr = "接続されていません"
end
else
rtn = false
ipadr = cmd .. "コマンド実行失敗\r\n"
end

return rtn, ipadr
end


------------------------------------------------------------
-- IPアドレスが変化したか確認する関数 --
------------------------------------------------------------
function is_new(ip)
local blip
blip=os.getenv("GLOBALIP")
if (blip) then
if ( blip == ip ) then
return false
else
rt.command("set GLOBALIP=" .. ip)
return true
end
else
rt.command("set GLOBALIP=" .. ip)
return true
end
end


------------------------------------------------------------
-- HttpでDynDNSにUpdateする関数 --
------------------------------------------------------------
function Update_DynDNS(ip)
local rtn, resp
UpIP = ip
req_table = {
url = UpUrl,
server_port = UpPort,
method = "GET",
auth_type = "basic",
auth_name = username,
auth_pass = password
}
resp_table = rt.httprequest(req_table)
if ( resp_table.rtn1) then
rt.syslog("info","[LUA] dyndns-update.lua DynDNS Updated IP= " .. ip )
else
rt.syslog("info","[LUA] dyndns-update.lua DynDNS Failed - " .. "\nrtn1-> " .. tostring(resp_table.rtn1) .. "\nrtn2-> " .. tostring(resp_table.rtn2) .. "\nerr-> " .. tostring(resp_table.err) .. "\ncode-> " .. tostring(resp_table.code) .. "\nheader-> " .. tostring(resp_table.header) .. "\nbody-> " .. tostring(resp_table.body) )
end

end


------------------------------------------------------------
-- main --
------------------------------------------------------------
local rtn,str,lip,cnt

cnt=0
rtn,str=get_local_ip(PPnum)
rt.syslog("info","[LUA] dyndns-update.lua Starting up(if=" .. string.format("PP[%02d]:",PPnum) .. str .. ")" )
if (rtn) then
lip=str
if (is_new(lip)) then
if (dbg) then print("-- Update_DynDNS(lip)") else Update_DynDNS(lip) end
end
end

while (true) do
local rtn,str,lip
rtn,str = rt.syslogwatch(string.format("PP%%[%02d%%]",PPnum) .. " PPP/IPCP up%s+%(Local:%s+(%d+%.%d+%.%d+%.%d+)",1,WatchInterval)

if (rtn == 0) then
cnt = cnt + 1
if (dbg) then print("Count= " .. tostring(cnt)) end
if ( cnt == UpdateInterval ) then
cnt = 0
rt.syslog("info","[LUA] dyndns-update.lua DynDNS force update IP=" .. os.getenv("GLOBALIP") )
if (dbg) then
print("Count reach to " .. tostring(UpdateInterval) .. " DynUpdate IP=" .. os.getenv("GLOBALIP"))
else
Update_DynDNS(os.getenv("GLOBALIP"))
end
end
else
lip=string.match(str[rtn],"Local:%s+(%d+%.%d+%.%d+%.%d+)")
rt.syslog("info","[LUA] dyndns-update.lua New Connection(old IP/new IP):(" .. os.getenv("GLOBALIP") .. "/" .. lip .. ")" )
if (is_new(lip)) then
if (dbg) then print("DynDNS Update call in while loop\n") else Update_DynDNS(lip) end
cnt = 0
end
end
end

コメント   この記事についてブログを書く
« WZR-HP-G300NH無線LAN接続PC... | トップ | DynDNS更新処理結果 »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

NVR500」カテゴリの最新記事