Dynamic Host Configuration Protocol

UDP/IPネットワークで使用されるネットワーク管理プロトコル

Dynamic Host Configuration Protocol(ダイナミック ホスト コンフィギュレーション プロトコル、DHCP)は、IPv4ネットワークで使用されるネットワーク管理プロトコルであり、コンピュータネットワークに接続する際に必要な設定情報を自動的に割り当てるために使用する。BOOTPにリース機能を追加してDHCPとなっている。

Dynamic Host Configuration Protocol
通信プロトコル
目的コンピュータがネットワークに接続する際に必要な設定情報の自動的な割り当て
導入1993年10月 (30年前) (1993-10)
派生元BOOTP
派生先DHCPv6
OSI階層アプリケーション層
ポート67(サーバ)
68(クライアント)
RFCRFC 2131

DHCPサーバは、IPアドレス等のネットワーク構成設定をネットワーク上の各デバイスに動的に割り当て、他のIPネットワークと通信できるようにする[1]。DHCPサーバを使用すると、コンピュータは自動的にIPアドレスとネットワーク設定を要求でき、ネットワーク管理者やエンドユーザが全てのネットワークデバイスに手動でIPアドレスを割り当てる必要がなくなる[1]

DHCPは、ホームネットワーク英語版から大規模なキャンパスネットワーク英語版、地域のインターネットサービスプロバイダネットワークまで、様々な規模のネットワークに実装できる[2]。ほとんどのルータまたはホームゲートウェイは、DHCPサーバとして機能させることができ、ローカルネットワーク内において、ネットワークに接続されている各デバイスにローカルIPアドレスを割り当てることができる。

概要

UDP/IPは、あるネットワーク上のデバイスが別のネットワーク上のデバイスと通信する方法を定義する。DHCPサーバは、IPアドレスを自動的または動的にデバイスに割り当てることによって、ネットワーク上のデバイスのUDP/IP設定を管理できる。

DHCPはクライアントサーバモデルに基づいて動作する。コンピュータがネットワークに接続したとき、当該のコンピュータ内のDHCPクライアントソフトウェアはDHCPクエリをブロードキャストで送信し、必要な設定情報を要求する。DHCPクエリは、ネットワーク上のどのDHCPサーバーでも処理できる。DHCPサーバは、プールされたIPアドレス、デフォルトゲートウェイドメイン名DNSサーバタイムサーバ英語版などのクライアント構成パラメータに関する情報を管理している。DHCP要求を受信したDHCPサーバは、管理者が以前に設定したクライアントごとに特定の情報、もしくはネットワーク全体に有効なアドレスその他の情報、および割り当て(リース(lease))た情報が有効な期間を返信する。DHCPクライアントは通常、起動直後、およびその後定期的に情報の有効期限が切れる前にこの情報を照会する。DHCPクライアントが割り当てを更新するとき、最初は同じパラメータ値を要求するが、DHCPサーバは管理者が設定した割り当てポリシーに基づいて新しいアドレスを割り当てることがある。

複数のリンクで構成される大規模ネットワークでは、相互接続ルータ上に配置されたDHCPリレーエージェントによって、単一のDHCPサーバでネットワーク全体にサービスを提供することができる。DHCPリレーエージェントは、異なるサブネット上にあるDHCPクライアントとDHCPサーバとの間でメッセージを中継する。

DHCPは、IPv4IPv6のどちらでも使用される。どちらのバージョンでも目的は同じであるが、IPv4とIPv6のプロトコルの詳細は大きく異なることから別のプロトコルと見なされる[3]。IPv6のDHCPはDHCPv6と呼ばれ、 RFC 8415 で定められている。DHCPv6はDHCPv4とは互換性がないが、IPv6だけでなくIPv4のアドレスを割り当てることもできる。IPv6では、IPアドレスとネットマスクの情報をIPv6自体のアドレス自動設定機能により取得することもできるが、DNSサーバやNTPサーバなどほかの情報も自動取得するためにはDHCPが必要になる。

割り当ての種類

