RFCで正しく理解するDHCPとL3ブロードキャスト

ネスペ勉強中のきおかです。
タスクや課題がたくさんある中での、勉強のアウトプット。。滾りますねぇ。某忍者漫画を思い出します。

今回はDHCPについてまとめました。DHCPでは、NWセグメントを越える通信「limited broadcast」を使い、本来通信できないはずの別セグメントにパケットを送ることができます。その分危険もあるみたいです。

DHCPとは

「基本的にはIPアドレスを動的に割り当てるもの」です。
RFC2131で定義されています。
クラサバ構成(クライアントサーバー構成)をとり、クライアントがブロードキャストでDHCPリクエストを送り、IPアドレスを動的に付与してもらいます。
より正確な手順は、

  1. DHCPディスカバリ:クライアントがDHCPディスカバリをブロードキャストする
  2. DHCPリレーエージェント:もしネットワークを跨ぐ場合は、ルーターがそのパケットにgiddrというデフォルトゲートウェイ用IPアドレスを追加してルーティングする
  3. DHCPオファー:DHCPサーバーが配布するIPアドレスと、必要であれば2.のデフォルトゲートウェイIPアドレスをクライアントに送る
  4. DHCPアック(Ack):クライアントは3でもらったDHCPオファーのIPアドレスを使うかどうかを決めて、決めたら決めたことを再度ブロードキャストする

という流れになります。

また、DHCPはアプリケーション層のプロトコルで、UDPで67と68のポートを使って通信します。67は宛先に、68は送信元に使います。

IPアドレスを持っていないのにどうやって通信するのか?

先ほどはあえて「ブロードキャスト」としか書きませんでしたが、そもそもどうやって宛先IPも自分のNWアドレスもわからないのに通信するんでしょうか?
ここで、L3ブロードキャスト、特にLimited Broadcastが登場します。L3ブロードキャストにはDirected BroadcastとLimited Broadcastの2つが存在します。これはRFC1812というIPv4のRFCにまとめられています。後ほど軽く触れます。

さて、このLimited Broadcastですが、簡単に言うとNWアドレスによるセグメントを越えて、言ってしまえば敷居を無視して送りまくるというものです。危なっかしいですし、ネットワークを越えて通信できるとなるとループも起こる可能性がありそうです。実際、RFCでもデフォルトではフォワーディングしてはならないと書かれてます

もしDHCPクライアントとDHCPサーバーが異なるセグメントにいる構成なら、ルーター側でフォワーディングするように設定する必要があります。ただし、いろいろ記事を漁ってる感じだと、基本的に1つのネットワークにDHCPサーバーもしくはDHCP機能を備えたルーターを1台設定するのが定石のようです。冗長化する場合はIPアドレス範囲をそれぞれユニークになるように分割して設定するようです。

実際のパケット例

実際にDHCPディスカバリを送る際は以下のようになります。

宛先MAC: ffff:ffff:ffff
送信元MAC: クライアントのMAC
宛先IP: 255.255.255.255
送信元IP: 0.0.0.0
宛先port: 67
送信元port: 68
データ: DHCP Discover(Client IP: 0.0.0.0, Server IP: 0.0.0.0)

RFC 1812

色々探していたら、Limited BroadcastはIPv4をまとめたRFC1812に記載がありました。

5.3.5.1 Limited Broadcasts

https://datatracker.ietf.org/doc/html/rfc1812#section-5.3.5.1

Limited broadcasts MUST NOT be forwarded. Limited broadcasts MUST NOT be discarded. Limited broadcasts MAY be sent and SHOULD be sent instead of directed broadcasts where limited broadcasts will suffice.

DISCUSSION
Some routers contain UDP servers which function by resending the requests (as unicasts or directed broadcasts) to other servers. This requirement should not be interpreted as prohibiting such servers. Note, however, that such servers can easily cause packet looping if misconfigured. Thus, providers of such servers would probably be well advised to document their setup carefully and to consider carefully the TTL on packets that are sent.

要約すると、

  1. Limited broadcastsはフォワーディングされないし破棄もされないように実装すべし(解析と処理に努めるべし。)
  2. 状況に応じて使い分けるべし。ただしループを起こしたりする可能性はあるので、TTL(パケットのルーティング可能回数)を十分考慮するなどすべし。

とのこと。色んな記事を見てみましたが、limited broadcastは基本的にDHCPで使われるのが一般的なようです。

続きのDirected Broadcastsの方が安全で、Limited Broadcastsに比べると使われているようですね。

最後に

最近英検1級も取り終えまして、英語でのインプットがかなり早くなりました。
ネスペの勉強もRFCを読みながら進めています。ネスペはベンダーニュートラルな資格なので、RFCを相性がいいようで、勉強が捗ります!

引き続き頑張ります!それでは!

Last modified: 2023-12-22

Author