DHCP はクライアント・サーバ型のシステムで、DHCP サーバはク ライアントからの要求を受けて、クライアントがネットワークに接続 する際にホストのコンフィグレーション情報(IPアドレスやネットマ スク、ホスト名など)を送ります。DHCP クライアントは受け取った情 報を元にネットワーク・インターフェースの初期化を行い、そのネッ トワークに接続することができます。この時、DHCP サーバとクライ アントは原則として同一ネットワークセグメント上になければならな いのですが、リレー・エージェントと呼ばれる特別な中継用のサーバ を用意することで、DHCP サーバは異なるネットワークセグメント上 の DHCP クライアントに対してもサービスを提供することができます。
DHCP サーバが IP アドレスを割り当てる場合、以下の 3 通りの 割り当て方があります。
- 自動割り当て
- 要求のあった DHCP クライアントに対し、有効期間が無期限である IP アドレスを割り当てます。デスクトップのような滅多に移動しな いシステムに対してアドレスを割り当てるような場合に、この割り当 て方を使うと良いでしょう。
- 動的割り当て
- 基本的には「自動割り当て」と同じですが、割り当てられる IP アド レスは有効期限が設定されます。よって、ノートパソコンのような移 動ホストに対してアドレスを割り当てるような場合に、この割り当て 方を使うと良いでしょう。
- 手動割り当て
- 事前に管理者が割り当てておいた IP アドレスを、要求を出したホス トに対して通知する方式。主な用途はディスクレスワークステーショ ンのブート時に IP アドレスを割り当てるような時に用います。\
ここでは、FreeBSD2.2.8-RELEASE が動いているマシン(pfuna03)に、 Wide プロジェクトで作られている Wide-DHCP をインストールする手順を 説明します。インストールの前に
インストールするマシンには、ネットワークカードが一 枚しか差さっていないので、FreeBSD でサポートされている NE2000 互換のネットワークカードを増設します。
増設したネットワークカードはディップスイッチで Plug & Play を off にし、IRQと I/O ポートアドレスを手動設定します。(ここ では IRQ 9 , I/O ポートアドレス 280h と設定)
増設したネットワークカードをカーネルに認識させるために、カー ネルの再構築を行います。具体的な手順は以下のようになります。
# cd /sys/i385/conf # cp GENERIC PFUNA # vi PFUNA 変更前 21> ident GENERIC 変更後 21> ident PFUNA 変更前 150> device ed0 at isa? port 0x280 net irq 10 iomem 0xd8000 vector edintr 変更後 150> device ed0 at isa? port 0x300 net irq 10 iomem 0xcc000 vector edintr 151> device ed1 at isa? port 0x280 net irq 9 iomem 0xd8000 vector edintr その他、IRQ と I/O ポートアドレスが重複している部分をコメントアウ トする。結果をここに置いておきます。 # config PFUNA # cd ../compile/PFUNA # make depend # make # make install # reboot 結果、起動時の画面で以下のようにネットワークカードが認識されます。 ed0 at 0x300-0x31f irq 10 maddr 0xcc000 msize 16384 on isa ed0: address 08:00:5a:a1:e8:be, type WD8013W (16 bit) ed1 at 0x280-0x29f irq 9 on isa ed1: address 00:90:fe:10:03:69, type NE2000 (16 bit)ネットワークカードの認識に成功したら、それぞれに IP アドレ スを割り当てます。ここでは、ネットワークカードをそれぞれ、 ed0,ed1 として、以下のように割り当てることにします。
ドライバ IP アドレス ネットマスク ed0 133.28.116.169 255.255.255.0 (グローバルアドレス) ed1 192.168.1.1 255.255.255.0 (プライベートアドレス)IP アドレスを割り当てるため、/etc/rc.conf に以下のような記 述をします。その後、設定を反映させるためにリブートします。
35> network_interfaces="ed0 ed1 lo0" # List of network interfaces (lo0 is loopback). 36> ifconfig_ed0="inet 133.28.116.169 netmask 255.255.255.0" 37> ifconfig_ed1="inet 192.168.1.1 netmask 255.255.255.0"インストール
FreeBSD の場合、DHCP は packages , ports で提供されているの で、これを使うのが簡単です。ここでは、packages の wide-dhcp-1.4.0p1 をインストールします。
# pkg_add wide-dhcp-1.4.0p1.tgzDHCP は BPF(Barkeley Packet Filter)を必要とするため、BPF を 有効にするよう、カーネルの再構築をしなければなりません。カーネ ルのコンフィグレーションファイル(/sys/i386/conf/PFUNA)に以下の 1行を追加して、カーネルの再構築をします。
pseudo-device bpfilter 4これで、カーネルが BPF をサポートするようになりました。実際 に、プログラムが BPF を利用するためのデバイスファイルを用意し ます。
# cd /dev # ./MAKEDEV bpf0 bpf1 bpf2 bpf3 # ls -l bpf* (確認)
既存設定ファイルの変更
DHCP が使うポートを有効にするため、/etc/services に以下の 2 行を追加します。FreeBSD ではデフォルトで設定されているはずです が、一応確認しておきます。
dhcps 67/udp dhcpc 68/udpDHCP はエラー出力に syslog を使用するので、以下の行を /etc/syslog.conf に追加します。
local0.* /var/log/dhcp.log設定ファイルの記述
wide-dhcp では、/etc/dhcpdb.pool と /etc/dhcpdb.relay の 2 つの設 定ファイルが必要になります。これらのファイルのサンプルは、 /usr/local/share/examples/dhcp/ 以下に入っています。また、 /usr/local/share/doc/dhcp/intro.dhcp.jis にイントロダクションが入っているので、参考にすると良いでしょう。
DHCP サーバが IP アドレスをどのように割り当てるかという情報 を /etc/dhcpdb.pool ファイルに記述します。このファイルは、各エ ントリを : で区切り、複数行にまたがる場合は \ を行末につけて記 述します。サンプルが /usr/local/share/examples/dhcp/dhcpdb.pool.sample にありますので、これを参考に記述します。実際に記述したファイル をここに置いておきます。
これにより、DHCP サーバはクライアントに 192.168.1.11 〜 192.168.1.17 の IP アドレスを割り当てるように指定しています。
以下に、この /etc/dhcpdb.pool ファイルの各フィールドの意味について説明します。snmk: 割り当てる IP アドレスのサブネットマスク tmof: UTC からのオフセットを秒数で示す。 tblc: 別エントリへの参照 rout: クライアントのいるサブネット上のルータの IP アドレス (ed1 の IP アドレス) dht1: DHCP クライアントがユニキャストにより割り当て期限の延長を開始する時期を指定 dht2: DHCP クライアントがブロードキャストにより割り当て期限の延長を開始する時期を指定 brda: クライアントが接続されたサブネットのブロードキャストアドレス dnsv: DNS サーバの IP アドレスのリスト nmsv: name サーバの IP アドレスのリスト ipad: 割り当てる IP アドレス dfll: デフォルトの割り当て期間 maxl: 許容する最大の割り当て期間を秒数で指定/etc/dhcpdb.relay ファイルには、リレーエージェントを用いる 場合の設定を記述します。とくにリレーエージェントの設定をする必 要はありませんが、現在の wide-dhcp ではこのファイルが存在しな ければ動作しないので、とりあえず空のファイルを作っておきます。
# touch /etc/dhcpdb.relayまたは、# cp /dev/null /etc/dhcpdb.relayプログラムが起動するための設定
以下のような DHCP サーバの起動スクリプトを /etc/rc.local に記述し ます。ここで、ed1 は 2 枚目のネットワークインターフェース名です。# # Starting DHCP Server # if [ -f /usr/local/sbin/dhcps -a -f /etc/dhcpdb.pool -a -f /etc/dhcpdb.relay ]; then echo -n 'Starting DHCP Server:' /usr/local/sbin/dhcps ed1 echo '.' fiまたは、/usr/local/etc/rc.d/dhcp.sh に以下のような 内容を記述して、実行権限を与えておきます。#!/bin/sh if [ -f /usr/local/sbin/dhcps -a -f /etc/dhcpdb.pool -a -f /etc/dhcpdb.relay ]; then echo -n 'Starting DHCP Server:' /usr/local/sbin/dhcps ed1 echo '.' fi
Windows の場合
Windows ではマシン間を IP 接続するのに、直接 IP を入力する方法と、 DHCP を用いて IP を決定する方法の 2 種類の方法があります。Windows で DHCP を使うには、コントロールパネル→ネットワーク→TCP/IP→プロ パティの"IPアドレスを自動的に取得"を選択し、DNS は使用しない、ゲー トウェイは何もなし、に設定してください。ネームサーバや、ネットマス ク、デフォルトルート(ゲートウェイ)は DHCP サーバから取得できます。
なお、現在の自分の IP アドレスを知るには、"c:/windows/winipcfg.exe" を実行してください。FreeBSD の場合
一般に DHCP クライアントを起動するには、/etc/rc.local、 /etc/netstart などの設定ファイル中にある ifconfig を使ったネットワー クインターフェースの初期化や、routed、gated などの経路制御用デーモ ンの起動、route コマンドによる経路情報の追加などに関する記述を全て コメントアウトし、以下のようなスクリプトを /etc/rc.local や /etc/netstart などに記述します。
if [ -f /usr/local/sbin/dhcpc ]; then echo 'Starting DHCP client.' /usr/local/sbin/dhcpc ed0 fied0 は使用するネットワークインターフェースの指定です。
FreeBSD で PAO を用いてDHCP のクライアントとして利用する場合には、 /etc/rc.conf 内でpccard_ether="ed0 ep0 fe0 sn0" ifconfig_common="DHCP" ifconfig_ep0=$ifconfig_common ifconfig_fe0=$ifconfig_common ifconfig_sn0=$ifconfig_commonと記述し、router などの設定を全て Disable にします。