4. DHCP サーバのセットアップ

4.1. UNIX 用の DHCP サーバ

U*X ライク OS 用の DHCP サーバはいくつか存在します。 商用のものもフリーのものもあります。フリーの DHCP サーバの中で よく使われているものは Paul Vixie の ISC DHCPd でしょう。 現在の最新版は 2.0 (ほとんどのユーザはこちらが良いでしょう) ですが、 3.0 もβテストの段階です。 次に掲げるリンクから入手可能です。

ftp://ftp.isc.org/isc/dhcp/

バイナリパッケージが収録されているディストリビューションもあります。 それを使う場合は、次のセクションは飛ばしてください。

ダウンロードしたら展開します。 展開したら、配布ソースのディレクトリに cd して、 ./configure を実行します。

設定にはしばらく時間がかかるでしょう。終わったら、 makemake install を実行します。

4.2. DHCP サーバの設定

インストールが終わったら、 ifconfig -a と入力してください。 以下のような表示が出るはずです。

eth0      Link encap:10Mbps Ethernet  HWaddr 00:C0:4F:D3:C4:62
          inet addr:183.217.19.43  Bcast:183.217.19.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2875542 errors:0 dropped:0 overruns:0
          TX packets:218647 errors:0 dropped:0 overruns:0
          Interrupt:11 Base address:0x210

MULTICAST という文字が現れない場合はカーネルを設定しなおして multicast のサポートを追加する必要があります。ほとんどのシステムでは これは不要でしょう。

次に行うことは 255.255.255.255 への経路の追加です。 DHCPd の README から引用します。

「dhcpd を細かいことにうるさい DHCP クライアント (例えば Windows 95 のものなど) と正しく動作させるには、dhcpd は destination address が 255.255.255.255 の IP パケットを送ることができるようになっている必要があります。残念ながら Linux は 255.255.255.255 をローカルなサブネットのブロードキャスト (ここでは 192.5.5.223) に変換してしまうのです。 この結果は DHCP プロトコルに違反することになります。 たいていの DHCP クライアントはこれに気がつきませんが、 気がつくもの (例えば Microsoft の DHCP クライアントは全てそうです) もあります。 後者の様なクライアントはサーバからの DHCPOFFER メッセージを受信する事ができないのです。」

次のように入力しましょう。 route add -host 255.255.255.255 dev eth0

もしも "255.255.255.255: Unknown host" のようなメッセージが出力された場合は、 次のようなエントリを /etc/hosts ファイルに追加する必要があります。

255.255.255.255 all-ones

追加したら

route add -host all-ones dev eth0

あるいは

route add 255.255.255.0 dev eth0

としてください。 もちろん eth0 は使おうとしている ネットワークデバイス名です。異なる場合は適宜変更してください。

4.3. DHCPd のオプション