DHCPサーバがIPアドレスを割り当てる方法には以下の3つがあり、サーバの設定により選択することができる。

動的割り当て
ネットワーク管理者がDHCP用のIPアドレスの範囲を予約し、LAN上の各DHCPクライアントはDHCPサーバにIPアドレスを要求するように構成されている。IPアドレスの割り当ての際には、そのIPアドレスが有効な期間(リース期間)が指定され、DHCPクライアントはリース期間満了前に更新を行う必要がある。DHCPサーバは、更新されずにリース期間が満了したIPアドレスを他のDHCPクライアントに再割り当てすることができる。
自動割り当て
DHCPサーバは、管理者によって定義された範囲からIPアドレスを要求側クライアントに永続的に割り当てる。これは動的割り当てに似ているが、DHCPサーバは過去のIPアドレス割り当てのテーブルを保持しているので、クライアントが以前に持っていたのと同じIPアドレスを優先的にクライアントに割り当てることができる。
静的割り当て
DHCPサーバは、管理者によって事前定義されたマッピングに基づいて、各クライアントのクライアント識別子(またはクライアントのMACアドレス)に応じてIPアドレスを発行する。この機能は、ルータのメーカーによって様々な名称で呼ばれている。DD-WRTは静的DHCP割り当て(static DHCP assignment)、dhcpdでは固定アドレス(fixed-address)、ネットギアではアドレス予約(address reservation)、シスコリンクシスはDHCP予約(DHCP reservation)または静的DHCP(static DHCP)としているほか、IPアドレス予約(IP address reservation)やMAC/IPアドレスバインディング(MAC/IP address binding)とも呼ばれる。クライアントのクライアント識別子またはMACアドレスに一致するものがマッピングになかった場合、サーバは動的割り当てまたは自動割り当てにフォールバックしてIPアドレスを割り当てる場合と、IPアドレス割り当て自体をしない場合がある。

いずれの方法でも、通常配信された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アドレスを手動で解放する必要がある。

動作

典型的なDHCPセッションのシーケンス図。各メッセージは、DHCPクライアントの機能に応じて、ブロードキャストまたはユニキャストのいずれかになる[4]

DHCPは、User Datagram Protocol(UDP)を使用した、コネクションレスサービスモデルを採用している。Bootstrap Protocol(BOOTP)と同じ動作をするために、2つのUDPポート番号で実装されている。UDPポート番号67はサーバの宛先ポートであり、UDPポート番号68はクライアントによって使用される。

DHCPの動作は、サーバ探索、IPリース提示、IPリース要求、IPリース確認の4段階に分けられる。これは、discovery(探索), offer(提示), request(要求), acknowledgement(確認)の頭文字をとって"DORA"とよばれることがある。

DHCPの動作は、クライアントが要求をブロードキャストで送信することから始まる。クライアントとサーバが異なるサブネット上にある場合は、DHCPリレーエージェントを使用する。既存のリースの更新を要求しているクライアントは、その時点ですでに確立されたIPアドレスを持っているので、UDPユニキャストによって直接サーバと通信することができる。また、BROADCASTフラグ(2バイトフィールドの第1ビット。他のビットは通常は0になっている)によってクライアントがDHCPOFFERをブロードキャスト・ユニキャストのどちらで受け取りたいかをサーバに通知することができる。0x8000であればブロードキャスト、0x0000であればユニキャストである[5]。通常、DHCPOFFERはユニキャストで送信される。IPアドレスが設定される前にユニキャストパケットを受け入れることができないホストの場合、このフラグを使って問題を回避することができる。

DHCP discover

DHCPクライアントは、255.255.255.255(リミテッド・ブロードキャストアドレス)または特定のサブネットブロードキャストアドレス(ディレクテッド・ブロードキャストアドレス)を使用して、サブネット上にDHCPDISCOVERメッセージをブロードキャストで送信する。DHCPクライアントは、最後に認識されたIPアドレスを要求することもある。クライアントが同じネットワークに接続されたままの場合、サーバは要求を許可する。それ以外の場合は、サーバが権限(authoritative)ありに設定されているか否かによって異なる。権限ありのサーバは、要求を拒否して、クライアントに新しい要求を発行させる。権限なしのサーバは、単に要求を無視するため、クライアントは要求がタイムアウトしてから新しいIPアドレスを要求する。

