自宅サーバには外部からログインすることも多い為、hn.orgというDynamicDNSを利用している。またhn.orgへのIPアドレス登録にはez-ipupdateというプログラムを利用している。
自宅にBBR-4HGを導入以降、しばらくはこちらのライブラリを利用して、BBR-4HGのUPnP機能を使ってWAN側IPアドレスを入手するプログラムを作成していた。しかしUPnPライブラリ自体使いにくく、またセキュリティの面からBBR-4HGでUPnPをdisableにした為、別の方法を実装することとした。
以前2chのバッファロー BBR-4HG/4MG 統合スレッド その3でwgetを使った方法を議論したことがあった。とりあえずDDNSの更新はうまく出来るようになったのでメモしておく。
WAN側IPアドレス入手方法
BBR-4HG/MGのシステム情報ページ(ad-admin-system.stm)内に、
var wan_ip="xxx.xxx.xxx.xxx"
という記述があり、WAN側IPアドレスを入手出来る。ただしad-admin-system.stmを入手する為にはBBR-4HG/MGにログインしなければならない。そこで、以下の手順でwgetを使用する。
# wget bbr-4hg/cgi-bin/login.exe?user=root&pws=xxx -q -O /dev/null
# wget bbr-4hg/ad-admin-system.stm -q -O ad-admin-system.stm
# wget bbr-4hg/cgi-bin/logout.exe -O /dev/null
bbr-4hg部分は適宜ルータのIPアドレスなりに読み換えること。またログイン時のid/passwordは適宜設定。password無しの場合は「&pws=xxx」部分を削除。これでad-admin-system.stmを入手出来る。
ここからWAN側IPアドレスを抽出する。
# grep 'var wan_ip' ad-admin-system.stm | cut -d '"' -f2
実行すると無事、xxx.xxx.xxx.xxx の形でWAN側IPアドレスを取得出来た。
ez-ipupdateによる更新
配布サイトからパッケージを入手しコンパイル&インストール。
ez-ipupdateには常駐モードとフォアグランドモードが存在する。常駐モードを使った場合/etc/ez-ipupdate.confを参照して更新手続きが行われるが、NAT環境下ではWAN側IPアドレスの解決を行わないといけないので都合が悪い。そこで、フォアグラウンドで更新手続きを行い、定期実行はcrontabに登録することとする。
まず、コマンドラインからez-ipupdateを実行し、wgetと連携させてDDNSの更新が出来るかどうか確認。
# ez-ipupdate -a `wget bbr-4hg/cgi-bin/login.exe?user=root -q -O /dev/null ; wget bbr-4hg/ad-admin-system.stm -q -O - | grep 'var wan_ip' | cut -d '"' -f2 ; wget bbr-4hg/cgi-bin/logout.exe -q -O /dev/null` -S hn -u user:passwd
-u user:passwdの部分はDDNSのユーザIDとパスワードを指定。また現在Hammnernodeを利用しているので-S hnを指定。実行結果は、
ez-ipupdate Version 3.0.11b7
Copyright (C) 1998-2001 Angus Mackay.
connected to dup.hn.org (216.151.80.11) on port 80.
request successful
となり無事IPアドレスの更新が出来た。
次にcrontabへの追加。crontab -eで編集を行う。以下の2つを登録した。
*/10 * * * * /usr/local/bin/ez-ipupdate -a `wget bbr-4hg/cgi-bin/login.exe?user=root -q -O /dev/null ; wget bbr-4hg/ad-admin-system.stm -q -O
- | grep 'var wan_ip' | cut -d '"' -f2 ; wget bbr-4hg/cgi-bin/logout.exe -q -O /dev/null` -S hn -u user:passwd -b /tmp/ez-ip.cache
10分毎にBBR-4HG/MGのWAN側IPアドレスをチェックし、hn.orgへのアップデート処理を起動する。注意点は-bオプション。キャッシュファイルを指定することでIPアドレスに変化がない場合DDNS登録サーバへのアクセスが発生しない。DDNSサーバへの過度なトラフィックを発生させない為にも必ず指定。
10 10 1,11,21 * * /usr/local/bin/ez-ipupdate -a `wget bbr-4hg/cgi-bin/login.exe?user=root -q -O /dev/null ; wget bbr-4hg/ad-admin-system.stm
-q -O - | grep 'var wan_ip' | cut -d '"' -f2 ; wget bbr-4hg/cgi-bin/logout.exe -q -O /dev/null` -S hn -u user:passwd
毎月1/11/21日の10:10に強制的にIPアドレス更新を行う。hn.orgは30日間IPの更新作業がないとアカウント削除となる為の措置。基本的に-bオプションを指定しないだけ。
それぞれ時間等の指定は適当。
hn.org以外のDDNSでも利用出来るはず。ez-ipupdate以外にもDDNS更新プログラムはいくつか存在するので、同じような方法で利用が可能だと思う。
注意点として、ルータ起動直後や回線切れを起こした際のエラー対策、WAN未接続時の0.0.0.0対策は行っていない。必要であればスクリプトを組んでcrontab登録がいいと思う。