今回より DHCP について説明を行います.
まずは DHCP とはなにか,どのように動作するのかを解説します.
- DHCP に関するお話
- Windows Server – DHCP サービス (DHCP とは)
- Windows Server – DHCP サービス (DHCP の冗長方式)
- Windows Server – DHCP サービス (DHCP の冗長化方式 – ホットスタンバイモード)
- Windows Server – DHCP サービス (DHCP の冗長化方式 – 負荷分散モード)
- Windows Server – DHCP サービスの導入と構成
- Windows Server – DHCP フェイルオーバーの構成 (ホットスタンバイモード)
- Windows Server – DHCP フェイルオーバーの構成 (負荷分散モード)
- Windows Server – DHCP サーバーの管理 (1)
- Windows Server – DHCP サーバーの管理 (2)
DHCP とは
Dynamic Host Configuration Protocol(DHCP)は,IP ネットワークで使用されるネットワーク管理プロトコルです.
コンピューターがネットワークに接続する際に必要な設定情報を自動的に割り当てるために使用され,主にクライアント機 (PCやスマホ,ゲーム機) で利用されます.
大元には BOOTP というプロトコルがあり,これに機能を追加して DHCP として仕様化されました.
DHCP サーバーは,IP アドレス等のネットワーク構成設定をデバイスに動的に割り当て,他の機器と通信が行えるようにします.
コンピューターなどのクライアント端末は自動的にIPアドレスやネットワーク設定を要求し,DHCP サーバーが要求への応答を行う事でネットワーク管理者やユーザーが端末に手動で IP アドレスを割り当てる必要がなくなります.
詳細は後述しますが,同一サブネット内およびリレーを用いたサブネットを跨いだ DHCP サーバーの構成が可能です.
DHCPの通信フロー (同一セグメント内)
同じセグメント内の クライアントとサーバー間の DHCP の通信フローはこのようになります.
DHCP DISCOVER
DHCP DISCOVER は,アドレス払いだしを受けるべく DHCP サーバーを探索するためのリスクエストメッセージパケットです.
起動直後のクライアントは IP アドレスを持っていない,および,DHCP サーバーがどこにいるのか不明の状態のため,0.0.0.0 (及び自身のMACアドレス) を送信元アドレスとして設定し,送信する宛先アドレスはブロードキャストアドレス 255.255.255.255 (及び FF:FF:FF:FF:FF:FF) 宛てに DHCP DISCOVER パケットを送信します.
DHCP DISCOVER パケットを送信する際にクライアントの情報として幾つかの情報を付随して送信しています.代表的なものとして以下があります.
- Client Identifier
クライアント識別子が入ります。ほとんどの場合はその端末の MAC アドレスが記されます - Vendor Class Identifier
クライアントのOS情報 (MSFT 5.0 や android-dhcp-10 など) が記されます - Parameter Request List
DHCP でアドレス情報以外に要求したいオプション一覧を要求としてメッセージの中に追加されます
例えば,サブネットマスク,ゲートウェイ,DNS サーバーなどです
DHCP OFFER
DHCP OFFER は,クライアントからの DHCP DISCOVER リクエストを受け取り,アドレスを払い出す事が可能な DHCP サーバーから返される応答メッセージです.
この際,クライアントに払い出すアドレスを予約して DHCP OFFER の中で提示します.
合わせて,リース時間などの他の設定値もメッセージ内に含んで応答しています.代表的なものとして以下があります.
- Your IP Address
クライアントに使用してもらう予定の IP アドレスが記されます - DHCP Server Identifier
DHCP OFFER メッセージを返す DHCP サーバー自身の IP アドレスが記されます - Renewal Time Value
リース延長申請までの時間が記されます - Rebinding Time Value
リース延長が出来ない場合の再度 DHCP DISCOVER を行う時間が記されます - Lease Time Value
払い出す IP アドレスのリース時間が記されます - Parameter Request List への応答
DHCP DISCOVER 事に要求されたオプション一覧に対する応答がメッセージの中に追加されます
例えば,サブネットマスク,ゲートウェイ,DNS サーバーなどです
DHCP REQUEST
DHCP REQUEST は,DHCP OFFER を返してきた DHCP サーバーから1台を選び,そのサーバー宛に DHCP REQUEST を送出します.
そのサーバー宛てと書いていますが,宛先アドレスはブロードキャストになります.
ブロードキャスト宛てなので,複数のDHCP サーバーが DHCP REQUEST を受け取る事になりますが,DHCP REQUEST メッセージ内にどのサーバーに要求しているかの値が入っています.
この値を読み取って各 DHCP サーバーは自身宛てであれば ACK を返します.それ以外の DHCP サーバーは NACK を返します.
DHCP REQUEST パケットを送信する際にクライアントの情報などを付随して送信しています.代表的なものとして以下があります.
- Requested IP Address
DHCP OFFER で提示された Your IP Address の値が記されます - DHCP Server Identifier
払い出しを依頼する DHCP サーバーのIPアドレスが記されます - Client Identifier
クライアント識別子が入ります。ほとんどの場合はその端末の MAC アドレスが記されます - Vendor Class Identifier
クライアントのOS情報 (MSFT 5.0 や android-dhcp-10 など) が記されます - Parameter Request List
DHCP でアドレス情報以外に要求したいオプション一覧を要求としてメッセージの中に追加されます
例えば,サブネットマスク,ゲートウェイ,DNS サーバーなどです
DHCP ACK
DHCP ACK は,DHCP サーバーが DHCP REQUEST を受け「DHCP Server Identifier」を見て自身が処理すべきと判断し,IP アドレスやオプション値を応答する際に DHCP サーバーが送信するメッセージです.
DHCP REQUEST を受け取った際,中の「DHCP Server Identifier」を見て自身が処理すべきでないと判断したサーバーは DHCP NACK を返答します.
DHCP ACK パケットを送信する際にクライアントからの要求に対しての応答を含んで送信しています.代表的なものとして以下があります.
- Your IP Address
REQUEST を出したクライアントに払い出す IP アドレスが記されます - Server IP Address
DHCP ACK を応答したサーバーの IP アドレスが記されます - Renewal Time Value
リース延長申請までの時間が記されます - Rebinding Time Value
リース延長が出来ない場合の再度 DHCP DISCOVER を行う時間が記されます - Lease Time Value
払い出す IP アドレスのリース時間が記されます - Parameter Request List への応答
DHCP REQUEST 事に要求されたオプション一覧に対する応答がメッセージの中に追加されます
例えば,サブネットマスク,ゲートウェイ,DNS サーバーなどです
DHCP DISCOVER ~ DHCP ACK の一連の流れを経て,クライアントは IP アドレスや参照 DNS サーバーアドレスなどを取得,設定が行われてネットワークの利用が可能となります.
DHCP の通信フロー (違うセグメント間)
違うセグメント間の クライアントとサーバー間の DHCP の通信フローはこのようになります.
クライアントはブロードキャストで DHCP サーバーとの通信を試みます.
クライアントと DHCP サーバーの間に DHCP リレー機能を持つ機器 (ルーターや L3 スイッチなど) が介在し,設定に従って DHCP サーバーに転送を行います.
DHCP リレーを行う機器と DHCP サーバーの間は常にユニキャストとなります.
その間で発生するやり取りについては先ほど説明した内容と同一です.
DHCP オプション
Parameter Request List に要求したいオプションが記されて送信,応答されると説明をしました.
Parameter Request List はどの機器/OS も同じオプションを付けるわけではないことに注意してください.
一部のオプションを除いて,DHCP サーバーはクライアントから要求があってその要求に答える形で結果を応答に含めます.要求されていないものは応答に含まれないことを理解してください.
以下に,OS 種別として,Windows / Android / iOS の DHCP Request List の違いを纏めました.
これが他の機器,例えば IP 電話や Nintendo Switch では違う要求になるため,正しい情報を把握したければパケットのキャプチャーや DHCP サーバー側でデバッグを行う必要があります.
番号 | オプション名 | 説明 | Win dows | An droid | iOS |
1 | Subnet Mask | リースされるアドレス帯のサブネットマスク | ✔ | ✔ | ✔ |
3 | Router | 利用可能なルーター.複数配布が可能 | ✔ | ✔ | ✔ |
6 | Domain Name Server | 参照DNSサーバー.複数配布が可能 | ✔ | ✔ | ✔ |
12 | HostName | クライアントのホスト名 | ✔ | ||
15 | Domain Name | ドメイン名 | ✔ | ✔ | ✔ |
26 | Interface MTU | MTU値 | ✔ | ||
28 | Broadcast Address | ブロードキャストアドレス | ✔ | ||
31 | Perform Router Discovery | IRDP(ICMP Router Discovery Protocol) | ✔ | ||
33 | Static Route | クラスフルな静的ルート | ✔ | ||
43 | Vendor Specific Infomation | ベンダー固有の情報.サブオプションを用いて複数のキー,値を利用可能 | ✔ | ✔ | |
44 | NetBIOS over TCP/IP Name Server | NetBIOS 名前解決サーバー | ✔ | ||
46 | NetBIOS over TCP/IP Node Type | NetBIOS 名前解決方法の指定 | ✔ | ||
47 | NetBIOS over TCP/IP Scope | NetBIOS スコープ ID の指定 | ✔ | ||
50 | Requested IP Address | リースを依頼するIPアドレス | ✔ | ✔ | ✔ |
51 | IP Address Lease Time | リース時間 | ✔ | ||
54 | DHCP Server Identifier | DHCPサーバーのIPアドレス | ✔ | ✔ | ✔ |
57 | Maximum DHCP Message Size | DHCPの最大メッセージサイズ | ✔ | ||
58 | Renewal Time Value | リース延長の開始時間 | ✔ | ||
59 | Rebinding Time Value | 再度 DISCOVER する時間 | ✔ | ||
60 | Vendor Class Identifier | ベンダー識別子.製品名や型番など | ✔ | ||
61 | Client Identifier | クライアント識別子.ほぼ MAC アドレス | ✔ | ✔ | ✔ |
81 | Client Fully Qualified Domain Name | クライアントの FQDN | ✔ | ||
114 | DHCP Captive-Portal | 認証サイトのアドレス (Free Wifi の認証画面のようなもの) | ✔ | ||
119 | Domain Search | 検索ドメイン名の一覧 | ✔ | ✔ | |
121 | Classless Static Route | クラスレスな静的ルート | ✔ | ✔ | |
249 | Private/Classless Static Route (Microsoft) | MS独自のクラスレスな静的ルート | ✔ | ||
252 | Private/Proxy Autodiscovery | Proxy構成ファイルの指定 (WPAD) | ✔ | ✔ |
この表は3つの OS を元に作成しました.DHCP オプションはもっと多く存在しています.全てのオプションを把握したい場合は「https://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-parameters.xhtml」を参照ください.
IPアドレスのリース延長(更新)の動作
DHCPでのアドレス配布は期限があり,その期限は Lease Time Value で通知される値となります.
リース期限を迎える前に延長 (更新) のリクエストを行う仕組みが RFC で規程されています.
また,延長 (更新) のリクエストを送信しても当初やり取りを行った DHCP サーバーが応答出来ない場合,他の DHCP サーバーにアドレスの要求を再度行う仕組みも規定されています.
この例の場合,リース時間は Lease Time Value の 600s (10分) です.
延長のリクエストは Renewal Time Value を超えたら定期的に行われます.
この値は Lease Time Value の 50% と規定されているため,300s (5分) 経過後に延長のリクエストが行われる事となります.
延長リクエストはユニキャストで DHCP サーバーに直接送信され,DHCP サーバーが再リースを承認すると再度そこからリース時間がカウントされます.
つまり,5分後の更新で再度 10 分利用可能ということになります.そして,更新後5分経過したら同様に Renewal Time Value を超えるため再度延長のリクエストが行われます.
DHCP サーバーがダウンした等で応答しない場合,リース期限を迎えて IP アドレスの継続利用が不可能となります.
そこで Rebinding Time Value の時間を経過後は,ブロードキャスト宛に DHCP DISCOVER からやり直し,他の DHCP サーバーから IP アドレスの配布を試みます.
Rebinding Time Value はリース時間の 87.5% と規定されているため,600s の場合は 525s を超えると DHCP DISCOVER へ動作が切り替わります.
コメント