DHCPスヌーピングは、ネットワークスイッチ上でDHCPメッセージをフィルタリングし、不正なDHCPサーバーがクライアントに誤ったゲートウェイやDNS設定を配布するのを阻止する、レイヤー2のセキュリティ制御です。 この機能は、スイッチポートを「信頼済み」または「信頼不可」に分類し、DHCPトラフィックを検査するとともに、クライアントのMACアドレスを割り当てられたIPアドレス、リース時間、VLAN、およびポートにマッピングするバインディングテーブルを維持します。 このバインディングテーブルにより、動的ARP検査やIPソースガードなどの関連するレイヤー2保護機能が有効になりますが、アップリンクを「信頼できない」状態に放置したり、リロード後にバインディングテーブルが失われたり、リレーオプションの処理に一貫性がなかったりするといった一般的な設定ミスが原因で、正当なクライアントがアドレスを取得できなくなる可能性があります。
DHCPスヌーピングの仕組み
DHCPスヌーピングが有効になっているスイッチは、この機能が有効になっているVLAN内のDHCPパケットを検査します。管理者は各ポートを「信頼済み」または「信頼不可」として指定し、スイッチはそれぞれに異なるルールを適用します。
- 信頼済みポートの指定:管理者は、正規のDHCPサーバーまたはリレーエージェントにつながるポートを「信頼済み」としてマークします。それ以外のすべてのポート(通常はクライアントデバイスに面しているポート)は、信頼されていないままとなります。
- サーバーメッセージのフィルタリング:スイッチは、信頼されていないポートに到達したオファーや確認応答などのDHCPサーバーメッセージを破棄します。これにより、アクセスポート上の不正なサーバーがクライアントに応答することを防ぎます。
- クライアントメッセージの検査:信頼されていないポートでは、スイッチはDHCPリクエスト内のクライアントのハードウェアアドレスが、フレームの送信元MACアドレスと一致しているかどうかを確認できます。これにより、偽造アドレスを使用する一部の枯渇攻撃を制限できます。
- バインディングテーブルの構築:クライアントが有効なリースを受信すると、スイッチはクライアントのMACアドレス、割り当てられたIPアドレス、リース時間、VLAN、およびポートをバインディングテーブルに記録します。
- バインディングの適用:バインディングテーブルは、動的ARP検査やIPソースガードなどの関連機能によって使用され、既知のリースと一致しないトラフィックをドロップします。
スヌーピングでは、クライアントや正規のサーバーの認証は行われません。レート制限、オプション82の挿入、バインディングテーブルの永続化などの動作は、スイッチのベンダーや設定によって異なります。
DHCPスヌーピングの一般的な問題
DHCP サーバーまたはリレーへのポートが「信頼済み」としてマークされていない場合、スイッチは正当なオファーや確認応答を破棄します。その結果、クライアントは IP アドレスを取得できなくなりますが、これは多くの場合、スヌーピングが新たに有効化された VLAN でのみ発生します。
バインディングテーブルがメモリ内のみで保持されている場合、スイッチの再起動によってテーブルがクリアされ、それに依存する機能は、有効なクライアントが更新を行うまでそのクライアントをブロックしてしまう可能性があります。プラットフォームがサポートしている場合は、テーブルを永続ストレージに保存することで、この問題を軽減できます。
一部のスイッチでは、デフォルトでクライアントのリクエストに中継情報が挿入されます。上流の中継サーバーやサーバーが、一致する中継アドレスを持たないパケットを拒否すると、クライアントはリースに失敗します。スイッチと中継経路全体でオプション設定を統一してください。
静的IPアドレスを持つデバイスは、バインディングテーブルに決して表示されません。ARPインスペクションやソースガードがそのテーブルに依存している場合、静的エントリが追加されない限り、それらのトラフィックは破棄されます。
信頼されていないポートで DHCP パケットのレート制限を低く設定しすぎると、多数のクライアントが同時に起動するなどの正当なトラフィックの急増時に、そのポートがエラー無効状態になる可能性があります。ポートは、手動またはタイマーによって回復されるまでダウンしたままになります。