1. Layer2ネットワークにおけるSTPの絶対的な必要性
現代のネットワーク設計において、冗長性の確保は通信の継続性を保証するために不可欠な要素です。しかしながら、ケーブルの冗長化や複数のスイッチ間接続を単純に行うだけでは、大きなリスクを伴うことになります。データリンク層(Layer 2)において経路が冗長化されているにもかかわらず、その経路を論理的に管理する機構が働かない場合、深刻な問題が発生するからです。
この問題の最も恐ろしい結果が、ブロードキャストストームです。スイッチはブロードキャストフレームや未知のユニキャストフレームを受信すると、受信ポート以外全てのポートからそのフレームを転送します。経路がループしている場合、このフレームは際限なくネットワーク内を循環し、増幅され続けます。Spanning Tree Protocol(STP)が無効化された環境でL2ループが発生すると、ネットワーク全体が数秒で麻痺状態に陥る可能性があります。
STPの役割は、このL2ループの発生を防止することにあります。STPは、冗長化された経路の中から一時的に特定のポートを論理的に遮断(ブロッキング)することで、ループのない単一のツリー状トポロジーを形成します。これにより、ネットワーク設計者は耐障害性のメリット(冗長化)を享受しつつ、安定性のデメリット(L2ループの危険性)を完全に回避できるようになります。STPの導入は、安定したL2ネットワーク運用における、絶対的な必須要件であると言えます。
2. Cisco STPの基本動作とルートブリッジ選出の設定方法
STPトポロジーの基点となるルートブリッジ
STPは、ツリー状トポロジーの基点となるルートブリッジ(Root Bridge)を選出し、そこからの距離やコストに基づいて最適なパスを決定します。ルートブリッジは、ネットワーク内の全スイッチの中で最も低いブリッジIDを持つスイッチが選出されます。
ブリッジIDは、ブリッジプライオリティ(Bridge Priority)とスイッチのMACアドレスの組み合わせで構成されます。Ciscoスイッチにおけるデフォルトのブリッジプライオリティ値は32768です。この値はVLAN IDと合算され、より低い値を持つスイッチが優位となります。
戦略的なルートブリッジの指定
デフォルト設定のまま運用すると、プライオリティ値が全て同じ32768となるため、最も若いMACアドレスを持つスイッチがルートブリッジとして選出されます。しかし、MACアドレスに基づいた選出では、ネットワークのトラフィックパスが予測不能になり、帯域が細いリンクやCPU負荷が高いスイッチがルートパスになってしまうリスクを伴います。
このリスクを防ぎ、安定したトラフィック制御を実現するためには、信頼性の高いコアスイッチなどを意図的にルートブリッジに指定する戦略的な設定が推奨されます。STPはVLANごとに設定・有効化が可能です。
戦略的なルート指定のための設定キーワードは以下の通りです。
// VLAN 10でSTPを有効化
(config)# spanning-tree vlan 10
// VLAN 10でそのスイッチをルートブリッジに指定する(root primary)
// プライオリティ値を自動的に最小値(4096)に設定します
(config)# spanning-tree vlan 10 root primary
// プライオリティ値を手動で設定する(4096の倍数)
(config)# spanning-tree vlan 10 priority 4096
設定後には、show spanning-treeコマンドを使用して、現在のルートブリッジの情報、各種タイマー、および自身のブリッジIDを確認し、設定が意図通りに反映されているか検証することが重要です。
3. STP収束時間の短縮と末端接続の最適化 PortFastの適用
STPの規定では、スイッチのポートがブロッキング状態からフレーム転送可能状態(フォワーディング)に移行するまでに、リスニング状態とラーニング状態を経由し、標準で約30秒から50秒を要します。
PortFastの機能と必要性
この遅延は、PCやサーバーなどのエンドデバイスが接続されるアクセスポートにおいては、大きな問題となります。例えば、PCがネットワークに参加した際に、STPの収束待ちのためにDHCPクライアントがIPアドレスを正常に取得できず、通信に遅延が発生する可能性があるためです。
PortFast機能は、このようなエンドデバイス接続ポートに対し、STPの収束プロセスをスキップさせ、ポートを即座にフォワーディング状態に移行させることで、接続時間を短縮します。
PortFastの設定キーワード
PortFastは、個別のインターフェース単位、またはグローバル(スイッチ全体)で設定できます。
// インターフェース単位でのPortFast有効化
(config-if)# spanning-tree portfast
// グローバルでのPortFast有効化(アクセスポート全てに適用)
(config)# spanning-tree portfast default
PortFastの適用は利便性を高めますが、本来L2ループ検証を省略する機能であるため、ポートに誤って別のスイッチ機器が接続された場合、L2ループ発生リスクが大幅に増大します。したがって、PortFastの導入は、後述するL2セキュリティ機能であるBPDU Guardとセットで適用することが、運用上の必須のベストプラクティスとなります。
4. 不正なBPDUによるトポロジー破壊を防ぐ BPDU Guardの徹底解説
PortFastを設定したポートは、PCやサーバーなどの末端機器との接続を前提としています。これらの機器は通常、STPの動作に必要なBPDU(Bridge Protocol Data Unit)を送信することはありません。もしPortFast設定ポートでBPDUを受信した場合、それは意図しないスイッチ機器が接続されたことを意味し、ネットワークトポロジーが予期せず変更される可能性があるため、非常に危険です。
BPDU Guardの動作原理と目的
BPDU Guardは、PortFastが設定されたポートでBPDUを受信した際に、そのポートを即座にerror-disabled状態(無効状態)に移行させる機能です。この機能の目的は、予期しないスイッチ機器の接続を阻止し、L2ループの発生を防ぐことにあります。
BPDU Guardの設定方法は、適用範囲によって異なります。
| 適用方法 | 設定コマンド | 適用範囲 |
| ポート単位での有効化 | (config-if)# spanning-tree bpduguard enable |
PortFastの設定の有無に関係なく、その特定のポートに適用されます。 |
| グローバルでの有効化 | (config)# spanning-tree portfast bpduguard default |
PortFastが設定されている全てのポートに自動的に適用されます。 |
グローバル設定は適用が容易ですが、特定の重要なポートに対してPortFastの有無にかかわらず確実にセキュリティを担保したい場合は、ポート単位での設定が有効な選択肢となります。
err-disabledからの復旧方法
BPDU Guardによりポートがerr-disabled状態になった場合、以下のメッセージがログに出力されます。
%SPANTREE-2-BLOCK_BPDUGUARD: Received BPDU on port Fa0/1 with BPDU Guard enabled. Disabling port.
err-disabled状態となったポートは、不正な機器を排除した後、手動または自動で復旧させる必要があります。手動による復旧は、該当ポートでshutdownコマンドを実行し、その後no shutdownコマンドを実行することで可能です。
より高度で運用負荷の低い方法として、自動復旧機能(errdisable recovery)の設定が強く推奨されます。
// BPDU Guardが原因のエラーからの自動復旧機能を有効化(デフォルト300秒後)
Catalyst(config)# errdisable recovery cause bpduguard
この自動復旧機能の設定まで行うことで、問題発生の「防止策」と「回復策」の両方を準備した、成熟した運用環境を構築することができます。
5. 意図しないルートブリッジ選出を防ぐ Root GuardとBPDU Filteringの比較
BPDU Guardは不正な機器の接続を防ぎますが、ネットワークトポロジー全体を保護し、意図しないルートブリッジの選出を防ぐためには、Root Guardの導入が有効です。
Root Guardによるトポロジー保護
Root Guardは、トポロジー制御(ポリシー適用)に特化したSTP拡張技術です。この機能が有効になっているポートで、現在のルートスイッチよりも「優位なBPDU」(プライオリティがより低いBPDU)を受信した場合、そのポートをroot-inconsistentステートへ移行させます。
これにより、ネットワークの末端や、自分が管理していない領域から、予期せずより低いブリッジIDを持つスイッチが出現し、ルートブリッジの座を奪うことを防ぎます。ルートブリッジが変わることで発生するトポロジーの変化(再収束)による通信断を防ぎ、STPトポロジーの一貫性と安定性を保護します。
Root Guardはポート単位でのみ設定可能です。主に、コアスイッチからアクセススイッチへ向かうダウンストリームポートなど、ルートブリッジになることを許可しない全てのポートに適用されます。
// Root Guardの有効化(ポート単位)
(config-if)# spanning-tree guard root
Root Guardによってポートがroot-inconsistent状態になった場合、不正なBPDUの受信が停止すると、ポートは自動的に回復し、フレーム転送を再開します。
BPDU Filteringの利用と注意点
BPDU Filteringは、PortFastが設定されたポートでBPDUの送信と受信を停止する機能です 5。これは「STPを無効化したくはないが、ポートからBPDUを送信したくない」という特殊なケースで使用されます。
しかし、BPDU GuardがL2ループ防止の観点から推奨設定であるのに対し、BPDU FilteringはL2ループを発生させる可能性があることから、非推奨設定とされています。Filteringを有効にすることで、そのポートがSTPの安全機構から切り離されてしまうため、ネットワーク全体の安定性に対するリスクが増大するからです。利用する際は、その危険性を十分に理解し、極めて慎重に適用する必要があります。
以下に、主要なSTP拡張技術の設定キーワードと機能の比較を示します。
STP拡張技術の比較と設定キーワード
| 拡張技術 | 機能概要 | 設定キーワード (グローバル) | 設定キーワード (ポート) | 目的と推奨度 |
| PortFast | ポートを即座に転送状態に移行させます。 | spanning-tree portfast default |
spanning-tree portfast |
末端機器接続時の必須設定です。 |
| BPDU Guard | PortFastポートでBPDU受信時にポートを無効化します。 | spanning-tree portfast bpduguard default |
spanning-tree bpduguard enable |
L2ループ防止/不正接続防止に強く推奨されます。 |
| Root Guard | 優位なBPDUを受信した場合、ポートをroot-inconsistent状態にします。 | 設定なし | spanning-tree guard root |
トポロジー制御/ルートブリッジ保護に必須です。 |
| BPDU Filtering | BPDUの送受信を停止します。 | spanning-tree portfast bpdufilter default |
spanning-tree bpdufilter enable |
L2ループリスクがあるため非推奨です。 |
6. STP設定を確実にするための検証コマンドと実践的運用
STPの設定を確実にするためには、トポロジーが意図通りに機能しているか、また予期しない動作が発生していないかを継続的に検証することが不可欠です。
トポロジーとステータスの検証
まず、show spanning-treeコマンドを実行することで、現在のSTPトポロジーの中心となるルートブリッジの情報(MACアドレス、タイマーなど)、スイッチ自身のブリッジID、そして各ポートの役割(Root Port, Designated Port, Alternate Port)や状態(Forwarding, Blocking)を詳細に確認できます。これにより、ルートパスが意図した経路を通っているかを検証します。
特に、タイマー情報(Hello Time, Forward Delay, Max Age)は、ルートブリッジからアドバタイズされる情報であり、ネットワーク全体の収束時間に影響を与えるため、確認が必要です。
異常状態の把握と復旧手順の確立
運用において最も重要なのは、異常発生時の状態把握と迅速な復旧です。
BPDU Guardなどの保護機能が働いた結果、ポートがエラー状態になった場合、そのステータスを確認するための専用コマンドが役立ちます。
-
BPDU Guard起因のエラー確認:
show interfaces status err-disabledコマンドを実行し、どのポートがBPDU Guardによって無効化されたかを確認します。ポートが無効化された際には、先に述べたログメッセージが出力されますが、このコマンドは現在の状態を把握するために必要です。 -
Root Guardの状態確認: Root Guardによりルートブリッジ選出が妨げられたポートは
root-inconsistent状態となります。この状態にあるポートを確認するためには、show spanning-tree inconsistentportsコマンドを使用します。
これらの異常ステータスを即座に特定し、手動または自動復旧コマンドを適用するための知識体系を確立しておくことが、ネットワークエンジニアに求められる実践的運用能力です。STP設定は、単なる静的な設定に留まらず、動的なセキュリティ機能(Guard機能)と回復機構を組み合わせた、総合的な運用哲学に基づいて実行されるべきです。


コメント