例えば、HTYPEが1に設定されて、使用される媒体がイーサネットであることが指定されている場合、MACアドレスは6オクテット長であるため、HLENは6に設定される。CHADDRは、クライアントによって使用されるMACアドレスに設定される。その他のいくつかのオプションも設定されている。

DHCPDISCOVERメッセージの例

イーサネット: 送信元=送信者のMACアドレス; 送信先=FF:FF:FF:FF:FF:FF

IP: 送信元=0.0.0.0; 送信先=255.255.255.255
UDP: 送信元ポート=68; 送信先ポート=67

Octet 0Octet 1Octet 2Octet 3
OPHTYPEHLENHOPS
0x010x010x060x00
XID
0x3903F326
SECSFLAGS
0x00000x0000
CIADDR (Client IP address)
0x00000000
YIADDR (Your IP address)
0x00000000
SIADDR (Server IP address)
0x00000000
GIADDR (Gateway IP address)
0x00000000
CHADDR (Client hardware address)
0x00053C04
0x8D590000
0x00000000
0x00000000
192オクテットの0、または追加オプション用のオーバーフロースペース。BOOTPとの互換性のため
マジッククッキー
0x63825363
DHCPオプション
0x350101 53: 1 (DHCP Discover)
0x3204c0a80164 50: 192.168.1.100を要求
0x370401030f06 55 (パラメータ要求リスト):
  • 1 (サブネットマスク),
  • 3 (ルータ),
  • 15 (ドメイン名),
  • 6 (DNSサーバ)
0xff 255 (終端マーク)

DHCP offer

IPアドレスリース要求であるDHCPDISCOVERメッセージをクライアントから受信したDHCPサーバは、クライアントのIPアドレスを予約し、クライアントにDHCPOFFERメッセージを送信してリース提示を行う。このメッセージには、クライアントのクライアント識別子(またはMACアドレス)、サーバが提供しようとしているIPアドレスとそのサブネットマスク、リース期間、提供しているDHCPサーバのIPアドレスが含まれている。DHCPサーバは、基盤となるトランスポート層のハードウェアレベルのMACアドレスを参照することができる。現在のRFCでは、DHCPパケットにクライアント識別子が指定されていない場合はトランスポート層のMACアドレスを使用できる。

DHCPサーバは、CHADDR(Client hardware address)フィールドで指定されたクライアントのハードウェアアドレスに基づいて構成を決定する。ここで、サーバ192.168.1.1は、YIADDR(Your IP address)フィールドにクライアントのIPアドレスを指定する。

DHCPOFFERメッセージの例

イーサネット: 送信元=送信者のMACアドレス; 送信先=クライアントのMACアドレス

IP: 送信元=192.168.1.1; 送信先=255.255.255.255
UDP: 送信元ポート=67; 送信先ポート=68

Octet 0Octet 1Octet 2Octet 3
OPHTYPEHLENHOPS
0x020x010x060x00
XID
0x3903F326
SECSFLAGS
0x00000x0000
CIADDR (Client IP address)
0x00000000
YIADDR (Your IP address)
0xC0A80164 (192.168.1.100)
SIADDR (Server IP address)
0xC0A80101 (192.168.1.1)
GIADDR (Gateway IP address)
0x00000000
CHADDR (Client hardware address)
0x00053C04
0x8D590000
0x00000000
0x00000000
192オクテットの0。BOOTPとの互換性のため
マジッククッキー
0x63825363
DHCPオプション
53: 2 (DHCP Offer)
1(サブネットマスク): 255.255.255.0
3(ルータ): 192.168.1.1
51(IPアドレスリース期間): 86400s(1日)
54(DHCPサーバ): 192.168.1.1
6(DNSサーバ):
  • 9.7.10.15,
  • 9.7.10.16,
  • 9.7.10.18

DHCP request

