Home日記コラム書評HintsLinks自己紹介
 

フィンローダのあっぱれご意見番 第120回「私は誰?」

← 前のをみる | 「フィンローダのあっぱれご意見番」一覧 | 次のをみる →

周囲でADSLが急速に普及しつつある中、 64kbpsのフレッツISDNで随分頑張っていたのだが、 2か月ほど前にネタにできる予定だったBフレッツがやっと使えるようになった。 家庭内LANも100Mbpsで使えるようになって、 やっとインターネット環境が世間並みに追いついたような気がする。

  

流石に100Mbpsというのは速い。 もっとも、この速度になると、ディスクのI/Oがボトルネックになる位で、 実測値では16Mbps程度しか出ていない。 もちろん、個人で使うには十分な速度なのだが、 ベストエフォート方式なので仕方ないか。 ベストエフォート方式という言葉の響きは何となく格好いいが、 「最高の状態でそうなるかもしれない」という、 単なる可能性を言うのであって、 実はダサいのである。

 

※ disk i/o がボトルネックということは、 後日、SCSI のハードディスクを増設したときに、 ダウンロードの速度が上がったことで実証できた。

100Mbpsが最高といわれているBフレッツだが、 本当に100Mbpsも出るのか、ということについては最初から懐疑的だった。 あちこちに速度低下の原因がありそうだし、 仮に物理的にそれだけの性能があったとしても、 相手の協力がなければそんな速度はまず不可能だろう。 極端な話、こちらが100Mbpsの速度でアクセスできても、 アクセス対象のサーバが64kbpsの回線で繋がっていたら、 絶対にその速度を超えることはできないのである。 それに、公開サーバというのは多数のアクセスが同時に発生する可能性があるから、 アッという間に理論値が数%になってしまう、ということは不思議でも何でもない。 実際に大きなファイルをダウンロードしてみると、1MB/s 出るのはいい方で、 数百kB/s というのが一つの壁になっているようだ。

もっとも、1MB/s というのは想像を越えた快適な世界で、 数十MBのファイルなんていつでもすぐ持ってくることができるという感覚で、 Windows Update とか気軽にできたりするし、 確かにインターネットの使い方が根本的に変わってしまうような気がする。

  

もう一つ気になっているのは、 最初のレスポンスまでの待ち時間である。 Air H" を使っていると体感できるのだが、 最初に応答が来るまでの待ち時間というものがある。 大抵のサイトはIP直書きではなくドメイン名で指定するから、 指定したアドレスに対して、DNSに問い合わせを行う。 その結果を受け取るまでの間は、どんなに回線速度が速くても、待ち時間である。 MB/s の転送速度があると、実際のデータ転送は一瞬であって、 実は殆どがこの待ち時間、というような感じがする。 もしかすると、ローカルにDNSのキャッシュを持つとか、 そういったアプローチが凄い効果を発揮するのかもしれない。 もっとも、ヘンにキャッシュしたりすると、 全然違うマシンにアクセスしてしまうリスクもあるから、 うかつに手を出すのはヤバいかもしれないのだが。

 

※ 多数のサイトを巡回しようとすると、 DNS の応答速度がボトルネックになっているような気がする。 これは、DNS の結果を一定期間キャッシュしておくことで対応するのが定石だ。

§

  

プライベートサーバは自宅においてあるのだが、 固定IPは取得していないため、 相変わらず外からアクセスするのがややこしい。 もう少し外から多数の人が見に来るのなら考えてもいいが、 むしろ、IPがころころ変わった方が、セキュリティ的にはいいのではないか、 という程度に考えているのである。 とはいっても、Bフレッツって一旦接続したらずっと繋がったままで、 よく分からないが、 とりあえず工事で回線が切れたりするまでIPが変化することはないようなのだが、 それはそうとして、 実際に接続するまでIPが分からないという状況には変わりない。

 

※ とりあえず、 ダイナミックDNS というものを使って phinloda.com ドメインでアクセスできる仕組みを用意した。

そこで、接続後にIPをチェックして、 予め指定してある相手にメールで知らせたり、 プロバイダに置いてある、 自動的にジャンプするために置いてあるページを更新したりするのである。 ここまでは、昔書いたような気がするのだが、問題はここからである。 どうやってそのIPをgetすればよいか。

フレッツISDNの頃は、MN128 SOHO というルータを使っていた。 ファームウェアがバグっていたりしたが、割と定番のルーターだ。 このルータは、telnet で接続して情報を表示することができるのが特徴である。 というか、大抵のルータは同じようなことができるような気がするのだが、 要するに、LANに接続されている管理マシンから ルータに対して telnet でアクセスして、 必要な情報を get するようなプログラムを作るわけで、 これは簡単である。 そのようなプログラムを作りさえすれば、 例えば一定時間ごとに実行して、 IPが変更になった時に必要な処理を実行するのは朝飯前ということになる。

ところが、今度使うことになったルータには、 telnet でログインする機能はなさそうだ。 Javaで書かれたプログラムを使って、 専用のプロトコルで情報のやりとりをしているらしい。 いろいろ探してみたが、 とりあえずその種のプロトコルは公開されていないようだ。 さて、どうするか。

