はじめに
FortiSwitch で STP を設定しようとすると、単体運用と FortiGate 管理(FortiLink)で設定する場所が異なり、Cisco とはコマンド体系も違うため、どこから手をつけるか迷うことがあります。本記事は、FortiSwitch の STP を、対応モードと管理形態の整理から、基本設定・ループ対策・確認まで通して解説します。STP の仕組み自体は、関連記事『スパニングツリー(STP)とは|仕組みと RSTP・MSTP の違い』も参照してください。
- FortiSwitch が対応する STP モードと既定の挙動
- 単体運用と FortiGate 管理(FortiLink)での設定場所の違い
- エッジポートと各ガードによるループ対策
- 設定の確認とトラブルの切り分け
要点を先に示すと、FortiSwitch の STP は MSTP をベースとし、STP/RSTP と後方互換です。設定は、スイッチ単体(FortiSwitchOS)で行う場合と、FortiGate 管理(FortiLink)で FortiGate 側から行う場合とで場所が異なります。ループ対策は、エッジポートの指定と BPDU ガード・ループガードが中心になります。
FortiSwitch の STP モードと管理形態
対応モード(RSTP / MSTP)と既定の挙動
FortiSwitch は STP・RSTP・MSTP に対応します。実装は MSTP をベースとしており、MSTP は RSTP の上に構築されているため、STP / RSTP の機器とも同じ L2 ネットワーク内で共存できます。
参考: Fortinet — FortiSwitch Configuring STP settings
“MSTP is backward-compatible with STP and Rapid Spanning Tree Protocol (RSTP).”
(MSTP は STP および RSTP と後方互換である)
https://docs.fortinet.com/document/fortiswitch/7.6.5/fortilink-guide/173292/configuring-stp-settings
MSTP がベースであるため、リージョン(名前・リビジョン番号・VLAN-instance マッピング)の考え方は Cisco の MST と共通です。リージョン内で BPDU を送出するのは IST のみ、という挙動も同じです。MST のリージョン設計の詳細は、関連記事『Cisco MST の設定とリージョン設計|インスタンスと負荷分散のポイント』を参照してください。
なお、RPVST+(Rapid PVST+)が動作するネットワークとの相互接続は、FortiOS 6.4.2(FortiGate 管理)/FortiSwitchOS 6.2.2(単体)以降で、拡張リージョンとして対応しています。ただし、この RPVST+ 相互接続は既定では無効です。別リージョンや STP/RSTP の BPDU を受け取るポートは境界ポートとして扱われ、相手に合わせて送出する BPDU のバージョンが切り替わります。
単体運用と FortiGate 管理(FortiLink)の違い
FortiSwitch の STP 設定は、運用形態によって設定する場所が変わります。
単体運用(FortiSwitchOS): スイッチ自身で設定します。CLI では config switch stp settings系、GUI では Switch > STP のメニューが該当します。
FortiGate 管理(FortiLink): FortiGate 側から設定します。CLI では config switch-controller配下、GUI では WiFi & Switch Controller のメニューが該当します。
実際のコマンドは、FortiOS/FortiSwitchOS のバージョンや管理形態で異なります。本記事では、各設定の具体コマンドを以降の節で Fortinet 公式ドキュメントに沿って示します。設定に入る前に、まず対象が単体運用か FortiGate 管理かを確認することが、迷わないための起点になります。