クライアントは、DHCP offerに応答して、サーバにDHCPREQUESTメッセージでブロードキャストで送信し[注釈 1]、提示されたアドレスを要求する。クライアントは複数のサーバからDHCP offerを受信しても、1つのDHCP offerしか受け入れない。DHCP requestメッセージで要求されたserver identificationオプションによって、サーバは、DHCP offerがクライアントにより受け入れられたことを知る[7]:Section 3.1, Item 3。このメッセージを受け取った他のDHCPサーバは、クライアントに送信したDHCP offerを取り消し、IPアドレスを利用可能なアドレスのプールに返却する。

DHCPREQUESTメッセージの例

イーサネット: 送信元=送信者のMACアドレス; 送信先=FF:FF:FF:FF:FF:FF

IP: 送信元=0.0.0.0; 送信先=255.255.255.255[注釈 1]
UDP: 送信元ポート=68; 送信先ポート=67

Octet 0Octet 1Octet 2Octet 3
OPHTYPEHLENHOPS
0x010x010x060x00
XID
0x3903F326
SECSFLAGS
0x00000x0000
CIADDR (Client IP address)
0x00000000
YIADDR (Your IP address)
0x00000000
SIADDR (Server IP address)
0xC0A80101 (192.168.1.1)
GIADDR (Gateway IP address)
0x00000000
CHADDR (Client hardware address)
0x00053C04
0x8D590000
0x00000000
0x00000000
192オクテットの0。BOOTPとの互換性のため
マジッククッキー
0x63825363
DHCPオプション
53: 3 (DHCP Request)
50: 192.168.1.100を要求
54(DHCPサーバ): 192.168.1.1

DHCP acknowledgement

DHCPサーバがクライアントからDHCPREQUESTメッセージを受信すると、設定プロセスは最終段階に入る。確認応答フェーズでは、サーバがDHCPACKパケットをクライアントに送信する。このパケットには、リース期間と、クライアントが要求したその他の設定情報が含まれている。DHCPACKパケットをクライアントが受信した時点で、IP設定プロセスは完了となる。

プロトコルでは、DHCPクライアントがサーバから通知されたパラメータを使用してネットワークインターフェースを設定することを期待している。

クライアントはIPアドレスを得た後で、複数のDHCPサーバ間のアドレスプールの重なりによって引き起こされるアドレスの衝突を防ぐために、(Address Resolution Protocol(ARP)などを使って)新しく設定したアドレスが他のコンピュータで使われていないかを調べるべきである[8]

DHCPACKメッセージの例

イーサネット: 送信元=送信者のMACアドレス; 送信先=クライアントのMACアドレス

IP: 送信元=192.168.1.1; 送信先=192.168.1.100
UDP: 送信元ポート=67; 送信先ポート=68

Octet 0Octet 1Octet 2Octet 3
OPHTYPEHLENHOPS
0x020x010x060x00
XID
0x3903F326
SECSFLAGS
0x00000x0000
CIADDR (Client IP address)
0x00000000
YIADDR (Your IP address)
0xC0A80164 (192.168.1.100)
SIADDR (Server IP address)
0xC0A80101 (192.168.1.1)
GIADDR (Gateway IP address switched by relay)
0x00000000
CHADDR (Client hardware address)
0x00053C04
0x8D590000
0x00000000

0x00000000
192オクテットの0。BOOTPとの互換性のため
マジッククッキー
0x63825363
DHCPオプション
53: 5 (DHCP ACK) または 6 (DHCP NAK)
1 (サブネットマスク): 255.255.255.0
3(ルータ): 192.168.1.1
51(IPアドレスリース期間): 86400s(1日)
54(DHCPサーバ): 192.168.1.1
6(DNSサーバ):
  • 9.7.10.15,
  • 9.7.10.16,
  • 9.7.10.18

DHCP information

DHCPクライアントは、元のサーバがDHCPOFFERで送信したものよりも多くの情報を要求する可能性がある。クライアントは特定のアプリケーションのために繰り返しデータを要求することもある。例えば、ブラウザはDHCP Inform(DHCP通知)を使用してWeb Proxy Auto-Discovery Protocol(WPAD)経由でプロキシ設定を取得する。

