# L2スイッチング / DHCP Snooping

DHCP Snoopingは、DHCPサーバー・クライアント間でやりとりされるDHCPメッセージを監視して動的なIPソースフィルタリングを行う機能です。本機能を利用すれば、DHCPサーバーを用いたネットワーク環境において、正当なDHCPクライアントにだけIP通信を許可することができます。
Note

DHCP Snoopingとローミング認証（auth roaming enableコマンド）、DHCP SnoopingとゲストVLAN（auth guest-vlanコマンド）は併用できません。

Note

DHCP SnoopingとマルチプルVLAN（プライベートVLAN）を併用する場合は、以下に注意してください。

- ARPセキュリティーとの併用はできません。
- DHCP SnoopingのTrustedポートは必ずプロミスキャスポート（アップリンクポート）に設定する必要があります。
- すべてのマルチプルVLAN（プライベートVLAN）でDHCP Snoopingを有効にする必要があります。

## 概要

DHCP Snoopingでは、DHCPメッセージのやりとりを監視してDHCPクライアントがどのポート配下に存在するかを追跡し、その情報に基づいてIPパケットのフィルタリングを行います。
DHCP Snoopingを利用する場合は、次の図のように本製品をDHCPサーバーとDHCPクライアントの間に配置します。このとき、本製品がDHCP/BOOTPリレーエージェントとして動作していてもかまいません。

DHCP Snoopingでは、スイッチポートを次の2つに分類・設定します。デフォルトではすべてのポートがUntrustedポートとして設定されています。

- Trustedポート：DHCP Snoopingによるフィルタリングが無効なポート。Trustedポートでは、パケットに対して特別な処理を行わず、すべてのパケットを通過させます。ネットワーク機器やサーバーのように常時接続で信頼のおける装置を接続するポートは通常Trustedポートに設定します。DHCPサーバーを接続するポートもTrustedポートに設定してください。
- Untrustedポート：DHCP Snoopingによるフィルタリングが有効なポート。Untrustedポートでは、DHCPサーバーからIPアドレスの割り当てを受けたクライアントからのIPパケットだけを通過させ、その他のIPパケットは破棄します（DHCPのクライアントパケットを除く）。クライアントPCのように不特定多数の必ずしも信頼のおけない装置を接続するポートはUntrustedポートに設定します（デフォルトではすべてのポートがUntrustedになります）。
  Note

  Untrustedポートでは、許可されたクライアントからのIPパケットだけを通過させるためにハードウェアアクセスリストでフィルタリングを行います。Untrustedポートには必ずハードウェアアクセスリストを設定してください。

DHCP Snoopingを有効にすると、本製品はDHCPサーバー・クライアント間で交換されるDHCPメッセージを監視するようになります。
Untrustedポートに接続されているクライアントがDHCPサーバーからIPアドレスの割り当てを受けると、本製品はクライアントのIPアドレスやMACアドレス、ポート番号などをDHCP Snoopingテーブル（バインディングデータベース）に登録します。
Untrustedポートでは、バインディングデータベースに登録されているクライアントからのIPパケットだけを許可し、その他のIPパケットは破棄します。これにより、不正に接続されたクライアントがポートを越えてネットワークにアクセスすることを防ぐことができます。
Trustedポートで受信したパケットは通常どおり転送されます。フィルタリング機能を用いることによって破棄することが可能ですが、DHCPパケットを破棄することはできません。

## 基本設定

DHCP Snoopingを使用するための基本的な設定手順は次のとおりです。
ここでは、ポート1.1.1にDHCPサーバーが接続されており、ポート1.1.5には不特定多数のDHCPクライアントが接続されるものと仮定します。

1. DHCP Snoopingを有効にします。

       awplus(config)# service dhcp-snooping

2. vlan1でDHCP Snoopingを有効にします。これには、ip dhcp snoopingコマンドを使います。

       awplus(config)# interface vlan1
       awplus(config-if)# ip dhcp snooping
       awplus(config-if)# exit

3. ポート1.1.1をTrustedポートに設定します。これには、ip dhcp snooping trustコマンドを使います。

       awplus(config)# interface port1.1.1
       awplus(config-if)# ip dhcp snooping trust
       awplus(config-if)# exit

4. Untrustedポート（1.1.5）には複数のDHCPクライアントが接続されるため、許可するDHCPリースの最大数を50に設定します（初期設定は1のため、複数のDHCPクライアントを接続できません）。これには、ip dhcp snooping max-bindingsコマンドを使います。

       awplus(config)# interface port1.1.5
       awplus(config-if)# ip dhcp snooping max-bindings 50
       awplus(config-if)# exit

   Note

   max-binding設定分ハードウェアアクセスリストが固定消費されるので、機種ごとのハードウェアパケットフィルターリミット値に注意してください。

5. Untrustedポート（1.1.5）でフィルタリングを行うために必要なハードウェアアクセスリストを作成します。
   まずはaccess-list hardware(list)コマンドでアクセスリスト名（ここでは「ds1」）を指定し、ハードウェアアクセスリストモードに入ります。

       awplus(config)# access-list hardware ds1

   次にaccess-list hardware(seq entry)コマンドで具体的なフィルタリング内容を定義します。

       awplus(config-ip-hw-acl)# 2 permit ip dhcpsnooping any
       awplus(config-ip-hw-acl)# 100 deny ip any any
       awplus(config-ip-hw-acl)# exit

   1つ目のエントリー（シーケンス番号2）は、DHCP Snoopingテーブル（バインディングデータベース）内の有効なエントリーに含まれるIPアドレスからの通信だけを許可する、すなわち、DHCPサーバーからIPアドレスの割り当てを受けたクライアントからのIPパケットだけを通過させるためのものです。
   2つ目のエントリー（シーケンス番号100）は、その他のパケットをすべて破棄するためのものです。
6. Untrustedポート（1.1.5）に対して、手順5で作成したハードウェアアクセスリストを適用します。

       awplus(config)# interface port1.1.5
       awplus(config-if)# access-group ds1

7. 以上で設定は完了です。

DHCP Snoopingの全般的な情報を確認するには、show ip dhcp snoopingコマンドを使います。

    awplus# show ip dhcp snooping

ポートごとのDHCP Snooping設定を確認するには、show ip dhcp snooping interfaceコマンドを使います。

    awplus# show ip dhcp snooping interface

バインディングデータベースの内容を確認するには、show ip dhcp snooping bindingコマンドを使います。

    awplus# show ip dhcp snooping binding

Note

バインディングデータベースにエントリーが存在しない場合、DHCPリリースパケットを受信すると、その受信したポートにおいてviolationが動作します。