2009-06-27 08:44:40
一昨日からまた24時間近くサイトにアクセスできない状態になってしまった。ubuntuにあるnoip2が本体の起動と同時に自動的に立ち上がらないようだということをすぐに忘れてしまうのだ。システムのアップデートにともなって再起動したあとに、すっかり忘れてしまう。そして、何かのはずみでIPアドレスが変わったときに、それがno-ipに通知されなくてドメインネームの解決ができない状態になってしまうわけだ。本来なら30分おきに報告する設定になっているのだが。
そこで、IPアドレスの変更を自動的に私に知らせてくれるRSSを作ることにした。IPアドレスはサーバでifconfigとかやっても取得できない。ルータのところで取得しなければならないのだ。しかし、そんなことはどうやったらいいか私には判らない。それで諦めたら何も進展しないので、どうしたらいいのか考えてみた。多分、アクセスしてきた相手のIPアドレスを知らせてくれるサイトを利用すればいいのではないか。でも、私は何とかPHPスクリプトを置いておける別のサーバを確保できたので、そこに自前のIPアドレスを返すスクリプトを置くことにしてみた。
<?php $ip = getenv("REMOTE_ADDR"); print_r($ip); ?>
たったこれだけなのだけど。これをip.phpとかいう名前をつけて保存する。もちろん、外部からアクセスできるところに置く。
ここへ一定時間毎にアクセスして自分のIPアドレスを教えてもらうことにする。
<?php $newip = file_get_contents("http://xxxxx/ip.php"); $oldip = file_get_contents("./ipaddress"); if($newip!=$oldip){ file_put_contents("./ipaddress",$newip); } ?>
これで自分のipaddressというファイルに保存できる。前に保存したIPアドレスと違うときだけ、ファイルを置き換えるというように設定している。これを変だと思ったときに見ればいいのだが、そこのIPアドレスが判らないのが問題なのだから、ここへ外からアクセスできない。これをまたどこからでも読めるようにしなければ意味がない。そこで、こいつをDropboxに保存すればいいと思いついた。それなら、FTPでサーバに転送とかしなくてもいいから、簡単である。
file_put_contents("/home/yyy/Dropbox/Documents/ipaddress",$newip);
これでDropboxをマウントして同期させているパソコンでファイルを開けば新しいIPアドレスを見られるわけだ。何か変だと思ったら、こいつを見ればいい。でも、なかなか何か変だと思わなかったらどうするのだ。今回のように。
そこで、RSS2形式でファイルを保存することにした。
$rss = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <rss version=\"2.0\">\n<channel>\n <title>IPADDRESS</title>\n<item>\n <title>".$newip."</title>\n <pubDate>".date("D, d M Y G:i:s O"). "</pubDate>\n\n</item>\n </channel>\n</rss>"; file_put_contents("/home/yyy/Dropbox/Public/ip.rss",$rss);
こんなふうにかなり投げやりな感じでRSS読み取り用ファイルを保存することにした。このスクリプトをcronで一時間おきに実行するように設定した。DropboxのPublicフォルダにファイルを置けば、外からWWWブラウザやRSSリーダでファイルを読めるようになるのである。IPアドレスに変更があったときだけ、新たなIPアドレスをタイトルとする記事(本文は空である)が保存されるので、自分が常用しているRSSリーダに、http://dl.getdropbox.com/u/000000/ip.rss(00000のところは自分に固有の数値)というようなURLを登録しておけば、変更が新着記事として通知されるようになる。多分これでうっかり変更に気づかないということはなくなるだろう。あまり手動でIPアドレスの変更を毎回する人はいないだろうが、これが誰かの役に立つこともそんなにないとは思うけれども、自分が何をしたかを忘れないように、そして万が一誰かの役に立つこともあるかも知れないので、ここに記録しておく。