DHCP releasing

クライアントはDHCP情報を解放(リリース)するようにDHCPサーバに要求を送信し、それを受信したクライアントはそのIPアドレスを無効にする。通常、クライアントデバイスは、ユーザーがネットワークからデバイスを取り外すことができるかどうかを知らないので、プロトコルではDHCP Releaseの送信を義務付けていない。

クライアント設定パラメータ

DHCPサーバは、オプションの設定パラメータをクライアントに提供できる。 RFC 2132 には、Internet Assigned Numbers Authority(IANA)によって定義されている使用可能なDHCPオプション(DHCPおよびBOOTPのパラメータ)が記載されている[9]

DHCPクライアントは、DHCPサーバによって提供されたパラメータを選択・操作・上書きすることができる。Unix系OSでは、このクライアントレベルの変更は通常、設定ファイル/etc/dhclient.confの値に従って行われる。

DHCPオプション

オプションは様々な長さのオクテット文字列である。最初のオクテットはオプションコード、2番目のオクテットは後続オクテットの数で、残りのオクテットはオプションコードに依存する。例えば、offerのDHCPメッセージタイプオプションは0x35、0x01、0x02と表示される。ここで、0x35はDHCPメッセージタイプ(DHCP message type)のコード53で、0x01は後ろに1オクテットが続くことを表し、0x02は"offer"を表す値である。

RFC 2132 で定義

次の表は、 RFC 2132 [10]およびIANAレジストリ[9]で定義されている利用可能なDHCPオプションを一覧にしたものである。


RFC 1497 (BOOTP Vendor Information Extensions) ベンダ拡張[10]:Section 3
コード名称長さ備考
0Pad[10]:Section 3.10 オクテット他のオプションがバイト境界に揃うようにパディングするために使用する。長さバイトの後には何も続かない。
1Subnet mask[10]:Section 3.34オクテットルータオプション(オプション3)がある場合は、その前に送信する必要がある。
2Time offset[10]:Section 3.44オクテット
3Router4オクテットの倍数利用可能なルータ。優先順にリストされている。
4Time server4オクテットの倍数利用可能な同期タイムサーバ。優先順にリストされている。
5Name server4オクテットの倍数利用可能なIEN 116英語版ネームサーバ。優先順にリストされている。
6Domain name server4オクテットの倍数利用可能なDNSサーバ。優先順にリストされている。
7Log server4オクテットの倍数利用可能なログサーバ。優先順にリストされている。.
8Cookie server4オクテットの倍数ここで言うCookieとは、fortuneコマンドで表示されるフォーチュン・クッキー(おみくじ)のための格言やジョークなどのことで、HTTP cookieとは関係ない。
9LPR Server4オクテットの倍数
10Impress server4オクテットの倍数
11Resource location server4オクテットの倍数
12Host name1オクテット以上
13Boot file size2オクテットブートイメージの大きさ(4KiBブロック単位)
14Merit英語版 dump file1オクテット以上クラッシュダンプを保存した場所のパス
15Domain name1オクテット以上
16Swap server4オクテット
17Root path1オクテット以上
18Extensions path1オクテット以上
255End0オクテットベンダーオプションフィールドの終端を示すために使用される
ホストごとのIP層パラメータ[10]:Section 4
コード名称長さ備考
19IP forwarding enable/disable1オクテット
20Non-local source routing enable/disable1オクテット
21Policy filter8オクテットの倍数
22Maximum datagram reassembly size2オクテット
23Default IP time-to-live1オクテット
24Path MTU aging timeout4オクテット
25Path MTU plateau table2オクテットの倍数
インターフェースごとのIP層パラメータ[10]:Section 5
コード名称長さ備考
26Interface MTU2オクテット
27All subnets are local1オクテット
28Broadcast address4オクテット
29Perform mask discovery1オクテット
30Mask supplier1オクテット
31Perform router discovery1オクテット
32Router solicitation address4オクテット
33Static route8オクテットの倍数送信先・ルータのペアのリスト
インターフェースごとのリンク層パラメータ[10]:Section 6
コード名称長さ備考
34Trailer encapsulation option1オクテット
35ARP cache timeout4オクテット
36Ethernet encapsulation1オクテット
TCPパラメータ[10]:Section 7
コード名称長さ備考
37TCP default TTL1オクテット
38TCP keepalive interval4オクテット
39TCP keepalive garbage1オクテット
アプリケーションとサービスのパラメータ[10]:Section 8
コード名称長さ備考
40Network information service domain1オクテット以上
41Network information servers4オクテットの倍数
42Network Time Protocol (NTP) servers4オクテットの倍数
43Vendor-specific information1オクテット以上
44NetBIOS over TCP/IP name server4オクテットの倍数
45NetBIOS over TCP/IP datagram Distribution Server4オクテットの倍数
46NetBIOS over TCP/IP node type1オクテット
47NetBIOS over TCP/IP scope1オクテット以上
48X Window System font server4オクテットの倍数
49X Window System display manager4オクテットの倍数
64Network Information Service+ domain1オクテット以上
65Network Information Service+ servers4オクテットの倍数
68Mobile IP home agent4オクテットの倍数
69Simple Mail Transfer Protocol (SMTP) server4オクテットの倍数
70Post Office Protocol (POP3) server4オクテットの倍数
71Network News Transfer Protocol (NNTP) server4オクテットの倍数
72Default World Wide Web (WWW) server4オクテットの倍数
73Default Finger protocol server4オクテットの倍数
74Default Internet Relay Chat (IRC) server4オクテットの倍数
75StreetTalk server4オクテットの倍数
76StreetTalk Directory Assistance (STDA) server4オクテットの倍数
DHCP拡張[10]:Section 9
コード名称長さ備考
50Requested IP address4オクテット
51IP address lease time4オクテット
52Option overload1オクテット
53DHCP message type1オクテット
54Server identifier4オクテット
55Parameter request list1オクテット以上
56Message1オクテット以上
57Maximum DHCP message size2オクテット
58Renewal (T1) time value4オクテット
59Rebinding (T2) time value4オクテット
60Vendor class identifier1オクテット以上
61Client-identifier2オクテット以上
66TFTP server name1オクテット以上
67Bootfile name1オクテット以上

