FortiSwitch の STP 設定|FortiLink 配下の挙動とループ対策のポイント

  • URLをコピーしました!
目次

はじめに

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
end

BPDU 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
end

Cisco の 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 listdiagnose 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 要素を一致させる

以上、最後までお読みいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

関西を拠点に活動する、現役インフラエンジニア。経験20年超。

大手通信キャリアにて、中〜大規模インフラ(ネットワーク・サーバ・クラウド・セキュリティ)の設計・構築およびプロジェクトマネジメントに従事。現場で直面した技術課題への対処や、最新の脆弱性情報への実務対応を、一次情報として発信しています。

保有資格
CCIE Lifetime Emeritus(取得から20年以上)/ VCAP-DCA / Azure Solutions Architect Expert

▶ 運営者プロフィール(詳細)

目次