Dynamic Host Configuration Protocol

Dynamic Host Configuration Protocol（ダイナミック ホスト コンフィギュレーション プロトコル、DHCP）とは、コンピュータがネットワーク接続する際に必要な情報を自動的に割り当てるプロトコルのことをいう。 この項目においては IPv4 のための DHCP である DHCPv4 を中心として説明し、最後に IPv6 のための DHCP である DHCPv6 について補足する。 DHCP は BOOTP の上位互換であり、メッセージ構造などは変わっていない。DHCP では、BOOTP に比べて自動設定できる情報が増え、より使いやすくなっている。 身近なものでは、ケーブルテレビや公衆無線LAN等でインターネットサービスプロバイダ (ISP) に接続する場合なども、DHCPを利用してIPアドレスを始めとするネットワーク設定を自動的に行うのが一般的である。また、ブロードバンドルーターで家庭内のホストにIPアドレスを払い出ししているのもDHCPである。 一方、ダイアルアップ接続やADSL、FTTHでは、PPP（PPPoE）により設定を行うのが一般的だが、LAN型のネットワーク構成をとりDHCPを用いているISPも一部に存在する。 DHCPには、Optionという機能があり、様々なネットワーク情報をDHCPクライアントに配信することが可能である。これにより、DHCPクライアントはIPアドレスだけでなく多くのネットワークパラメーターを自動設定することができる。いずれも、クライアントとサーバの双方が対応している必要がある。 ホスト名 IPアドレス・サブネットマスク デフォルトルート（ゲートウェイ） DNSサーバ・DNSドメイン名 NISサーバ・NISドメイン名 プリンタサーバ NTPサーバ DHCPサーバ側で、あらかじめDHCPクライアント用にIPアドレスをいくつか用意しておき（アドレスプール）、DHCPクライアントの要求に応じて、この中から一つのIPアドレスを割り当てる（リースと呼ばれる）。 IPアドレスの割り当てを要求するDHCPクライアント（ノートパソコンなど）が物理的にネットワークへ接続されると、宛先IPアドレスが「255.255.255.255」のブロードキャストのUDPパケットを送出する（DHCPDISCOVER）。このパケットを受信したDHCPサーバは、前述のプールからリースアドレスの候補を選択し、クライアントのMACアドレス向けに返信する（DHCPOFFER）。候補を受け取ったクライアントは、その候補が自身のブロードキャストドメイン内で使用されていないかを確認し（多くはARPを使用し確認する）、DHCPサーバーに候補アドレスの使用承認を依頼する（DHCPREQUEST）。使用承認の依頼を受けとったDHCPサーバーは使用承認（DHCPACK）を送信すると同時に、リース済みのIPアドレスとリース先のMACアドレスのテーブルを作成管理する。 これにより、多数のクライアントをネットワークに接続する際、クライアントごとにネットワーク設定を手動で行う必要がなくなり、また、ノートPCなどを複数の場所でネットワークに接続する場合にも、ネットワーク設定を手動で切り替える必要がなくなるため、手間を削減できるメリットがある。 問題点としては、DHCPサーバの設置が容易なため、混乱が起きやすい。例としてはコンシューマ用のブロードバンドルータをDHCPサーバ機能が有効なまま、既存のDHCPネットワークに接続してしまうと、DHCPクライアントが間違ったアドレスを取得してしまう問題が起きる。フリーソフトのDHCPサーバアプリケーションを実行することも同様である。 また、許可されていないPCをDHCPネットワークで安易に使用されないようにする運用が、セキュリティ上必要になってくる。ルータやアプリケーションは、動作デフォルトを適切にすることにより、ある程度の影響を回避することはできるが、検疫ネットワークの導入や、L2スイッチ（ブリッジなど、OSI参照モデルのデータリンク層（レイヤ2）で動作する機器）でのフィルタリングが有効な対策手段となっている。逆に考えると、検疫ネットワークの導入に伴って、DHCPサーバ設置数が増えているのが現状である。 クライアントからDHCPサーバへIPアドレスの割り当てを要求するDHCPディスカバーなどのメッセージをブロードキャストで送信する際、クライアントとDHCPサーバ間にルーターなどのL3スイッチが存在すると、ブロードキャストパケットが超えることができないため、「DHCPリレーエージェント」（#DHCP Relay Agent）を利用する必要がある。 DHCPによってIPアドレスが割り当てられるまでにやり取りされるメッセージは以下である。 DHCPディスカバー（DHCP discover） DHCPオファー（DHCP offer） DHCPリクエスト（DHCP request） DHCP肯定応答（DHCP acknowledgement） DHCPサーバが実装されている環境としては、大きく分けて以下の三種類がある。 UNIX系環境 Windows系環境 ルータ内実装 もっとも初期の頃から存在しているサーバ実装であり、ISC版とWIDE版の2種類がよく知られているが、WIDE版DHCPサーバは現在開発が終了している。 Windows NT 4 Server以降、MicrosoftはサーバOSに標準でDHCPサーバを添付しており、現行のWindows Server 2008 R2でも標準でDHCPサーバが付属している。 Windows 2000 Server以降のDHCPサーバでは、Active Directory環境においてはインストール後にドメイン管理者の「承認」を行わないと起動できないという特徴を持つ（非Active Directory環境下ではこの制限はない）。 このほかに、第三者が開発した Windows 95/98系環境で動作する(Windows 2000等でも動作する）フリーソフトのDHCPサーバも存在する。 2000年頃から増加してきた形態で、ルータ内部にDHCPサーバ機能を組み込んだものである。特に、家庭向けのルータ（いわゆる「ブロードバンドルータ」）では必ずといってよいほど実装されており、現在家庭内で利用されているDHCPサーバでもっとも一般的なものと思われる。 Windows 9x・Windows NT 4.x・Mac OSなどでDHCPのクライアントモジュールが標準添付されるようになり、広く利用されるようになった。 初期のMac OS 9においては、DHCPの仕様の解釈の違いから、うまく通信できない場合があり、フリーズしたかのような症状になるという問題が発生した。この問題は、のちにバージョンアップで解決された。 DHCPはDHCPサーバの検索にブロードキャストを使用する関係上、通常はクライアントとサーバが同一ブロードキャスト・ドメイン上にないと正常に動作しない。しかしながら、企業や大学など比較的大規模なネットワークでは、サーバを1カ所に集中させたい等の理由でDHCPクライアントとサーバとが全く異なるネットワーク上に設置されることがある。 このような場合に使用されるのがDHCP Relay Agent（DHCPリレーエージェント） である。DHCP Relay Agent はサーバまたはルータ（L3スイッチ）上にBootp relay, IP helper, DHCP relay などの呼称で実装されている。「DHCPヘルパー」とも呼ばれる。 AgentがDHCPクライアントからのブロードキャスト(DHCP Request)を受信すると、宛先IPアドレスを設定されているDHCPサーバのアドレスに変換し、送信元を自己のLAN側（クライアントと同一サブネット）のIPアドレスに変換して転送する。また、リクエストデータ内に自己IPアドレスを書き込む。（ここで、注目したいのは、宛先IP/送信元IP/データを書き換えるという荒業をエレガントに行っていることである。） DHCPサーバは、転送されたパケットを確認し、データ内に書き込まれたAgentのIPアドレスにより割り当てるべきネットワークのアドレスを決定する。また、データ内のクライアントのMACアドレスを読んで、リーステーブルを更新する。リースパケットは、パケットの送信元である、Agentに返信される。 リースパケットを受信したAgentは、宛先IPアドレスを0.0.0.0に変換し、リクエストクライアントのMACアドレスに向けたフレームにカプセリングして送出する。 DHCP Relay Agentを利用する際の注意点として、以下の2点がある。 DHCPサーバとDHCP Relay Agentとは同一のサーバもしくはルータ内に同居することは出来ない。 同一ブロードキャストドメイン内に複数のサブネットが存在する場合、DHCP Relay Agentを経由すると、DHCP Relay AgentのIPアドレスによってDHCPサーバがリースするIPアドレスの範囲が決定される。 DHCPでは予め確保されたIPアドレスのプールから動的に割り当てを行う形が一般的であり、ブロードバンドルータなどに内蔵されているDHCPサーバ機能では、この割り当てのみが実装されているものが多い。一方、高機能なDHCPサーバーではプールからの動的な割り当てのほかに、特定の端末に固定的に特定のIPアドレスを割り当てる静的な割り当てを行う機能が実装されている。静的な割り当てを行う場合、端末のMACアドレスや、DHCPのクライアント識別子で対象端末を識別する実装がある。 いずれの方法でも、通常配信されたIPアドレスはDHCPサーバーからリース（貸与）されたものとなっており、永続的に適用出来るものではない。貸与期間の有効期限はDHCP Optionとして配信される。Optionの値は32bit値で単位は秒のため、1秒〜約136年の間で指定が可能である。リース期間は延長が可能であり、リース期間の50%の時間が経過した際（T1と呼ばれる）と87.5%の時間が経過した際（T2と呼ばれる）に延長承認をDHCPサーバーから得るよう動作させることがRFCで定められている。この機能により、リース期間が短く設定されたDHCP環境であっても、DHCPクライアントが継続的に同一のIPアドレスを使用することが可能になっている。 この有効期限を定めたIPアドレスのリースはもっとも一般的な利用方法であるが、クライアントの種類（ノートPC、デスクトップ）と数、割り当て可能なIPアドレスの総数によって適切な有効期間は異なってくる。 短くするとIPアドレスを効率よく使えるが、ネットワーク上に頻繁にDHCPのプロトコルが流れることになる。長くするとクライアントは安定してIPアドレスを保持できるが、使用されていないにもかかわらず割り当てできないIPアドレスが多くなる。一般に、ノートPCが多くてIPアドレスを一時的にしか使用しないネットワークの場合は数十分〜1日程度、デスクトップPCが多くIPアドレスも十分に足りている場合は一週間以上とすればいいだろう。 リース期間のOptionを配信しないことで、有効期間を無期限とすることも可能だが、この場合はリースしたアドレスが回収されないので、時々使用していないIPアドレスを手動で解放する必要がある。 IPv6 環境のための DHCP の仕様 DHCPv6 が RFC 3315 で定められている。DHCPv6 は DHCPv4 とは互換性がないが、そのかわり IPv6 だけでなく IPv4 のアドレスを割り当てることもできる。 IPv6 では IP アドレスとネットマスクの情報をルータから自動取得することが出来るが、DNS サーバや NTP サーバなどほかの情報も自動取得するためには DHCP が必要になる。 RFC 951 - BOOTSTRAP PROTOCOL (BOOTP) RFC 1542 - Clarifications and Extensions for the Bootstrap Protocol RFC 2131 - Dynamic Host Configuration Protocol RFC 2132 - DHCP Options and BOOTP Vendor Extensions RFC 2241 - DHCP Options for Novell Directory Services RFC 3315 - Dynamic Host Configuration Protocol for IPv6 (DHCPv6) ^ RFC 2131, Section 4.1 Constructing and sending DHCP messages