DHCPクライアントのベンダ識別

DHCPクライアントのベンダと機能を識別するためのオプションがある。この情報は、DHCPクライアントのベンダによって指定された意味を持つ可変長文字列またはオクテットである。DHCPクライアントが特定の種類のハードウェアまたはファームウェアを使用していることをサーバに通信するには、DHCP requestにベンダクラス識別子(VCI)と呼ばれる値(オプション60)を設定する。

この方法により、DHCPサーバーは2種類のクライアントマシンを区別し、2種類のモデムからの要求を適切に処理できる。一部のタイプのセットトップボックスでは、デバイスのハードウェアタイプと機能についてDHCPサーバーに通知するようにVCI(オプション60)も設定されている。このオプションが設定されている値は、このクライアントがDHCP応答で必要とする必要な追加情報についてのヒントをDHCPサーバに与える。

RFC 2132以外で定義

定義されたDHCPオプション
コード名称長さRFC
82Relay agent information2オクテット以上RFC 3046[11]
85Novell Directory Service (NDS) servers4オクテット以上で、4オクテットの倍数RFC 2241[12]:Section 2
86NDS tree name可変RFC 2241[12]:Section 3
87NDS context可変RFC 2241[12]:Section 4
100Time zone, POSIX style可変RFC 4833[13]
101Time zone, tz database style可変RFC 4833[13]
119Domain search可変RFC 3397[14]
121Classless static route可変RFC 3442[15]

リレーエージェント情報サブオプション

リレーエージェント情報オプション(オプション82)[11]は、DHCPリレーとDHCPサーバ間で送信されるDHCP要求にサブオプションを付加するためのコンテナを指定する。

