image header
Index >> Plamo Linux Fan >> dhcpdメモ
                dhcpdメモ
2002/02/26

1.目的

 DHCPとは、Dynamic Host Configuration Protocol の略で、ホストのIP通信設定を動的に配信するしくみを言います。
 旧来より、IPベースのネットワークを構築するには、ネットワーク上の全ホストにユニークなIPアドレスを割り振って管理しなくてはなりませんでしたが、このしくみ(その前にbootpというのもあったが)が登場した事により管理を自動化できる上、(理論上)絶対に重複しないアドレスを自動的に割り当ててくれるようになり、IPネットワークの管理コストが大幅に低減されました。
 現在では、ほとんどの中規模以上のサイトは DHCP を使っています(のはず(^^;)

 では、個人ではどう役立つか?というと、僕んちみたいにノートPCを会社と家とで持ち歩くような場合は、楽チンですね。会社でもつなげばいいだけ、おうちでもつなげばいいだけなので。
 また、よくDHCPは動的に*しか*IPアドレスを割り当てられないと思われがちですが、実は静的にも割り当てられますから、広いサイトではインベントリさえ拾っておけば、いちいちマシンのそばまで行かなくてもIP関連設定が変更できて便利です(^-^)b

※リモートコンソールのない某TをDHCPクライアントに設定しておいたりしてね(笑)

2.入手先

dhcp-2.0pl5.tar.gz
http://www.isc.org/products/DHCP/dhcp-v2.html

3.導入方法

  1. カーネルが対応していない場合は再構築

     もし、あなたのお使いのカーネルが 2.2 で、CONFIG_PACKETおよびCONFIG_FILTERをサポートしていない場合、インストールした dhcpd を起動するときにエラー終了します。カーネルを再構築したことがあれば、

    # cat /usr/src/linux/.config | grep CONFIG_PACKET
    # cat /usr/src/linux/.config | grep CONFIG_FILTER
    が、いずれも'Y'であることを確認してください。
     まだ一度もカーネルの再構築をしていなければ、/boot/config に対して同じ事をすればいいと思います。まぁ、デフォルトのカーネルはいずれも'Y'なので問題ないと思いますが(^^;
     カーネルの再構築に関しては、こちらを御覧ください。

  2. 落としてきたアーカイブを展開する

    # tar xvfz dhcp-2.0pl5.tar.gz
  3. ビルドし、各種ファイルをコピーする

    # cd dhcp-2.0pl5
    # ./configure
    # make
    # make install

  4. 起動時に自動ロードされるようにrc.inet2へ追記する

    # jvim /etc/rc.d/rc.inet2
    # cat /etc/rc.d/rc.inet2
    ...
    # for isc-dhcpd
    if [ -x /usr/sbin/dhcpd ]; then
     echo "Running dhcpd..."
     /usr/sbin/dhcpd
    fi
  5. /etc/dhcpd.conf を編集する
    重要な部分だけ書くと、

    ※サーバ名を定義する

    server-identifier host.who.where.jp;
    ※ドメイン名とドメインネームサーバ(DNS)のIPアドレスを定義する
    option domain-name "who.where.jp";
    option domain-name-servers 10.0.0.1;
    ※ローカルネットに関して有効な設定。
    shared-network LOCALNET {
      option subnet-mask 255.255.255.0;
      default-lease-time 3600;
      ※単位は秒なので、リース期限は1時間(=3600秒)ということ
      max-lease-time 7200;
      subnet 10.0.0.0 netmask 255.255.255.0 {
      ※ローカルネット上へ配信するIPアドレスに関する設定。
        レンジは.32から.63までの32台しか許さず、このサブネットのデフォルト
      ルートは、10.0.0.254 であると定義している。
        range 10.0.0.32 10.0.0.63;
        option broadcast-address 10.0.0.255;
        option routers 10.0.0.254;
      }
    }
    ※ここからはリモートネットワークの設定。
    subnet 10.0.1.0 netmask 255.255.255.0 {
      range 10.0.1.128 10.0.1.191;
      option domain-name "who.where.jp";
      option routers 10.0.1.254;
      option subnet-mask 255.255.255.0;
      option broadcast-address 10.0.1.255;
      default-lease-time 3600;
      max-lease-time 7200;
    }
    ※ここからは固定IPアドレスを持つホストに関する設定。ホスト名が DNS に登録されている場合は、上記のようにアドレスをホスト名で記述できるが、ない場合はIP アドレスで記述する。いずれにせよ、NICのMACアドレスが必要なので、NICが壊れると再定義が必要になる。
    host linuxbox1 {
      hardware ethernet xx:xx:xx:xx:xx:xx;
      fixed-address linuxbox1.who.where.jp;
    }
    host windoz2 {
      hardware ethernet xx:xx:xx:xx:xx:xx;
      fixed-address 10.0.1.2;
    }

  6. 最後にリースファイルを作成する
    # touch /var/state/dhcp/dhcpd.leases

4.運用

 クライアント側で設定どおりに正しくIP情報を受け取っているか、調べます。

  • Windows95/98の場合
     [スタート]-[ファイル名を指定して実行]で、"winipcfg"と書いて実行しましょう。そうすると、IP設定ダイアログが開いて、リースされたIPアドレス、ネットマスク、デフォルトゲートウエイが表示されます。また、詳細ボタンを押すとこのダイアログが大きなサイズに変わり、DHCPサーバのIPアドレスやネームサーバのアドレス等も見ることができます。
  • WindowsNTの場合
     コマンドプロンプトを開いて、"ipconfig"を実行しましょう。上記と同様、IPアドレスやデフォルトゲートウエイが表示されます。詳しい内容を知りたいときは、"ipconfig /all"を実行しましょう。
  • MacOSの場合
     アップルメニューの中から(だったよなぁ)、TCP/IPなんだかいうメニューを開いてあげると、現在の設定状態が見れますが、めったにいじらないので忘れました(^^;
  • LinuxBoxの場合
     僕んちではLinuxをDHCPクライアントにはしていませんので、わかりません(^^;

 上記の手順で作ったバイナリで運用していると、/var/log/messages が爆発的に大きくなるでしょう。これがどうしても気に入らない方は、下記のような手順で修正すると幸せになれます。

  1. 展開したソースの一部を修正

    # cd dhcp-2.0pl5/includes
    # vi dhcpd.h
    # grep FACILITY dhcpd.h
    #ifndef DHCPD_LOG_FACILITY
    /* #define DHCPD_LOG_FACILITY   LOG_DAEMON*/
    #define DHCPD_LOG_FACILITY      LOG_LOCAL0

    なお、他のプログラムでLOCAL0を使っている場合は、LOCAL7まで任意のものに変更すること。

  2. 普通にコンパイル
    # cd ..
    # make clean; make
    # make install

  3. /etc/syslog.confを修正してsyslogdを再起動
    # vi /etc/syslog.conf
    # cat /etc/syslog.conf
    ...
    *.=info;*.=notice;*.=warning;local0.none /usr/adm/messages
    ...
    local0.* /usr/adm/dhcplog
    ...
    # killall -HUP syslogd

  4. ログファイルが出来ていることを確認
    # ls -l /var/log/dhcplog

 ここに至るには、ソースをハッキングすることになります。僕はこんなコマンドを使って、FACILITY設定をしている部分を突き止めました。

$ find . -name \*.h -print | xargs grep FACILITY

 これで、./ 以下にあるすべての*.hファイル中から、"FACILITY"が含まれる行を探してくれるので、後は試してみればよい、というわけです。

5.問題点

  • Version 1.0時代は、数多くのリクエストを処理させると、dhcpd.leasesファイルに不当なエントリがあるという理由でプロセスが死ぬことがあったが、Version 2.0は安定。
  • Version 1.0時代、マシンがあるサブネットから別のサブネットへ移動しても、トラッキングしないというトラブルがあったが、今から考えると、dhcpd.conf の記述に問題があった可能性が否定できない。現在は好調。
  • dhcp daemon が落ちてしまう事があったが、落ちる理由は単に「ディスクフル」でdhcpd.leases が更新できないというだけのことだった(^^; あまった小さいディスク使ったからなぁ・・・

付録1.参考文献

DHCP mini-HOWTO
とりあえず定番のJFドキュメントを読みましょう。
イチロ Home LAN!
Linux Japan Vol.2の特集記事の一部です。
桑田康夫さんのDHCP
ISC DHCPDの解説は知る限りここが一番詳しいです。突っ込んだ話題はこちらとご本家の英文をあわせて御覧になるといいでしょう。

Index >> Plamo Linux Fan >> dhcpdメモ

image footer