DHCPサーバの構築   ▲戻る
最終更新日 : 2002/03/22(森川靖大)  <<  作成日 : 2001/10/09(森川靖大)
  1. 概要
  2. サーバ側の設定
  3. クライアント側の設定

1.概要

IPマスカレードのルータである blue にDHCPサーバを構築して、 内部ネットワークでDHCPを使用できるようにします。

この作業の前に、IPマスカレードが正常に動くことを確認してください。 正常に動いていることが確認できたら以下の作業に移ります。


2.サーバ側の設定

[2.1] DHCPパッケージのインストール

まずは dhcp パッケージをインストールしてください。

# apt-get install dhcp [Enter]

(もちろん dselect など他の方法でインストールしてもらっても構いませんが)

[2002年度] dhcp のバージョンは 2.0pl4-2 でした。


[2.2]設定ファイルの編集

パッケージ 「dhcp」の設定ファイルは /etc/dhcpd.conf です。

IPマスカレードでも行ったように、設定ファイルを編集することで DHCPを使用できるようにします。

[2.2.1] /etc/dhcpd.confのバックアップと編集

まず、/etc/dhcpd.conf の編集を行いますが、 その前に、オリジナルのファイルのバックアップとして /etc/dhcpd.conf.org をとっておきましょう。

# cp /etc/dhcpd.conf /etc/dhcpd.conf.org [Enter]

バックアップを取り終わったら、いったん /etc/dhcpd.conf ファイルの中身を 全部消して、以下のものを書き込んでください。

ここ に同じものを置いておくので, こちらを使っても良いでしょう.

default-lease-time 6000;
max-lease-time 72000;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
option domain-name-servers 133.87.45.70, 133.87.45.66, 133.87.1.11;
option domain-name "ep.sci.hokudai.ac.jp";

subnet 192.168.0.0 netmask 255.255.255.0 {
   range 192.168.0.130 192.168.0.254;
}

各行の意味は次の通りです。

  1. 特にクライアントからの時間枠の要求がなければ,6000秒の間IPアドレスを貸す.
  2. 要求があった場合最大限許される貸し出し時間は72000秒
  3. サブネットマスクに255.255.255.0を指定
  4. ブロードキャストアドレスに192.168.0.255を指定
  5. ゲートウェイに192.168.0.1を指定
  6. DNSサーバに133.87.45.70 133.87.45.66 133.87.1.11を指定
  7. DNSサーバのあるドメインを指定

    最後の3行  192.168.0.130から192.168.0.254までのIPアドレスを貸し出す
    ※192.168.0.10 から 192.168.0.129 までのアドレス空間は固定IPアドレスの割り振りに使用します(割り振り方は下記参照)

これらのパラメータは DHCP のクライアントの ネットワークパラメータに使用されることになります。

[2.2.2] 固定のプライベートアドレスの割り当て

DHCP では動的にIPアドレスを振ることが出来ますが、 特定の PC に固定のIPアドレスを割り振ることも可能です。 PC の特定には MACアドレス(ネットワークデバイス固有の番号) を使用します。

[2002年度] 情報実験機 (電脳大飯店) には固定のIPアドレスを 割り振ってあります。

なお、ここに書いてあることはあくまで参考なので、 この段階で固定プライベートアドレスを設定する必要はありません。

例:

00:90:cc:a2:f4:e8」という MACアドレスを持つ 情報実験機13番 に IPアドレス「192.168.0.113」 を割り振るためには以下の行を /etc/dhcpd.conf書き加えます。

host joho13 {
   hardware ethernet 00:90:cc:a2:f4:e8;
   fixed-address 192.168.0.113;
}

書式は

host ホスト名 {
   hardware ethernet MACアドレス ;
   fixed-address IPアドレス ;
}

となっています。これは PC 一つ一つを個々に設定する必要があります。 また、動的アドレスと重ならないようにIPアドレスを設定してください。 (「ホスト名」に関しては、便宜上分かりやすいものをつけているだけで、 何を書き込んでも動作はします。)

