IPv6のDDNS更新用Luaスクリプト
フレッツ光でIPoEを使ったIPv6環境で、IPv6アドレスをDDNSを使って名前解決させるLuaスクリプトです。
フレッツ光ではv6オプションのネーム機能でNGN内では名前解決はできます。ただ配布されるIPv6アドレスが半固定の為にIPv6アドレスが変更になる可能性があります。v6オプションのネーム機能はIPv6アドレスとホスト名を固定的に指定することになるので、IPv6アドレスが変更になった場合に自動的には切り替わりません。またインターネット上では、このv6オプションのネーム機能のホストへはアクセスできないので、今回のLuaスクリプトでIPv6アドレスを名前解決できるようにしてみました。
環境
- DDNSは無料のMyDNSを利用しています
- DDNSへの更新はLuaスクリプトのの中でMyDNSのHTTPアドレスにアクセスしてIPv6アドレスの通知を行っています
- DDNSへの更新は、ヤマハルーターのscheduleコマンドを使って実行します
- 今回実行したインターネット環境は、フレッツ光ネクストで@nifty、IPv6はIPoE、IPv4はV6プラスを利用した環境でした
- ルータはヤマハのRTX830またはRTX810で実行しました
なおIPv6でインターネット接続できない環境(NGN内だけで有効なIPv6アドレス(2001:から始まるIPv6アドレス)の場合は、MyDNSでIPv6アドレスを更新してもNGN内では使えないものと思われます。
DDNS更新用のLuaスクリプト
下記Luaスクリプトは、console characterがen.asciiの場合にのみ動作します。コンソールを日本語表示するためのsjisやutf8を指定している場合は正しくIPv6アドレスを取得できず失敗すると思われます。
このLuaスクリプトは実行すると実行直後に1回だけMyDNSにIPv6アドレスを通知します。
--MyDNS のDDNS更新するための基本情報
interface = "lan2" -- IPv6のアドレスを割り当てられているインターフェース
mydns_user = "##########" --MyDNSのユーザーID
mydns_pwd = "**********" -- MyDNSのパスワード
------------------------------------------------------------
-- IPv6アドレスの取得する関数 --
------------------------------------------------------------
function get_ipv6_adr()
local ipv6adr, s0, s1, e, rtn, str
rtn,str=rt.command("show ipv6 address " .. interface)
s0,s1=str:find("global%s+",0)
s2=str:find("%x+",s1)
e=str:find("%/",s2)
ipv6adr=str:sub(s2,e-1)
return ipv6adr
end
------------------------------------------------------------
-- syslog出力関数 --
------------------------------------------------------------
function output_syslog(msg)
rt.syslog("info", "[LUA] ddns-update.lua DDNS " .. msg)
end
------------------------------------------------------------
-- DDNS Update関数 --
------------------------------------------------------------
function update_ddns(ipv6adr)
template="http://ipv6.mydns.jp/directip.html\?MID=%s&PWD=%s&IPV6ADDR=%s"
req = {
url = template:format(mydns_user, mydns_pwd, ipv6adr),
method = "GET"
}
res=rt.httprequest(req)
if (res.rtn1) then
output_syslog("Update success for IPv6:" .. ipv6adr)
else
output_syslog("Update failed:" .. tostring(res.err) .. "\nurl:" .. req.url)
end
end
------------------------------------------------------------
-- メイン --
------------------------------------------------------------
update_ddns(get_ipv6_adr())
Luaスクリプトの実行をスケジュール
ヤマハルータにddns_update.luaという名前でファイルを保存しているものとし、そのLuaスクリプトを毎時5分(00:05、01:05…、23:05)に実行されるようにスケジュールしています。
# schedule at 1 */* *:*:05 * lua ddns_update.lua
広告