Relay agent sub-options
コード名称長さRFC
4Data-Over-Cable Service Interface Specifications (DOCSIS) device class4オクテットRFC 3256[16]

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サーバー間の通信では、通常、送信元と宛先のどちらもUDPポート67が使用される。

DHCP Relay Agentを利用する際の注意点として、以下の2点がある。

  • DHCPサーバとDHCP Relay Agentとは同一のサーバもしくはルータ内に同居することは出来ない。
  • 同一ブロードキャストドメイン内に複数のサブネットが存在する場合、DHCP Relay Agentを経由すると、DHCP Relay AgentのIPアドレスによってDHCPサーバがリースするIPアドレスの範囲が決定される。

信頼性

DHCPは、定期的な更新、再バインド[7]:Section 4.4.5、フェイルオーバーなど、いくつかの方法で信頼性を保証する。DHCPクライアントには、一定期間リースが割り当てられている。リース期間の半分が経過すると、クライアントはリースの更新を試みる[7]:Section 4.4.5 Paragraph 3。元のリースを許可したDHCPサーバにユニキャストDHCPREQUESTメッセージを送信することで、これを行う。そのサーバが停止しているか、またはアクセスできない場合、DHCPREQUESTへの応答は届かない。その場合、クライアントはDHCPREQUESTを再送し[7]:Section 4.4.5 Paragraph 8[注釈 2]、DHCPサーバが復旧した場合、または再び到達可能になった場合は、応答が返るのでリースを更新することができる。

DHCPサーバに長期間到達できない場合[7]:Section 4.4.5 Paragraph 5、DHCPクライアントは、DHCPREQUESTをユニキャストではなくブロードキャストで送信し再バインドを試みる。ブロードキャストなので、DHCPREQUESTメッセージは全ての利用可能なDHCPサーバに届く。他のDHCPサーバがリースを更新できる場合は、この時点で更新される。

再バインドが機能するためには、クライアントがバックアップのDHCPサーバに正常に接続したときに、クライアントのバインディングに関する正確なそのサーバにおいて情報が必要である。2つのサーバー間で正確なバインディング情報を維持することは複雑な問題である。両方のサーバが同じリースデータベースを更新できる場合は、独立したサーバでの更新間の競合を回避するためのメカニズムが必要である。フォールトトレラントなDHCPサーバを実装するための提案がIETFに提出されたが、まだ正式化はされていない[17][注釈 3]

再バインドが失敗すると、リースは最終的に期限切れになる。リースが期限切れになると、クライアントはリースで付与されたIPアドレスの使用を停止する必要がある[7]:Section 4.4.5 Paragraph 9。そして、DHCPプロセスを最初から再開し、DHCPDISCOVERメッセージをブロードキャスト送信する。リース期限が切れているため、提示されたIPアドレスはすべて受け入れられる。新しいIPアドレスを(おそらく別のDHCPサーバから)取得すると、もう一度ネットワークを使用できるようになる。ただし、IPアドレスが変更されるため、進行中の接続は全て切断される。

セキュリティ

基本のDHCPには、認証のメカニズムは含まれていない[18]。このため、様々な攻撃に対して脆弱である。DHCPを利用した攻撃は、主に以下の3つのカテゴリに分類される。

  • 不正なDHCPサーバがクライアントに誤った情報を提示する[19]
  • 無許可のクライアントがリソースにアクセスする[19]
  • 悪意のあるDHCPクライアントからのリソース枯渇攻撃[19]

クライアントにはDHCPサーバの身元を検証する方法がないため、攻撃者が不正DHCP英語版サーバ(rogue DHCP)をネットワーク上に設置して、DHCPクライアントに誤った情報を提示する可能性がある[20]。これは、クライアントがネットワーク接続にアクセスするのを妨げるDoS攻撃[21]や、中間者攻撃に使うことができる[22]。DHCPサーバはDHCPクライアントにDNSサーバなどのサーバIPアドレスを提供するため[19]、攻撃者はDHCPクライアントに自分のDNSサーバを介してDNS問い合わせを実行させることができる[23][24]。これにより、攻撃者は自分自身を介してネットワークトラフィックをリダイレクトし、接続しているクライアントとネットワークサーバ間の接続を盗聴したり、単にそれらのネットワークサーバを自分のネットワークサーバに置き換えることができる[23]

