22.10. DHCP

原作: Sutter Greg [FAMILY Given].

22.10.1. DHCP とは何でしょうか?

DHCP (Dynamic Host Configuration Protocol) は、 システムをネットワークに接続するだけで、 ネットワークでの通信に必要な情報を入手することができる仕組みです。 FreeBSD では ISC (Internet Software Consortium) による DHCP の実装を使用しています。したがって、 ここでの説明のうち実装によって異なる部分は ISC のもの用になっています。

22.10.2. この節で説明していること

この節は ISC DHCP システムのクライアント側およびサーバ側の構成要素の両方について説明します。 クライアント側のプログラムである dhclient は FreeBSD のベースシステム内に含まれています。そして、サーバ側の要素は net/isc-dhcp3-server port から利用可能です。下記の説明の他に、 dhclient(8), dhcp-options(5) および dhclient.conf(5) マニュアルページが役にたつ情報源です。

22.10.3. DHCP の動作

クライアントとなるマシン上で、 DHCP のクライアントである dhclient を実行すると、 まず設定情報の要求をブロードキャストします。デフォルトでは、 このリクエストには UDP のポート 68 を使用します。 サーバは UDP のポート 67 で応答し、クライアントの IP アドレスと、 ネットマスクやルータ、DNS サーバなどの関連する情報を提供します。 これらの情報のすべては DHCP の リース の形で送られ、DHCP サーバ管理者によって決められたある一定の時間内でのみ有効になります。 これによって、ネットワークに存在しなくなったホストの IP アドレスは自動的に回収されることになります。

DHCP クライアントはサーバから非常に多くの情報を取得することができます。 dhcp-options(5) に非常に大きなリストが載っています。

22.10.4. FreeBSD への組み込み

FreeBSD は ISC の DHCP クライアントである dhclient を完全に組み込んでいます。 DHCP クライアントはインストーラと基本システムの両方で提供されています。 ですから DHCP サーバを走らせているネットワーク上ではネットワーク関係の設定についての詳細な知識は必要になりません。 dhclient は、3.2 以降のすべての FreeBSD の配布物に含まれています。

DHCP は sysinstall で対応されており、sysinstall でのネットワークインタフェイス設定の際は、 このインタフェイスの設定として DHCP を試してみますか? (Do you want to try DHCP configuration of this interface?) という質問が最初になされます。 これに同意することで dhclient が実行され、 それが成功すればネットワークの設定情報は自動的に取得されます。

システム起動時に DHCP を使ってネットワーク情報を取得するように するには、次の二つを行なう必要があります。

  • bpf デバイスがカーネルに組み込まれていることを確認します。 これを組み込むには、カーネルコンフィグレーションファイルに pseudo-device bpf という行を追加し、カーネルを再構築します。 カーネルの構築に関する詳細は、 9章FreeBSD カーネルのコンフィグレーション を参照してください。

    bpf デバイスは、 FreeBSD にはじめから用意されている GENERIC カーネルに組み込まれていますので、 自分で設定を変えたカスタムカーネルを使っているのでなければ、 DHCP を動作させるためにカーネルを再構築する必要はありません。

    注記:

    セキュリティに関心のある方向けに注意しておきます。 bpf デバイスは、パケットスニファ (盗聴プログラム) を動作させることができる (ただし root 権限が必要) デバイスです。 bpf は DHCP を動作させるために かならず必要ですが、 セキュリティが非常に重要な場面では DHCP をいつか使うかもしれないというだけで bpf デバイスをカーネルに追加すべきではないでしょう。

  • /etc/rc.conf を編集して、 次の行を追加してください。

    ifconfig_fxp0="DHCP"

    注記:

    で説明されているように fxp0 の部分を、 動的に設定したいインタフェースの名前で置き換えることを忘れないようにしてください。

    もし、使っている dhclient の場所を変更していたり、dhclient にフラグを渡したい場合は、 同様に下のように書き加えてください。

    dhcp_program="/sbin/dhclient"
    dhcp_flags=""

DHCP サーバ dhcpd は、Ports Collection に net/isc-dhcp3-server の一部として収録されています。 この port には ISC DHCP サーバと文書が含まれています。

22.10.5. 関連ファイル

  • /etc/dhclient.conf

    dhclient は設定ファイル /etc/dhclient.conf を必要とします。 大抵の場合、このファイルはコメントだけであり、 デフォルトが通常使いやすい設定になっています。 この設定ファイルは dhclient.conf(5) マニュアルページで説明しています。

  • /sbin/dhclient

    dhclient は静的にリンクされており、 /sbin に置かれています。dhclient(8) マニュアルページで dhclient コマンドについてより詳しく説明しています。

  • /sbin/dhclient-script

    dhclient-script は FreeBSD 特有の、 DHCP クライアント設定スクリプトです。これについては dhclient-script(8) マニュアルページで説明されていますが、 これを編集する必要はほとんど発生しないでしょう。

  • /var/db/dhclient.leases

    DHCP クライアントはこのファイルに有効なリースのデータベースをログとして記録します。 dhclient.leases(5) にもうすこし詳しい解説があります。

22.10.6. 参考になる文献

DHCP のプロトコルは RFC 2131 に完全に記述されています。また dhcp.org にも有用な情報源が用意されています。

22.10.7. DHCP サーバのインストールと設定

22.10.7.1. この節で説明していること

この節は DHCP の ISC (Internet Software Consortium) 実装を用いて FreeBSD システムを DHCP サーバとして動作させる方法の情報を提供します。

