【図解】DHCPリレーの仕組み~パケットキャプチャの比較, Option82について

DHCP リレーとは

DHCP クライアントはブロードキャストで DHCP サーバを探しに行くため、普通のやり方では同一セグメント内に DHCP サーバを配置しなければなりません。ですがそのやり方では複数セグメントで DHCP を使いたい場合は各セグメントに DHCP サーバを配置することになり、非常に非効率です。

そんな悩みを解決するのが DHCP リレーです。L3 機器(L3 スイッチやルータ)において、DHCP リレーの設定として DHCP サーバの IP アドレスを指定すると、L3 機器の DHCP リレーエージェントが働き始め、DHCP のブロードキャストパケットを DHCP サーバ宛のユニキャストパケットに変換してくれるのです。

リレーエージェントとは、NW 機器の OS 上で動作しているプログラム(≒プロセス)と考えて下さい。例えば Cisco であれば Cisco IOS 上で RIP や OSPF , BGP 等がプロセスとして動作しますがそれらと同列です。

DHCP サーバがスコープを識別できる理由

DHCP リレー設定をすると、DHCP サーバは様々な VLAN から DHCP discover/request を受信するようになりますが、各 VLAN に適したスコープを払い出さなければなりません。

DHCP サーバが『どのクライアントからのパケットを受信したのか?』を判断するのは、giaddr (Gateway IP Address) です。

DHCP リレーエージェントは DHCP ブロードキャストを受信したインタフェースの IP アドレスを DHCP パケットの giaddr というフィールドに埋め込んだ上で DHCP サーバにユニキャストするのです。

DHCP サーバは giaddr を確認し、その giaddr が存在するスコープから IP アドレスを払い出します。

このとき、送信元 IP アドレスがどうあるべきかは仕様(RFC)では決まっていません。大抵は giaddr と同じになるか、DHCP サーバに近いインタフェースの IP アドレスになるかのどちらかです。(UDP port も決まっていません。)

ただし、DHCP サーバからの返信先は giaddr の IP アドレスにユニキャストで返信されるため、giaddr と異なる送信元 IP で投げる場合、間にファイアウォールがあるとステートフル・インスペクションによりパケットがドロップされることがあります。

そのため、設定で giaddr に合わせることのできる機器も増えています。(次のパケットキャプチャ検証で使った VyOS ではできないようですが。)

DHCP とDHCPリレーのパケットキャプチャの比較

DHCPのパケットキャプチャを①通常のDHCP、②DHCPリレーの2通りで取得しました。いずれも DHCP サーバ上の tcpdump で取得しています。

シーケンスと DHCP Discover の比較。Wireshark の表示上、Relay agent IP address と表示されていますが、この箇所が giaddr です。

DHCP Offer の比較。 

DHCP Request の比較。

DHCP ACK の比較。

Option 82 = Relay Agent Information

DHCP のオプション82番はリレーエージェントが自身の情報を格納するフィールドです。一般的にはリレーエージェントが設定されるL3機器で付加されます。

オプション82を使うとDHCP サーバに DHCP リレーの情報を伝えることができます。伝わる情報は一般的には『リレーを行った機器のホスト識別子(Remote ID)、およびポート番号(Circuit ID)』です。

この Option 82 の使われ方は主に 2 つあります。

1つ目は DHCP サーバでのログに出力し、どのクライアントがどの機器経由でIPが払い出されたかを管理する、という使い方です。特にケーブル TV では各家庭への Global IP アドレスを DHCP リレーで払い出しますが、どの収容機器のどのポートがいつからいつまで IP を使っているかを知ることができます。

2つ目は DHCP サーバ側で Option 82 の値によって払い出す IP やオプションを変更する、という使い方です。具体的には、『Option 82 が XXX の場合はIPアドレスの払い出し範囲は 10.1.1.10-15/24 で DGW は 10.1.1.250、YYY の場合は 10.1.1.90-95/24 で DGW は 10.1.1.251』といった具合です。

ですが Cisco の DHCP snooping ではこれ以外の使われ方がされます。DHCP snooping を行うL2機器にて(DHCPリレーをしないのに)このフィールドに自身の情報をセットし、これを使ってDHCP snooping データベースと整合性が合うかどうか照合します。もしマッチしない場合は不正な DHCP通信として破棄されるのです。

フォローする