そのため情報が古い可能性があります。ご了承ください。m(_ _)m
esxi環境下にVM(仮想マシン)を何個も作って行くと、ホスト名とIPアドレスをhostsに書いていくのがクソ面倒になってきたので、DHCPとDynamic DNSの連携システムを参考に、dhcpで割り当てられたIPアドレスと、ホスト名を結びつけることにしました。いわゆるDynamicDNS環境。
「各VMのホスト名でIPアドレスを引っ張ってくる」というよりは、DHCPクライアントから送られてきたホスト名を、dnsに登録する。って感じ。
自宅では、ESXiなサーバを常時稼働させているので、VMの一つにdhcpd+bindで、DynamicDNS環境を構築することにしました。
VMは、これといった理由はないけど、ubuntu9-serverで。
user@ubuntu9-server:~$ uname -a
linux ubuntu9-server 2.6.31-19-server #56-ubuntu 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 bind9
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/network/interfaces に
iface eth1 inet dhcp
hostname hostname
とかやっておけば良いらしい。
(man interfaces 参照)
solaris10の場合は、
/etc/hostname.ifname(vmwareのE1000であれば、hostname.e1000g0) に
inet hostname
を書いておけば良いらしい。
(OpenSolaris Forums : send Hostname to DHCP server …)