2012年3月5日月曜日

公開する準備

サーバ公開にあたって、わが家のLANがどうやってインターネットにつながってるか改めて確認。最初の記事に書いていたInternet@Startの方はやっぱりデフォルト設定だったっぽい。のでちゃんとISP(Yahoo!BB)からもらったアカウントとパスワードをルータに登録して、PPPoE接続でインターネットにつなぐようにした。よってわが家のLANのInternet側IPアドレスは確実にISPのPPPoEサーバから割り振られたものになった。

さて、ここでISPとの契約が「固定IP契約」だと「あなたには 123.45.67.xx のアドレスを割り振ります」というお知らせをもらってるはずで、だとすれば「WEBサーバ公開してます!URLはhttp://123.45.67.xx/ です!」と言えるわけだ。でもそんなお知らせはもらっていない。なぜかというと「固定IP契約」ではないから。つまりインターネットに接続する時にISPがプールしている未使用のIPアドレスの中から動的に割り振られ、切断する時に返しているということだ。なんと。自分んちのIPアドレスがそんなころころ変わっていたなんて知らなかった。
しかしこれでも今までは不都合がなかったわけだ。電話に例えると分かりやすい。常に自分が「電話をかける側」だとすれば、極論自分の電話番号は知る必要がないし、知らないうちに電話番号が変わっていても通話はできる。なるほど。ただしWEBサーバを公開するということは「電話を受ける側」になるということだ。IPアドレス(電話番号)がころころ変わっては困る。
そこんとこを上手いこと解決してくれるのがDDNSという技術だ。割り振られたIPアドレスをドメイン名とともにDNSサーバに登録し、WEBにアクセスする人にはドメイン名でアクセスしてもらう。そしてIPアドレスが変わるたびにDNSサーバに登録しなおす。そうすれば実際のIPアドレスがころころ変わってもDNSが動的に名前解決をしてくれるというわけ。よくできてる。
DDNSのサービスを無料で提供してくれてるところはいくつかあったんだけど、今回はieServer(家サーバ)というところを利用してみた。理由はユーザ登録が簡単なのと利用規約がゆるいこと。そこで以下のドメインを取得した。

penguincourt.dip.jp

次に「IPアドレスが変わるたびにDNSサーバに登録しなおす」ための設定がいる。これはなんと同サイトでスクリプトを配布していたのでありがたく使わせて頂くことにした。スクリプト自体はPerlで書かれていて、これをcronで10分おきに実行する。DNSにIPアドレスを登録するところにはwgetを用いる。perl、crond、wget はどれもインストール済だ。まずはスクリプトの必要な部分を書き換えて、単独で実行してみる。
wget -q -O - 'http://ieserver.net/cgi-bin/dip.cgi?username=$ACCOUNT&domain=$DOMAIN&password=$PASSWORD&updatehost=1'
$ACCOUNT、$DOMAIN、$PASSWORD はユーザ登録に使った個人設定で置き換えられる。パスワードも入ってるので http は https に置き換える。wget がSSL接続可能でビルドされていることは次のように確認できる。
ldd /usr/bin/wget |grep -i ssl
さて、wgetを実行する。「-O -」オプションがついているので結果は標準出力に出る。成功すると現在のIPアドレス(をどこかに含むテキスト)が表示されるはずである。・・・・、がなにも出ない。
そこで「-q」オプションをとってみる。これでエラーログが見れるはず。やってみる。

エラー: ieserver.net の証明書の検証エラーです: unable to get local issuer certificate
ieserver.net に安全の確認をしないで接続するには、`--no-check-certificate' を使ってください。
SSL による接続が確立できません。

やっぱりね。というわけでwgetを「--no-check-certificate」オプション付きで実行。・・・・うわ、なんかすごいhtmlが出た!けど確かにうちに割り振られているIPアドレスが入ってる!成功っぽい。
wgetの確認ができたところで、スクリプトをコピーして、実行権限をつけてperlで実行してみる。これが成功するとログファイルができるはず。実行。・・・・ログファイルの生成を確認。成功。やったね。
最後にcronの設定をする。10分おきに実行する設定にする。
crontab -e
で設定ファイルを開いて
5,15,25,35,45,55 * * * * /usr/local/ddns/ddns-update.pl
の内容を書き込む。いちおう再起動。
service crond restart
実行予定時間のちょっと前にさっきのログファイルを削除する。予定通り実行されればログファイルができるはずだ。待つ。・・・・できたかな?・・・・できてる。成功だ。

これでDDNS関係の設定は終了。最大10分のタイムラグはあるかもだけど、ほぼリアルタイムでドメイン名によるアクセスができるようになった。
明日はルータのポートフォワーディングの設定をする。

1 件のコメント:

  1. なんだか難しいことやってるんだね・・
    でもなんとかうまく行ってるみたいでおめでとさん。
    あんまり夢中になって寝不足にならいようにして下さい。
    仕事に影響でたらなんにもならないからね。

    返信削除