DHCPクライアントは、複数のDHCPOFFERSのどれを受け入れるかをどのようにして知るのですか?


16

写真のようなネットワークがあると想像してください。1つのレイヤー2ネットワーク上の6つのホスト、VLANなし。ネットワークは、それぞれ1つのDHCPサーバーを持つ2つのサブネットに分割されることになっています。DHCPサーバーには固定IPアドレスがあるため、DHCPサーバーが属しているサブネットは明らかです。

その後、新しいクライアントはプラグインされます。どのサブネットに属しているかについて何も知らず、DHCPDISCOVERをイーサネットブロードキャスト255.255.255.255に送信するため、両方のDHCPサーバーに送信されます。両方のサーバーがオファーで応答します。さて、ここに私の質問があります:クライアントはどのDHCPOFFERを受け入れるべきかをどのように知るのですか?

DHCPの状況


この質問と回答を比較してください。
カミルマシオロウスキ


1
「イーサネットブロードキャスト255.255.255.255」-これはローカルネットワークのIPブロードキャストアドレスであり、イーサネットアドレスではありません。最初のDHCP DISCOVERメッセージも、イーサネットブロードキャストアドレスff:ff:ff:ff:ff:ffを使用する可能性が非常に高いですが、実際には同じものではありません。
-ilkkachu

回答:


26

最も簡単な答え-先着順です。

複数のVLANがあり、10.10.10.0 / 24が10.10.20.0/24とは異なるVLAN上にある場合-ブロードキャストはVLANを通過しません。

DHCPサーバーがクライアントとは別のVLAN上にある場合、VLAN間のルーティングインターフェイス上のiphelperは、ブロードキャストを正しい場所に向けます。

同じVLAN内に2つの別個のネットワーク(またはその欠如)があり、異なるサブネットにサービスを提供しているシナリオ-レース。

DHCPは、次のトランザクションを使用して機能します。

  1. DHCPディスカバリ(DHCPDISCOVER)-クライアントブロードキャスト-「DHCPサーバーはありますか?」
  2. DHCPオファー(DHCPOFFER)-サーバーからクライアント-「ええ、私はここにいます、利用可能です!」
  3. DHCPリクエスト(DHCPREQUEST)-クライアントからサーバーへ「素晴らしい、アドレスを教えてもらえますか?」
  4. DHCP Acknowledgment(DHCPACK)-サーバーからクライアントへ「もちろん、IP、マスク、ゲートウェイ、一部のDNS / WINSサーバー、タイムサーバー、およびスコープに設定されたその他すべてのものです」

これはすべて、サーバーのUDPポート67およびクライアントの68で発生します。

ステップ2に到達するとすぐに-クライアントは他のDHCPサーバーの応答を「聞く」のをやめます-最初のサーバーに満足して対処し、それに注意を向けます。

サイドノートとして-この権利を悪用するDoS(サービス拒否)攻撃のシリーズが実際にあります。攻撃者は、デバイスにプラグインし、DHCPOFFERパケットに応答して送信します。その後、何度も何度もDHCPACKERを送信しません。「偽の」DHCPサーバーがルーティングできないアドレスを提供したり、ネットワークを混乱させようとする他のIPと競合するアドレスを提供するDoS攻撃もあります。


16
したがって、「それでは、単一のレイヤー2セグメントで複数のサブネットを実行するにはどうすればよいですか」という短い答えです。(あなたはしません。)(はい、方法はありますが、一般的にすべきことはありません。1つのレイヤー2ドメイン= 1つのサブネット。)
user1686

本当にありがとうございます。どうしてこれが可能になるのだろうといつも思っていましたが、そうではありません。要するに、サブネットまたはVLANを持つセグメント間でルーター/レイヤー3スイッチを使用します。
マイケルニーマンド

4
一般に、はい、VLANまたは物理的なセグメンテーションが必要です。L2ドメインを共有できるの、両方のDHCPサーバーが「既知の」クライアントの処理に制限されている場合のみです(たとえば、許可されたMACアドレスを持つ「静的リース」のリストによって)。
user1686

3
各DHCPサーバーにMACアドレスのホワイトリストを与え、どのクライアントがどのサーバーからアドレスを取得するかを制御できると思います。
ダレン

@grawityでは、サブネットが等しい場合、同じレイヤー2セグメントで複数のIPサブネットを簡単に実行でき、どのクライアントがどのサブネットからアドレスを取得するかは気にしません。両方のブロックからアドレスを提供する1つのDHCPサーバーと、両方のブロックのゲートウェイとして機能する(それぞれにアドレスを持つ)1つのルーターがあります。できた 「しない」とだけ言うのは間違いです。
-ilkkachu

9

@ Fazer87からの既存の回答は実際にはほぼ正しいので、それを支持して受け入れることをお勧めします。この回答では、もう少し詳細に少し詳しく説明します。


両方のDHCPサーバーがDHCPOfferメッセージで応答する場合があります。

DHCPクライアントは、「先着順」でそれらを受け入れる場合があります。ただし、そのアプローチを取る必要はありません。

RFC2131の指定:

クライアントは、1つ以上のサーバーから1つ以上のDHCPOFFERメッセージを受信します。クライアントは、複数の応答を待つことを選択できます。クライアントは、DHCPOFFERメッセージで提供される構成パラメーターに基づいて、構成パラメーターを要求するサーバーを1つ選択します。

そのため、2番目のDHCPサーバーがより長いIPアドレスの予約を提供した場合、または他のDHCPサーバーが提供しなかったタイムサーバーを提供した場合、またはクライアントが優先するようにプログラムされたカスタムフィールドがあった場合、2番目の提供を受け入れる場合があります。

通常、「先着順」のアプローチでは、デバイス間のいくつかのホップ(BOOTP再ブロードキャスト)を経ていないオファーを取得できるため、気にする理由がない場合は従うのに適したプロトコルです。

私は、カスタムデバイスが、更新されたファームウェアを見つけることができるTFTPサーバーを含むDHCPOfferを好むプロジェクトにいました。


...または、あるサーバーがクライアントが以前に使用したアドレスを提供し、保持したい場合
ilkkachu

@ilkkachu:はい、理論上は、しかしこれにはより良いメカニズムがあります(古いDHCPサーバーで有効期限が切れる前に予約を更新するか、古いIPアドレスを要求するDHCPDiscoveryを送信する)ので、実際には役に立たないでしょう。
18年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.