DHCP のサーバ部分は FreeBSD の一部として提供されません。 したがって、このサービスを提供するために net/isc-dhcp3-server port をインストールする必要があるでしょう。 Ports Collection を使用する情報についての詳細は 5章アプリケーションのインストール - packages と ports を参照してください。

22.10.7.2. DHCP サーバのインストール

FreeBSD システムを DHCP サーバとして設定するために、bpf(4) デバイスがカーネルに組み込まれていることを保証する必要があります。 そうするためには、カーネルコンフィギュレーションファイルに pseudo-device bpf を追加して、 カーネルを再構築してください。 カーネルの構築に関する詳細は 9章FreeBSD カーネルのコンフィグレーション を参照してください。

bpf デバイスは、 FreeBSD にはじめから用意されている GENERIC カーネルの一部なので、DHCP を動作させるためにカスタムカーネルを作成する必要はありません。

注記:

セキュリティを特に意識する人は、bpf bpf はパケットスニファ (盗聴プログラム) が正常に (このようなプログラムはさらに特権アクセスを必要としますが) 動作することを可能にするデバイスでもあることに注意してください。 bpf は DHCP を使用するために必要 です。 しかし、セキュリティをとても気にしているなら、 DHCP をいつか使うかもしれないというだけで bpf デバイスをカーネルに含めるべきではないでしょう。

次に行わねばならないのは、 net/isc-dhcp3-server port によってインストールされた dhcpd.conf のサンプルを編集することです。 デフォルトでは、これは /usr/local/etc/dhcpd.conf.sample で、 編集する前にこれを /usr/local/etc/dhcpd.conf にコピーするべきでしょう。

22.10.7.3. DHCP サーバの設定

dhcpd.conf はサブネットおよびホストに関する宣言で構成されます。 例を使って説明するのが最も簡単でしょう。

option domain-name "example.com";1
option domain-name-servers 192.168.4.100;2
option subnet-mask 255.255.255.0;3

default-lease-time 3600;4
max-lease-time 86400;5
ddns-update-style none;6

subnet 192.168.4.0 netmask 255.255.255.0 {
  range 192.168.4.129 192.168.4.254;7
  option routers 192.168.4.1;8
}

host mailhost {
  hardware ethernet 02:03:04:05:06:07;9
  fixed-address mailhost.example.com;10
}

1

このオプションは、 デフォルト探索ドメインとしてクライアントに渡されるドメインを指定します。 これが意味するところの詳細については resolv.conf(5) を参照してください。

2

このオプションはクライアントが使用する、 コンマで区切られた DNS サーバのリストを指定します。

3

クライアントに渡されるネットマスクです。

4

クライアントは特定のリース期限を要求することもできます。 それ以外の場合は、サーバはこのリース期限値 (秒) でリースを割り当てるでしょう。

5

これはサーバがリースする時間の最大値です。 クライアントがこれより長いリースを要求しても、 max-lease-time 秒だけしか有効にならないでしょう。

6

このオプションは、リースが受理、またはリリースされたときに DHCP サーバが DNS を更新しようとするかどうかを指定します。 ISC 実装では、このオプションは 必須 です。

7

これはどの範囲の IP アドレスが、 クライアントに割り当てるために予約されたプールに使用されるかを示します。 この範囲に含まれている IP アドレスはクライアントに渡されます。

8

クライアントに供給されるデフォルトゲートウェイを宣言します。

9

(リクエストが生じた時に DHCP サーバがホストを認識できるように) ホストのハードウェア MAC アドレスを指定します。

10

ホストに常に同じ IP アドレスを付与することを指定します。 DHCP サーバはリース情報を返す前にホスト名の名前解決をするので、 ここにホスト名を書いても構いません。

dhcpd.conf を書き終えたら以下のコマンドでサーバを起動できます。

# /usr/local/etc/rc.d/isc-dhcpd.sh start

今後サーバの設定に変更を加える必要が生じた時には、 SIGHUP シグナルを dhcpd に送っても、 多くのデーモンがそうであるようには、 設定ファイルが再読み込み されない ことに注意してください。 SIGTERM シグナルを送ってプロセスを停止し、 それから上記のコマンドを用いて再起動させる必要があります。

22.10.7.4. ファイル

  • /usr/local/sbin/dhcpd

    dhcpd は静的にリンクされ /usr/local/sbin に置かれます。 dhcpd に関するそれ以上の情報は port とともにインストールされる dhcpd(8) マニュアルページにあります。

  • /usr/local/etc/dhcpd.conf

    dhcpd はクライアントへのサービス提供をはじめる前に設定ファイル /usr/local/etc/dhcpd.conf を必要とします。このファイルは、 サーバの稼働に関する情報に加えて、 サービスされているクライアントに提供される情報のすべてを含む必要があります。 この設定ファイルについての詳細は、 port によってインストールされる dhcpd.conf(5) マニュアルページを参照してください。

  • /var/db/dhcpd.leases

    DHCP サーバは発行したリースのデータベースをこのファイルにログとして保持します。 port によってインストールされる dhcpd.leases(5) にはもう少し詳しい説明があります。

  • /usr/local/sbin/dhcrelay

    dhcrelay は、DHCP サーバがクライアントからのリクエストを、 別のネットワーク上にある DHCP サーバに転送する高度な環境下で使用されます。 この機能が必要なら、net/isc-dhcp3-server port をインストールしてください。 port とともに提供される dhcrelay(8) マニュアルページにはより詳細な情報が含まれます。

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、 ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。

本文書に関する質問については、 <doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。