DTP(ダイナミック トランキング プロトコル)
DTP (Dynamic Trunking Protocol) は、Catalyst2960、Catalyst 3560 シリーズ スイッチ上のスイッチポートをアクセスポートまたはトランクポートにするのかを動的に決定するCisco独自のプロトコルです。
DTPによって、隣接する対向のスイッチポートの状況をネゴシエーションして、自身のスイッチポートをアクセスポートまたはトランクポートで動作させます。
Cisco独自のプロトコルであるため、他ベンダーのスイッチでは、DTP をサポートしていません。また、CiscoスイッチのすべてがDTPをサポとしているわけではありません。
DTPをサポートしていないスイッチでは、DTP フレームを正しく処理できないことがあるため誤設定を引き起こす可能性があります。
これを回避するには、DTP をサポートしないスイッチと接続しているCiscoスイッチのインターフェイスで DTP をオフにする必要があります。
DTP をサポートしないデバイスへのトランキングをイネーブルにするには、「switchport mode trunk」 および「 switchport nonegotiate」コマンドをインターフェイス コンフィギュレーションモードから実行します。これにより、インターフェイスをtrunkモードにして、DTP フレームを生成しないようにします。
DTPの動作モード
switchport mode access | インターフェイスをアクセスポートにして永続的な非トランキングモードにします。対向インターフェイスがトランク インターフェイスであるかどうかに関係なく、インターフェイスは非トランク インターフェイスになります。 |
switchport mode dynamic auto | インターフェイスをトランクに変換できるようにします。対向インターフェイスが trunkモード、desirable モードに設定されている場合、インターフェイスは、trunkモードになります。 デフォルトのスイッチポートのモードは、dynamic auto モードになっています。 |
switchport mode dynamic desirable | 自身のスイッチポートを積極的に trunk モードに変換するように試みます。 対向インターフェイスが trunk、desirable、または auto モードに設定されている場合、インターフェイスは、trunk モードになります。 Catalyst2950、Catalyst3550シリーズのスイッチなど、旧型スイッチは、このモードがデフォルトになっています。 |
switchport mode trunk | インターフェイスを永続的な trunk モードにします。対向インターフェイスが、trunk モードでない場合でも、自身のインターフェイスは、trunk モードになります。 |
switchport nonegotiate | インターフェイスから、DTP フレームを生成しないようにします。このコマンドは、インターフェイスのスイッチポートのモードが access モード、または trunk モードの場合にだけ、使用できます。 |
DTPネゴシエーションの結果
Dynamic Auto | Dynamic Desirable | Trunk | Access | |
Dynamic Auto | アクセス | トランク | トランク | アクセス |
Dynamic Desirable | トランク | トランク | トランク | アクセス |
Trunk | トランク | トランク | トランク | 限定された接続 |
Access | アクセス | アクセス | 限定された接続 | アクセス |
スイッチ スプーフィング攻撃
スイッチポートが、デフォルトの設定の場合、Dynamic Autoモード、あるいは、Dynamic Desirableになっています。DTPが有効になっている場合、スイッチ スプーフィング攻撃を受けるリスクがあります。
ネットワーク攻撃者は、スイッチポートのデフォルト設定では、DTPでリンクをトランクにするかどうかをネゴシエーションするということを利用して攻撃の糸口にします。
trunk モードとなっているポートではすべての VLAN にアクセスできます。攻撃者は 802.1Q および DTP メッセージをエミュレートして、リンクをトランクにすることで、すべての VLAN へのアクセスを取得できます。
トランクリンクが必要な場合の一般的なベストプラクティスは、インターフェイスを手動で、trunkモードにして、DTPを nonegotiate と指定して無効に設定することです。
以下のコマンドを実行します。
switch(config)#switchport mode trunk
switch(config)#switchport nonegotiate