ここで DHCPd を設定しなければなりません。 /etc/dhcpd.conf を編集 (なければ作成) します。KDE ( http://www.kde.org/ ) には、kcmdhcpd という、GUI による dhcpd の設定ツールがあります。Windows NT の DHCP コンフィグレータに極めてよく似ています。 KDE 2.0 がリリースされれば、kcmdhcpd もリリースされるはずです。 次に掲げるリンクからも入手できます。

ftp://ftp.us.kde.org/pub/kde/unstable/apps/network/

訳注: 現時点で KDE-2.0.1 がリリースされていますが、 kdenetwork-2.0.1 には kcmdhcpd は含まれていません。

直接 DHCPd を設定したければ、以下の指示に従ってください。

たいていの人がやりたいと思うのは IP アドレスをランダムに割り当てることでしょう。 これには以下のような設定を用います。

# Sample /etc/dhcpd.conf
# (add your comments here) 
default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option domain-name-servers 192.168.1.1, 192.168.1.2;
option domain-name "mydomain.org";

subnet 192.168.1.0 netmask 255.255.255.0 {
   range 192.168.1.10 192.168.1.100;
   range 192.168.1.150 192.168.1.200;
}

こうすると DHCP サーバがクライアントに与える IP アドレスは 192.168.1.10-192.168.1.100 または 192.168.1.150-192.168.1.200 の範囲となります。特にクライアントからの時間枠の要求がなければ、 600 秒の間 IP アドレスが貸し出されます。要求があった場合に最大限許される貸し出し時間は 7200 秒です。またサーバはクライアントに 255.255.255.0 をサブネットマスクとして用い、 192.168.1.255 をブロードキャストアドレスとして用い、 192.168.1.254 をゲートウェイとして用い、 192.168.1.1 か 192.168.1.2 を DNS サーバとして用いるように 「アドバイス」します。

Windows クライアントに WINS サーバを教えてあげる必要がある場合は、 netbios-name-servers オプションを書く必要があります。 具体例を以下に示します。

option netbios-name-servers 192.168.1.1;

特定の IP アドレスをクライアントの Ethernet アドレスに応じて 割り当てることもできます。

host haagen {
   hardware ethernet 08:00:2b:4c:59:23;
   fixed-address 192.168.1.222;
}

このようにすると IP アドレス 192.168.1.222 が Ethernet アドレス 08:00:2b:4c:59:23 を持ったクライアントに 割り当てられます。

これらを適当に混ぜる事もできます。つまり特定のクライアントには静的な IP アドレスを与え (サーバなど)、他には動的な IP を与える (ラップトップユーザなど) ことができます。 他にもたくさんのオプションがあります。 nis サーバのアドレスを与えたり、タイムサーバを教えたり、などです。これらが必要な場合は dhcpd.conf のマニュアルページを読んでください。

4.4. サーバを起動する

サーバを起動する前に一つだけやっておかねばならないことがあります。 多くの場合、DHCP サーバをインストールしても dhcpd.leases ファイルが作成されません。 このファイルは、現在の IP アドレス貸し出しに関する情報を保存するためにDHCPd が使うものです。プレインテキストの形式なので、 DHCPd を操作している間に見ることができます。 dhcpd.leases を作成するには、次のようにします。
touch /var/state/dhcp/dhcpd.leases

これで空のファイル(ファイルサイズ = 0)が作成されます。 dhcpd 2.0 以前のバージョンの中には、 /etc/dhcpd.leases を使うものがありました。 貸し出し情報ファイルを編集する必要はありません。 DHCPCd が自動的に操作します。 「ファイルが存在します」というようなメッセージを受けたとしても、 無視して次に進んで構いません。

いよいよ DHCP サーバを起動できます。単に以下のように入力 するだけです (あるいはブートアップスクリプトに書きます)。

/usr/sbin/dhcpd

このコマンドは、DHCP サーバを eth0 デバイスに対して起動します。 他のデバイスで起動したければ、 単にそのデバイス名をコマンドラインで渡してください。 具体例を以下に示します。

/usr/sbin/dhcpd eth1

ちゃんと動作しているかどうかを確かめたい場合は、 まずデバッグモードをオンにしてサーバをフォアグラウンドで 実行してみましょう。以下のようにします。

/usr/sbin/dhcpd -d -f

そしてどれかクライアントを一つブートしてみて、 サーバのコンソールを確認しましょう。 たくさんのデバッグメッセージが現れるはずです。 全てがうまくいっているようなら、完了です :-) dhcpd を終了して -d -f オプション無しで起動しましょう。 ブート時に dhcpd を起動したいのであれば、 例えば次のファイルに dhcpd を追加するといいでしょう。

/etc/rc.d/rc.local

4.5. その他の興味深い文書

Linux Magazine (訳注: 日本のものではありません) の2000年4月号には、非常によい記事が掲載されています。 ネットワークの楽園 (Nirvana):ネットワークの設定を DHCP 並に簡単にする方法 という題名で、DHCP のセットアップについて述べられています。