DHCPサーバーの構築(wide-dhcp)

1.はじめに

イントラに接続されるクライアントマシンのネットワーク設定を簡素化する為にfreeBSDサーバーにDHCPを動かしましょう!
これはMACアドレスに応じでIPアドレスを固定できます。なので例えばとある1台しかfreeBSDのSSH接続を許可したくないなど
名前解決に関してもDHCPとはいえIP固定になりますので扱いやすいです。
クライアントマシンのネットワーク設定は全てサーバーから取得するで動きますので、ノートPCのように持ち出す事のある
場合などとても便利になります。

2.インストール

これまたパッケージでインストールしてしまいましょう!
# pkg_add -r wide-dhcp
これだけでインストールは終了です。
もしくは
/stand/sysinstall
Webmin
などからでもインストールして下さい。

3.設定

3−1.カーネル

まずカーネルの再構築が必要な場合が有ります。
自分の作成したカーネルの設定ファイルを見て下さい。
以下の行が無い場合は追加(修正)してカーネル再構築+インストールしてください。
device bpf

3−2.wide-dhcps.sh編集

DHCPサーバーデーモンを走らせるシェルを編集します。
/usr/local/etc/rc.d/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 fxp0   #DHCPを走らせるインターフェース名
                echo -n ' dhcps'
        fi
        ;;
stop)
        killall dhcps && echo -n ' dhcps'
        ;;
*)
        echo "Usage: `basename $0` {start|stop}" >&2
        ;;
esac

exit 0
fxpの部分をDHCPを走らせるインターフェース名に修正して下さい。

3−3.dhcpdb.relay作成

使わないが無いと行けないらしいので以下のコマンドで
空のファイルをつくっておく
# touch /etc/dhcpdb.relay

3−4.dhcpdb.pool作成

このファイルがDHCPのメインとなる設定を書くファイルである。
/etc/dhcpdb.pool を編集する
global:!snmk=255.255.255.0:tmof=32400:
internal:tblc=global:rout=192.168.1.1:dht1=500:dht2=850:\
        :brda=192.168.1.255:dnsv=192.168.1.1 202.238.95.26:dnsd=hogehoge.org:nnsv=192.168.1.1:
1:      :ipad=192.168.1.2:hstn="windows1.hogehoge.org":clid="1:0x0123456789ab":tblc=internal:
2:      :ipad=192.168.1.3:hstn="windows2.hogehoge.org":clid="1:0x123456789abc":tblc=internal:
3:      :ipad=192.168.1.4:hstn="windows3.hogehoge.org":clid="1:0x23456789abcd":tblc=internal:
4:      :ipad=192.168.1.5:hstn="windows4.hogehoge.org":clid="1:0x3456789abcde":tblc=internal:
5:      :ipad=192.168.1.6:dfll=3600:maxl=7200:tblc=internal:
6:      :ipad=192.168.1.7:dfll=3600:maxl=7200:tblc=internal:
7:      :ipad=192.168.1.8:dfll=3600:maxl=7200:tblc=internal:
8:      :ipad=192.168.1.9:dfll=3600:maxl=7200:tblc=internal:
各項目の説明をします
snmk=255.255.255.0・・・・・・・・DHCPサーバーを稼働させるイントラ側のサブネットマスク
tmof=32400・・・・・・・・・・・・・・オフセット時間(日本は+32400秒)
internal・・・・・・・・・・・・・・・・・・名前なので何でもかまいません
tblc=global・・・・・・・・・・・・・・・わかりません同じにしておきましょう
rout・・・・・・・・・・・・・・・・・・・・DHCPで出力するIPアドレス(freeBSDのイントラ側IPアドレス)
dht1,dht2・・・・・・・・・・・・・・・・有効時間関係だと思う
\・・・・・・・・・・・・・・・・・・・・・・行が続くが改行したい場合は入れる
brda・・・・・・・・・・・・・・・・・・・・ブロードキャストアドレス
dnsv・・・・・・・・・・・・・・・・・・・クライアントが使用するDNSサーバーアドレス
dnsd・・・・・・・・・・・・・・・・・・・ドメイン名(イントラなので自由ですがrc.confと同じにしてください)
nnsv・・・・・・・・・・・・・・・・・・・WINSサーバーアドレス(freeBSDマシンをWINSサーバーにしてた場合など)
1〜8は行番号
ipad・・・・・・・・・・・・・・・・・・・IPアドレス
hstn・・・・・・・・・・・・・・・・・・ホスト名
clid="1:0x************"・・・・・・・・・MACアドレスを入れる
tblc・・・・・・・・・・・・・・・・・・・上で入れたinternalの名前との関連させる
MACアドレスの記入の無いIPアドレス割り当てはMACアドレスがどれにも一致しない場合に割り当てるアドレスである。
最初は必ず作っておいて、Windowsマシンで希望のアドレスが割り当てられるまでは削除しないでおきましょう。

4.起動

立ち上げ直せば自動でシェルが走りDHCPサーバーが動き出すはずです。
コマンドラインからは
# /usr/local/etc/rc.d/wide-dhcps.sh start
で起動するはずです。
あとはクライアントマシンを接続してもらったネットワーク設定を確認して見ましょう!