DHCPサーバを構築する (WIDE-DHCP)

対象プラットフォーム: FreeBSD 8.x / FreeBSD 7.x / FreeBSD 6.x
(下記手順を2017/06/28にFreeBSD 8.4-RELEASEで確認済み)


はじめに

このページでは、WIDE-DHCPを利用してDHCPサービスを動作させる方法について説明します。

kernelの再構築

WIDE-DHCPを利用するには、kernelで「BPF(Berkley Packet Filter)」の機能が有効化されている必要があります。
利用しているkernelでbpfが有効化されていない場合には、kernelコンフィグファイルに以下の記述を追加してkernelの再構築してください。

kernelコンフィグファイルへの追記(FreeBSD 5.x/6.x)
device    bpf

kernelコンフィグファイルへの追記(FreeBSD 4.x)
pseudo-device    bpf

kernelの再構築後、システムを再起動させてください。

WIDE-DHCPのビルド

WIDE-DHCPはデフォルトでシステムにインストールされていませんので、別途システムにインストールする必要があります。

インストールはportsを利用して行います。
portsの取得および展開方法については、「最新のportsを取得して展開する」を参照してください。

portsの展開が完了した後、下記手順でWIDE-DHCPをmakeし、インストールします。

WIDE-DHCPのインストール
$ cd /usr/ports/net-mgmt/wide-dhcp
$ make config-recursive
$ make install clean

「dhcpdb.pool」の設定

WIDE-DHCPの設定ファイルである「dhcpdb.pool」を作成して編集します。
編集したファイルは「/etc」下に保存してください。

「/etc/dhcpdb.pool」の例
global:!snmk=255.255.255.0:tmof=32400:

local-net:tblc=global:rout=192.168.16.1:brda=192.168.16.255:dnsv=192.168.16.1:dnsd=kishiro.local:

1001: :ipad=192.168.16.64:hstn="static-01":tblc=local-net:clid="1:0x001122334455":

2001: :ipad=192.168.16.128:hstn="bootp-01":albp=true:siad=192.168.16.1:file="pxeboot":tblc=local-net:clid="1:0x002233445566":

3001: :ipad=192.168.16.224:hstn="dhcp-01":dfll=3600:maxl=7200:tblc=local-net:
3002: :ipad=192.168.16.225:hstn="dhcp-02":dfll=3600:maxl=7200:tblc=local-net:
3003: :ipad=192.168.16.226:hstn="dhcp-03":dfll=3600:maxl=7200:tblc=local-net:
3004: :ipad=192.168.16.227:hstn="dhcp-04":dfll=3600:maxl=7200:tblc=local-net:

ファイル内記述は、先頭にセッション名を記載し、区切り文字に「:」を利用して設定を連ねて記述する、termcap形式を拡張した記述方式になっています。

「global」セッション

「global」セッションは、全てのセッションで有効な設定を記載する箇所です。

「global」セッションの記述(抜粋)
global:!snmk=255.255.255.0:tmof=32400:

上記の例では、サブネットマスクを「255.255.255.0」に(snmk=255.255.255.0)、ローカル時間のGMTからのオフセットを「32400(秒単位、9時間に相当)」に設定(tmof=32400)しています。

「local-net」セッション

「local-net」セッション(セッション名は任意に変更可能)は、ローカルネットワークの設定を記述しているセッションです。

「local-net」セッションの記述(抜粋)
local-net:tblc=global:rout=192.168.16.1:brda=192.168.16.255:dnsv=192.168.16.1:dnsd=kishiro.local:

上記の例では、基本的な設定は「global」セッションを継承し(tblc=global)、デフォルトゲートウェイアドレス(=ルータアドレス)を「192.168.16.1」に設定(rout=192.168.16.1)、ブロードキャストアドレスを「192.168.16.255」に設定(brda=192.168.16.255)、DNSサーバのアドレスを「192.168.16.1」に設定(dnsv=192.168.16.1)、ドメインを「kishiro.local」に設定(dnsd=kishiro.local)しています。

通常のDHCP用セッション

「3001」〜「3004」迄のセッション(セッション名は任意に変更可能)は、DHCPにより割り当てるIPアドレスのエントリです。

