WebOS Goodies

WebOS の未来を模索する、ゲームプログラマあがりの Web 開発者のブログ。

WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。
Subscribe       

DNS サーバーの構築 : Dynamic DNS の設定

先日、ふと思い立って自宅のサーバーで svnserve を立ち上げてみました(今までは svn+ssh で使っていた)。とりあえず動くようにはなったのですが、ノート PC のクライアントからアクセスすると、処理完了までに 10 分以上かかるというトラブルが発生。どうやら、 svnserve がホスト名を逆引きしようとして、それが見つからないとこうなってしまうようです。

この手のトラブルってけっこうあるんですよね。というか、サーバーが何分もだんまりになるのは、たいていこれが原因です。軽く調べた限りでは svnserve に逆引きを止めさせる方法は見つからなかったので、いっそのこと動的 IP でも逆引きができるように、 Dynamic DNS の設定を施してみることにしました。

そんなわけで、本日は BIND と ISC DHCP サーバーの組み合わせで Dynamic DNS を実現する方法をご紹介しようと思います。サーバー関係の記事は久しぶりだ(^^;

なお、それぞれのサーバーの基本的なインストールはすでに終わっていることを前提にします。 BIND のインストールについてはこちらDHCP についてはこちらの記事をそれぞれご参照ください。

前提環境

以降の内容は、以下の環境を前提にしています。

  • OS は GentooLinux
  • BIND のバージョンは 9.4.1 。
  • ISC DHCP のバージョンは 3.0.3 。
  • BIND と ISC DHCP は同じマシンにインストールされている。
  • ドメイン名は "example.com" とする。
  • IP アドレスの範囲は 192.168.0.1 〜 192.168.0.254 とする。

他の環境でもさほど違いはないと思いますが、設定ファイルのパスや設定内容などが微妙に違ってくるかもしれません。ご了承ください。

BIND 側の設定

それでは、さっそく設定を始めましょう。最初は BIND に Dynamic DNS によるゾーン情報の更新を許可する設定を行います。基本的には "/etc/bind/named.conf" の allow-update に "127.0.0.1" を指定するだけです(もし DHCP サーバーが別のホストで動いているなら、その IP アドレスを設定します)。ただ、 options のブロックに書くとすべてのゾーンが書き換え可能になってしまいますので、 Dynamic DNS を適用するゾーンに個別に記述したほうが良いでしょう。ゾーン設定の部分のみを抜き出すと、以下のようになります。

zone "example.com" IN {
        type master;
        file "pri/example.com.zone";
        allow-update {
                127.0.0.1;
        };
        notify no;
};

zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "pri/0.168.192.zone";
        allow-update {
                127.0.0.1;
        };
        notify no;
};

変更を保存したら、BIND を再起動しましょう。

/etc/init.d/named restart

これでローカルホストからの Dynamic DNS リクエストを受け付けるようになりました。試しに手動でリクエストを投げて、正しく反映されるかを確認してみましょう。それには、 nsupdate コマンドを利用します。例えば、 "test.example.com" というホストに "192.168.0.100" を割り当てるには、以下のようにします。

nsupdate
>server 127.0.0.1
>update add test.example.com. 3600 IN A 192.168.0.100
>send
>server 127.0.0.1
>update add 100.0.168.192.in-addr.arpa. 3600 IN PTR test.example.com.
>send
>quit

あとは、 dig コマンドなどで正しく DNS 情報が設定されていることを確認してみてください。もしうまくいかないときは、 "/var/log/messages" を確認してみると良いでしょう。

なお、ここで設定した情報は以下のようにして削除できます。

nsupdate
>server 127.0.0.1
>update delete test.example.com.
>send
>server 127.0.0.1
>update delete 100.0.168.192.in-addr.arpa.
>send
>quit

後で変なトラブルの原因になっても嫌なので、削除しておくことをお勧めします。

DHCP サーバー側の設定

BIND 側の対応が終わったら、次は DHCP サーバーの設定を行いましょう。変更するファイルは "/etc/dhcp/dhcpd.conf" で、 ddns-update-style の設定変更と、 Dynamic DNS で更新するゾーンに対応する zone ブロックの追加を行います。以下、変更分のみを掲載します。

ddns-update-style interim;

zone example.com. {
        primary 127.0.0.1;
}

zone 0.168.192.in-addr.arpa. {
        primary 127.0.0.1;
}

変更を保存したら、やはり DHCP サーバーを再起動します。

/etc/init.d/dhcpd restart

これで設定作業は終了です。意外と簡単ですね。

動作確認

次は実際にクライアントマシンに正しく正引き・逆引きの DNS レコードが割り当てられるか、動作確認をしてみましょう。クライアントが Windows であれば、コマンドプロンプトを立ち上げて以下のコマンドを実行すれば OK です。

ipconfig /renew

その後、 nslookup コマンドで正引き・逆引きが正しく引けることを確認しましょう。もしうまくいかない場合は、やはり "/var/log/messages" が役立ちます。

Linux クライアントでは確認していないのですが、 ifconfig コマンドで NIC を再起動すれば同様にいけると思われます。

以上、本日は BIND と ISC DHCP による Dynamic DNS の設定方法をご紹介しました。前述の svnserve がだんまりになる問題も、これで見事に解決できました。こんなに簡単なら、早いところ設定しておくんだった(^^ゞ。

なお、作業にあたり以下のページを参考にさせていただきました。

DHCPとDynamic DNSの連携システム (@IT)

上記の基本的な設定に加えて、 Dynamic DNS クライアントを共有鍵で認証することでセキュリティーを向上させる方法や、登録されるホスト名を MAC アドレスをもとにしたものに変更する方法などが解説されています。とくに公開 DNS サーバーに対して Dynamic DNS を設定する場合は一読されることをお勧めします。ただし、バージョンの違いからか、私の環境では記事中の例をそのまま実行するとうまくいかない部分がありました。参考にする際はご注意ください。

関連記事

この記事にコメントする

Recommendations
Books
「Closure Library」の入門書です。
詳しくはこちらの記事をどうぞ!
Categories
Recent Articles