作成開始 : 平成21年04月12日(日) 最終更新 : 平成22年02月28日(日)

DHCPサーバーを試す


DHCPとは・・・・・

インターネットに一時的に接続するコンピュータに、IPアドレスなど必要な情報を自動的に割り当てるプロトコル。DHCPサーバには、ゲートウェイサーバやDNSサーバのIPアドレスや、サブネットマスク、クライアントに割り当ててもよいIPアドレスの範囲などが設定されており、アクセスしてきたコンピュータにこれらの情報を提供する。クライアントが通信を終えると自動的にアドレスを回収し、他のコンピュータに割り当てる。DHCPを使うとネットワークの設定に詳しくないユーザでも簡単にインターネットに接続することができ、また、ネットワーク管理者は多くのクライアントを容易に一元管理することができる。

・・・・とのことです。

わが家ではあえて DHCP でIPアドレスを取得するほどクライアントPCは多くないが、たまに人のPC修復やノートPCを持って出先で使用する時がある。
自宅のルータにもその機能はあるが、検証も兼ねてインストール、設定してみた。
なお、ルータのDHCP機能は停止しておいた。


1.インストールしたPC

Mail、Ntp、Dns の各サーバーとして常時稼動している「 PC-9821Ne 」にインストールした。
CPU : 33MHz MEM : 14Mbyte HDD : 350Mbyte -> 1.2GByteに換装 という超々低スペックである。
OS は FreeBSD 4.5-RELEASE である。

2.インストール

/stand/sysinstall でパッケージを選択してインストールした。
最新ソースをダウンロードしてコンパイルしても良かったがそこまでしなくてもまぁいいかーである。
パッケージ名は「 isc-dhcp3-3.0.1.r4 」、バイナリ名は「 isc-dhcp3-3.0.1.r4.tar.gz 」である。
最新ソースとかは ここ からどうぞ。

3.設定

インストールすると色んなところにファイルできるけど、関係する部分のみ記述します。
# cp /usr/local/etc/dhcpd.conf.sample /usr/local/etc/dhcpd.conf ・・・・ で conf ファイルを作成します。
# chmod 644 /usr/local/etc/dhcpd.conf ・・・ で root に書込み権限を付与します。
vi で /usr/local/etc/dhcpd.conf を編集します。
オリジナルは以下のとおりでした。
自分の環境にあわせ以下を訂正・追記しました。
MACアドレスで配布するIPアドレスを固定したりとか色々できますが、まぁそれは必要になった時にします。
# option definitions common to all supported networks...
option domain-name "takaq.jp";

# option domain-name-servers ns1.example.org, ns2.example.org;
option domain-name-servers 192.168.1.7;

# Nao tentar atualizar o DNS. -> この分は起動時メッセージ見て追加しました。
ddns-update-style none;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.60 192.168.1.100;
  option routers 192.168.1.1;
}
※bind とかで ddns-update使って ddns する場合「 ddns-update-style interim; 」としておきます。
# cp /usr/local/etc/rc.d/isc-dhcpd.sh /usr/local/etc/rc.d/dhcpd.sh で起動ファイルを作成します。
オリジナルは以下のとおりでした。修正はなしでそのまま使いました。
ネットワークが複数ある場合は「 dhcpd_ifaces= 」に使用するインタフェースを記述します。(Ex : dhcpd_ifaces=fe0 )
# touch /var/db/dhcpd.leases でリース情報用ログファイルを作成します。これしないと起動しません。

4.起動

# /usr/local/etc/rc.d/dhcp.sh start で起動します。
この時、設定ファイルや環境で足りないファイルなどがあったりするとメッセージで知らせてきます。
その都度見直し・修正とかして起動、修正を繰り返します。
正常時は次ぎのようなメッセージでした。
Internet Software Consortium DHCP Server V3.0.1rc4
Copyright 1995-2001 Internet Software Consortium.
All rights reserved.
For info, please visit http://www.isc.org/products/DHCP
Wrote 0 deleted host decls to leases file.
Wrote 0 new dynamic host decls to leases file.
Wrote 2 leases to leases file.
Listening on BPF/fe0/00:80:3d:04:60:1a/192.168.1.0/24
Sending on BPF/fe0/00:80:3d:04:60:1a/192.168.1.0/24
Sending on Socket/fallback/fallback-net
dhcpd
これで、OS起動時は自動で起動します。

5.テスト

クライアントPC( WindowsXP) の TCP-IP を次のようにします。
うまく取得できたか確認します。

  ↑
どうやらとれていますね。(設定範囲の後ろからかい!)
これで、他のホストへの ping とかインターネットでWebサイト閲覧とかができればOKですね。

平成21年04月14日(火) 追記

これまでの設定のままでは、LAN内でDHCPにてアドレス取得したPCの名前解決ができないので、ApacheのアクセスログやCCIの判定などで生のIPアドレスだけになったしまうし、tcpwrapperとかでドメイン名でアクセス許可している場合はアクセスできず許可するIPアドレスの範囲を書く必要があります。
わが家では、tinydns を使ってLAN内の名前解決していますが、これには bind の ddns-update機能が無いので tinydns の data に DHCP で払い出すIPアドレス分の記述を追加してmake しました。
[参考] -> /var/db/dhcpd.leases です。

平成21年04月20日(月) 追記

/var/db/dhcpd.leasesの 貸し出し期間の starts, ends の時刻はグリニッジ平均時 (GMT) で指定され、ローカルのタイムゾーンではありません。実はグリニッジは年内のある期間サマータイムになるので、貸し出しの時刻が常に壁時計時刻と同じになるところは、世界中のどこにも存在しません。 Unix マシンでは、GMT での現時刻は date -u と入力すればわかります。 ・・・・ とのことです。

平成21年04月23日(木) 追記

dhcp_dns で isc-dhcpd と djbdns を連携してみました。資料はここにあります。

平成22年02月28日(日) 追記

PC-9821Neが壊れたのに伴い libretto 60 に環境構築しました。
バージョンは V3.0.12rc4 です。OSは4系の最終バージョンである FreeBSD 4.11 Release です。

V3.0.12rc4 では、グループ dhcpd と ユーザ dhcpd が要りました。/stand/sysinstall で作成しましたが以下に書いておきます。

/etc/group

  dhcpd:*:1001:

/etc/passwd

  dhcpd:*:1002:1001:User &:/home/dhcpd:/sbin/nologin

また、leases は /var/db/dhcpd/dhcpd.leases になっていました。
FreeBSDのあるバージョンからは、OS起動時に読み込まれる起動シェルを制御するのに /usr/local/etc/rc.subr を参照するような構造になっているようです。
各種アプリケーションも起動シェル内でこれを見る作りになっているものがあります。
今回、libretto 60 に環境構築 する前にそれまで入っていた Apache, Samba を /stand/sysinstall で削除した後、残ってしまったファイルを手で削除しました。
その時にゴミファイルと思って /usr/local/etc/rc.subr を rm してしまったのです。
なので、dhcpd を起動できなくなってしまいました。

手で削除したものだから /stand/sysinstall のパッケージ管理ができなくなったのです。
ここで、暫ーーく時間とられましたが、丁度 FreeBSD 4.11 Release が入った DynaBook220CS があったので、それにインストールして FTP で libretto 60 に転送してOKになりました。

私のような間違いした人のために以下にファイルを置いておきます。

戻る

サイトトップへ