はじめに
PortFast を設定したアクセスポートに機器を接続した直後、あるいは既存のポートが突然ダウンし、ログに次のようなメッセージが出力されてポートが落ちることがあります。
%SPANTREE-2-BLOCK_BPDUGUARD: Received BPDU on port GigabitEthernet1/0/1 with BPDU Guard enabled. Disabling port.
%PM-4-ERR_DISABLE: bpduguard error detected on Gi1/0/1, putting Gi1/0/1 in err-disable state本記事は、この BPDU Guard による err-disable の原因と復旧手順を解説します。STP の Inconsistent ブロック(Type/PVID 不整合)とは挙動が異なる点を整理し、手動復旧と自動復旧(errdisable recovery)の使い分けまでを扱います。STP 全体の位置づけは、関連記事『スパニングツリー(STP)とは|仕組みと RSTP・MSTP の違い』も参照してください。
- BPDU Guard が err-disable を発動させる仕組み
- Inconsistent ブロックとの違い(自動回復するかどうか)
- err-disable の確認コマンドと、原因の特定の仕方
- 手動復旧と
errdisable recoveryによる自動復旧の手順
要点を先に示すと、BPDU Guard は PortFast を設定したポートで BPDU を受信したときに、そのポートを err-disable にして遮断する保護機能です。Inconsistent ブロックと異なり、BPDU の受信が止まっても自動では戻らず、復旧には手動操作または errdisable recovery の設定が必要です。
BPDU Guard とは
PortFast は、端末を直結するエッジポートを、STP の状態遷移を待たずにすぐ Forwarding にする機能です。こうしたポートは、本来 BPDU を受信しないことが前提です。
BPDU Guard は、その前提を保護する機能です。PortFast ポートに BPDU が届くということは、スイッチやブリッジなど STP に参加する機器が誤って接続された可能性を示します。BPDU Guard はこれを検知してポートを落とし、意図しないトポロジ変更やループの発生を防ぎます。
既定では無効で、有効化の方法は 2 通りあります。
- インターフェース単位:
spanning-tree bpduguard enable - グローバル(PortFast ポートを対象):
spanning-tree portfast bpduguard default
グローバル設定では、PortFast が有効なポートすべてに BPDU Guard が適用されます。
なぜ err-disable になるのか
BPDU 受信でシャットダウンする動作
BPDU Guard が有効なポートは、BPDU を 1 つでも受信すると、その内容を問わず即座に err-disable 状態になりシャットダウンします。Root Guard のように BPDU の値(優先度など)を評価するのではなく、BPDU の受信そのものをトリガーとする点が特徴です。
%SPANTREE-2-BLOCK_BPDUGUARD: Received BPDU on port GigabitEthernet1/0/1 with BPDU Guard enabled. Disabling port.
%PM-4-ERR_DISABLE: bpduguard error detected on Gi1/0/1, putting Gi1/0/1 in err-disable state
%LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet1/0/1, changed state to downプラットフォームによっては、ファシリティに SP が入り %SPANTREE-SP-2-BLOCK_BPDUGUARD/%PM-SP-4-ERR_DISABLE と表記される場合もありますが、意味は同じです。
Inconsistent ブロックとの違い
Type/PVID の Inconsistent ブロックは、不整合 BPDU の受信が止まれば自動的に解除されます。一方、BPDU Guard による err-disable は、原因が解消しても自動では戻りません。
参考: Cisco — Understand Spanning Tree PortFast and BPDU Guard Features
“A port placed in errdisable does not recover on its own.”
(err-disable 状態に置かれたポートは、自力では回復しない)
https://www.cisco.com/c/en/us/support/docs/lan-switching/spanning-tree-protocol/10586-65.html
このため、復旧には手動操作(shutdown/no shutdown)か、errdisable recovery による自動復旧の設定が必要です。Inconsistent ブロックと混同すると「待っていれば戻るはず」と誤認しやすいため、両者の違いを押さえておくことが切り分けの起点になります。Inconsistent ブロックの詳細は、関連記事『Cisco スイッチで Inconsistent port type が出る原因と対処』を参照してください。