詳細は/etc/dhcpd.conf.orgなどに書いてあります。

[2.2.3] 再編集後の設定ファイルの反映

一度dhcpd(DHCPサーバとして機能するためのdaemon) を起動した後に 設定変更をするためには、 /etc/dhcpd.conf を書き換えた後に dhcpd を再起動する必要があります。 再起動の方法は あとで説明します。


[2.3] 実行ファイルの編集

[2.3.1] /etc/init.d/dhcp のバックアップ

/etc/init.d/dhcp の編集を行いますが、こちらもその前にオリジナルのファイルの バックアップを /etc/init.d/dhcp.orgとして取っておきます。

# cp /etc/init.d/dhcp /etc/init.d/dhcp.org [Enter]

[2.3.2] /etc/init.d/dhcp の編集

バックアップを取り終わったら、いったん /etc/init.d/dhcp ファイルの中身を 全部消して、以下のものを書き込んでください。

ここ に同じものを置いておくので, こちらを使っても良いでしょう.

#!/bin/sh
#
# Start or stop dhcpd daemon
#
# 2003/01/20  Morikawa Yasuhiro 
#

# dhcpd が無ければ停止
test -x /usr/sbin/dhcpd || exit 0

# インターフェース (eth0 や eth1等) の指定
INTERFACES="eth1"

DHCPDPID=/var/run/dhcpd.pid

case "$1" in
    start)
	echo "Starting DHCP server: dhcp"
	start-stop-daemon --start --verbose --pidfile $DHCPDPID \
	    --exec /usr/sbin/dhcpd -- -cf /etc/dhcpd.conf $INTERFACES
	sleep 1
	;;
    stop)
	echo "Stopping DHCP server: dhcp"
	start-stop-daemon --stop --verbose --pidfile $DHCPDPID
	sleep 1
	;;
    restart)
	echo "Stopping DHCP server: dhcp"
	start-stop-daemon --stop --verbose --pidfile $DHCPDPID
	sleep 1
	echo "Starting DHCP server: dhcp"
	start-stop-daemon --start --verbose --pidfile $DHCPDPID \
	    --exec /usr/sbin/dhcpd -- -cf /etc/dhcpd.conf $INTERFACES
	;;
    *)
	echo "Usage: /etc/init.d/dhcp {start|stop|restart}"
	exit 1
esac

exit 0

[2.3.3] /etc/init.d/dhcp の解説

先ほど編集した、/etc/init.d/dhcpの各行の意味は次の通りです。

  1. シェルスクリプトの行頭につけるおまじない
  2. このファイルが「dhcpd」というdaemonを動かす ファイルであることを示すコメント
  1. /usr/sbin/dhcpd というファイルが無ければ、 この段階で実行中止
  1. dhcp にてアドレスを配布するインターフェースを eth1 に指定。
  1. DHCPDPIDという変数に /var/run/dhcp.pid の中身を引用する。 (/var/run/dhcp.pid にはdhcpのdaemonの プロセス番号が書き込まれている)
  1. 引数による場合分け
  2. 引数が「start」の場合
  3. DHCP をスタートするメッセージを表示。
  4. プロセス番号DHCPDPIDのプロセスがあることを確認し、 詳しい参考情報を出力する。(→次の行へ続く)
  5. (→前の行からの続き) /usr/sbin/dhcpdを実行する。 なお、実行の際には、設定ファイルの/etc/dhcpd.conf を読み込む。また、 内部ネット用のネットワークカード(eth1)でdhcpdを動かす。
  6. 1 秒間お休み
  7. 「start」の部分の終了
  8. 引数が「stop」の場合
  9. DHCP をストップするメッセージを表示。
  10. プロセス番号DHCPDPIDのプロセスを停止させる。 詳細な参考情報も出力される。
  11. 1 秒間お休み
  12. 「stop」の部分の終了
  13. 引数が「restart」の場合
  14. 〜 35. 「stop」の後に「start」を実行させている。
  1. 「*」(以上の3つ以外)の場合
  2. Usage: /etc/init.d/dhcp {start|stop|restart}」と出力
  3. 終了
  4. 場合分け「case」を閉じる
  5. 終了

