社内ネットワークで端末へのIPアドレス配布にDHCPを使っている環境は多いと思います。しかしDHCPは、その仕組み上「先に応答した機器が勝つ」という性質を持っており、何も対策をしていないと誰かが持ち込んだWi-Fiルーター1台で、フロア全体の通信が止まるという事故が起こり得ます。
これを防ぐのがCiscoスイッチのDHCPスヌーピング(DHCP Snooping)です。本記事では、その役割と設定手順、確認コマンド、そして導入時にハマりやすいポイントまで整理します。
1. DHCPスヌーピングとは何か
DHCPスヌーピングは、スイッチポートを「信頼ポート(Trusted)」と「非信頼ポート(Untrusted)」に分類し、不審なDHCP通信をL2レベルで遮断するセキュリティ機能です。
ポイントは、スイッチがDHCPのやり取りを「盗み見(snoop)」して、通してよい通信かどうかを判断するという点にあります。
導入目的は大きく3つ
- 不正DHCPサーバー(Rogue DHCP Server)の遮断:管理者が意図しないWi-Fiルーターの誤接続や、攻撃者が設置した不正DHCPサーバーからの応答(DHCPOFFER / DHCPACK)を遮断し、端末に誤ったIPアドレスやデフォルトゲートウェイが配布されるのを防ぎます
- 中間者(MitM)攻撃・DHCPスプーフィングの防止:他人のIPアドレスを横取りしたり、勝手に解放しようとする不審なDHCPメッセージ(DHCPRELEASEなど)を破棄します
- 他のL2セキュリティ機能の基盤づくり:正規にIPを取得した端末の「MACアドレス・IPアドレス・VLAN・ポート番号」を対応付けたデータベース(DHCPスヌーピング・バインディングテーブル)を自動作成します
3つ目は地味に見えますが重要です。このバインディングテーブルは、ARPの偽装を防ぐDynamic ARP Inspection(DAI)や、送信元IPの詐称を防ぐIP Source Guard(IPSG)を動作させるための必須の土台になります。L2セキュリティを積み上げていく場合、DHCPスヌーピングが最初の一歩になります。
2. ポートの役割分類
社内ネットワーク(例:VLAN 10)に導入する場合、ポートを以下のように分類します。
Trusted(信頼ポート):アップリンク側
正規のDHCPサーバーや上位ルーターへ向かうポート(例:Gi1/0/24)です。DHCPサーバーからの応答メッセージ(DHCPOFFERなど)の通過を許可します。
スイッチ間の接続(ISL)も必ずTrustedにします。下位スイッチ側のアップリンクポートをUntrustedのままにしておくと、その先にぶら下がる端末がIPを取得できなくなるため、リンクの両端で設定を確認するのが鉄則です。
Untrusted(非信頼ポート):アクセス側
PCやプリンターなどの端末が接続されるポート(例:Gi1/0/1〜Gi1/0/10)です。DHCPスヌーピングを有効にするとデフォルトで全ポートがUntrustedになるため、個別の設定は不要です。
このポートでは、クライアントからのIP取得要求(DHCPDISCOVERなど)の通過のみを許可し、サーバー側の応答メッセージが入ってきた場合は即座に破棄します。
3. 動作のしくみ
正常な端末がIPアドレスを取得する流れ
- 要求の送信:PCが「IPをください」という要求(DHCPDISCOVER)をブロードキャスト送信します
- 要求の転送:スイッチはUntrustedポートで受け取った要求を、Trustedポート方向へのみ転送します
- 応答の受信:正規DHCPサーバーが応答(DHCPOFFER / DHCPACK)を返します
- テーブル登録と転送:スイッチはTrustedポートから届いた正規応答を検知し、割り当てられたMACアドレス・IPアドレス・VLAN・ポート番号をバインディングテーブルに登録したうえで、PCへ応答を届けます
不正DHCPサーバーが接続された場合
- 誤接続されたルーターなどの不正DHCPサーバーが、PC宛てに応答(DHCPOFFERなど)を送信します
- スイッチはUntrustedポートからサーバー用の応答メッセージが入ってきたことを検知します
- スイッチはその応答パケットを即座にドロップ(破棄)します
結果として、PCには正規DHCPサーバーからの応答だけが届き、通信障害を未然に回避できます。
4. 設定手順(Cisco Catalyst 9200 / IOS XE)
! 1. スイッチ全体でDHCPスヌーピングを有効化
Switch(config)# ip dhcp snooping
! 2. 対象VLAN(例:VLAN 10)で有効化
Switch(config)# ip dhcp snooping vlan 10
! 3. 正規DHCPサーバー側のポートをTrustedに指定
Switch(config)# interface GigabitEthernet 1/0/24
Switch(config-if)# ip dhcp snooping trust
Switch(config-if)# exit
! 4. (任意) 再起動時にデータが消えないようFlashへデータベースを保存
Switch(config)# ip dhcp snooping database flash:/snooping-binding.db手順1と2の両方が必要な点に注意してください。全体で有効化しただけではVLANに適用されず、実際には動作しません。
5. ステータス確認コマンドと出力例
① 全体設定とVLAN状態の確認
Switch# show ip dhcp snooping
Switch DHCP snooping is enabled
DHCP snooping is configured on following VLANs:
10
DHCP snooping is operational on following VLANs:
10
DHCP snooping is configured to insert option-82: yes
DHCP snooping option-82 circuit-id format-type: default
DHCP snooping option-82 remote-id format-type: default
Option-82 on untrusted port is not allowed
Verification of hwaddr field is enabled
Verification of giaddr field is enabled
DHCP snooping trust/action is configured on the following interfaces:
Interface Trusted Allow option-82 Rate limit (pps)
----------------------- ------- --------------- ----------------
GigabitEthernet1/0/24 yes yes unlimited確認すべきポイントは以下の3点です。
Switch DHCP snooping is enabled:全体機能が有効になっているかoperational on following VLANs: 10:対象VLANで実際に稼働しているか(configuredだけでoperationalに出ていない場合は動作していません)- アップリンクポートが
Trusted: yesになっているか
② バインディングテーブル(IPとMACの対応表)の確認
Switch# show ip dhcp snooping binding
MacAddress IpAddress Lease(sec) Type VLAN Interface
----------------- --------------- ---------- ------------- ---- --------------------
00:0C:29:DC:E7:08 192.168.10.15 86400 dhcp-snooping 10 GigabitEthernet1/0/1
00:0C:29:EC:D0:B4 192.168.10.16 86350 dhcp-snooping 10 GigabitEthernet1/0/2
Total number of bindings: 2正規にIPを取得した端末のMACアドレス、割り当てIPアドレス、リース残り時間(秒)、VLAN ID、接続インターフェースが記録されます。
このテーブルは「どのポートにどの端末がつながっているか」の一覧にもなるため、端末の物理的な位置特定(どのポートに挿さっているか)にも使えます。障害対応時に地味に役立つ情報です。
③ 不正パケット破棄数・統計情報の確認
Switch# show ip dhcp snooping statistics
Packets Forwarded = 240
Packets Dropped = 12
Packets Dropped From Untrusted port = 12
Packets Dropped Due to MAC Verification Failed = 0Packets Dropped From Untrusted portは、Untrustedポートから入ってきた不正なDHCPサーバー応答などが破棄された合計数です。この数値が増加している場合、不正なルーターの接続を実際に検知・遮断できていることが分かります。
定期的にこの値を確認し、増加があれば該当ポートを特定して物理的に何が接続されているかを調査するとよいでしょう。
6. 導入時のハマりどころ
DHCPスヌーピングは「有効にしたらIPが取れなくなった」というトラブルが起きやすい機能でもあります。代表的な原因を押さえておきましょう。
① Option-82によってDHCPサーバーに弾かれる
Ciscoスイッチは、DHCPスヌーピングを有効にするとデフォルトでOption-82(DHCPリレー情報オプション:どのスイッチのどのポートから来た要求かを示す付加情報)を挿入します。
ところが、スイッチがDHCPリレーとして動作していない場合、giaddr(ゲートウェイIPアドレス)フィールドが0.0.0.0のままOption-82だけが付いた状態になります。この組み合わせを不正とみなして破棄するDHCPサーバーが存在するため、端末がIPを取得できなくなります。
対処は環境によって以下のいずれかです。
- スイッチ側でOption-82の挿入自体を止める:
no ip dhcp snooping information option - DHCPサーバー側でOption-82付きを受け入れる(Cisco IOSのDHCPサーバーの場合:
ip dhcp relay information trust-all)
② 多段スイッチ構成でOption-82付きパケットが落とされる
上の出力例にあるOption-82 on untrusted port is not allowedが示す通り、スイッチはUntrustedポートから届いたOption-82付きパケットを破棄します。
下位スイッチがOption-82を挿入して転送し、上位スイッチがそれをUntrustedポートで受け取ると、この条件に該当して通信が成立しません。原則どおりスイッチ間リンクを両端ともTrustedに設定することで解消します。どうしてもUntrustedのままにする必要がある場合はip dhcp snooping information option allow-untrustedを使用します。
③ レート制限によるポートのerrdisable
DHCPリクエストを大量に送りつけてIPアドレスを枯渇させる攻撃(DHCPスタベーション)への対策として、Untrustedポートにレート制限をかけられます。
Switch(config-if)# ip dhcp snooping limit rate 15アクセスポートであれば10〜20pps程度で十分とされています。ただし制限を超えたポートはerrdisable(強制的に閉塞)されるため、値を絞りすぎると正常な端末まで通信不能になります。
自動復旧させたい場合は、以下を設定しておくと運用が楽になります。
Switch(config)# errdisable recovery cause dhcp-rate-limit
Switch(config)# errdisable recovery interval 300なお、VLAN全体のトラフィックが集約されるTrustedなアップリンクポートには、レート制限をかけないか、十分に大きい値にしてください。
まとめ
- DHCPスヌーピングは、ポートをTrusted / Untrustedに分類し、不正なDHCPサーバーの応答をL2で遮断する機能
- 有効化には
ip dhcp snooping(全体)とip dhcp snooping vlan X(VLAN単位)の両方が必要 - Trustedにするのは正規DHCPサーバー方向のポートとスイッチ間リンク。リンクの両端で確認すること
- 作成されるバインディングテーブルは、DAIやIP Source Guardの前提となる重要な資産
- 導入時のトラブルはOption-82関連が大半。IPが取れなくなったらまず
show ip dhcp snoopingでOption-82の設定状態を確認する
持ち込みルーターの誤接続によるDHCP障害は、原因の切り分けに時間がかかりやすい事故の代表例です。社内LANでDHCPを運用しているなら、入れておく価値は十分にあります。