【実務・中級編】 STPセキュリティ機能(BPDUガード、BPDUフィルタ、ルートガード、ループガード、UDLD)の網羅的解説 – インフラ・物理&L2/L3ネットワーク基礎実践ガイド

STPは「信頼」の上に成り立つ:ネットワークを死守するセキュリティ機能の深淵

ネットワークエンジニアにとって、STP(Spanning Tree Protocol)は「諸刃の剣」だ。ループを回避して冗長化を実現する救世主である一方で、設定を一つ間違えればネットワーク全体をブラックホールへ叩き落とす爆弾にもなり得る。

今日は、教科書的な「STPとは何か」という話は脇に置き、現場で生き残るために必須の「STPセキュリティ機能」について、泥臭いトラブルシューティングの観点から深掘りしていこう。

—

1. BPDUガード:エッジポートの「門番」

ネットワークの入り口、つまりPCやサーバーが接続される「エッジポート」にSTPを有効にするのは危険だ。悪意のある(あるいは無知な)ユーザーが、勝手にL2スイッチを持ち込んで接続した瞬間、STPのトポロジー計算が走り出し、ネットワークがフラッピングする。

これを防ぐのが BPDUガード だ。エッジポートで BPDU を受信した瞬間、そのポートを即座に err-disable(無効化)する。

Cisco設定例

! エッジポートとして設定し、BPDUガードを有効にする
interface GigabitEthernet0/1
 switchport mode access
 spanning-tree portfast  ! 接続時に即座にForwardingにする
 spanning-tree bpduguard enable  ! BPDUを受け取ったらポートを殺す

現場のTips: err-disable されたポートは、管理者が手動で shutdown / no shutdown を打つか、自動復旧タイマーを設定しない限り死んだままだ。監視システムには必ず SNMP Trap を飛ばし、「誰かが変なスイッチを繋いだ」というアラートを検知できるようにしておくこと。

—

2. ルートガード:ネットワークの「秩序」を守る

STPの頂点、Root Bridge が予期せず変わってしまうと、トラフィックの流れが激変し、広範囲で通信断が発生する。特に、ダウンリンク配下のスイッチで「俺がルートになる!」と主張するスイッチが現れたら最悪だ。

ルートガード は、特定のポートで「ルートブリッジ候補となるような質の良いBPDU」の受信を拒否する。

Cisco設定例

! コアスイッチへのアップリンク以外の、ダウンリンク側に適用するのが鉄則
interface GigabitEthernet0/24
 spanning-tree guard root

これを設定しておけば、もし配下のスイッチが誤って優先度を高く設定していても、そのポートは root-inconsistent 状態になり、トポロジーへの影響を物理的に遮断できる。

—

3. ルートガード vs BPDUフィルタ

混同しやすいのが BPDUフィルタ だ。これは「BPDUを送りもしないし、受け取ったふりもしない」という、STPの存在そのものを隠蔽する機能だ。

絶対に使ってはいけないケース:
L2スイッチ同士の接続に BPDUフィルタ を入れると、ループが発生しても検知できず、ネットワークは瞬時に崩壊する。「STPが邪魔だから止めよう」という安易な判断は、ネットワークエンジニアとして最もやってはいけないことだ。

—

4. ループガードとUDLD:見えない敵との戦い

物理的なループは防げても、厄介なのが「単一方向リンク障害(Unidirectional Link)」だ。光ファイバーの片系が断線し、送信はできるが受信ができない場合、STPは BPDU を受信できなくなり、ループがないと誤認して Forwarding 状態に移行してしまう。

これを防ぐのが ループガード と UDLD(Unidirectional Link Detection)だ。

UDLDの設定(Cisco)

UDLDは「お互いに相手が見えているか」をレイヤー2で確認する。

! グローバル設定で有効化(推奨)
udld enable aggressive

! インターフェース単位で確認
interface TenGigabitEthernet0/1
 udld port aggressive

aggressive モードを使うと、通信が遮断された際にポートを強制的に err-disable に追い込める。これが最も安全な「逃げ」だ。

—

5. 運用現場でのデバッグ・Tips

インフラエンジニアとして、トラブル時にまず叩くべきコマンドを整理しておこう。

! どのポートがどの状態かを確認する黄金のコマンド
show spanning-tree detail | include from|is executing

! err-disableされた原因を特定する
show interfaces status err-disabled

Pythonによる自動監視のヒント

最近のインフラ運用では、Netmiko を使って全スイッチのSTP状態を定期的にチェックするスクリプトを組むのが常識だ。

from netmiko import ConnectHandler

# 複数台のスイッチからSTPのルートブリッジ情報を収集する
device = {"device_type": "cisco_ios", "host": "192.168.1.1", ...}
with ConnectHandler(**device) as net_connect:
    output = net_connect.send_command("show spanning-tree root")
    if "This bridge is the root" not in output:
        print("警告: 予期せぬルートブリッジが検出されました!")

—

最後に:プロトコルは「疑う」ことから始まる

STPのセキュリティ機能は、単なる「設定値」ではない。それは、ネットワークの安定という「信頼」を守るための最後の砦だ。

現場でトラブルが起きたとき、盲目的にコマンドを打つのではなく、「今、このポートでBPDUがどう流れているべきか?」をパケットレベルで想像してほしい。フレームが流れる物理配線を脳内でトレースする力こそが、我々ネットワークスペシャリストの真の武器になる。

次にスイッチの設定を投入するときは、ぜひこの記事のことを思い出してほしい。その「一手間」が、深夜の緊急呼び出しを回避する唯一の手段になるのだから。

コメント

タイトルとURLをコピーしました