【実務・中級編】 BPDUフィルタ(BPDU Filter)の挙動とエッジポート制御 – インフラ・物理&L2/L3ネットワーク基礎実践ガイド

ネットワークの深淵へようこそ。数々の現場でルーティングループの轟音や、スパニングツリー(STP)の気まぐれなトポロジー変更に泣かされてきたシニアエンジニアの私だ。

今回は、スイッチングレイヤーの美学であり、時として諸刃の剣となる「BPDUフィルタ(BPDU Filter)」とエッジポート制御の挙動について、実務の現場で培った泥臭い知見を交えて徹底的に解説しよう。

Web APIの設計やモダンなクラウドインフラに慣れ親しんだエンジニアからすると、「L2の制御プロトコルなんてクラウドが勝手にやってくれる黒魔術だろ?」と思うかもしれない。しかし、オンプレミス環境やハイブリッドの境界、さらにはコンテナホストを収容する物理スイッチの足元で何が起きているかを知ることは、インフラエンジニアとしての生存戦略において極めて重要だ。

—

1. なぜBPDUフィルタが必要なのか?(背景と問題提起)

IEEE 802.1Dやその進化系であるRSTP(IEEE 802.1w)、MSTP(IEEE 802.s)は、ネットワークの冗長性を保つためにL2ループを検知・ブロックし続ける偉大なプロトコルだ。スイッチ同士が接続されるポートでは、お互いの生存確認とトポロジーの維持のために、BPDU(Bridge Protocol Data Unit)というコントロールフレームを数秒おき(デフォルトではHello Timeごとに)絶えず交換し合っている。

ここで考えてみてほしい。
スイッチのポートの先にあるのが、他のスイッチではなく「エンドユーザーのPC」や「仮想化基盤のハイパーバイザー(VLANトランクされたポート)」、あるいは「外部のWeb APIサーバー」だったらどうなるだろうか?

エッジ端末はBPDUの処理など求めていない。それどころか、以下のような実務上の深刻な問題を引き起こす。

1. セキュリティと無駄なトラフィック: サーバのNICが、意味不明なL2マルチキャストフレーム(BPDU)を延々と受信し、CPUに割り込みをかけられる。
2. 予期せぬトポロジー変動: サーバ側が万が一、ソフトウェアルータやブリッジソフトを動かしており、偶然BPDUに似たフレームや独自の制御パケットを返した場合、スイッチ側が「対向にスイッチが現れた」と誤認し、STPの計算が走り出してネットワークが数秒〜数十秒間ブラックアウトする。

こうした悲劇を防ぐために存在する神の機能が、ポートファースト(PortFast)であり、それをさらに推し進めたBPDUフィルタ(BPDU Filter)なのだ。

—

2. BPDUフィルタの基本挙動とポートファーストとの違い

「ポートファーストを有効にしているなら、それで十分じゃないか?」という質問をよく受ける。確かに、ポートファーストを有効にすると、ポートは接続と同時に即座に Forwarding 状態(リスニングやラーニングの遅延をスキップ)に移行する。

しかし、ポートファースト有効化後も、スイッチは対象ポートからBPDUの送信を続け、受信も受け付ける。ここがポイントだ。

BPDUフィルタを有効にすると、その挙動はさらにラディカルになる。実装(Cisco IOSやCisco NX-OS、各種ベンダーの実装)によって多少のニュアンスの違いはあるが、主に以下の2つのモード、あるいはグローバル/インターフェース単位の設定が存在する。

① グローバル設定でのBPDUフィルタ(PortFast連動型)

Cisco Catalystなどの世界では、グローバルコンフィグで spanning-tree portfast bpdufilter default を叩くと、PortFastが有効なすべてのポートで「BPDUを送信しない」状態になる。
ただし、もしそのポートにBPDUが入ってきた場合、そのポートはBPDUフィルタの呪縛を解かれ、通常のSTPポート(BPDUを送受信するポート)へと降格する。これは安全装置としての素晴らしい挙動だ。

② インターフェース個別設定でのBPDUフィルタ(強制型)

特定の物理ポートに対して直接 spanning-tree bpdufilter enable を投入した場合、そのポートは問答無用でBPDUの送信を停止し、受信したBPDUも一切無視(あるいはドロップ)する。
対向にスイッチが接続されていようが、ループが発生しようが、知らぬ存ぜぬを貫き通す。まさに「漢(おとこ)の中の漢」設定であり、誤ってループポートにこれを適用すると、L2ストーム(ブロードキャスト風暴)が発生してスイッチが昇天する。取り扱いには細心の注意が必要だ。

