NEC WARPSTAR 7600H グローバルIPアドレス取得スクリプト

ダイナミックDNS
自宅は電力系のFTTHなのでブロードバンドルータ(NEC WR7600H)以下に複数PCを接続している。でその中の1台をLinuxをOSとしてWWWサーバ&MailサーバとしてダイナミックDNSを使用してインターネットに公開している。

ダイナミックDNSとしては Dynamic DO!.jp という条件によっては無料で使用できる業者のものを使用している。私の場合、無料とは言え安定度は抜群で、メールサーバへダイナミックDNSを使用しても、もうかれこれ2年以上になるが全く問題ない。

さて、御存知のようにダイナミックDNSというのは一般のプロバイダ配下にあるインターネットユーザのパソコンのグローバルIPアドレスをDNSに登録して、ドメイン名で参照させようというものである。これができると、インターネットに向けてWWWサーバやMailサーバ、対戦ゲームなどを行う時に接続者(友人やWEBページ閲覧者)がIPアドレスを知らなくてもよいというものである。

そのためには、ブロードバンドルータのもつグローバルIPアドレスをDDNS業者のDNSに登録してやらなければならないわけだが、固定IPアドレスで契約してないほとんどの一般人にとって非固定でクルクル変わるIPアドレスをその都度、手動で登録する作業は苦痛以外の何物でもないだろう。そういう場合にこそコンピュータ自身で自動化登録させるべきである。 実は Dynamic DO!.jp の場合、該当のマシンからホームページにアクセスするだけでグローバルIPアドレスが登録できるため(ユーザID、パスワードは引数)該当マシンではグローバルIP自体を知る必要はない。だから、Linuxの場合Lynxや WGETなどをCronで定期的に起動し自動アクセスさせてやれば、まあそれはそれでまったく問題ないといえばないのである。(^^;

で、表題のスクリプトが何で必要か?
んーーー。やっぱり無料で使わさせて頂いている(舌噛みそう…)業者さんのサーバに負荷をかけたくないですね。定期的に登録作業といっても10分毎なんかに呼び出したりするとやっぱり相手に迷惑でしょう?かと言って1日に1回とか6時間に1回とかだったら、迷惑度合いは低いけれど、今度は自分の方が不都合発生しますね。グローバルIPアドレスが変更になってもその時間が来るまでは登録されないわけで、その間インターネットからはアクセス不能になってしまいます。(そうそう、Dynamic DO!.jp さんの場合一ヶ月間の間DNS更新がなければアカウント削除されてしまうので最低でも一ヶ月に一回は更新の必要がある。)

というわけで自前で自分のグローバルIPアドレスが取得できれば、それを保存しておいて次回取得時に比較して違っている場合にのみ業者さんへの登録作業を行うということができるわけです。

今回はNECアクセステクニカから発売されているWR7600H(54M無線ルータ)という機種からグローバルIPアドレスを取得してみましょう。最初はLynxで通常の設定画面(内蔵WWWサーバ)にアクセスしてグローバルIPアドレスを取得しようとしたんですがグローバルIPアドレスを表示している画面が無い!?…どうなっとんじゃ。表示モードを拡張モードにすればあるようだけど、一発でアクセスできそうもないので止めました。というわけで TELNET アクセスできないか調べたところ2ちゃんねるに情報が転がっていました。以下は telnet で接続した場合のアクセス表示例です。 余談ですが、Basic認証のかかっているWWWサーバへアクセスする場合以下の様にすれば認証を通過できます。
http://userid:password@192.168.*.*/
userid はユーザ名、password はパスワード * は伏字
NEC WR7600H にTelnetでアクセスしたところ


# telnet 192.168.**.**
Trying 192.168.**.**...
Connected to 192.168.**.**.
Escape character is '^]'.

Telnet Server 1.10 All rights reserved.
login : admin
Password:

### Welcome To WARPSTAR ###
>show info wan 22
ENTRY NO ..... 22
IP ADDRESS ..... 220.***.***.190
SUBNET MASK ..... 0. 0. 0. 0
DNS SERVERS
IP ADDRESS1 ..... 219.***.***.**8
IP ADDRESS2 ..... 219.***.***.**7
AC INFORMATION
AC NAME ..... *****
SERVICE NAME ..... (empty)
>

マニュアルに「Telnetサーバ」があるということはどこにも書いてなかった(たぶん)ですけど、以前使っていたISDNルータにも同様の機能があったので、あるんじゃないかと思ってはいました。実際アクセスしてみると応答はあったんですが、コマンドが分からなかったのでそのままになってました。以前のISDNルータではヘルプコマンドがあったので、適当に調べながらできたんですがそうもいきませんでした。2chの情報により上記のような情報が得られることが判明しました。IPアドレスは一応アスタリスクで隠してます。(ローカルIPアドレスの部分は隠したってあまり意味はないとは思うが…まあ一応…)

で、ここからグローバルIPアドレスを取得するわけですが「明らかに2行目のやつ」ですね。これを正規表現を用いて抜き出して見ましょう。

NEC WR7600H グローバルIPアドレス取得スクリプト


#!/usr/bin/perl

use Net::Telnet();

$lines ="";
$wp_host = '192.168.**.**'; <-- ルータのIPアドレス
$wp_user = 'admin'; <-- ルータ管理者アカウント名(固定)
$wp_pass = '*********'; <-- ここには自分のパスワードを入れてね

$t=new Net::Telnet(Timeout => 10);
$t->open($wp_host);
$t->waitfor('/login :.*$/');
$t->print("$wp_user");
$t->waitfor('/Password:.*$/');
$t->print("$wp_pass");
$t->waitfor('/>.*/');

$result = "ERR\n";
$t->print("show info wan 22");
($lines)=$t->waitfor('/>.*/');

foreach $_ (split(/\n/, $lines)) {
if(/^( +)(IP ADDRESS +)(\.+ )( *)([0-9]*\.)( *)([0-9]*\.)( *)([0-9]*\.)( *)([0-9]*)/) {
$result = "$5$7$9$11\n";
}
}
if($result == "0.0.0.0") {
$result = "ERR\n";
}
print $result;
$t->close;
exit

IPアドレスの部分は以下のようなフォーマットなんですが、数値部分が3桁無い場合は△△8などとスペースが入ってしまいます。(△=スペース)スペースコードが入っていると後の処理で不都合が発生する場合があるので取り除くよう正規表現で指定してあります。また以下のようなフォーマットの出力が得られなかった場合や出力IPアドレス結果が "0.0.0.0" となった場合は文字列 "ERR" というのを返却する仕様としてあります。 "0.0.0.0" は WARPSTAR の場合WAN側ケーブルを抜いてこのスクリプトを走らせると得られます。必要に応じて変更してください。


IP ADDRESS ..... ***.***.***.***
このスクリプトファイルに warpstar.pl という名称を与えオーナー root で権限を700 にする。動作確認は #./warpstar.pl でやってみてください。標準出力にグローバルIPアドレスが出力されるはずです。これだけでも必要とされる人はいると思うので公開(というほどのものでもないが…)します。ダイナミックDNSと組み合わせるスクリプトは別のページに書きます。

そのスクリプトは
Dynamic DO!.jp 用 とValue Domain 用 です。
Value Domain の方は有料ですが格安独自ドメインでしかもDDNS運用ができるというものです。有料と言っても種類によっては年間1000円以下で独自ドメイン取得&運用できます。

ウェブページ

  • about
Powered by Movable Type 5.2.10

このブログ記事について

このページは、よしが2004年5月12日 12:20に書いたブログ記事です。

ひとつ前のブログ記事は「液晶テレビ」です。

次のブログ記事は「ダイナミックDNS(DDNS)Value-Domain 自動登録スクリプト」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。