困った時のWeb頼み、 ということで調べてみると、 このルータの mailing list がヒットした。 そういう時には syslog を使えというアドバイスが書いてある。 つまり、syslog 機能を使えば、 IP が変わった時にルータが loghost に新IPを送信してくれるというのだ。 そう言われてみればそうだった。 本当は、syslog deamon に手を入れて、 ルータから「IP変わったぞ」という syslog メッセージが来瞬間に自動的にどこかに通知する位はしたいものだが、 ここはちょっと(かなり?)手を抜いて、syslog を一定時間ごとにチェックして、 最新IPを検査するようにした。

§

というわけで、問題は解決した。 ただ、syslog 機能が簡単に使えるという前提である。 サーバは UNIX系のSolaris なのでこれは問題ないのだが、 そういえば Windows 系だとどうすればいいのだろうか? これも少し探してみたが、Windows NT で syslog メッセージを受け取るというソフトもあるようだ。 もしかして、 セキュリティ監視ツールとか、そちら系の市販アプリにもその種の機能は付いているかもしれない。

syslog以外に何か手はないのか? アイデアがないわけではない。 tomcat をインストールした人はご存知の通り、 デフォルトで入っているページの中に、JSPとJavaのサンプルが入っている。 この中に、 JSPなら「Snoop」、 Javaなら「Request Info」というサンプルに注目して欲しい。 リクエストのあったIPアドレスを表示するというのは、 HTTPの世界では実は極めて簡単な話なのである。 JSPなら、<%= request.getRemoteAddr() %> という1行で書けてしまうのだ。

だったら、そういうサンプルを公開しているサイトがないだろうか、 と思いつくのは自然な流れである。 というわけで、そういうページをどこかから見つけてくればいいのだが、 これが一見ありそうな感じではあるが、実際なかなか見つからなかった。 ちなみに、某メーカーのルータ関連ページにそういうCGIが設置されていて、 そこをアクセスすればアドレスを教えてもらえるという仕組みになっている。 この記事に書いたらアクセスが殺到すると考えるほど自惚れてはいないが、 まあ一応、何か妙にアクセスが多いな、とかいう話になると恐縮なので、 どこのメーカかは内緒にしておこう。

ところで、同じ処理を Perl で書いてもやはり数行の世界なのである。 ちなみに、List のようになる。

---- List (Perl の CGI サンプル) ----

#! /usr/local/bin/perl
print "Content-type: text/plain\n\n;
print $ENV{'REMOTE_ADDR'};
print "\n";

---- List end ----

頑張れば1行で書けるかもしれないが、 こういうのを無理に1行にするのは最近は流行らないようだ。 まあともかく、perlで自作CGIを置けるプロバイダは結構あるから、 そういう所に自分でこの CGI を設置すればいいのだ。 折角自宅にサーバがあるわけだが、 もちろんそこで CGI を実行する訳にはいかない。 自分自身をルータ経由で見る方法がないからである。

というわけで、実は既に設置してみた。 http://hpcgi1.nifty.com/phinloda/remote_addr.cgi である。

こんな感じでCGIを作っておけば、 世界中どこからでもそこをアクセスできるわけで、 便利といえば便利である。 戻って来るのは単なるIPアドレスなので、 ルータが外部と接続した後にこの CGI を呼び出せば、 外部からは「ここ」がどんなIPで 見えているのか一目瞭然という仕組みである。

  

もちろん、皆さんは本当に必要なら、 自分でこのような cgi ページを作成すればいい。 そうすれば、 万一私の気が変わってこのページを消してしまっても慌てずに済む。

 

※ 設置してから放置してある。 実際、2006年3月現在も使える。

たかが自分のアドレスを知りたいだけなのに、 どうしてわざわざインターネットに出て行って遠方のサイトからアドレスを教えてもらわないといけないのか、 というあたりに不自然さは感じるのだが、 あまり気にしてもしょうがない。 もっとも、世の中には凄い人がいて、 このルータの非公開プロトコルを独自に解析して勝手にIPをgetしているという。 そんなに長いデータのやりとりはなさそうだから、 パケットモニタがあれば、何とかなりそうな気もするのだが、 それにしても根気と勘のいる作業には違いない。 そういえば、syslog のメッセージを受けるとき、一体どういうパケットを受け取ればいいのか分からないので、Solaris に付いている snoop というパケット監視プログラムで見ながら設定してしまった。

結局、最後に信頼できるのは実際に流れているデータそのものなのだ。 そこから考えれば、大抵のことは見えてくる。 もちろん、勝手にヘンなデータをモニタするとヤバいかもしれないので、 注意すればいいというものでもないが、その点は注意が必要だ。

  

(C MAGAZINE 2002年6月号掲載)
内容は雑誌に掲載されたものと異なることがあります。

修正情報:
2006-03-03 裏ページに転載。

(C) Phinloda 2002-2006, All rights reserved.