なお、このファイルに書いてある内容の詳細については start-stop-daemon や dhcpd の man を見るか、 関連書籍を参考にするなどして下さい。

$ man start-stop-daemon [Enter]
$ man dhcpd [Enter]

[2.3.4] 実行権限の取捨

今編集した /etc/init.d/dhcp は実行ファイルです。 これは、dhcpdというDHCPサーバとしての役割を果たす daemon を動かすのに使用するファイルなので、 パーミッションを調べて実行権限があるかどうか調べてください。 もしなければ、実行権限を付けてください。 また、/etc/init.d/dhcp.org はバックアップファイルなので このファイルの実行権限ははずしておいてください。

# chmod 755 /etc/init.d/dhcp [Enter]
# chmod 644 /etc/init.d/dhcp.org [Enter]

[2.4] ネットワークの設定ファイルの編集

[2.4.1] /etc/network/interfaces の編集

/etc/network/interfaces に次の一行を追加してください

up route add -host 255.255.255.255 dev eth1

その後, ネットワークの設定を再起動してください。

# /etc/init.d/networking restart [Enter]

[2.5] dhcpdの起動・停止方法

[2.5.1] /etc/init.d/dhcp を使用しない方法

設定した dhcp を起動・停止させる方法はいくつかありますが、 まずは、先ほどの実行ファイルを使わずにそれを行ってみます。

  • 起動

    まず、起動させるには以下のコマンドを入力します。 すると、その下の文字群が出てきて、dhcpdが起動されます。

    # /usr/sbin/dhcpd -cf /etc/dhcpd.conf eth1[Enter]
    
    Internet Software Consortium DHCP Server 2.0pl4
    Copyright 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium.
    All rights reserved.
    
    Please contribute if you find this software useful.
    For info, please visit http://www.isc.org/dhcp-contrib.html
    
    Listening on LPF/eth1/00:90:cc:a2:f7:ba/192.168.0.0
    Sending on   LPF/eth1/00:90:cc:a2:f7:ba/192.168.0.0
    Sending on   Socket/fallback/fallback-net
    

    後ろの「-cf /etc/dhcpd.conf」は設定ファイルを参照 することを指定しています。 また「eth1」は、このDHCPサーバの機能を内部ネット用の ネットワークカード(eth1)で稼動させることを指定しています。

  • 停止

    停止させるには、まずdhcpdのプロセス番号を調べ、そのプロセスを 「kill」コマンドで停止させます。

    # ps aux | grep dhcp[Enter]
    root     xxx  0.0  1.2  1596  808 ?        S    Jul13   0:00 /usr/sbin/dhcpd-2.2.x -cf /etc/dhcpd.conf eth1
    # kill xxx[Enter]   (xxxはdhcpdのプロセス番号)
    

    これで、dhcpdは停止されます。

  • パソコン自体の再起動

    他にも、パソコン自体を再起動してしまう方法もあります。 ただし、少々時間はかかります。

    # reboot [Enter]
    

    こうすると、自動的にdhcpdは停止、そして再起動されます。

    [2.5.2] /etc/init.d/dhcp を使用した方法

    今度は少々賢く、/etc/init.d/dhcp を使用して 起動・停止を行ってみます。

  • 起動

    まず、起動させるには以下のコマンドを入力します。 すると、その下の文字群が出てきて、dhcpdが起動されます。

    # /etc/init.d/dhcp start[Enter]
    
    Internet Software Consortium DHCP Server 2.0pl4
    Copyright 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium.
    All rights reserved.
    
    Please contribute if you find this software useful.
    For info, please visit http://www.isc.org/dhcp-contrib.html
    
    Listening on LPF/eth1/00:90:cc:a2:f7:ba/192.168.0.0
    Sending on   LPF/eth1/00:90:cc:a2:f7:ba/192.168.0.0
    Sending on   Socket/fallback/fallback-net
    

    コマンドが何を意味するのかは /etc/init.d/dhcp の解説 を参照してください。 (実際にはさきほどの起動方法と変わらないことをやっています。)

  • 停止

    /etc/init.d/dhcp でdhcpd のプロセス番号を自動的に探し出してくれるので 以下のコマンドでdhcpdを停止できます。

    # /etc/init.d/dhcp stop[Enter]
    
    Stopped process in pidfile `/var/run/dhcpd.pid' (pid xxx).    (xxxはdhcpdのプロセス番号)
    

    これで、dhcpdは停止されます。

  • 再起動

    起動・停止をいっぺんに行うこともできます。

    # /etc/init.d/dhcp restart[Enter]
    
    Stopped process in pidfile `/var/run/dhcpd.pid' (pid xxx).
    Starting /usr/sbin/dhcpd...
    Internet Software Consortium DHCP Server 2.0pl4
    Copyright 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium.
    All rights reserved.
    
    Please contribute if you find this software useful.
    For info, please visit http://www.isc.org/dhcp-contrib.html
    
    Listening on LPF/eth1/00:90:cc:a2:f7:ba/192.168.0.0
    Sending on   LPF/eth1/00:90:cc:a2:f7:ba/192.168.0.0
    Sending on   Socket/fallback/fallback-net
    

    こうして、自動的にdhcpdは停止、そして再起動されます。

    以上のどれかの方法を用い、dhcpdを起動させてください。 起動したらサーバ側の準備はOKです。次はクライアント側の 設定に移ります。


  • 3. クライアント側の設定

    [3.1] Debian GNU/Linux における設定

    Debian GNU/Linux でDHCPを使用する際には、 pump コマンドを使用します。

    [3.1.1] pump コマンド

    pump コマンドは以下のように使用します。

    # pump [Enter]
    

    pump パッケージがインストールされていない時は, apt-get コマンドなどでインストールを行ってください. (大抵はデフォルトでインストールされていますが)

    [3.1.2] 確認

    ちゃんとDHCPで動いているのか確認してみましょう。

    $ /sbin/ifconfig -a [Enter]
    
    eth0      Link encap:Ethernet  HWaddr 00:90:CC:A2:F7:BA
              inet addr:192.168.0.130  Bcast:192.168.0.255  Mask:255.255.255.0
    ・・・・・
    

    上のような表示がずらずら出てくると思います。 この中で問題なのが「 inet addr 」です。これはそのパソコンに割り振られた IPアドレスです。これが「 192.168.0.130 〜 192.168.0.254」のいずれかとなっていればOKです。 ルータ側の /etc/dhcpd.conf の編集 で 「192.168.0.130から192.168.0.254までのIPアドレスを貸し出す 」としましたよね?

    以上でDHCPの設定は終了です。

    [3.1.3] 設定を元に戻す場合

    ネットワークの設定を元に戻す場合には以下のコマンドを使用すると 良いでしょう。

    # /etc/init.d/networking restart [Enter]
    

    [3.2] Windows98 における設定

    Windows では Linux のように新たにインストールする必要はありません。 こちらの設定はIPマスカレードでおこなったのと同じ場所を書き換える事になります。

    [3.2.1] IPアドレスなどの設定

    こんどはDHCP用に以下のように設定値を書き換えてください。

    blue に接続するローカル機のDHCPでの設定
    設定タグ 詳細項目 答え方
    IP アドレス IP アドレス 「IPアドレスを自動的に取得」にチェックをつけてください。
    ネットマスク
    ゲートウェイ ゲートウェイ 不要です。
    DNS設定 ホスト名 「DNSを使わない」にチェックをつけてください。
    ドメイン名
    DNS サーバ

    [3.2.2] 確認

    こちらでもDHCPでネットワークに接続できているのか、確認します。

    「ファイル名を指定して実行」を選び, winipcfg と打鍵してください。

    IPアドレスの欄の所に「 192.168.0.130 〜 192.168.0.254」 のいずれかであれば、DHCPでの接続ができています。

    以上でDHCPの設定は終了です。


    ▲戻る     作成日:2001/10/09(森川靖大)