通常のDHCPクライアントに対する応答用エントリ(抜粋)
3001: :ipad=192.168.16.224:hstn="dhcpc-01":dfll=3600:maxl=7200:tblc=local-net:

上記の例では「192.168.16.224」のIPアドレスを割り当て(ipad=192.168.16.224)、ホスト名を「dhcpc-01」に設定(hstn="dhcpc-01")、IPアドレスのデフォルトでのリリース時間を「3600(秒単位、1時間に相当)」に、最長保持可能時間を「7200(秒単位、2時間に相当)」に設定しています。
また、それ以外の設定を「local-net」セッションから継承して(tblc=local-net)います。

BOOTP用のセッション

「2001」のセッション(セッション名は任意に変更可能)は、PXEブートクライアント(BOOTPクライアント)に対して必要な情報を提供しているエントリです。

WIDE-DCHPでは、PXEを利用してブートイメージを取得しようとするクライアントに対しては、IPアドレスを静的に割り当てることを推奨しています。
これに従い、特定のMACアドレスに対して、クライアントIPアドレス、PXEブートイメージの場所等を通知する形式でエントリを記述します。

PXEブートクライアントに対する応答用エントリ(抜粋)
2001: :ipad=192.168.16.128:hstn="bootp-01":albp=true:siad=192.168.16.1:file="pxeboot":tblc=local-net:clid="1:0x002233445566":

「ipad=192.168.16.128」は、PXEブートクライアントに払い出すIPアドレス、「bootp-01」は割り当てるホスト名、「albp=true」はPXEブートクライアントに対してIPアドレスを払い出す為の設定(「このエントリはBOOTPを利用した要求にのみ応答する」の意味)、「siad=192.168.16.1」はPXEブートイメージの取得先であるtftpサーバのIPアドレス、「file="pxeboot"」はPXEブートクライアントがブートに利用するPXEブートイメージのパスになります。

PXEブートイメージを提供するサーバにおいて、tftpが「tftpd -s /home/tftp」で起動され、かつ上記のように「file="pxeboot"」と指定された場合、PXEブートイメージは絶対パス「/home/tftp/pxeboot」に配置されている必要があります。

また、「clid="1:0x002233445566"」は、このエントリの設定がMACアドレス「00:22:33:44:55:66」のクライアントに対して適用されることを設定しています。

静的割り当て用のセッション

「1001」のセッション(セッション名は任意に変更可能)は、特定のMACアドレスのマシンに静的なIPアドレスを割り当てるためのエントリです。

基本的な記述方法は、BOOTP用のセッションとほぼ同じです。

静的割り当て用のエントリ(抜粋)
1001: :ipad=192.168.16.64:hstn="static-01":tblc=local-net:clid="1:0x001122334455":

「ipad=192.168.16.64」は、PXEブートクライアントに払い出すIPアドレス、「static-01」は割り当てるホスト名、「clid="1:0x001122334455"」は、このエントリの設定がMACアドレス「00:11:22:33:44:55」のクライアントに対して適用されることを設定しています。

「dhcpdb.relay」の作成

続いて、WIDE-DHCPが利用するリレーファイル「dhcpdb.relay」を「/etc」下に作成します。
このファイルはWIDE-DHCPが動作するために必須のファイルですので、必ず作成するようにしてください。

「dhcpdb.relay」の作成
$ touch /etc/dhcpdb.relay

実行スクリプトの設定

次に、WIDE-DHCPの実行スクリプトの設定を行います。
WIDE-DHCPの実行スクリプトのサンプルは「/usr/local/etc/rc.d/」下に「wide-dhcps.sh.sample」の名で格納されています。
このサンプルスクリプトを下記の手順で「wide-dhcps.sh」という名でコピーします。

実行スクリプトのコピー
$ cd /usr/local/etc/rc.d/
$ cp wide-dhcps.sh.sample wide-dhcps.sh

次に、コピーした「wide-dhcps.sh」の中身を編集します。
このファイルの中身は、下記のようになっています。

実行スクリプトの中身
#!/bin/sh

if ! PREFIX=$(expr $0 : "\(/.*\)/etc/rc\.d/$(basename $0)\$"); then
    echo "$0: Cannot determine the PREFIX" > &2
    exit 1
fi

DB_POOL=/etc/dhcpdb.pool
DB_RELAY=/etc/dhcpdb.relay
DB_BIND=/var/db/dhcpdb.bind

