STP(拡張技術)

目次

STP拡張機能:BPDUガードの仕組みと設定方法

BPDUガードは、スパニングツリープロトコル(STP)の安全性を高めるために用いられる機能です。特にPortFastが設定されたポートで有効にすることで、予期しないスイッチ接続やループの発生を未然に防ぐ役割を持ちます。

PortFastの前提は「PCやサーバのような末端機器が接続されること」です。しかし、もしそのポートに別のスイッチを接続してしまうと、BPDU(ブリッジプロトコルデータユニット)が流れ込み、意図しないSTPの動作が発生する可能性があります。そこでBPDUガードを有効にしておけば、BPDUを受信した瞬間に該当ポートをerror-disabled状態にし、安全を確保できるのです。

試験対策:「PortFastとBPDUガードはセットで利用されることが多い」という点です。実務でもSTPループ防止策としてほぼ常識的に導入されるので、確実に理解しておきましょう。

BPDUガードの適用範囲

BPDUガードは、ポート単位でもスイッチ全体(グローバル)でも有効化できます。両者の違いを整理すると次のようになります。

設定方法適用範囲
ポート単位で有効化該当ポートに必ずBPDUガードが働く。PortFastの有無に関係なく適用される。
グローバルで有効化スイッチ全体でPortFastが設定されたポートにのみBPDUガードが働く。

試験では「グローバル有効化ではPortFastが条件になる」という点が問われやすいので要注意です。

BPDUガードの設定コマンド

ポート単位で設定する場合は次のように入力します。

(config-if)# spanning-tree bpduguard enable

スイッチ全体で有効化する場合は次のようになります。

(config)# spanning-tree portfast bpduguard default

BPDUガードが動作したときの挙動

もしBPDUガードが有効なポートにスイッチを接続すると、次のようなログが出力され、そのポートは自動的にerr-disable状態に移行します。

%SPANTREE-2-BLOCK_BPDUGUARD: Received BPDU on port Fa0/1 with BPDU Guard enabled. Disabling port.
%PM-4-ERR_DISABLE: bpduguard error detected on Fa0/1, putting Fa0/1 in err-disable state

err-disableになったポートは、そのままでは通信できません。復旧させる方法は2つあります。

  1. 手動で shutdownno shutdown を入力する
  2. 自動復旧を設定しておく

自動復旧を使う場合の設定例は次の通りです。

(config)# errdisable recovery cause bpduguard

この設定により、デフォルトでは300秒ごとにポートが復旧を試みるようになります。

試験対策:
・BPDUガードはPortFastと組み合わせるのが基本であること
・ポート単位とグローバル設定の違い
・BPDU受信時にポートがerr-disableになる挙動
・自動復旧のコマンド設定

STP拡張機能:BPDUフィルタリングの仕組みと設定方法

BPDUフィルタリングは、スパニングツリーに関連する制御フレーム(BPDU)の送受信を制御する機能です。特にPortFastが設定されたポートに対して使われることが多く、通常はPCやサーバなどの末端機器にBPDUが流れ込むのを防ぐ目的で導入されます。

PCやサーバはSTPに参加しませんから、BPDUを受け取っても意味はありません。むしろ、余計なフレームを送るだけ通信負荷になるので、BPDUフィルタリングによってBPDUの送信を止め、受信したBPDUは破棄する仕組みになっています。

ただし、この機能は扱いに注意が必要です。なぜなら、BPDUのやり取りが完全に止まると、ポートがSTPに参加しなくなり、思わぬループ発生のリスクを招く可能性があるからです。そのため、BPDUガードが推奨される一方で、BPDUフィルタリングは基本的には非推奨とされています。

BPDUフィルタリングの適用範囲と挙動

BPDUフィルタリングは「ポート単位」と「グローバル」の2種類の設定方法があり、それぞれ動作が異なります。試験でも出題されやすい部分なので整理して覚えておきましょう。

設定方法動作の特徴
ポート単位で有効化PortFastの有無に関係なく、そのポートではBPDUの送受信が完全に停止。事実上、そのポートでSTPが無効化される。
グローバルで有効化PortFastが有効なポートのみBPDUフィルタリングが適用される。最初はBPDU送信を停止するが、もしBPDUを受信した場合はPortFastが解除され、通常のSTP動作に戻る。

この違いが理解できていないと混乱しやすいため、「グローバル設定では受信したBPDUによって動作が切り替わる」というポイントを必ず押さえておきましょう。

BPDUフィルタリングの設定コマンド

ポート単位で設定する場合のコマンドは次の通りです。

(config-if)# spanning-tree bpdufilter enable

スイッチ全体で有効化する場合は次のように入力します。

(config)# spanning-tree portfast bpdufilter default

実務における利用シーンと注意点

BPDUガードは「ループ防止」に直結するため推奨されますが、BPDUフィルタリングは誤用するとループを助長する危険があります。そのため、通常は推奨されません。

それでも利用されるケースとしては、「STPを完全に無効化はしたくないが、特定のポートからBPDUを送信させたくない」というような特殊な環境です。例えば、外部の管理対象外ネットワークに接続するポートなどが該当します。

試験対策:
・BPDUフィルタリングの基本的な役割(BPDU送受信を制御する機能)
・ポート単位とグローバル設定での動作の違い
・グローバル設定では「BPDUを受信するとPortFastが解除される」点
・推奨されるBPDUガードとの比較(BPDUフィルタリングは非推奨であること)

