isc-dhcpのインストール


パソコンにIPアドレスを割り当てる場合、手動で割り当てる方法と、自動で割り当てる方法があります。 数が少ないうちは、手動で割り当てるのも良いですが、数が多くなってくると大変になってきます。その場合DHCPサーバーを使用して、IPアドレスを割り当てる事が必要になってきます。 DHCPサーバーは、クライアント(FreeBSDに繋いでるパソコン)からの要求を受けて、利用可能なIPアドレスの中から、自動的に、クライアントにIPアドレスを割り当てます。
gra/dhcp_zu1.gif 320×240 (3KB)

isc-dhcpの方がダイナミックDNSに対応しているらしいので、isc-dhcpをインストールしてみました。

isc-dhcpのインストール
一番楽なpackageでインストールしてみました。
適当なディレクトリにpackageのFTPサイトからisc-dhcpのファイルを取ってきて、pkg_addでインストールするだけです。

hoge# pkg_add isc-dhcp3-3.0.1.r6.tgz
hoge# 
hoge# 		.
hoge# 		.
hoge# 		.


フロッピーディスクから、マウントしてインストールする必要のある場合の例。

hoge# mount -t msdos /dev/fd0 /mnt/floppy
hoge# cp /mnt/floppy/isc-dhcp3-3.0.1.r6.tgz /usr/tmp/
hoge# pkg_add /usr/tmp/isc-dhcp3-3.0.1.r6.tgz

dhcpd.confの編集
isc-dhcpの設定ファイルのdhcpd.confを編集します。
/usr/local/etc/にdhcpd.conf.sampleが用意されていますので、このファイルをコピーして使用します。

hoge# cd /usr/local/etc
hoge# cp dhcpd.conf.sample dhcpd.conf

そして、エデイタで編集します。
option domain-name "foo.jp";
option domain-name-servers 192.168.0.15;


default-lease-time 600;
max-lease-time 7200;

ddns-update-style none;

log-facility local7;

subnet 192.168.0.0 netmask 255.255.255.0 {
  range  192.168.0.2 192.168.0.199;
  option broadcast-address 192.168.0.255;
  option routers 192.168.0.15;
}

option domain-name
ドメインネームを指定します。
option domain-name-server
ネームサーバーの名前、もしくはIPアドレスを指定します。
default-lease-time
標準の IP 貸し出し時間です。クライアントが特別な要請を出さない場合にはこの時間になります。(秒単位)
max-lease-time
最大の IP 貸し出し時間です。クライアントから特別な要請に応える場合でもこの時間は越えられません。
ddns-update-style
ダイナミックDNSに対応するための指定です。ここが設定されていないとISC-DHCPは動作しません。(今回はnone)
log-facility local7
DHCPのログをsyslogで吐きますが、ファシリティをlocal7で指定します。
subnet x.x.x.x netmask x.x.x.x
単一のサブネットに対して提供する場合の書き方です。グローバルなオプションもここに書けば、オーバーライドされます。
range
クライアントに割り当てるIP アドレスの範囲を指定します。
option routers
ルータ(ゲートウェイ)のIPアドレスを指定します。
option subnet-mask
クライアントに与えるサブネットマスクを指定します。
broadcast-address
クライアントに与えるブロードキャストアドレスを指定します。
netbios-name-servers
Samba で、WINS を用いる時に使用するWINS サーバのアドレスを与えます。このアドレスが、Sambaサーバである場合には、Samba側でWINSのオプションをonにしておく必要があります。

syslogの設定
/etc/syslog.confをエデイタで編集してdhcpのログを取るようにします。
local7.debug /var/log/dhcp.logの行を追加するだけですが、よく解りませんが、FreeBSDでは!startslipの行の前に記述しておかないと、思うように動作しないようです。
*.notice;news.err                root
*.alert                          root
*.emerg                          *
local7.debug                     /var/log/dhcp.log
!startslip
*.*                              /var/log/slip.log
!ppp
*.*                              /var/log

編集し終えたら、touch /var/log/dhcp.logと打ち込んで、空のログファイルを作成しておきます。

/var/dbのディレクトリの中に、dhcpd.leasesファイルがない場合は作成しておきます。

hoge# touch /var/db/dhcpd.leases

起動スクリプトの作成
isc-dhcpは、/usr/local/sbin/dhcpd [ネットワークカードアドレス]と打ち込めば動作しますが、システム起動時に自動的に立ち上がるように、起動スクリプトを作成しておきます。
作成する場所は、お決まりの/usr/local/etc/rc.d/のディレクトリの中です。
このファイルは/usr/local/etc/rc.d/のディレクトリの中に、あらかじめisc-dhcpd.sh.sampleと言うファイル名で用意されていますので、このファイルをコピーして使用します。

hoge# cp isc-dhcpd.sh.sample isc-dhcpd.sh
hoge# chmod 755 isc-dhcpd.sh


そしてエデイタで編集します。
#! /bin/sh
#
# $FreeBSD: ports/net/isc-dhcp3/files/isc-dhcpd.sh.sample,v 1.4 2001/10/15 13:33:15 roam Exp $
#
# Start or stop isc-dhcpd.
#

rc_file=${0##*/}
rc_arg=$1

# override these variables in ${PREFIX}/etc/rc.isc-dhcpd.conf
dhcpd_options=			# command option(s)
dhcpd_ifaces="ed1"			# ethernet interface(s)

if ! PREFIX=$(expr $0 : "\(/.*\)/etc/rc\.d/${rc_file}\$"); then
	echo "${rc_file}: Cannot determine PREFIX." >&2
	echo "Please use the complete pathname." >&2
	exit 64
fi

rcconf_dir=${PREFIX}/etc
rcconf_file=rc.${rc_file%.sh}.conf
rcconf_path=${rcconf_dir}/${rcconf_file}

if [ -f ${rcconf_path} ]; then
	. ${rcconf_path}
fi

program_dir=${PREFIX}/sbin
program_file=dhcpd
program_path=${program_dir}/${program_file}

config_dir=${PREFIX}/etc
config_file=${program_file}.conf
config_path=${config_dir}/${config_file}

pid_dir=/var/run
pid_file=${program_file}.pid
pid_path=${pid_dir}/${pid_file}

syslog_facility=daemon.err

case "$rc_arg" in
start)
	if [ ! -x ${program_path} ]; then
		logger -sp ${syslog_facility} -t ${program_file} \
			"unable to start: ${program_path} is missing."
		exit 72
	fi
	if [ ! -f ${config_path} ]; then
		logger -sp ${syslog_facility} -t ${program_file} \
			"unable to start: ${config_path} is missing."
		exit 72
	fi
	${program_path} ${dhcpd_options} ${dhcpd_ifaces} &&
	echo -n " ${program_file}"
	;;
stop)
	if [ -r ${pid_path} ]; then
		kill $(cat ${pid_path}) 2> /dev/null
	else
		killall ${program_file} 2> /dev/null
	fi
	;;
restart)
	$0 stop
	$0 start
	;;
status)
	ps -auxww | egrep ${program_file} | egrep -v "($0|egrep)"
	;;
*)
	echo "usage: ${rc_file} {start|stop|restart|status}" >&2
	exit 64
	;;
esac

exit 0


なにやらもの凄く長いサンプルですが、dhcpd_ifaces=の所にネットワークカード名前を書くだけです。(^^;;
編集し終えたら、wide-dhcpの起動スクリプトのパーミッションでも変えて、起動出来なくしておきましょう。


BACK