DHCPサーバにはクライアントを認証するための安全なメカニズムがないため、クライアント識別子など、他のDHCPクライアントに属する資格情報を提示することで、攻撃者のクライアントはIPアドレスを不正に取得することができる[20]。これにより、DHCPクライアントがDHCPサーバのIPアドレスのプールを全て使い果たすことも可能になる。アドレスを尋ねる度に新しい資格を提示することにより、クライアントは特定のネットワークリンク上の全ての利用可能なIPアドレスを消費できる[20]

DHCPでは、これらの問題を軽減するためのメカニズムをいくつか提供している。リレーエージェント情報オプションプロトコル拡張( RFC 3046 、通常は実際のオプション番号から"Option 82"と呼ばれる[25][26])は、これらのメッセージがネットワーク事業者の信頼できるネットワークに届くときにDHCPメッセージにタグを付けることをネットワーク事業者に許可する。このタグは、クライアントのネットワークリソースへのアクセスを制御するための認証トークンとして使用される。クライアントはリレーエージェントの上流にあるネットワークにアクセスできないため、認証がなくてもDHCPサーバオペレータが認可トークンに依存することを妨げることはない[18]

別の拡張、DHCPメッセージ認証( RFC 3118 )では、DHCPメッセージを認証するためのメカニズムを提供する。2002年の時点では、多数のDHCPクライアントの鍵を管理するという問題があるため、RFC 3118では広く採用されていなかった。DSL技術に関する2007年の本には、次のように書かれている。

RFC 3118で提案されたセキュリティ対策に対して特定された多数のセキュリティ脆弱性があった。この事実は、802.1xの導入と相まって、DHCP認証の導入と普及率を低下させ、広く普及したことは一度もない[27]

2010年の本では次のように書かれている。

DHCP認証の実装はこれまでほとんどなかった。ハッシュ計算による鍵管理と処理遅延の課題は、認識されている利点の代価を払うには高すぎる代償と見なされてきた[28]

2008年からの提案には、802.1xPANA英語版(どちらもEAPを転送する)を使用することでDHCP要求を認証するものがある[29]。DHCP自体にEAPを含める、いわゆるEAPoDHCPについてIETFの提案がなされた[30]が、これはIETFドラフトよりも先に進行した形跡はなく、最後の議論は2010年で止まっている[31]

実装

サーバの実装

DHCPサーバが実装されている環境としては、大きく分けて以下の三種類がある。

UNIX系環境

もっとも初期の頃から存在しているサーバ実装であり、ISC版とWIDE版の2種類がよく知られているが、WIDE版DHCPサーバは現在開発が終了している。

Windows系環境

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 9xWindows NT 4.xMac OSなどでDHCPのクライアントモジュールが標準添付されるようになり、広く利用されるようになった。

初期のMac OS 9においては、DHCPの仕様の解釈の違いから、うまく通信できない場合があり、フリーズしたかのような症状になるという問題が発生した。この問題は、のちにバージョンアップで解決された。

関連するIETF標準

  • RFC 2131, Dynamic Host Configuration Protocol
  • RFC 2132, DHCP Options and BOOTP Vendor Extensions
  • RFC 3046, DHCP Relay Agent Information Option
  • RFC 3397, Dynamic Host Configuration Protocol (DHCP) Domain Search Option
  • RFC 3942, Reclassifying Dynamic Host Configuration Protocol Version Four (DHCPv4) Options
  • RFC 4242, Information Refresh Time Option for Dynamic Host Configuration Protocol for IPv6
  • RFC 4361, Node-specific Client Identifiers for Dynamic Host Configuration Protocol Version Four (DHCPv4)
  • RFC 4436, Detecting Network Attachment in IPv4 (DNAv4)
  • RFC 3442, Classless Static Route Option for Dynamic Host Configuration Protocol (DHCP) version 4

関連項目

脚注

注釈

出典