2012年12月18日火曜日

サーバのホスト名を自動で取得し割り当てる方法


※タイトルが不適切だったので変えました(笑)
Chefで構成管理ができると電源ポチでサーバ構築までしてほしいですよね。
ホスト名とIPを動的に結びつけることができれば少なくともDHCPで払い出すIPのレンジ単位でホストの管理でき、うまくいけばIP管理表を捨てれるかもしれません。
今回紹介する仕組みはBINDの拡張機能を利用します。

お気づきかと思いますがタイトルと内容が若干ずれていますがタイトルの内容は十分把握できると思います。

概要
  1. DHCPからIPを割り当てる
  2. 割り当てられたIPから逆引きで名前を引いてくる
  3. ホスト名に割り当てる
DHCP

DHCPは任意のIPを割り当てられる環境がればなんでもよいです。
安物ルータのDHCPでも可。

Linuxのdhcpdを使うのであれば以下のような設定になると思います。

/etc/dhcp/dhcpd.conf
ddns-update-style interim;
ignore client-updates;

subnet 192.168.0.0 netmask 255.255.255.0 {

# --- default gateway
        option routers                  192.168.0.1;
        option subnet-mask              255.255.255.0;

        #option nis-domain              "domain.org";
        #option domain-name             "domain.org";
        #option domain-name-servers      192.168.10.1;

        option time-offset              -18000; # Eastern Standard Time
        #filename "/linux-install/pxelinux.0";
        #next-server                     192.168.1.2;
#       option ntp-servers              192.168.10.1;
#       option netbios-name-servers     192.168.10.1;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
#       option netbios-node-type 2;

        range dynamic-bootp 192.168.0.100 192.168.0.200;
        default-lease-time 21600;
        max-lease-time 43200;

        # we want the nameserver to appear at a fixed address
#        host ns {
#                next-server marvin.redhat.com;
#                hardware ethernet 12:34:56:78:AB:CD;
#                fixed-address 207.175.42.254;
#        }
}


後はDHCPを受けるクライアントをBOOTPROTO=dhcpにしてネットワークを再起動してください。

BIND

BINDはDHCPによって割り当てられたIPからホスト名を逆引きするために利用します。
BINDにはGENERATEという拡張機能がありゾーンフィアルを簡略化することができます。

これが通常の逆引きのゾーンファイルです。
200     IN      PTR     client-200.
201     IN      PTR     client-201.
202     IN      PTR     client-202.


サーバ台数が増えるとゾーンファイル内が煩雑になるので以下のように書き換えることができます。
$GENERATE 200-202 $.0.168.192.in-addr.arpa. PTR client-$.


前者と後者は同意になります。

複数セグメントがある場合は
$GENERATE 200-202 $.0.168.192.in-addr.arpa. PTR client-168-$.

とかするとユニークなホスト名が生成できます。

$GENERATE 200-210/2 $.0.168.192.in-addr.arpa. PTR client-${-99,3,d}.

200-210/2

/nはステップになります。
192.168.0.200
192.168.0.202
192.168.0.204
192.168.0.206
192.168.0.208
192.168.0.210
に展開されます。

${-99,3,d}

${オフセット,桁数,ベース(o,d,X,x)}
オフセット
ex)192.168.0.200
200-99=101
逆引きのホスト名はclient-101になる。

桁数
client-{桁数}

ベース
d:小数
o:8進数
X or x:16進数

このようにオプションがあり、自由に規則性を持たせることができます。
GENERATEはPTR以外にもCNAME, DNAME, A, AAAA and NSで利用できます。
BIND Master File Extension: the $GENERATE Directive

ホスト名を逆引きから割り当てる

/etc/sysconfig/network
HOSTNAME=
のように空にして逆引きができれば起動時に動的に割り当てられます。

hostname -fで引けるFQDNやホスト名を固定化させたい場合はhostsに追加するしたり、networkに追記するなどの工夫が必要です。
ChefのOhaiが取得するFQDNはhostname -fの値になるので注意してください。

自動でホスト名を割り当てる基準としてDHCPを利用しているため起動のタイミングによってはIPが変わる可能性があります。
そのため一度逆引きすると固定化するようにnetworkファイルを書き換えたほうが無難です。

PXE+Kickstart+Chefを組み合わせれば電源ポチで構築できるようになります。

0 件のコメント:

コメントを投稿