ネットワークの王座を守れ!ルートガード(Root Guard)で防ぐレイヤ2ハイジャックの恐怖
やあ、よく来てくれた。インフラの現場を渡り歩いていると、「まさか、そんな初歩的なミスで大規模障害が起きるとは……」と頭を抱えたくなる瞬間に何度も遭遇するものだ。
L2スイッチングネットワークの心臓部といえば、何と言ってもスパニングツリープロトコル(STP / IEEE 802.1D)、そしてその進化系であるRSTPやMSTPだ。冗長性を担保するために不可欠なこのプロトコルだが、その根底には「お互いを信頼し合う」という、何とも性善説に基づいた切ない設計思想が流れている。
ここに一本の“魔のケーブル”が差し込まれたとき、ネットワークの牙城はいとも簡単に崩れ去る。今回は、野良スイッチの暴走や悪意ある接続からトポロジの王座(ルートブリッジ)を死守するための必須防壁、「ルートガード(Root Guard)」の深淵を覗いていこう。
—
1. なぜルートブリッジが奪われるのか?(脅威のメカニズム)
まずは、現場で私たちが直面する悪夢のシナリオを共有しよう。
通常、STPが稼働するネットワークでは、最も優先度の高い(ブリッジIDが小さい)スイッチが「ルートブリッジ」に選出される。社内のコアスイッチが厳正な設計のもと、プライオリティ値(例: 0 や 4096)を低く設定されて王座に君臨しているはずだ。
しかし、次のようなヒューマンエラーやセキュリティインシデントが発生する。
- 野良スイッチの接続: 部署のフロアに赴任した若手が、自宅から適当に買ってきた安価なアンマネージドスイッチ(STPのプライオリティがデフォルトの
32768)を持ち込み、社内ポートと直結してしまう。 - 悪意ある介入(BPDU攻撃 / ルートハイジャック): 攻撃者がアクセスポートに不正なPCやスイッチを接続し、極端に低いブリッジIDを持つBPDU(Bridge Protocol Data Unit)を意図的に流し込む。
これを受信した既存のスイッチは、「おっ、あっちの方が優位なルートブリッジ様だ!」と勘違いしてしまう。その結果、トポロジの再計算(Topology Change)が走り、トラフィックのフローが激変。社内通信がすべて見ず知らずのポートへ吸い寄せられ、ネットワーク全体がブラックホール化、あるいは深刻なパケットロスに陥る。これがルートハイジャックの正体だ。
—
2. ルートガード(Root Guard)の仕様と通信フロー
この理不尽なハイジャックを防ぐために生み出されたのが、シスコシステムズをはじめとする多くのモダンなL2スイッチに実装されているルートガード(Root Guard)だ。
ルートガードの動作原理
ルートガードの役割は極めてシンプルかつ強烈だ。
「私がルートブリッジであるべきポート、あるいは正当なルートへのパスが存在するポートで、私より優位なBPDUを受信したら、そのポートを即座にブロック(隔離)する」
通常のSTPであれば、優位なBPDUを受信するとポートは「指定ポート(Designated Port)」としての役割を受け入れ、フォワーディング状態を維持してそちらへトラフィックを流し始める。しかし、ルートガードが有効なポート(Root Guard Enabled Port)でこれをやると、ポートの状態はRoot-Inconsistent(ルート不整合)という特殊なブロッキング状態に落とし込まれる。
状態遷移のシーケンス
[ 正当なコアスイッチ (Root) ]
│
│ (通常の優位なBPDU)
▼
[ 運用スイッチ (Root Guard有効) ] ◄─── [ 攻撃者 / 野良スイッチ ]
│ │
│ │ (より優位な詐称BPDU)
└─────────────────────────────────────┘
│
▼
【ルートガードが検知!】
「このポートから優位なBPDUが来たぞ!」
│
▼
ポートを 【Root-Inconsistent】 状態へ遷移
(トラフィックの送受信を遮断し、ネットワークを守る)
見事なのはここからだ。もしその不正なBPDUが送出されなくなると、ルートガードは自動的に「危険が去った」と判断し、ポートのブロックを解除して通常のフォワーディング状態へ復帰させる。手動で管理者が clear コマンドを叩く必要すらない、極めてスマートな自律防御機能なのだ。
—
3. 実務での設定例:Cisco IOS / Catalystスイッチの場合
では、実際のコンフィグレーションを見ていこう。
ルートガードは、基本的に「エンド端末が接続されるアクセスポート」や「外部の他社網・別拠点と接続する境界(エッジ)ポート」に対して適用するのが鉄則だ。コアスイッチ同士を接続する内部トランクポートにうっかり設定してしまうと、トポロジ変更時にネットワーク全体が分断される大惨事を引き起こすので注意してほしい。
以下は、アクセスレイヤまたはディストリビューションレイヤのスイッチにおける設定例だ。
! =====================================================================
! 設定対象: 外部の別フロアやパートナー企業との境界となるトランクポート (Gi0/1)
! =====================================================================
configure terminal
! 対象のインターフェースコンフィグレーションモードへ移行
interface GigabitEthernet0/1
description *** Connection to External Partner Switch ***
switchport mode trunk
! ルートガードを有効化(このポートから優位なBPDUを受信させない)
spanning-tree guard root
! (推奨)あわせてBPDUガードも有効化しておくとセキュリティがさらに強固になる
spanning-tree bpduguard enable
end
! 設定の保存
write memory
パラメーターのポイントと設計時の注意
spanning-tree guard root: これが今回の主役だ。指定したポートを「自分がルートの方向である」と固定し、そこから上位のBPDUが来たらシャットアウトする。- BPDUガード(
bpduguard)との違い: - BPDUガード: そのポートで「BPDU自体を一切受信したくない(純粋な端末用ポート)」場合に使う。BPDUを受信するとポートが
err-disabledになり、管理者が手動でshutdown/no shutdownするかerrdisable recoveryを設定しないと復旧しない。 - ルートガード: 「そっち側からスイッチが繋がること自体は許容する(あるいは上位の正当なスイッチがいる)が、そこから『俺がルートだ』という嘘の主張をさせない」場合に使う。危険が去れば自動復旧する点が最大の違いだ。
—
4. トラブルシューティング:ポートが Root-Inconsistent になったら?
現場で「突然、特定部門の通信ができなくなった!」というアラートを受け取ったとしよう。ログを確認すると、次のようなメッセージが出ているはずだ。
%SPANTREE-2-ROOTGUARD_BLOCK: Port GigabitEthernet0/1 blocked on VLAN0010 because of Root Guard.
このログを見つけたら、シニアエンジニアとしての腕の見せ所だ。慌てずに以下のステップでデバッグを進めよう。
ステップ1: ポートの状態を確認する
まずはどのポートが不整合状態に陥っているかを特定する。
# show spanning-tree inconsistentports
実行結果の例:
Name Interface Inaccessible VLAN
-------------------- ----------------- -----------------
VLAN0010 Gi0/1 10
Number of inconsistent ports (VLANs) in the system : 1
ステップ2: 原因の特定(誰が嘘のBPDUを流しているか)
該当ポートの先に何が接続されているのか、物理配線をたどるか、あるいはCDP/LLDP情報を確認する。
# show cdp neighbors GigabitEthernet0/1 detail
もしここに、本来接続されるべきではない機器(管理外のスイッチや、変な設定がされたルータ等)が表示されたらそれが犯人だ。
ステップ3: 復旧手順
基本的に、原因となっている不正な機器を物理的に切断するか、その機器のSTPプライオリティ値を正しく修正(コアスイッチより低くならないように設定)すれば、ルートガードは自動的に Root-Inconsistent 状態を解除し、ポートはフォワーディングに復帰する。
—
5. まとめ
ネットワークの安定性は、日々の地道なリスクヘッジの積み重ねの上に成り立っている。L2ループを防ぐためのSTPは非常に強力だが、その信頼性を逆手に取ったルートハイジャックは、ひとたび起きれば全社を巻き込む大障害に直結する。
今回解説したルートガードは、設定自体は一行のコマンド(spanning-tree guard root)で完結する非常にシンプルな機能だ。しかし、これを適切なエッジポートに正しく配置しているかどうかが、プロのネットワークエンジニアと素人の分かれ道となる。
あなたの管理するネットワークの境界線は、今日もしっかりと守られているだろうか? 今一度、コンフィグと物理配線を見直してみることを強くおすすめする。
コメント