こんにちは!ネットワークの世界へようこそ。インフラアーキテクトの私です。
日々のインフラ構築や運用、本当にお疲れ様です。スイッチの電源を入れてケーブルを挿せば、魔法のように通信ができるイーサネットの世界ですが、その裏側ではネットワークの平和を守るためのさまざまな「番人たち」が働いています。
今回は、そんな番人のひとりである「BPDUガード(BPDU Guard)」について、一緒に優しく紐解いていきましょう。「名前からして何やら難しそう…」と思うかもしれませんが、一歩ずつ身近な例えから見ていけば、すぐに「なるほど!」と腑に落ちるはずです。それでは、さっそく世界を覗いてみましょう!
—
1. なぜスイッチの世界には「番人」が必要なのか?
皆さんは、オフィスや学校のデスクの下にある小さなスイッチングハブや、壁のLANポートを思い浮かべてみてください。あれらは通常、パソコンやIP電話といった「端末(エンドユーザーの機器)」が接続される場所ですよね。ネットワークの世界では、こうした端末が繋がるポートのことを「エッジポート」と呼びます。
エッジポートの役割はシンプルです。「そこにつながっているパソコンとだけ通信すること」。ほら、おうちの玄関のようなものです。
ここで、少し想像してみてください。もし、誰かが悪意を持って(あるいはうっかりミスで)、そのオフィスのデスクの下のLANポートに別の謎のネットワークスイッチをケーブルで繋いでしまったら、何が起きるでしょうか?
郵便配達のパニックに例えてみよう
ネットワークの通信は、いわば「郵便配達」に似ています。スイッチは郵便局の仕分け人です。
通常、エッジポート(玄関)には「手紙(データ)を出す人や受け取る人(パソコン)」だけがいてほしいのです。
ところが、そこに突然「別の小さな郵便局(勝手に持ち込まれたスイッチ)」が接続されたとします。その小さな郵便局が、勝手に独自の配達ルール(スパニングツリープロトコル:STPのBPDUという制御メッセージ)を大声で叫び始めると、どうなるでしょう?
「おい!こっちの道の方が早いから、みんなこっちを通れ!」
「いや、こっちが正解ルートだ!」
元々きちんと秩序が保たれていたオフィスのネットワーク全体で、郵便局同士の主導権争いが始まり、手紙がぐるぐると同じ場所を回り続ける「ルーピング(通信の嵐)」が発生してしまいます。結果、ネットワーク全体がフリーズし、「ネットが繋がらない!」と大パニックになるわけです。
こんな悲劇を防ぐために登場するのが、今回主役の「BPDUガード」という強力なセキュリティ機能なんです。
—
2. BPDUガードの仕組みと「エラーディセーブル」
では、BPDUガードは具体的にどうやってネットワークを守るのでしょうか?
基本のルールはとてもシンプルです。
「ここはエッジポート(パソコンが繋がるべき場所)だから、外のスイッチから届くはずのない制御メッセージ(BPDU)が流れてきたら、即座にこのポートをシャッターを下ろして封鎖する!」
この「シャッターを下ろしてポートを完全に無効化する状態」のことを、ネットワークの業界用語で「エラーディセーブル(Err-disabled)状態」と呼びます。
エッジポートに間違えてスイッチが接続された瞬間、BPDUガードがそれを検知し、瞬時にそのポートをピタッと止める。これにより、ネットワーク全体がループの渦に巻き込まれるのを未然に防いでくれるのです。まさに、オフィスの平和を守る優秀な警備員ですよね。
—
3. 実務で設定してみよう!Ciscoスイッチでの具体例
「理屈は分かったけれど、実際の設定はどうやるの?」という方のために、ネットワーク機器で圧倒的なシェアを誇るCisco Catalystスイッチを例に、実際のCLI設定を見ていきましょう。
実務では、エンドユーザーが繋がるアクセスポートに対して「ここはエッジポートですよ」と教える設定(spanning-tree portfast)とセットでBPDUガードを有効にするのが定番のベストプラクティスです。
以下の設定例を参考にしてみてください。
! 1. 特権EXECモードに移動します
enable
! 2. グローバルコンフィギュレーションモードに移動します
configure terminal
! 3. スイッチ全体で「ポートファーストが有効なポートに、うっかりBPDUが来たら即座にポートを落とす」機能を有効にします
spanning-tree portfast default
spanning-tree portfast bpduguard default
! 4. 個別のポート(ここではFastEthernet 0/1)に対して個別にエッジポート設定とBPDUガードを適用する場合の書き方
interface FastEthernet0/1
description ユーザー端末接続用ポート
switchport mode access
spanning-tree portfast
spanning-tree bpduguard enable
! 設定を保存します
end
write memory
このように設定しておけば、もし誰かがポート FastEthernet0/1 に勝手なスイッチを接続してBPDUを送信してきた場合、スイッチは次のようなログをシステムに残し、ポートを自動的にシャットダウン(エラーディセーブル)します。
%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-disabled state
コンソールにこのログが出たら、「おっ、誰かがエッジポートにスイッチを挿したな?」とすぐに特定できるわけですね。
—
4. トラブルシューティングの現場から:もしポートが落ちてしまったら?
現場でよくあるのが、「総務部の〇〇さんが、自分のデスクの下の配線を綺麗にしようと、Amazonで買った安価なハブを勝手に挿したら、その周辺のネットが全部繋がらなくなった!」というお問い合わせです。
現地に駆けつける(あるいはリモートで確認する)と、そのポートがエラーディセーブル状態になっています。
復旧の手順は以下の通りです:
1. まず、原因となっている不正な機器(勝手に持ち込まれたスイッチやハブ)を物理的に取り外します。(これ最重要です!)
2. ポートの電源を一度入れ直すか、管理コマンドでリセットします。
コマンドで手動復旧させる場合は、対象のインターフェースモードに入って以下のように再起動(shutdownからのno shutdown)を行います。
! コンフィギュレーションモードへ移動
configure terminal
! 該当のポートを指定
interface FastEthernet0/1
! 一度ポートを完全にシャットダウン
shutdown
! 数秒待ってから、再度ポートを有効化(これでエラーディセーブル状態が解除されます)
no shutdown
end
【プロの裏技】自動復旧(Err-disable Recovery)の設定
「遠隔地の拠点だから、わざわざ現地に行かずに勝手に復旧してほしい!」という場合は、一定時間経ったら自動的にポートを復活させる機能もあります。ただし、原因の機器が繋がったままだとループが再発するため、利用には少し注意が必要です。
! エラーディセーブルになったポートを、300秒(5分)後に自動で復旧させる設定
errdisable recovery cause bpduguard
errdisable recovery interval 300
—
まとめ
今回は、ネットワークの安全を守る「BPDUガード」について解説しました。
- エッジポート(端末用の出口)に不正なスイッチが接続されるのを防ぐ
- 怪しい制御メッセージ(BPDU)を検知すると、瞬時にポートをエラーディセーブル(封鎖)する
- ネットワーク全体の致命的なループ(通信障害)を未然に食い止める
日々のインフラ運用において、こうしたセキュリティ機能の積み重ねが、巨大で安定したネットワーク基盤を支えています。「なんだか難しそう」と感じていた方も、こうして役割や例えで見ていくと、ネットワークの仕組みがぐっと身近に感じられるのではないでしょうか?
それでは、また次回の深淵でお会いしましょう。快適なネットワークライフを!
コメント