ダイナミックDNSでWEBサーバを設置する

D:20020606 免責事項

公開WEBサーバを設置したので開通までの経緯を記しておく。ネッ トワーク環境は、ISP(ダイアルアップユーザ契約)←→ISDN回線←→ダイ アルアップ・ルータ←→LinuxBox(WEBサーバ:apache)という構成になっ ている [1]。ウチでの問題はセキュリティと、そしてもう一つは、 LinuxBoxがルータになっていないので、WAN側IPアドレスの入手をど うするかだ。

ダイアルアップ・ルータ[2]の設定を変更する

ルータの標準設定では、外部からWEBサーバへアクセスするとルー タの80番ポートへ接続するようになっている。そこで、ルータのマニュ アルや 設定事例集 などを参考にして、外部からLAN内部のWEBサーバ(ローカルWEBサーバ) へアクセスできるように設定する。ウチのComstarz Routerの場合はWEB ブラウザでルータへアクセスして「管理者(設定)」ページ (http://setup.comstarz/admin.htm)で設定することができる。

  1. 公開するローカルWEBサーバのアドレスを固定する

    現在ローカルWEBサーバを稼働しているホストは、DHCP Clientを使ってダイアルアップ・ルータからローカルなアドレスを 割り当てられている。そこでルータの設定でこのアドレスを固定と する [3]

  2. 80番ポートを結合する

    外部からローカルWEBサーバへアクセスできるようにルータ の80番ポートへのアクセス要求をローカルWEBサーバのポートへ 結合する [4]

ダイナミックDNSサービスを使う

LinuxBox、フレッツISDN、ダイアルアップ・ルータという道具立 てでWEBサーバを公開するとなると、一番手軽な(というかほとんど唯一 の)方法はダイナミックDNSサービスを使うことだろう。この手のサービ スを提供するところは有料/無料含めていくつかあるが、今回は DynDNS.orgを使うことにする。 理由は、クライアント・ソフト[5]が容易に見つかったからだ。

DynDNS.orgにサインアップする

DynDNS.orgのトップページ(前節参照)から「Sign Up Now」のペー ジへジャンプすると「Create NIC Login Account」という見出しの下に 「Username」「Email Address」「Password」と三つの項目があるので 適切に入力したうえで「Create Account」ボタンをクリックして送信す る。後でこのアカウントを実際に有効にするための手順を記述したメー ルがDynDNS.orgから送られてくる。手順にしたがってドメイン名を登録 すればすぐに使えるようになる。今回はWEBサーバだけを使うのでメー ル関係の設定は一切せずに空白のままにした。

ここまでの作業で、ローカルWEBサーバを外部に公開することが できるようになった。しかし、このままではIPアドレスを更新するのに DynDNS.orgへログインして手動で更新しなければならない。

IPアドレスをダイナミックに更新する

さて、ISPから動的に割り当てられるIPアドレスを、その都度ダ イナミックDNSをサービスする側へ手動で通知するのも手間がかかる。 そこでクライアント・ソフトを使って自動的に更新するようにしてみよ う。これは、LinuxBoxがルータになっていれば簡単なことかもしれない が、ウチの場合はダイアルアップ・ルータを使っているのでどうしよう かと暫し考える。

答えはDynDNS.orgのWEBページにあった。「Client Development」 ページの「IP Detection」という項目を見るとNATルータのユーザは一 般的には「web based IP detection」オプションを使うらしい [6]。 今回はddclient [7] をダウンロードした。理由は、単に「Clients」ペー ジの最初に紹介されているソフトだったことと、「Features:」に 「web based IP detection」オプションが使える記述が見えたからだ。

ddclient-3.6.2を使って自動更新

前節でダウンロードした ddclient-3.6.2.tar.gzを伸長、展開して生成 されたディレクトリのなかのREADMEに従って インストールと設定をする。

  1. 実行ファイルと設定ファイルをコピーする

    # cp ddclient /usr/local/bin/ddclient
    # cp sample-etc_ddclient.conf /etc/ddclient.conf
  2. 設定ファイル(/etc/ddclient.conf)を編集する

    「hostnames」「logins(アカウント名)」「passwords」を適 切な値に編集する。「hostnames」は
    your-dynamic-host.dyndns.org
    という行を自分 の登録したドメイン名に置き換える。

    さらに、「web based IP detection」オプションを使うため に次行の行頭"#"を削除する。
    #use=web, web=checkip.dyndns.org/, web-skip='IP Address'

    更新の度に届くメールは不用なので、設定ファイルのなかの 次行をコメントアウトした。
    mail=root  # mail update msgs to root

ここまでの作業が終ったところで、ルート権限にて ddclientを起動すると自動的に更新をしてくれる ことを確認した。いまのところルートでログインする度にコマンドライ ンから起動している。

ddclientを自動起動する

毎回ddclientをコマンドラインから手動で 起動するのも面倒なので、システム起動時に自動的に動き始めるように してみよう。/etc/init.d/のなかに起動ファイ ル(シェル・スクリプト)があるのは知っていたが自分で作るのは初めて なので、manページやWEBを検索した。その結果、起動ファイルのインス トールはupdate-rc.dというコマンドを使うことに する。これがDebian流らしい。

  1. 起動スクリプトの雛型をコピーする

    manページに書かれていた「スクリプトを書くため使う雛型ファ イル」をddclient用に名前を変えてコピーす る。

    # cp /etc/init.d/skeleton /etc/init.d/ddclient
  2. 起動スクリプトを編集する

    コピーしたファイルのなかの3行をつぎのように編集した。

    ...
    DAEMON=/usr/local/bin/ddclient
    NAME=ddclient
    DESC="DynDNS auto update client"
    ...
  3. 起動スクリプトのインストール (update-rc.dのオプション)

    起動スクリプトをインストールするにあたって、まず -n(実際の動作を表示するだけで、何もしな い)オプションをつけて試してみる。

    # update-rc.d -n ddclient defaults

    エラーもないし良さそうだが、ランレベルとスクリプト実行 順序を指定する値が心配なので、apacheの 起動スクリプト(のファイル名の数字)を参考にしてオプションを追 加する。順序としてapacheの後に起動したほ うが良いだろう。修正後のコマンドラインはつぎのようになった。

    # update-rc.d ddclient defaults 99
  4. 起動スクリプトの動作確認と再編集

    さっそく、スクリプトを動かしてみる。 startはいいが、 stopの方は期待に反してプロセスが止まっ てくれない。

    # /etc/init.d/ddclient start
    # /etc/init.d/ddclient stop

    ダウンロードしたファイルに同梱されていたredhat用起動ス クリプト[8]を参考にしてstopのところは killallを使うように書き直した [9]。新しい起動スクリプトをコマンドラインで動かしてみると startstop とも期待どおり動作するようになった。しかし、 /etc/init.d/に設置された他のスク リプトにはkillallを使ったものがないので 本当にこのやり方でいいのか多少不安が残る。

セキュリティについて

80番ポートを開いたとたんに、Code Redなどいくつかのワームか らのアタックがログ (/var/log/apache/access.log)に記録されてい る。Debian GNU/Linuxを使っているので実害はないが apacheは常に最新版を使うようにしなければなら ないだろう。

Notes

[1]

LAN構成図を参照。

[2]

Comstarz Router version 4.0.19 (CMZ-RT-DP, NEC)

[3]

Comstarzの場合は、「IPアドレス設定」ページの「アド レス状況」項目で設定する (http://setup.comstarz/ipaddr.htm)。

[4]

Comstarzの場合は、「NATe拡張設定」ページでポート番 号とIPアドレスを設定する (http://setup.comstarz/nate.htm)。

[5]

クライアント・ソフト:ISPから割り当てられたグローバル IPアドレスを自動的に更新するプログラム。参考文書: http://clients.dyndns.org/

[6]

参考文書:Client Development

[7]

http://burry.ca:4141/ddclient/から ddclient-3.6.2.tar.gz というバージョンのファイル(perlスクリプト)を入手した。

[8]

ddclient-3.6.2/sample-etc_rc.d_init.d_ddclient.redhat の該当部分、
# Stop daemons.
echo -n "Shutting down ddclient: "
killproc ddclient
echo
rm -f /var/lock/subsys/ddclient
;;

[9]

修正した 起動スクリプトファイル