特に「グローバル設定での動作」が細かく問われることがあるため、表の内容をそのままイメージできるようにしておくと安心です。

STP拡張機能:ルートガードの仕組みと設定方法

ルートガードは、スパニングツリーにおいて意図しないスイッチがルートブリッジになるのを防ぐための機能です。通常、STPではBPDUの情報を比較し、ブリッジIDが最も小さいスイッチがルートブリッジに選ばれます。しかし、ネットワークに新しくスイッチが追加されたり、設定ミスで優先度の低いスイッチが接続されたりすると、ルートブリッジが書き換わってしまい、既存のトポロジーが変化する危険があります。

このような場合、STPの再収束が起こり、一時的な通信断が発生することがあります。業務システムではこうした瞬断でも大きな影響を及ぼすため、ルートブリッジの位置を強制的に固定したい場面ではルートガードが有効に働きます。

ルートガードの動作イメージ

ルートガードを設定したポートが「より優先度の高いBPDU(上位BPDU)」を受信した場合、そのポートは自動的にroot-inconsistent状態移行します。
この状態ではフレーム転送が止まり、そのポート経由でルートブリッジが書き換わるのを防止します。

そして、不正なBPDUの受信が止まれば、自動的にroot-inconsistent状態から復帰し、通常のポートとして再び利用可能になります。

試験対策:「ルートガードはポートをerr-disableにしない」「BPDUの受信がなくなれば自動復旧する」という点です。BPDUガードと混同しやすいので注意しましょう。

ルートガードの設定方法

ルートガードはポート単位でのみ設定できます。グローバルでの一括設定はできないため、管理していない機器や外部スイッチと接続される可能性があるポートに個別で適用します。

設定コマンドは次の通りです。

(config-if)# spanning-tree guard root

ルートガードの状態確認

ルートガードによってroot-inconsistent状態に入ったポートは、次のコマンドで確認できます。

# show spanning-tree inconsistentports

ログ出力の例

ルートガードによってポートがブロックされた場合、次のようなメッセージが出力されます。

%SPANTREE-2-ROOTGUARD_BLOCK: Root guard blocking port FastEthernet0/3 on VLAN0001

試験対策:
・ルートガードは「意図しないルートブリッジの変更」を防止する機能
・root-inconsistent状態になるが、err-disableにはならない
・不正なBPDUの受信が止まれば自動的に復帰する
・設定はポート単位でのみ可能

これらは特にBPDUガードとの違いとセットで問われやすいため、整理して覚えることが重要です。

STP拡張機能:ループガードの仕組みと設定方法

ループガードは、スパニングツリーの冗長構成においてBPDUが受信されなくなったときに誤ってポートが転送状態になるのを防ぐ機能です。もしループガードがなければ、ブロッキング中のポートが「BPDUが届かない=接続先が消えた」と誤認し、指定ポート(DP)へ移行してフォワーディング状態になってしまうことがあります。これが発生すると、冗長パスにおいてブロックされるポートが一切なくなり、結果としてL2ループが起きてしまいます。

特に、単一方向リンク障害STPプロセスの異常停止といったケースでは、この問題が発生しやすいため、ループガードを導入することで安全性を高めることができます。

ループガードの動作イメージ

ループガードを有効にしていると、本来BPDUを受信すべき代替ポートやルートポートでBPDUが届かなくなった場合、そのポートはloop-inconsistent状態に移行します。この状態ではフォワーディングに移行しないため、意図しないL2ループが防止されます。

さらに、再びBPDUが受信できるようになれば、自動的にloop-inconsistent状態から復旧し、通常のSTP動作に戻ります。つまり、手動で復旧作業を行う必要がなく、STPの安定性を保ちながら運用できます。

ここで押さえておきたいのは、ループガードはerr-disableを発生させないという点です。BPDUガードとの違いを混同しやすいため、試験では要注意です。

ループガードの設定方法

ループガードはグローバル単位でもポート単位でも設定できます。推奨はグローバルでの有効化で、スイッチ全体に一括適用することで最大の効果を発揮します。

グローバルでの設定例:

(config)# spanning-tree loopguard default

ポート単位での設定例:

(config-if)# spanning-tree guard loop

また、ルートガードとループガードは排他的であり、同じポートに両方の機能を同時に設定することはできません。この点も試験で問われやすいので覚えておきましょう。

ループガードの状態確認

ループガードによってloop-inconsistent状態になったポートは、次のコマンドで確認できます。

# show spanning-tree inconsistentports

ログ出力の例

ループガードが働いてポートをブロックした場合:

%SPANTREE-2-LOOPGUARD_BLOCK: Loop guard blocking port FastEthernet0/1 on VLAN0010

ループガードのブロッキングが解除された場合:

%SPANTREE-2-LOOPGUARD_UNBLOCK: Loop guard unblocking port FastEthernet0/1 on VLAN0010

試験対策:
・ループガードは「BPDUを受信できなくなったポート」を対象にloop-inconsistent状態にする機能
・冗長構成でのL2ループ防止策として利用される
・復旧は自動で行われる(err-disableにはならない)
・グローバル・ポート単位の両方で設定可能
・ルートガードとの同時利用は不可

このように、ループガードは冗長ネットワークの安定性を守るための仕組みであり、試験でも実務でも重要な知識です。

◆まとめスライド

目次