isc-dhcp + helper address

今週はかなり忙しかったので全く更新できませんでした。(>_<)絶賛pppoeでの接続にチャレンジ中です。せっかくなのでisc-dhcpとhelper addressを用いてdhcpサーバを行った分もメモ。

まずはインストール


$ wget http://ftp.isc.org/isc/dhcp/dhcp-4.1.0a1.tar.gz
$ tar zxvf dhcp-4.1.0a1.tar.gz
$ cd dhcp-4.1.0a1
$ ./configure --prefix=/usr/local/services/dhcp
$ make
# make install

# mkdir -p /usr/local/services/dhcp/var/run
# touch /usr/local/services/dhcp/etc/dhcpd.leases

こんな感じです。さほど難しくないですね。
起動スクリプトもついでに


#!/bin/sh
#
# dhcpd This shell script takes care of starting and stopping
# dhcpd
# chkconfig: - 20 80
# description: dhcpd is a dns daemon that offers dynamic host configuration protocal
#

DHCPDIR=/usr/local/services/dhcp
PIDFILE=$DHCPDIR/var/run/dhcpd.pid
CONFFILE=$DHCPDIR/etc/dhcpd.conf
LEASEFILE=$DHCPDIR/etc/dhcpd.leases
PROG=$DHCPDIR/sbin/dhcpd
PATH=$DHCPDIR/sbin:$DHCPDIR/bin:/usr/bin:/bin:/usr/sbin:/sbin

. /etc/init.d/functions

start() {
echo -n $"Starting $PROG: "
daemon $PROG -cf $CONFFILE -lf $LEASEFILE -pf $PIDFILE
retval=$?
echo
return $retval
}

stop() {
echo -n $"Stopping $PROG: "
killproc $PROG
retval=$?
echo
return $retval
}

case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $PROG
RETVAL=$?
;;
restart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|status|restart}"
exit 1
esac

exit $?

例の例によって使いまわし。確かバイナリでいれたときの起動スクリプトにはconfigtestっていうチェック用の引数があった気がするので追加してもいいかも。実際のとこはdhcpdになんか引数与えて実行してただけだと思いますが。さて、configはこんな感じです。

  • /usr/local/services/dhcp/etc/dhcpd.conf


option domain-name "home";
option domain-name-servers 172.16.0.xxx;

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

log-facility local6;

subnet 172.16.0.0 netmask 255.255.255.0 {
}

# client server segment
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.100 192.168.0.200;
option routers 192.168.0.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
}

最初の2文は前回のエントリでも述べましたがクライアントに与えるネームサーバのアドレスとドメイン名ですね。リースタイムはクライアントがアドレスを保持し続ける時間です。log-facilityはみてのとおりsyslogのファシリティの指定です。

残りの subnet の部分が実際の払い出しの設定になります。今回はクライアントセグのdhcpdを担うので実際払い出すのは192.168.0.0/24だけなんですが、isc-dhcpdは自分(サーバ自体)が所属しているサブネットの定義もしておかなければエラーになるみたいです。なので172.16.0.0も空だけど定義してあります。まあこんなところですかね。

後は1812J側でこのサーバのアドレスに向けてhelper addressを指定してあげればOKです。こんな感じ。


(config) interface vlan 300
(config-if) ip helper-address 172.16.0.xxx

さてpppoeで接続するぞー。