このページでは、WIDE-DHCPを利用してDHCPサービスを動作させる方法について説明します。
WIDE-DHCPを利用するには、kernelで「BPF(Berkley Packet Filter)」の機能が有効化されている必要があります。
利用しているkernelでbpfが有効化されていない場合には、kernelコンフィグファイルに以下の記述を追加してkernelの再構築してください。
device bpf
pseudo-device bpf
kernelの再構築後、システムを再起動させてください。
WIDE-DHCPはデフォルトでシステムにインストールされていませんので、別途システムにインストールする必要があります。
インストールはportsを利用して行います。
portsの取得および展開方法については、「最新のportsを取得して展開する」を参照してください。
portsの展開が完了した後、下記手順でWIDE-DHCPをmakeし、インストールします。
$ cd /usr/ports/net-mgmt/wide-dhcp $ make config-recursive $ make install clean
WIDE-DHCPの設定ファイルである「dhcpdb.pool」を作成して編集します。
編集したファイルは「/etc」下に保存してください。
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:!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: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)しています。
「3001」〜「3004」迄のセッション(セッション名は任意に変更可能)は、DHCPにより割り当てるIPアドレスのエントリです。
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)います。
「2001」のセッション(セッション名は任意に変更可能)は、PXEブートクライアント(BOOTPクライアント)に対して必要な情報を提供しているエントリです。
WIDE-DCHPでは、PXEを利用してブートイメージを取得しようとするクライアントに対しては、IPアドレスを静的に割り当てることを推奨しています。
これに従い、特定のMACアドレスに対して、クライアントIPアドレス、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」のクライアントに対して適用されることを設定しています。
続いて、WIDE-DHCPが利用するリレーファイル「dhcpdb.relay」を「/etc」下に作成します。
このファイルはWIDE-DHCPが動作するために必須のファイルですので、必ず作成するようにしてください。
$ 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」を再起動させるか、システムを再起動させて設定を有効にしてください。
$ /usr/local/etc/rc.d/wide-dhcps.sh start
上記スクリプトは、絶対パス指定でないとうまく動作しないので注意してください。
システムの再起動後、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が起動に失敗することがあります。
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クライアントの設定方法については、OS等で設定方法が若干異なります。
ここでは、Windows 2000の場合を紹介します。
まず、デスクトップの「マイネットワーク」を右クリックし「プロパティ」を選択します。
以下のような表示がされると思います。
ウインドウ内の「ローカルエリア設定」を右クリックし「プロパティ」を選択します。
以下のような表示がされると思います。
「インターネットプロトコル(TCP/IP)」を選択し、その下の「プロパティ」を選択します。
表示された画面を下記のイメージ通りに設定してください。
「OK」を選択すれば、設定は完了です。
しばらく待つと、指定されたインターフェースにIPアドレスが割り当てられます。
・FreeBSD 8.4-RELEASEでの動作確認を元に記事を一部修正。
・静的割り当てのためのエントリの記述方法を追記。
・BOOTPクライアントのためのエントリの記述方法の部分で、エントリの末尾の「:」が抜けていたのを追加。
・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。
まだ評価がありません |
表示できるメッセージはありません。