2010/05/17

VMWare用にDebian lennyでDNSサーバを動かしてみた

VMWare Workstation内でCfengine3のテスト用"CfengineTeam"を作成しました。 それはさておき、今回はその前準備のDNSサーバのセットアップについてです。

各インスタンスの/etc/hostsで管理しても良かったのですが、Cfengine相手だとDNS経由で逆引きできた方が良かろうという事で、Team内のVMにDNSサーバをセットアップすることにしました。

家にあるマシンを管理するためのDNSサーバは既にありますが、Teamはたくさん作りますし、単一のDNSサーバでVMに重複しないようIPアドレスを割り当てるのは面倒な作業に思えたので、DNSサーバを使い捨て感覚で各Teamに配置しようというものです。

今回のポイントは次の通り。

  • DNSで管理するIPはNICを追加して10.0.0.0/16なIPを割り当てる
  • テスト用なので使い捨て
  • debian lennyに特化した手順の確立

今後もTeamを作成する度に何かしら作業が発生しそうなので、メモを残す事にしました。

パッケージの導入

まずは必要なパッケージを入れます。

$ sudo apt-get install bind9

一緒にbind9utilsも入りますが、続いてnslookupなど確認用のパッケージを入れておきます。

$ sudo apt-get install dnsutils bind9-host

bind9の設定

設定ファイルは基本的に/etc/bindディレクトリ以下に存在します。

起動時のオプションを変更する場合には/etc/default/bind9ファイルを編集します。

VMWare用にサブドメインを作成

DNSサーバはzone単位で管理する必要があるので、設定次第ですが、基本的には既にあるドメインとは異なるzoneを作成します。

ただVMWareのTeam毎に別にする必要はないので、一律に"vm.example.org"を10.0.0.0/16に作ろうと思います。 他のドメインも作りたくなるかもしれませんし、ネットワークは/8ではなくて、/16にしました。

/etc/bind/named.conf.localファイルに追加する部分

zone "vm.example.org" {
        type master;
        file "/etc/bind/db.vm.example.org";
};
zone "0.10.in-addr.arpa" {
        type master;
        file "/etc/bind/db.10.0";
};
db.*ファイルの準備

zoneファイルを準備してしまえば良いのですが、公開しないので手間を省くためにdb.0ファイルをコピーします。

$ sudo cp db.0 db.vm.example.org
$ sudo cp db.0 db.10.0

実際に公開するDNSサーバでは、RFC1912に書かれている範囲のことは抑えておく必要があります。 具体的にはSOAレコードに実際に届くメールアドレスを書くこと、NS,逆引きPTRレコードなどで参照するホスト名はAレコードの名前であること、などがあります。

細かいことはいろいろありますが、ホスト名を追加する度に次のようなレコードを追加していきます。

db.vm.example.orgファイルに1ホスト分のデータを追加する

debian IN  A 10.0.0.1

db.10.0ファイルに1ホスト分のデータを追加する

1.0  IN PTR debian.vm.example.org.
その他の問い合せをメインのDNSサーバに振り分ける

これは単純にforwarderで知らない問い合せを他のサーバに転送します。

VMのプライマリネットワークがNATであれば、NATネットワーク(172.16.73.0/24)内のDNSサーバに転送するのが良さそうに思えます。

/etc/bind/named.conf.optionsファイル

options {
        directory "/var/cache/bind";
        forwarders {
                172.16.73.2;
         };
        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
};

/etc/resolv.confが自動的に更新される場合の手当について

NATネットワークのIPをDHCPから受けている場合には、自動的に/etc/resolv.confが更新されていきます。

手で/etc/resolv.confに nameserver 127.0.0.1 を書いても、時間が経つと消えている場合にはDHCPクライアントの設定を変更するが良さそうです。

今回の場合は/etc/dhcp3/dhclient.confにDNSサーバとドメイン名の設定を行ないました。

/etc/dhcp3/dhclient.confに追加した設定

supersede domain-name "vm.example.org";
prepend domain-name-servers 127.0.0.1;

終ってみれば、わざわざメモを残すほどじゃなかったかなという感じですが、細かい点をいろいろ確認する良い機会になりました。

0 件のコメント: