2002年 3月 27日(水)

IPアドレスの更新方法(T-COM/TE4121C/PPPoA)

IPアドレスが変わるたびに、自分のIPアドレスをhn.orgのサーバに通知しなければなりません。そうしないとuwan.netのアドレスを検索に来た場合、古いIPアドレスを返してしまうからです。
更新タイミングとしては、接続するたびに行えばOKですが、私が利用しているT-comはPPPoAのため、モデムにIPアドレスが割当てられることになり、サーバでIPアドレスが変更されたことをそのままでは検知できません。(フレッツADSLやBフレッツなどで使用しているPPPoEの場合ですと、サーバに対してIPアドレスが振られるため、IPアドレスが変化したことをサーバで検知することが出来ます。そのため、IPアドレスをhn.orgに通知するアクションも連携して行えます。)
いろいろと試行錯誤した結果、1分おきに自分のIPアドレスを検知する方法を取りました。

# crontab -l
0-59 * * * * /root/ip_diff_check.csh

cronで、モデムの接続ログにアクセスし、最終IPアドレスを取り出します。それと、直前に取り出したIPアドレスを比較し、変化があったら新しいIPを通知する仕組みになっています。
# more ip_diff_check.csh

#!/bin/csh
# 現在IPを待避
mv -f /tmp/now_ip.{log,old}
# 現在のモデムのIPを取る
/root/get_now_ip.csh > /tmp/now_ip.log
#差分を取る
diff /tmp/now_ip.{log,old}
#もし、待避したIPと違う(=IPの変化あり)なら
if ($status != 0) then
#hn.orgへの更新通知
/root/update_ip.csh
endif


モデムはTE4121Cです。PPPoAでつながってますから、通常の方法ではグローバルIPの情報を取得するのは面倒です。裏コマンド(参考:ひろくんのホームページ「T-com ADSL 情報」)を利用して、接続ログ(モデムのsyslogのようなもの)からIPアドレスに相当する部分を取り出して、返すスクリプトです。赤字の部分はパスワードですのでヒミツ。
# more /root/get_now_ip.csh
wget -nv -q -O - 'http://root:XXXXXXX@192.168.1.1/cgi-bin/debugcmd.cgi?cmd=mbglog' | grep if_ippa.c | awk '{FS=":"; print $8}' | sed 's/
//' | awk '{FS=","; print $1}' | awk '{FS="="; print $2}' | tail -1

実際に、IPアドレスを更新するためのスクリプトです。hn.orgは、更新したいアドレスのマシンから特定のページにアクセスすれば、そのアクセス元のアドレスがログインしたアカウントのサブドメインのAレコードの右辺になります。なので、サーバからそのページにアクセスすることにします。例によって赤字はヒミツです。
# more update_ip.csh
#!/bin/csh
/usr/local/bin/wget -nv -q -O /root/update_hn.org.log "http://uwan:XXXXXXXXX@dup.hn.org/vanity/update/?VER=1&IP="

「アドレスの変化が有っても無くても一分おきに通知すれば良いのでは?」という疑問が浮かぶと思いますが、相手の立場から見たら、一分おきに全世界から更新通知が来るとなると、すぐに回線が高負荷になってしまい、本来のDNSの検索に対する応答に支障が出ます。(一種のDoSアタックです。場合によっては上流プロバイダに文句が来るそうです。)
ですから、むやみに更新通知を送るのは止めるようなスクリプトを書きました。
あのー、正直いいまして、ダサダサのスクリプトです。笑ってくれて結構です(^^;
これで、とりあえずuwan.hn.orgはウチのサーバ(につながっているモデム)に割り振られたIPアドレスに対応づけ
られました。


Posted by thomas at 2002年03月27日 09:25 | トラックバック / アフィリエイトはエーハチネット

« ダイナミックDNSの設定 | Main | モデムのフィルタリング設定(TE4121C) »

トラックバック

このエントリーのトラックバックURL:
http://test.uwan.net/mt-tb.cgi/601