VPSで使用する独自ドメインを自前のDNSサーバで運用する

VPSを使用する場合、多くの場合は独自ドメインを取得して使用することになるかと思いますが、その独自ドメインのDNSサーバの運用方法は大きく以下の3つになると思います。

  1. ドメインを取得した会社のDNSサーバを使用する
  2. 外部のDNSサーバを使用する
  3. VPSサーバでDNSサーバを運用する

ドメインの登録会社は多くの場合DNSサーバのサービスを提供していると思います。そのサービスで問題なければ一番手堅い方法です。今回はムームードメインで取得したドメインを使用しますが、ムームードメインでは関連サービスを使う用途以外のDNSサーバの設定はできません。

世の中にはDNSのサービスのみを提供しているものを多数あると思います。例えばFreeDNSというフリーのDNSサービスなどはフリーにもかかわらず自由度の高い設定が可能なのではないでしょうか。

今回は独自ドメインを使用するVPSサーバ自身で自前のDNSサーバを運用することにします。さくらのVPSとOsukiniサーバの二つのVPSでそれぞれプライマリとセカンダリのDNSを運用します。

ネームサーバはbindのバージョン9.7を使用することにします。CentOS 6.0ではデフォルトです。CenOS 5.6ではデフォルトはbindの9.3なのでbind97シリーズのパッケージをインストールすることにします。yumでbind本体と、chrootで運用するためのbind-chroot、digなどのツールをインストールするためのbind-utilsをインストールします。

bindの設定ファイルは/etc/named.confです。zoneファイルはchrootをしているので/var/named/chroot/var/named/の下におくことになります。今回は次のような方針で設定を行います。

DNSサーバには二つの機能があります。ひとつは自分の管理しているドメインの情報を発信する機能です。これはコンテンツサーバなどと呼ばれます。もうひとつはクライアントのために再帰的に問い合わせて目的のドメインの情報を引く機能です。これはキャッシュサーバなどと呼ばれます。

今回必要なのはコンテンツサーバの機能です。キャッシュサーバの機能はすでに提供されているものをそのまま利用することにします。(つまりresolv.confは変更しません。)

それと、最近のDNSサーバではDNSSECの機能が搭載されています。デフォルトの設定ファイルにもこれらの設定がいくつか見受けられます。しかし、今回はDNSSECの設定は行わないことにします。よく理解していないのでスルーするというのもありますが、まず、デフォルトの設定はキャッシュサーバ用の設定と思われます。今回はキャッシュサーバとしては使用しないのでこれは不要です。コンテンツサーバ用の設定は上位との連携などは必要でさらに難解ですが、ムームードメインにはそういった認証チェーンを連携するインターフェイスは提供されていないようです。

上記の内容で設定したnamed.confは以下のとおりです。実際のドメイン名とIPアドレスは伏字となっています。

options {
        listen-on port 53 { any; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        allow-transfer  { yy.yy.yy.yy; };
        recursion no;
};

logging {
        channel "default" {
                file "/var/log/named.log";
                print-time yes;
        };

        category "queries" { "default"; };
        category "security" { "default"; };
        category "default" { "default"; };
};

zone "xxx.net" {
        type master;
        file "xxx.net";
};

要点を説明すると、まずlisten-onがanyですべてのインターフェイスでポート53でアクセスを受け付けます。IPv6は使用できない環境なので割愛します。allow-querryがanyでどこからでも問い合わせ可能です。allow-transferが可能なのはセカンダリのDNSサーバだけとします。キャッシュサーバには使用しないのでrecursionはnoです。

ログは上記の3つのカテゴリをnamed.logというファイルに取得することにします。 ローテートは他のサーバのログと同様にlogrotatedで行います。そしてゾーンファイルを指定します。ここではドメイン名と同じファイル名にしています。ゾーンファイルの設定については割愛します。

次にセカンダリ側のnamed.confです。基本的にはプライマリと一緒です。ゾーン転送は必要ないのでallow-transferがnoneなのとゾーンの設定が異なります。ゾーン設定はtypeがslaveで、ファイルはプライマリから取得した情報を保存するファイル名を設定します。そしてプライマリのIPアドレスをmastersの項目に設定します。ゾーンファイル自体は不要となります。

        allow-transfer  { none; };
zone "xxx.net" {
        type slave;
        file "xxx/euphe.net";
        masters { xx.xx.xx.xx; };
};

serviceの開始や、chkconfigおよびiptablesによる通信の許可なども忘れずに行います。

DNSサーバの設定が終わったら、ドメインのDNSの情報を変更します。ムームードメインの場合、コントロールパネルのネームサーバ設定変更のところから、取得したドメインで使用するという上級者向けメニューを選択することで、DNSサーバの設定とそのサーバのIPアドレスの登録が可能です。

設定は以上で完了です。しばらくすると世界中に設定がいきわたるはずです。

以上はDNSの正引きの設定になります。逆引きの設定についてはIPアドレスを管理しているDNSサーバで設定する必要がありますが、さくらのVPSとOsukiniサーバはともに管理画面から逆引きの設定が可能ですので、そこで逆引きの設定を行います。