dhcpd 3.0.3 を daemontools で起動してみる
SERVER
dhcpd
dhcpd は DHCP サービスを提供するプログラムで、これを利用することでクライアントコンピュータをネットワークに参加させる際に IP アドレスなどのネットワーク設定を自動化することが出来るようになります。
この dhcpd はバージョン 3 から自動的に DDNS へも登録を行うことができるそうなので、たとえば Windows 2000 以降のドメインのように DDNS を伴うような場面などで、なかなか便利なところです。
以前にも EZ-NET: dhcpd 3.0pl2 のインストール で紹介したこともありますけど、今回は再び Slackware 10.2 で DHCP サーバを構築しようと思ったので、改めて記録に残しつつやってみようと思います。
今回の環境は http://www.slackware.com/ にて公開されていた Slackware 10.2 に ftp://ftp.isc.org/isc/dhcp/ にて公開されていた DHCP 3.0.3 をインストールしてみることにしました。
dhcpd の入手とインストール
dhcpd 3.0.3 のインストール作業については、以前にやった時と大差ない感じでしたけど、せっかくなので手順を記しておこうと思います。
ftp://ftp.isc.org/isc/dhcp/ より "dhcpd-3.0.3.tar.gz" をダウンロードしたら、これを /usr/local/src/ へコピーして、次のようにして圧縮ファイルを展開します。
cd /usr/local/src
tar xvzf dhcpd-3.0.3.tar.gz
展開が終わったらそのディレクトリ内へ移動して、次のようにしてインストールを行います。
cd dhcpd-3.0.3/
./configure
make
make install
DHCP サーバを設定する
続いて DHCP サーバの設定です。設定は /etc/dhcpd.conf という名前のファイルを用意してそこへ記載する形となります。設定例はソースファイルを展開したディレクトリの server/dhcpd.conf にありますので、コピーするなり参考にするなりして用意しましょう。
今回の自分の環境では、次のような感じとなりました。
設定内容は以前の EZ-NET: dhcpd 3.0pl2 のインストール と同じような感じですけど、"server-identifier" というサーバ名を定義する設定ができると言うことを知ったのと、せっかくなので MAC アドレスに対して IP を固定的に割り当てるのも追記しておきました。
server-identifier dhcp.ez-net.dummy;
ddns-update-style interim;
option domain-name "ez-net.dummy";
option domain-name-servers 192.168.0.2 192.168.0.3;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
lease-file-name "/var/state/dhcp/dhcpd.leases";
# 192.168.0.0/24 ネットワークの自動設定内容です。
subnet 192.168.0.0 netmask 255.255.255.0
{
range 192.168.0.128 192.168.0.254;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
option domain-name-servers 192.168.0.1;
option domain-name "ez-net.dummy";
option netbios-name-servers 192.168.0.1;
option netbios-node-type 8;
option ntp-servers 192.168.0.1;
}
# MAC アドレス 00:00:00:00:00:00 に対して、名称を "client1" の "IP" 192.168.0.10 を割り当てます。
host client1
{
hardware ethernet 00:00:00:00:00:00;
fixed-address 192.168.0.10;
}
ここで特に重要となるのが、"ddns-update-style" の部分です。
ここで "interim" を指定することによって、その下に指定された domain-name と domain-name-servers の情報を使ってその DNS サーバへホストの登録を試みてくれるそうです。逆に DDNS を利用する予定がない場合は、ここを "add-hoc" と指定するそうです。ちなみに lease-time の設定は秒単位です。
/etc/dhcpd.conf の準備が出来たら、あらかじめ次のようにしてリースファイルを作成しておくと良さそうです。
mkdir /var/state
mkdir /var/state/dhcp
touch /var/state/dhcp/dhcpd.leases
DHCP サーバを svscan で起動する
前回は Slackware で標準的な起動方法をつかって dhcpd を起動させてみましたけど、今回は qmail などで馴染みのある daemontools を用いて起動させてみることにしました。
daemontools に含まれる svscan というプログラムは、予期しないプログラムの停止時にプログラムを復帰してくれるところがなんだか安心なので、何かと好んで使うことが多いのでした。なお、daemontools の組み込みについては Slackware 10.0 へ daemontools を組み込んでみる を参照してください。
まずは "/var" ディレクトリ内に "dhcpd" ディレクトリを作成したら、そのディレクトリに "sticky bit" を設定します。
mkdir /var/dhcpd
chmod +t /var/dhcpd
そして、そのディレクトリに次のような内容で "run" スクリプトを用意します。
ここでは "-f" オプションを使ってフォアグラウンドで実行することと、"exec" コマンドを用いて起動することの 2 点が特に重要です。また、内部ネットワークのみに IP アドレスの提供を行うように、引数にインターフェイス名 "eth0" も設定しておくことにしました。
#!/bin/sh
DHCPD_BIN="/usr/sbin/dhcpd -f"
DHCPD_LISTEN="eth0"
exec ${DHCPD_BIN} ${DHCPD_LISTEN} 2>&1
続いてログを収集するためのディレクトリを作成します。
mkdir /var/dhcpd/log
そしてその "/var/dhcpd/log" ディレクトリの中に、次のような "run" スクリプトを用意します。
#!/bin/sh
exec /usr/local/bin/multilog t ./main =status
そうしたら、これらのスクリプトに実行可能権限を設定しておきましょう。
chmod +x /var/dhcpd/run
chmod +x /var/dhcpd/log/run
あとは次のようにして "/service" ディレクトリ内に "/var/dhcpd" へのシンボリックリンクを作成すれば、数秒のうちに dhcpd が稼動します。
ln -s /var/dhcpd /service