2016年4月15日金曜日

Zoneeditで自宅サーバー

はじめに

自宅サーバーを独自ドメインで運用するときに直面する問題の一つが、グローバルIPアドレスが一般向けの回線では動的で、不定期に変わってしまうことだ。
停電やメンテナンスなどでモデムやルーターを再起動すると、さっきまでと全く別のアドレスが割り当てられる。
すると、ドメインが指し示す住所であるアドレスが古いものとなり、外からアクセスできなくなってしまう。
BIGLOBEなどのプロバイダによっては固定IPサービスも用意されているが、有料オプションであり、数週間に1回程度変わるものにお金を払うのも割に合わないので、できれば無料でなんとかしたいものだ。

その解決方法として使われているDynamic DNS(DDNS)は、DNSサーバー内に登録されているアドレスを即座に変更できるシステムだ。
ドメインのオーソリティーを持つ(アドレスを管理する)DNSサーバーは、クライアントからの参照に応じてアドレス(Aレコード)を調べ、返答する。
DDNSでは、サーバー側で自身のアドレスを監視し、変更を検知したらDNSサーバーに通知する。
するとサーバーはAレコードを書き換え、クライアントが更新を検知できるように、SOAレコードのSerial値を増加させる。
このようにして動的IPアドレスに対応できるが、DNSサーバー自体のアドレスが変わってしまっては元も子もないので、外部の固定的なサーバーを使うことになる。

独自ドメインにも対応する無料のDDNSサービスは、少数ではあるが存在する。
現在starhythm.comに使っているZoneedit(ZE)はそのようなサービスとして有名だ。
wwwといった任意のホストごとに設定が可能で、必要に応じてメンテナンスページを表示したり他サイトに転送したりできるなど、多くの便利な機能がある。
2011年にeasyDNSに買収されて以降、無料で使えるのは新規ユーザーが3ドメインまで、既存ユーザーが5ドメインまでという制限がある。
以下では、Zoneeditを使ってLinuxサーバーからIPアドレスを更新する方法を紹介する。
なお、独自ドメインはレジストラで取得済みとする。

動作環境

今回説明に用いるサーバーの環境は次の通り。
  • Ubuntu Server 14.04
  • ドメイン:starhythm.com
  • レジストラ:お名前.com(GMO)
  • LAN環境

Zoneeditへのドメイン登録

ZEのホームページに行くと、"SIGN UP"というボタンがあるので、そこからユーザー名・パスワード・メールアドレス・秘密の質問を記入する。
アカウントが作成できたらログインし、コントロールパネルが表示される。
左メニューの"Add a Domain"を開くと、新ドメインの登記・DNS取得・逆引きDNSの登録と入力フォームが並んで迷うかもしれないが、ここは右上に小さくある"Add Free DNS Domain"リンクをクリックする。
5分ほど探した。
次の画面で取得済みのドメイン名を入力し、各事項を確認したらチェックを入れる。
最後のOptionalの項目は、ドメインのレジストラをZEに変更するという意味で、トップレベルドメインでは$15がかかる。(毎年の更新費用は不明。)
ともかく、これを除いた項目をチェックしたら、nextで登録完了。

DNSの設定

登録したドメインはコントロールパネルのトップ画面で表示されるようになる。
その領域をクリックすると管理画面に飛び、タブで切り替えて各種設定が行える。
ここではDNS Settingタブで各ホストに対するDNSレコードを設定する。
DNS設定画面
一部のレコードを簡単に説明する。

SOA

Start Of Authorityの略で、管理を委任されているゾーン(管理範囲)の管理者情報や有効期間を表す。
ここでは、ゾーン情報を参照してくるDNSサーバー(DNSクライアント)の挙動指定で、ゾーン情報をキャッシュとして保持する最大期間(Expire after)と最小期間(Minimum TTL)を設定できる。
キャッシュによってクライアントは一旦調べた情報を毎度参照し直さなくて済むようになるが、ホストが存在しないというネガティブキャッシュも保存されるため、ホストを追加したときに早く反映させるためには、Minimumの値を15分程度に小さくするとよい[1]。

A

Addressのことで、ホスト名に対応するIPアドレスを指定する。
主にアドレスが固定されている場合に利用する。
ZEではアドレスにPARKを指定すると、ZE側で用意した一時ページを表示することができる。
なお、ホスト名はもちろんwwwなど個別に指定することもできるが、アスタリスク*で任意のホスト名を、@でホスト名を省略した場合を指定することができる。

CNAME

エイリアスを指定する。他のドメインに飛ばすときに使う。
例えばstarhythm.comのホストwwwに対してwww.second.comを設定すると、www.starhythm.comへの問い合わせはwww.second.comへ転送され、そのIPアドレスが返される。

DYN

今回の要となるDDNS機能。動的にアドレスを変更したいホストをここで指定する。
特に区別なく使いたい場合は*と@を設定。TTLは最小の60秒600秒にする。
なお、Aレコードのほうにホストを設定する必要はない。
(600秒の根拠:サポートフォーラムでの管理者の回答

他にもメールサーバーを指定するMX、他サイトへ転送するURLの機能がある。
ちなみに転送先URLの最後に"#適当な文字列"をつけると、転送前のページによらず同じページに移せるのでおすすめ。

設定し終わったら、Domain SettingsタブのnameserversからDNSサーバー名を確認し、ジストラで設定する。

ddclientによる自動更新

主なフリーのDDNSクライアントは、WindowsだとDiCE、Linuxだとddclientがある。
ここでは後者の設定を説明する。

インストールはaptitude(apt-get、yumなど)でできる。
DDNSサービスにはzoneedit.com、ユーザー名はZEのものを入力し、パスワードは空欄、FQDN(フルドメイン名)にはホスト名を含んだドメイン名www.starhythm.comなどを設定する。
ネットワークインターフェースはアドレスを取得するためのもので、ここではwebとする。
なお、インターフェースをLANのものにすると、ローカルIPが取得されてしまうのでふさわしくない。
これらは後ほど変更できるので、間違っても大丈夫。

設定ファイルは2つある。まずはデーモンの動作を記述する /etc/default/ddclient をroot権限で開く。
ここで、run_ipup(接続ごとに起動)をfalseに、run_daemon(デーモンとして常時起動)をtrueにし、daemon_interval(更新間隔[sec])を300くらいにする。
次に更新設定の /etc/ddclient.conf をroot権限で開く。
これを以下のように設定する。
ssl=yesprotocol=zoneedit1use=web, web=checkip.dyndns.com/, web-skip='IP Address'server=dynamic.zoneedit.comlogin=xxxxxx #ログインIDpassword='xxxxxxxxxxxxx' #以下で説明starhythm.com,*.starhythm.com
パスワードは通常プレーンで入力するが、ZEの場合は代わりにDDNS向けトークンを用いることができ、セキュリティ面で推奨される。
DYNレコードの設定画面の下部にAuthentication Tokenがあり、enableをクリックすると取得できる。

設定したら、以下のコマンドで実際の更新を確認できる。
# ddclient -daemon=0 -debug -verbose -noquiet
デーモンが稼働しているかは $ /etc/init.d/ddclient status で確認できる。
動いていなかったら再起動して試してみる。

終わりに

以上の手順で、グローバルIPアドレスを自動的に監視し、DNSサーバーを更新することが可能となった。
これで安心してドメインを公開できる(はず)。

---
[1] ユーロテック情報システム販売株式会社「強いBIND DNSs 第五回 SOAレコードとゾーン転送」2010/6/27(2016/4/9確認)http://www.eis.co.jp/bind9_src_build_5/

0 件のコメント:

コメントを投稿