DHCP サーバーのインストール
今日は、DHCP サーバーの構築をしたいと思います。DHCP サーバーはクライアントに対して動的に IP アドレスやその他の情報を提供する機能を持ちます。最近の OS はデフォルトで DHCP を利用する設定になっている場合が多いので、DHCP サーバーが立っているネットワークでは何の設定もなしにネットワークを利用できます。とくにノート PC などを利用している場合は、ネットワークが変わるごとに設定をやり直す手間がなくなって非常に便利です。
GentooLinux では、Internet Systems Consortium が開発している ISC DHCP が利用できます。BIND と同じ会社ですね。ISC DHCP のマニュアルも bind9.net で参照できます。
ISC DHCP のインストール
ISC DHCP 自体のインストールは、emerge でインストールするだけです。
emerge dhcp
dhcpd.conf の書式
ISC DHCP の設定は、主に "/etc/dhcp/dhcpd.conf" で行います。ISC DHCP はけっこう多機能で、設定項目も多岐にわたりますので、主なところだけ説明していこうと思います。
dhcpd.conf の構成要素
<global-parameters>; ... subnet <subnet-address> netmask <subnet-mask> { <subnet-parameters>; ... } ... host <host-name> { <host-parameters>; ... } ...
- global-parameters
- すべてのサブネットで共通の設定。
- subnet-address
- サブネットのアドレス(ホスト部がすべて 0 の IP アドレス)。
- subnet-mask
- サブネットのネットマスク。
- subnet-parameters
- そのサブネットに固有の設定。
- host-name
- ホスト名。
- host-parameters
- そのホストに固有の設定。
global-parameters でデフォルトの設定を定義し、サブネットごとの設定を subnet ブロックの内部に記述するのが基本です。特定のホストに対して特殊な設定(IP アドレスを固定するなど)を行いたい場合は、host ブロックを記述します。必要なければ host ブロックはなくてもかまいません。
クライアントに渡すパラメータの定義
DHCP の問い合わせに対する応答として実際にクライアントに渡すパラメータのうち、クライアントに貸し出す IP アドレス以外の情報は、すべて option ステートメントで指定します。option ステートメントは、global-permeters, subnet-parameters, host-parameters のいずれにも指定できます。書式は以下のようになります。
option <name> <value>[,<value>...];
name は指定するパラメータ名、value は指定する値です。よく使われるパラメータ名には以下のものがあります。
パラメータ名 | 機能 |
---|---|
routers | デフォルトゲートウェイのアドレス |
subnet-mask | サブネットマスク |
nis-domain | NIS ドメイン名 |
domain-name | DNS ドメイン名 |
domain-name-servers | DNS サーバーのアドレス |
IP アドレスの指定
クライアントに貸し出す IP アドレスを指定するには、range ステートメントか fixed-address ステートメントを使用します。原則的に subnet ブロックの中では range ステートメントを、host ブロックの中では fixed-address を使用します。書式は以下のようになります。
range <low-address> [high-address]; fixed-address <address>;
range ステートメントでは、low-address から high-address までの IP アドレスがクライアントに動的に割り当てられます。high-address は省略でき、その場合は low-address で指定したアドレスのみが貸し出し範囲となります。fixed-address ステートメントで指定する address パラメータは、そのアドレスが所属するサブネットの貸し出し範囲と重なってはいけません。つまり、以下のような指定はできません。
subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.1 192.168.0.254; ... } host foo { fixed-address 192.168.0.1; ... }
host ステートメント
host ステートメントを使用してクライアントに固有の設定を行う場合は、クライアントを特定するために hardware ステートメントでMACアドレスを指定します。
host foo { hardware ethernet 11:22:33:44:55:66; }
ほかに dhcp-client-identifier によるマッチングを使う方法もありますが、ここでは割愛します。
その他の設定
上記以外のステートメントでよく使うのは以下のものです。
ステートメント名 | 機能 |
---|---|
authoritative | 正当な DHCP サーバーであることの宣言 |
ddns-update-style | DynamicDNS を更新する方法の指定 |
default-lease-time | IP アドレス貸し出し期間のデフォルト値(秒単位) |
max-lease-time | IP アドレス貸し出し期間の最大値(秒単位) |
最近のバージョンでは、ddns-update-style の指定が必須になっているようです。今回は DynamicDNS は使わないので、global-parameters として以下のように指定する必要があります。
ddns-update-style none;
dhcpd.conf を記述する
基礎知識がだいたい揃ったところで、実際に "/etc/dhcp/dhcpd.conf" を書いてみます。家庭内 LAN でサブネットもひとつだけなので、ほとんどの設定を global-parameters として記述し、subnet-parameters は IP アドレスの貸し出し範囲の指定のみとしました。
authoritative; deny bootp; ddns-update-style none; default-lease-time 600; max-lease-time 7200; option domain-name "sourcewalker.com"; option domain-name-servers ns.sourcewalker.com; option routers gateway.sourcewalker.com; subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.100 192.168.0.200; }
長々と説明したわりにはえらく簡単ですね(^^;。ただ、2 行目にこれまで触れてこなかった deny ステートメントが使用されています。これは、BOOTP という古いプロトコルを禁止する設定で、セキュリティー的にも指定しておいたほうがよいと思われます。deny ステートメントは記述する場所によって微妙に意味が変わる部分があり、簡潔に説明するのが難しいのです。詳細は bind9.net などを参照してください。
DHCP サーバーを起動する
それでは、さっそく DHCP サーバーを起動してみます。
/etc/init.d/dhcp start
うまく起動したら、デフォルトで起動するように設定しておきます。
rc-update add dhcp default
私は残念ながら DHCP を手軽に動作チェックする方法を知りません。DHCP を利用するように設定された Windows クライアントが用意できれば、コマンドプロンプトで以下のコマンドを実行することで DHCP サーバーから取得した情報を確認できます。
ipconfig /renew ipconfig /all
これで 「DHCP Server」の項目がサーバーの IP アドレスになっていて、その他の情報が正しく設定されていれば OK です。
詳しくはこちらの記事をどうぞ!
この記事にコメントする