DHCP

July 21, 2018

DHCP の機能

DHCP (Dynamic Host Configuration Protocol) は、クライアントがネットワーク設定をサーバから自動的に読み込むためのプロトコルである BOOTP を拡張し、アドレス情報などの設定情報の動的な割り当て機能を追加したプロトコルである。
DHCP を使用すると、クライアント端末の設定情報を DHCP サーバが自動的に割り当てるため、管理者の運用負担が軽減される。主な設定情報として、クライアントの IP アドレスとサブネットマスク、デフォルトゲートウェイの IP アドレス、ローカル DNS サーバの IP アドレス等がある。
なお、DHCP から割り当てられた設定情報には有効機嫌があり、これをリース期間という。

DHCP による設定情報の割り当て順序

DHCP は UDP の上位アプリケーションプロトコルであり、DHCP サーバはポート番号 67 番を、DHCP クライアントはポート番号 68 番を使用する。
起動時、DHCP クライアントの IP アドレス、サブネットマスクは 0.0.0.0 が設定されている。DHCP サーバとのやり取りでは制限ブロードキャストアドレス (255.255.255.255) が用いられる。
なお、同一サブネットに複数の DHCP サーバを設置する場合は、それぞれのサーバがプールする IP アドレスの範囲が重複しないようにする。
以下、設定情報の割り当て順序について記載する。

初期リースの取得

DHCP 設定情報の割り当て順序を以下に示す。

f:id:shiro_kochi:2018××××××××:plain:w100:left

  1. クライアントはサーバを見つけるため、DHCPDISCOVER を送信する
  2. サーバは、クライアントに IP アドレスを提供するため、DHCPOFFER を送信する。サーバが複数ある場合、クライアントは複数の DHCPOFFER を受信する
  3. クライアントは、提供された IP アドレスの割り当てを要求するため、DHCPREQUEST を送信する。複数のサーバから DHCPOFFER を受信した場合、その中から一つを選び、提供された IP アドレスやサーバ ID (DHCPOFFER パケットに格納) をセットして要求する
  4. サーバは、確認応答として DHCPACK を送信する。その際、提供した IP アドレスが割り当て可能かどうかをチェックし、この時点で IP アドレスが割り当て不能であった場合、DHCPNACK を送信する。サーバが複数ある場合、DHCPACK を送信するのは、DHCPREQUEST で指定を受けたサーバだけである。

リースの更新と解放

クライアントが起動されたとき、まだ IP アドレスのリース期間内であれば、同じ IP アドレスの取得を要求する (リースの更新)。リース機嫌の残り半分を過ぎていた場合は、自動的にリースの更新を要求する。
このとき、DHCPREQUEST パケットが DHCP クライアントから送信され、DHCP サーバから DHCPACK パケットが返信される。クライアントの実行中もリース更新は定期的に行われる。なお、サーバの IP アドレスを取得済みなので、クライアント実行中はユニキャストでやり取りをする。

f:id:shiro_kochi:2018××××××××:plain:w100:left

  1. クライアントは DHCPREQUEST をサーバに送信してリースの更新を要求する
  2. サーバは DHCPACK を送信する

クライアントが IP アドレスのリース期間前に IP アドレスの使用を終了するときは、サーバに DHCPRELEASE パケットをユニキャストで送信する。このパケットを受け取ったサーバは IP アドレスを解放してプールに戻す。なお、サーバはこのパケットに対して確認応答を出さない。

IP アドレス重複の検出

DHCP クライアントは、DHCP サーバから設定情報を受け取った後、Gratuitous ARP を送信し、IP アドレスの重複チェックを行う。これは手動による設定などで IP アドレスが同一サブネット内に重複してしまう可能性があるためである。

DHCP リレー

DHCP クライアントが DHCP サーバから TCP/IP 設定情報を取得するときには、ブロードキャストパケットを用いたやり取りが行われる。DHCP クライアントと DHCP サーバがルータを介して接続されている場合、両者は異なるブロードキャストドメインに所属するため、ブロードキャストパケットが到達しない。そのため、ルータ上で DHCP リレーエージェント機能を動作させる必要がある。
DHCP リレーエージェントを使用する際は、DHCP サーバの IP アドレスをあらかじめ登録しておく。DHCP リレーエージェントは DHCP クライアントが送信したブロードキャストパケットを受信すると、そこに格納されている DHCP メッセージを取り出し、ユニキャストパケットにより DHCP サーバに転送し、DHCP サーバはそれを受信すると、ユニキャストパケットにより、DHCP リレーエージェントに応答する。DHCP リレーエージェントはそれを受信すると、そこに格納されている DHCP メッセージを取り出し、ブロードキャストパケットを用いて DHCP クライアントに転送する。

サーバは DHCP パケット内の情報から、クライアントからの要求がリレーエージェントを経由したものであることを識別し、適切な IP アドレスを提供する。
リレーエージェントが RCF3046 で規定された DHCP リレー情報オプションをサポートする場合、DHCP クライアントから受け取った DHCP パケットにリレーエージェント固有の情報を付加し、DHCP サーバに転送することが可能であり、その情報はリレーエージェント情報オプション (オプションコード: 82) として、DHCP オプションの最後に追加される仕組みとなっている。
付加される情報は以下の二つである。

  • リモート ID サブオプション:
    リレーエージェント (L3SW) の MAC アドレス
  • 回線 ID サブオプション:
    DHCP クライアントからのパケットを受信したポート番号等 (他には VLAN 番号等も付加可能)

 © 2023, Dealing with Ambiguity