WebOS Goodies

WebOS の未来を模索する、ゲームプログラマあがりの Web 開発者のブログ。

WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。
Subscribe       

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-domainNIS ドメイン名
domain-nameDNS ドメイン名
domain-name-serversDNS サーバーのアドレス

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-styleDynamicDNS を更新する方法の指定
default-lease-timeIP アドレス貸し出し期間のデフォルト値(秒単位)
max-lease-timeIP アドレス貸し出し期間の最大値(秒単位)

最近のバージョンでは、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 です。

関連記事

この記事にコメントする

Recommendations
Books
「Closure Library」の入門書です。
詳しくはこちらの記事をどうぞ!
Categories
Recent Articles