各VMのホスト名でIPアドレスを引っ張ってくる(dhcp+bind)

この記事は2年以上前に書いたものです。
そのため情報が古い可能性があります。ご了承ください。m(_ _)m

環境下にVM(仮想マシン)を何個も作って行くと、ホスト名とIPアドレスをhostsに書いていくのがクソ面倒になってきたので、DHCPとDynamic DNSの連携システムを参考に、で割り当てられたIPアドレスと、ホスト名を結びつけることにしました。いわゆるDynamicDNS環境。

「各VMのホスト名でIPアドレスを引っ張ってくる」というよりは、DHCPクライアントから送られてきたホスト名を、に登録する。って感じ。

自宅では、ESXiなサーバを常時稼働させているので、VMの一つにdhcpd+bindで、DynamicDNS環境を構築することにしました。

VMは、これといった理由はないけど、ubuntu9-serverで。

user@ubuntu9-server:~$ uname -a
ubuntu9-server 2.6.31-19-server #56- SMP Thu Jan 28 03:40:48 UTC 2010 x86_64 GNU/Linux

ubuntu9-serverのIPアドレスは、192.168.0.49としました。
ドメインは”myhome”として設定してます。

まず、bind環境構築

とりあえず、インストール
$ sudo aptitude install

zone設定。/etc/bind配下はapparmorで守られてる(?)ので、zoneファイルは、/var/lib/bind配下に格納するようにしました。(apparmorの存在を知らず、/etc/bind/配下で全ファイル置くようにしてたら、DNSの更新で何度やっても書き込めず失敗したことは内緒。)

/etc/bind named.conf.local

zone "myhome"{
        type master;
        file "/var/lib/bind/db.myhome";
        allow-update{
                127.0.0.1; 192.168.0.49;
        };
};

zone "0.168.192.in-addr.arpa"{
        type master;
        file "/var/lib/bind/db.192.168.0";
        allow-update{
                127.0.0.1; 192.168.0.49;
        };
};

/var/lib/bind/db.myhome

myhome                  IN SOA  ns.myhome. root.myhome. (
                                2010031586 ; serial
                                604800     ; refresh (1 week)
                                86400      ; retry (1 day)
                                2419200    ; expire (4 weeks)
                                86400      ; minimum (1 day)
                                )
                        NS      ns.myhome.

/var/lib/bind/db.192.168.0

0.168.192.in-addr.arpa  IN SOA  ns.myhome. root.myhome. (
                                2010031586 ; serial
                                10800      ; refresh (3 hours)
                                900        ; retry (15 minutes)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )
                        NS      ns.myhome.

$ sudo /etc/init.d/bind9 restart

nsupdateコマンドで動的に登録してみる。
ホスト名:test.myhome、IPアドレス:192.168.0.99

$ nsupdate -d
> server 192.168.0.49
> update add test.myhome 3600 A 192.168.0.99
> send

登録したtest.myhomeをnslookupで確認。

$ nslookup 
> server localhost
> test.myhome
Server:localhost
Address:127.0.0.1#53 

Name:test.myhome
Address: 192.168.0.99

次に、dhcpサーバのインストールと設定。

$ sudo aptitude install dhcp3-server
$ vi /etc/dhcp3/dhcpd.conf
ddns-update-style interim;
update-static-leases on;
option domain-name "myhome";
option domain-name-servers 192.168.0.49;
default-lease-time 36000;
max-lease-time 72000;
log-facility local7;
subnet 192.168.0.0 netmask 255.255.255.0{
   range 192.168.0.21 192.168.0.254;
   option routers 192.168.0.20;
   host main-pc{
     hardware ethernet 00:21:85:61:99:99;
     fixed-address 192.168.0.4;
   }
   host win-pc{
     hardware ethernet 00:01:80:60:99:99;
     fixed-address 192.168.0.2;
   }
}
$ sudo /etc/init.d/dhcp3-server restart

「ddns-update-style interim;」を書いておけば、option domain-name-serversで指定したDNSサーバへ、dhcpクライアントから送られてきたホスト名と、貸し出したIPアドレスを登録しに行く。

fixed-addressで指定している場合もDNSサーバへ登録して欲しい場合は、「update-static-leases on;」を書く必要がある。

注意が必要なのが、dhcpクライアントがホスト名を送って来ない場合は、当然登録されない。で、大抵のdhcpクライアントは、デフォルトではホスト名を送らない。ような気がする。(FreeBSD8は、ホスト名設定しておけば送ってきてくれた)

もしホスト名を送ってこないようなdhcpクライアントだった場合、、、

dhclient(ISC)の場合は
/etc/dhcp3/dhclient.conf に、
send host-name “hostname”;
を書いておけば、hostnameをDHCPサーバに送るようになる。
(もしかしたら、/etc/dhclient-eth0.conf とかかも。openfilerとかそうだった)

pumpとかudhcpcの場合は、
/etc//interfaces  に
iface eth1 inet dhcp
hostname hostname
とかやっておけば良いらしい。
(man interfaces 参照)

の場合は、
/etc/hostname.ifname(のE1000であれば、hostname.e1000g0) に
inet hostname
を書いておけば良いらしい。
(OpenSolaris Forums : send Hostname to DHCP server …)

カテゴリー: VM, サーバ管理 タグ: , , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です