STP の基本設定(有効化・モード・リージョン)
FortiSwitch の STP 設定は、管理形態によってコマンドの体系が変わります。ここでは FortiGate 管理(FortiLink)と単体運用に分けて示します。いずれの形態でも、MSTP のリージョン(名前・リビジョン・VLAN-instance マッピング)を相互接続するスイッチ間で揃える点は共通です。
FortiGate 管理(FortiLink)の場合
FortiGate 側で、グローバルな STP 設定とインスタンスのマッピングを設定します。グローバル設定は config switch-controller stp-settingsで、有効化・リージョン名・リビジョン・各タイマーを指定します。
config switch-controller stp-settings
set status enable
set name REGION1
set revision 1
end(参照: FortiGate CLI Reference — config switch-controller stp-settings — https://docs.fortinet.com/document/fortigate/7.4.4/cli-reference/338809026/config-switch-controller-stp-settings )
VLAN をインスタンスへ割り当てるには config switch-controller stp-instanceを使い、インスタンス ID ごとに vlan-rangeで VLAN を指定します。vlan-rangeには、FortiGate 上で定義した VLAN インターフェース名を指定します。
config switch-controller stp-instance
edit "1"
set vlan-range vlan10 vlan20
next
end個別のスイッチやポートで設定を上書きする場合は、config switch-controller managed-switch配下の config portsで、ポートごとに stp-stateなどを指定します。
注意点として、FortiSwitch Release 3.4.2 以降、非 FortiLink ポートでは STP が既定で有効になっています。一方、FortiGate と FortiSwitch を結ぶ FortiLink トランク自体は STP の対象外で、FortiLink は独自の仕組みでループを扱います。そのため、STP を意識するのは FortiSwitch のダウンリンク側(非 FortiLink ポート)になります(参照: Fortinet — FortiSwitch Configuring STP settings — https://docs.fortinet.com/document/fortiswitch/7.6.5/fortilink-guide/173292/configuring-stp-settings )
単体運用(FortiSwitchOS)の場合
スイッチ単体で運用する場合は、FortiSwitch 自身で設定します。CLI では、グローバル設定を config switch stp settings、インスタンスを config switch stp instance、ポートごとの有効化を config switch interface配下の set stp-state enabledで指定します。GUI では Switch > STP > Settings でリージョン名・リビジョン・タイマーを、Switch > STP > Instances でインスタンスごとのプライオリティと VLAN マッピングを設定します。
FortiSwitch は、1 つのリージョンあたり最大 15 個の MST インスタンス(ID は 1〜15)に対応します。ブリッジプライオリティは 4096 刻み(0〜61440)で指定します。これらの値や上限はモデルや FortiSwitchOS のバージョンで異なる場合があるため、設定前に対象機の Administration Guide で確認することをおすすめします。
エッジポートとループ防止機能(BPDU Guard・Root Guard・Loop Guard)
FortiSwitch でも、エッジポートの指定と各ガードによってループや不正接続を防ぎます。ここでは FortiGate 管理(FortiLink)でのポート設定を中心に示します。単体運用の場合は、config switch interface配下の同等の設定に読み替えてください。
エッジポート
端末を接続するポートは、エッジポートとして指定します。エッジポートの指定は、後述する BPDU Guard を使うための前提にもなります。
config switch-controller managed-switch
edit <FortiSwitch-シリアル>
config ports
edit "port1"
set edge-port enable
set stp-state enabled
next
end
next
endBPDU Guard
BPDU Guard は、エッジポートで BPDU を受信したときに、そのポートを一定時間ダウンさせる機能です。使うには、対象ポートをエッジポートにし、ポートとグローバルで STP を有効にしておく必要があります。
config switch-controller managed-switch
edit <FortiSwitch-シリアル>
config ports
edit "port1"
set stp-bpdu-guard enabled
set stp-bpdu-guard-timeout 5
next
end
next
endポートがダウンする時間は stp-bpdu-guard-timeoutで指定し、既定は 5 分、最大は 120 分です。値を 0 にすると、BPDU を受信してもポートは自動ではダウンせず、手動でのリセットが必要になります。状態は diagnose switch-controller switch-info bpdu-guard-status <FortiSwitch-シリアル>で、ポートごとの状態・タイムアウト・カウントを確認できます。
Cisco の BPDU Guard が err-disable でポートを落とし、復旧に手動操作または errdisable recoveryを要するのに対し、FortiSwitch はタイムアウト時間が経過するとポートが自動的に戻る点が異なります。Cisco 側の挙動は関連記事『Cisco BPDU Guard で err-disable になる原因|復旧の手順』を参照してください。
Root Guard
Root Guard は、指定したポートがルートへの経路にならないように保護する機能です。ルートブリッジにすべきでない方向のポートに設定します。ルートポートには設定しません。
参考: Fortinet — Configuring STP and loop guard on managed FortiSwitch ports
“superior BPDUs received on that interface are ignored or dropped.”
(そのインターフェースで受信した上位 BPDU は無視または破棄される)
https://docs.fortinet.com/document/fortiswitch/7.6.4/fortilink-guide/801175/configuring-dhcp-blocking-stp-and-loop-guard-on-managed-fortiswitch-ports
config switch-controller managed-switch
edit <FortiSwitch-シリアル>
config ports
edit "port24"
set stp-root-guard enabled
next
end
next
endCisco の Root Guard が上位 BPDU の受信で root-inconsistent としてブロックするのに対し、FortiSwitch は上位 BPDU を無視・破棄してそのポートがルートへの経路になるのを防ぎます。いずれも「想定外の機器がルートになるのを防ぐ」という目的は共通です。
Loop Guard
Loop Guard は、ポートが下流のループを監視し、ループを検知して防ぐ機能で、STP と連携して動作します。既定では全ポートで無効です。ルート・代替・バックアップなどの非指定ポートで有効にすることが推奨されています。
config switch-controller managed-switch
edit <FortiSwitch-シリアル>
config ports
edit "port23"
set loop-guard enabled
set loop-guard-timeout 10
next
end
next
end
設定の確認とトラブル切り分け
FortiGate 管理(FortiLink)の場合、確認は FortiGate 側から行います。STP の状態は diagnose switch-controller switch-info stp <FortiSwitch-シリアル>で、BPDU Guard の状態は diagnose switch-controller switch-info bpdu-guard-status <FortiSwitch-シリアル>で確認できます。
# diagnose switch-controller switch-info bpdu-guard-status <FortiSwitch-シリアル>
Managed Switch : <FortiSwitch-シリアル>
Portname State Status Timeout(m) Count Last-Event
________ _______ ______ __________ _____ __________
port1 enabled - 10 0 -
port2 disabled - - - -State が enabledのポートで BPDU Guard が有効になっており、Count や Last-Event で発動の有無を確認できます。FortiSwitch のコンソールから直接確認する場合は、diagnose stp instance listや diagnose stp mst-config listなどが使えます(FortiSwitchOS のバージョンによってコマンド体系が異なる場合があります)。
切り分けでは、ポートがブロックやダウンに至った理由を、BPDU Guard(エッジポートへの BPDU 到来)・Root Guard(上位 BPDU の無視)・ネイティブ VLAN や許可 VLAN の不一致・ループのいずれかに整理します。なお FortiLink 管理では、FortiGate(またはルートとなる FortiSwitch)が STP のルートになる構成が基本です。下流の機器が予期せずルートになると、経路が最適化されないことがあります。
よくある注意点
FortiSwitch の STP で踏みやすい点を整理します。
FortiLink トランクは STP の対象外
FortiGate と FortiSwitch を結ぶ FortiLink トランク自体は STP を流しません。STP を意識するのは、FortiSwitch のダウンリンク側(非 FortiLink ポート)です。ループ対策は、FortiLink 側の仕組みと、ダウンリンクでの STP・各ガードを分けて考えると整理しやすくなります。
Cisco / MST との相互接続はリージョンの 3 要素を一致させる
FortiSwitch は MSTP をベースとするため、Cisco の MST と相互接続するには、リージョン名・リビジョン番号・VLAN-instance マッピングを一致させる必要があります。設計の考え方は、関連記事『Cisco MST の設定とリージョン設計|インスタンスと負荷分散のポイント』を参照してください。RPVST+ ネットワークとの相互接続は既定で無効のため、必要な場合に有効化し、CIST ルートの位置に応じたプライオリティ設計のルールに従います。
ネイティブ VLAN の不一致に注意する
トランクのネイティブ VLAN が両端で食い違うと、STP の不整合や予期しないブロックの原因になります。特に Cisco と接続する場合、Cisco 側では PVID 不整合として検知されます。Cisco 側の挙動は、関連記事『Cisco PVID Inconsistent の原因|ネイティブ VLAN 不一致の対処』を参照してください。
まとめ
FortiSwitch の STP は MSTP をベースとし、単体運用と FortiGate 管理(FortiLink)で設定場所が変わる点を押さえると、設定とトラブル切り分けが進めやすくなります。本記事では、モードと管理形態から、基本設定・ループ対策・確認までを整理しました。
- FortiSwitch の STP は MSTP ベースで、STP/RSTP と後方互換
- 設定は単体(FortiSwitchOS)と FortiGate 管理(FortiLink)で場所が異なる
- FortiGate と FortiSwitch 間の FortiLink トランクは STP の対象外
- ループ対策はエッジポート指定と BPDU Guard・Root Guard・Loop Guard
- BPDU Guard はタイムアウト経過でポートが自動復帰し、既定は 5 分
- 確認は diagnose switch-controller switch-info の stp と bpdu-guard-status
- Cisco の MST と相互接続するにはリージョンの 3 要素を一致させる
以上、最後までお読みいただきありがとうございました。
