Cisco BPDU Guard で err-disable になる原因|復旧の手順

  • URLをコピーしました!
目次

はじめに

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

このため、復旧には手動操作(shutdownno 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 seconds

bpduguardEnabled であれば、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

原因を解消したら、該当ポートを shutdownno 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 GuardPortFast ポートで 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-disabledshow errdisable recovery
  • 復旧は原因を取り除いたうえで、手動か errdisable recovery
  • errdisable recovery の既定間隔は 300 秒で、有効な全 cause に共通
  • BPDU Filter は送受信を抑制する別機能。インターフェース単位は実質 STP 無効化
  • BPDU Guard・Root Guard・Loop Guard はトリガーと回復の仕方が異なる

以上、最後までお読みいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

関西を拠点に活動する、現役インフラエンジニア。経験20年超。

大手通信キャリアにて、中〜大規模インフラ(ネットワーク・サーバ・クラウド・セキュリティ)の設計・構築およびプロジェクトマネジメントに従事。現場で直面した技術課題への対処や、最新の脆弱性情報への実務対応を、一次情報として発信しています。

保有資格
CCIE Lifetime Emeritus(取得から20年以上)/ VCAP-DCA / Azure Solutions Architect Expert

▶ 運営者プロフィール(詳細)

目次