—

3. 通信フロー(シーケンス)で見るBPDUの運命

通常のポートと、BPDUフィルタが適用されたエッジポートで、パケットの往来がどう変わるのかをシーケンスで確認しておこう。

[スイッチ (Cisco)]                  [エッジ端末 / サーバ]
       |                                    |
       |--- STP: BPDU (Hello) ------------->| (通常ポートの場合:定期送信)
       |                                    |
       |--- (BPDU Filter有効化) ------------| 
       |                                    |
       |    (BPDUの送信を完全に停止)        |
       |                                    |
       |    [データ通信のみを高速許可]      |
       |<-- HTTP / API Request / etc. ------|
       |----------------------------------->|

エッジポートにBPDUフィルタが適用されている場合、スイッチは定期的なBPDUの送出をピタッと止める。これにより、サーバ側のOSや仮想化スイッチ(Open vSwitchなど)のログが不要なL2制御パケットで汚染されるのを防ぐことができるのだ。

—

4. 実務で直面するトラブルシューティングと設定例

では、実際のネットワーク機器における設定例を見ていこう。今回はインフラ現場のデファクトスタンダードであるCisco IOSのCLI構文をベースに解説する。

実務設定サンプル(Cisco IOS)

! --- 対象のアクセスポート(サーバー接続用)の設定 ---
interface GigabitEthernet0/1
 description === Connected to Web API Production Server 01 ===
 switchport mode access
 switchport access vlan 100
 !
 ! ポートファーストを有効化し、接続と同時にフォワード状態にする
 spanning-tree portfast
 !
 ! BPDUフィルタを明示的に有効化(BPDUの送受信を完全にブロック)
 spanning-tree bpdufilter enable
 !
 ! (参考)万が一の誤接続によるループを防ぐためのBPDUガードも併用が鉄則
 spanning-tree bpduguard enable

ここで、シニアエンジニアとしての重要な実務Tipsを一つ。
「BPDUフィルタを使うなら、セットでBPDUガード(BPDU Guard)の挙動を理解しておけ」ということだ。

個別ポートに spanning-tree bpdufilter enable をかけると、対向からBPDUが来ても無視してしまうため、STPの保護機能が働かない。もし作業ミスでそのポートに別のスイッチが接続されてループが起きた場合、STPが機能せずにネットワークが崩壊する。
そのため、一般的なベストプラクティスとしては、エッジポートには spanning-tree portfast と spanning-tree bpduguard default(グローバル)、あるいはポート単位のBPDUガードを組み合わせるのが定石だ。
(※なお、Ciscoでは bpduguard と bpdufilter を同時に有効にした場合、bpduguard が優先される実装になっていることが多いが、ベンダーやOSバージョンによって挙動の優先順位が異なるため、必ずラボ環境で検証してほしい。)

—

5. クラウド・コンテナ時代におけるBPDUフィルタの意義

「今はAWSやKubernetesの時代なのに、なぜ今さらL2のBPDUなのだ?」と思われるかもしれない。
しかし、オンプレミス環境のデータセンター、あるいはベアメタルサーバー上に構築したKubernetesクラスターのCNI(Container Network Interface)が物理スイッチと直接L2接続されている場合、意図しないブリッジング構成によってBPDU起因のトラブルが今でも発生する。

例えば、開発者がローカルの検証用Linux機に安価なL2スイッチを噛ませ、それを社内ネットワークのフロアスイッチに接続したとする。その際、Linux側で bridge-utils や NetworkManager が有効になっていると、意図せずBPDU(STPパケット)を生成してアップリンク側に流してしまうことがある。

ここで適切なエッジポート制御とBPDUフィルタ、BPDUガードが効いていれば、スイッチは瞬時にそのポートを err-disabled(エラーディスエーブル)状態に落とし、社内ネットワーク全体への波及を未然に防ぐことができる。

—

6. まとめ

BPDUフィルタは、一見すると「不要なパケットを間引くための地味な最適化設定」に思えるかもしれない。しかし、その裏側では、L2ループというネットワークの古くからの悪夢を防ぎ、エンドデバイスのクリーンな通信環境を担保するための重要な防衛ラインとして機能している。

インフラエンジニアたるもの、上位レイヤーのAPIやコンテナのオーケストレーションだけでなく、足元のL2レイヤーでパケットがどのように息をしているのか、その挙動を解像度高く把握しておいて損はない。

障害対応の現場で冷や汗をかく前に、今一度、手元のスイッチのポート設定を見直してみてはいかがだろうか。

コメント

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