確認コマンド
ポートが err-disable になったら、まず該当ポートと理由を特定し、続いて自動復旧の設定状況を確認します。
show interfaces status err-disabledで、err-disable 状態のポートとその理由を一覧表示します。Reason 列が bpduguard であれば、BPDU Guard が原因です。
Switch# show interfaces status err-disabled
Port Name Status Reason
Gi1/0/1 err-disabled bpduguard出力のフォーマットはプラットフォームによって異なり、機種によっては「Error Disable Reason」「Time Disabled」といった列で表示されます。
次に、show errdisable recoveryで、どの原因に自動復旧が設定され、復旧間隔が何秒かを確認します。
Switch# show errdisable recovery
ErrDisable Reason Timer Status
----------------- --------------
bpduguard Enabled
channel-misconfig Enabled
...
Timer interval: 300 secondsbpduguard が Enabled であれば、Timer interval の秒数が経過した後に自動でポートが戻ります。Disabled の場合は、手動で戻すまで err-disable のままです。検知側の設定は show errdisable detectで確認できます。BLOCK_BPDUGUARD/ERR_DISABLE のログは、show loggingでも後から確認できます。
復旧手順
手動復旧
復旧の前に、まず原因を取り除きます。誤って接続されたスイッチの撤去や、該当ポートの設計の見直しが該当します。原因を残したまま戻すと、再び err-disable になります。
参考: Cisco — Recover Errdisable Port State on Cisco IOS Platforms
“first identify and correct the root problem, and then reenable the port.”
(まず根本原因を特定して修正し、その後にポートを再有効化する)
https://www.cisco.com/c/en/us/support/docs/lan-switching/spanning-tree-protocol/69980-errdisable-recovery.html
原因を解消したら、該当ポートを shutdown/no shutdownで再有効化します。
! 原因(誤接続機器など)を取り除いてから実行
Switch(config)# interface GigabitEthernet1/0/1
Switch(config-if)# shutdown
Switch(config-if)# no shutdown自動復旧(errdisable recovery)
一定時間後に自動でポートを戻したい場合は、errdisable recoveryを設定します。原因として bpduguard を指定し、復旧間隔を秒で指定します。
! bpduguard 起因の自動復旧を有効化し、間隔を 300 秒に設定
Switch(config)# errdisable recovery cause bpduguard
Switch(config)# errdisable recovery interval 300復旧間隔の既定値は 300 秒で、指定できる範囲は 30〜86400 秒です。注意点として、errdisable recovery intervalで指定した秒数は、自動復旧を有効にしたすべての原因に共通で適用されます。また、原因(BPDU の送信元)が接続されたままだと、間隔ごとにポートが再び落ちる点にも留意します。自動復旧は、原因の解消までの一時的な緩和策として位置づけるのが扱いやすい使い方です。
BPDU Filter との違いと使い分け
BPDU Guard と名前が似た機能に BPDU Filter があります。両者は目的が異なります。BPDU Guard は BPDU を受信したポートを err-disable で落とすのに対し、BPDU Filter は BPDU の送受信そのものを抑制する機能で、ポートは落としません。
BPDU Filter は、設定する場所によって挙動が大きく変わる点に注意が必要です。
| 機能 | BPDU 受信時の挙動 | 主な用途 |
|---|---|---|
| BPDU Guard | ポートを err-disable で遮断 | PortFast ポートへの不正接続の遮断 |
| BPDU Filter(インターフェース単位) | 送受信を停止し、受信 BPDU を破棄 | 限定的。実質 STP 無効化 |
| BPDU Filter(グローバル default) | PortFast を解除し通常 STP に復帰 | ホスト向けポートの BPDU 抑制 |
インターフェース単位(spanning-tree bpdufilter enable)では、そのポートの BPDU 送受信を完全に停止し、受信した BPDU も破棄します。これはそのポートで STP を無効化することに等しく、対向にスイッチが接続されてもループを検知できないため、誤配線時にループへ発展する恐れがあります。
一方、グローバル(spanning-tree portfast bpdufilter default)では、PortFast ポートはリンクアップ直後に数個の BPDU を送出した後、送信を停止します。ただし BPDU を受信すると、そのポートは PortFast 状態を解除して通常の STP 動作に戻り、フィルタも無効化されます。受信時に通常の STP へ戻るぶん、グローバル設定の方が安全側に振れています(参照: Cisco Catalyst 9300 Configuring Optional Spanning-Tree Features — https://www.cisco.com/c/en/us/td/docs/switches/lan/catalyst9300/software/release/17-16/configuration_guide/lyr2/b_1716_lyr2_9300_cg/configuring_optional_spanning_tree_features.html )
なお、BPDU Guard とグローバルの BPDU Filter を併用した場合、BPDU を受信するとポートは err-disable になります。一方、インターフェース単位の BPDU Filter と BPDU Guard を同じポートに併用すると、Filter が優先されて BPDU が破棄されるため、BPDU Guard は発動しません。ループ防止の観点から、スイッチ間リンクにインターフェース単位の BPDU Filter を設定する運用は推奨しません。
よくある誤解と運用上の注意
BPDU Guard の運用で混同しやすい点を整理します。
似た名前の保護機能に Root Guard と Loop Guard があり、トリガーと回復の仕方が異なります。
| 機能 | トリガー | 結果 | 回復 |
|---|---|---|---|
| BPDU Guard | PortFast ポートで BPDU を受信 | err-disable | 手動/errdisable recovery |
| Root Guard | 指定ポートで上位 BPDU を受信 | root-inconsistent でブロック | 自動(上位 BPDU が止まれば) |
| Loop Guard | 非指定ポートで BPDU 受信が途絶 | loop-inconsistent でブロック | 自動(BPDU の受信が戻れば) |
BPDU Guard は err-disable で「ポートを落とす」のに対し、Root Guard・Loop Guard は「ポートをブロックする」点と、後者が条件解消で自動回復する点が異なります。
また、BPDU Guard はあくまで PortFast(エッジ)ポート向けの機能です。スイッチ間のリンクでは BPDU が正常にやり取りされるため、そこに BPDU Guard を設定すると、正規の BPDU で err-disable になってしまいます。STP 全体での各 Guard の位置づけは、関連記事『スパニングツリー(STP)とは|仕組みと RSTP・MSTP の違い』も参照してください。

まとめ
BPDU Guard は、PortFast を設定したポートで BPDU を受信したときに、そのポートを err-disable にして遮断する保護機能です。Inconsistent ブロックと異なり自動では回復しないため、復旧手順を押さえておくことが重要になります。本記事では、仕組みから確認・復旧までを整理しました。
- BPDU Guard は PortFast ポートで BPDU を受信するとポートを err-disable にする
- Inconsistent ブロックと異なり、原因が解消しても自動では回復しない
- 確認は
show interfaces status err-disabledとshow errdisable recovery - 復旧は原因を取り除いたうえで、手動か
errdisable recovery errdisable recoveryの既定間隔は 300 秒で、有効な全 cause に共通- BPDU Filter は送受信を抑制する別機能。インターフェース単位は実質 STP 無効化
- BPDU Guard・Root Guard・Loop Guard はトリガーと回復の仕方が異なる
以上、最後までお読みいただきありがとうございました。