case "$1" in
start)
       if [ -f ${DB_POOL} -a -f ${DB_RELAY} -a -x ${PREFIX}/sbin/dhcps ]; then
                if [ -f ${DB_BIND} ]; then
                        find ${DB_POOL} -newer ${DB_BIND} -exec rm ${DB_BIND} \;
                fi
                ${PREFIX}/sbin/dhcps [Interface Name]
                echo -n ' dhcps'
        fi
        ;;
stop)
        killall dhcps && echo -n ' dhcps'
        ;;
*)
        echo "Usage: `basename $0` {start|stop}" >&2
        ;;
esac

exit 0

設定ファイル中段の「[Interface Name]」の個所を、DHCPを適用する側のネットワーク(上記の例では、「192.168.16.0/24」)に接続しているインターフェース(「fxp0」や「rl0」など)に置き換えます。

WIDE-DHCPの起動方法

上記の設定が完了後、下記のようにして「WIDE-DHCP」を再起動させるか、システムを再起動させて設定を有効にしてください。

WIDE-DHCPの起動
$ /usr/local/etc/rc.d/wide-dhcps.sh start

上記スクリプトは、絶対パス指定でないとうまく動作しないので注意してください。

WIDE-DHCPの起動確認

システムの再起動後、WIDE-DHCPが起動しているかどうかを確認するには、以下のようにします。

WIDE-DHCPの起動確認
$ ps -ax | grep dhcps

以下のような表示がされれば、WIDE-DHCPは動作しています。
(逆に動作していない場合は、何も表示されません。設定ファイルに誤りがないか、実行スクリプトに実行属性が付与されているか、「dhcpdb.relay」ファイルが正しく生成されているかを確認してください。)

正常動作時の実行結果
xxx  ??  Is     0:23.76 /usr/local/sbin/dhcps fxp0

先頭の「xxx」にはプロセス番号が表示されます。また、最後の「fxp0」は、WIDE-DHCPがDHCPサービスを提供しているネットワークインターフェースです。(実行スクリプト内で指定したネットワークインターフェースと同一です。)

尚、WIDE-DHCPの設定を変更した後、WIDE-DHCPを再起動させると、稀に以下のようなエラーが標準エラー出力に表示され、WIDE-DHCPが起動に失敗することがあります。

WIDE-DHCPの再起動時に稀に発生するエラーメッセージ
dhcps[xxxxx]: hash_ins() with client identifier failed in  read_bind_db()

これは、「/var/db/dhcpdb.bind」に、重複するMACアドレスのエントリが記録されることにより発生します。
「/var/db/dhcpdb.bind」はテキストファイルですので、テキストエディタで重複するMACアドレスのエントリの古いほうを削除して、WIDE-DHCPを再起動させてください。

DHCPクライアントの設定

前項までは、DHCPサーバ側の設定について説明しましたが、以下ではDHCPクライアント側での設定について説明します。

DHCPクライアントの設定方法については、OS等で設定方法が若干異なります。
ここでは、Windows 2000の場合を紹介します。

Windows 2000での設定方法

まず、デスクトップの「マイネットワーク」を右クリックし「プロパティ」を選択します。
以下のような表示がされると思います。

image

ウインドウ内の「ローカルエリア設定」を右クリックし「プロパティ」を選択します。
以下のような表示がされると思います。

image

「インターネットプロトコル(TCP/IP)」を選択し、その下の「プロパティ」を選択します。
表示された画面を下記のイメージ通りに設定してください。

image

「OK」を選択すれば、設定は完了です。
しばらく待つと、指定されたインターフェースにIPアドレスが割り当てられます。

変更履歴

2017/06/28

・FreeBSD 8.4-RELEASEでの動作確認を元に記事を一部修正。

2009/04/23

・静的割り当てのためのエントリの記述方法を追記。
・BOOTPクライアントのためのエントリの記述方法の部分で、エントリの末尾の「:」が抜けていたのを追加。


あなたの探し物は見つかりましたか?
まさにこれだ
参考になった
ちょっと違う
これじゃない

何かメッセージがあればお願いします

このメッセージを非公開にする

ご注意

・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。


まだ評価がありません

表示できるメッセージはありません。


目次に戻る
image