FortiGate の BGP 設定手順|config router bgp と SD-WAN 連携

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

はじめに

FortiGate(FortiOS)は、CLI と GUI の両方で BGP を設定でき、SD-WAN や ADVPN(Auto Discovery VPN)の経路制御に BGP を組み合わせる構成が広く使われています。FortiOS の BGP は、eBGP / iBGP からフィルタ、経路属性の操作まで一通りそろった実装です。

本記事では、FortiGate(FortiOS 7.x を基準)の BGP 設定手順を、CLI を中心に GUI 操作も交えて整理します。

この記事でわかること
  • config router bgp と GUI(Network > BGP)の対応
  • config neighbor / config network による eBGP の基本設定
  • network-import-check の挙動と、広告されないときの対処
  • prefix-list / route-map によるフィルタと iBGP の注意点
  • SD-WAN / ADVPN での動的ピアリングと確認コマンド

結論を先に示すと、FortiGate の BGP は config router bgp を起点に設定します。広告経路は config network で指定しますが、既定では network-import-check が有効で、対象がルーティングテーブルに完全一致で存在しないと広告されません。ただし FortiGate ではこの動作をグローバルまたはプレフィックス単位で無効化でき、SD-WAN との統合と動的ピアリングが扱いやすい点が特徴です。

BGP の基礎概念(AS、eBGP / iBGP、経路選択)は、『BGP とは|eBGP と iBGP の違いと経路選択の基礎』で解説しています。本記事は FortiGate の設定手順に絞ります。

FortiGate BGP 設定の全体像(CLI と GUI)

FortiGate の BGP は CLI と GUI のどちらでも設定でき、両者は同じ設定項目に対応します。まず全体像を押さえます。

config router bgp と Network > BGP の対応

CLI では config router bgp 配下に AS 番号・ネイバー・広告経路を記述します。GUI では Network > BGP の画面で同じ項目を設定します。

要素CLIGUI(Network > BGP)
AS 番号set as <AS番号>Local AS
Router-IDset router-id <ID>Router ID
ネイバーconfig neighbor 配下の set remote-asNeighbors
広告経路config network 配下の set prefixNetworks

GUI は項目が整理されていて把握しやすい一方、SD-WAN 連携や network-import-check の細かな制御は CLI のほうが扱いやすいため、本記事は CLI を中心に解説します。

AS 番号・ネイバー・広告経路・フィルタの 4 要素

基本的な eBGP の設定は、次のような骨格になります。

config router bgp
    set as 65001
    set router-id 1.1.1.101
    config neighbor
        edit "10.1.1.1"
            set remote-as 65000
        next
    end
    config network
        edit 1
            set prefix 1.1.1.0 255.255.255.0
        next
    end
end

config neighborset remote-as が自局の set as と異なれば eBGP、同じであれば iBGP になります。フィルタ(prefix-list / route-map など)は、config neighbor 配下で set prefix-list-in/set prefix-list-outset route-map-in/set route-map-out として方向ごとに適用します。各要素の詳細は次のセクションから順に見ていきます(公式: https://docs.fortinet.com/document/fortigate/7.2.0/cli-reference/565620/config-router-bgp

eBGP の基本設定(CLI)

異なる AS の機器と eBGP を確立する手順を、CLI を中心に見ていきます。

config neighbor でセッションを張る

BGP プロセスに AS 番号と Router-ID を設定し、config neighbor でネイバーを定義します。

config router bgp
    set as 65001
    set router-id 1.1.1.101
    config neighbor
        edit "10.1.1.1"
            set remote-as 65000
        next
    end
end

set remote-as の AS が自局の set as と異なるため、これは eBGP です。IPsec トンネルやループバック経由でピアを張る場合は、送信元を固定する set update-source <インターフェイス> を併用します。間にルーターを挟む(直結でない)eBGP では、set ebgp-multihop-ttl <TTL> でホップ数を緩和します。

参考: config router bgp(FortiOS CLI リファレンス)
https://docs.fortinet.com/document/fortigate/7.2.0/cli-reference/565620/config-router-bgp

config network で経路を広告する

広告する経路は config network で指定します。set prefix には IP アドレスとネットマスクを指定します。

config router bgp
    config network
        edit 1
            set prefix 1.1.1.0 255.255.255.0
        next
    end
end

複数の経路をまとめて載せたい場合は config redistribute(connected/static/ospf など)を、集約広告には config aggregate-address を使います。redistribute は意図しない経路まで載りやすいため、route-map での絞り込みと併用するのが安全です。

network-import-check の挙動(完全一致前提と上書き)

FortiGate の config network で広告がうまくいかないとき、まず確認したいのが network-import-check です。

この設定が既定の enable の場合、config network で指定したプレフィックスは、ルーティングテーブルに完全一致で存在しないと広告されません。 これは FortiOS 固有の仕様ではなく、BGP の network 広告の基本動作です。直結・スタティック・IGP 学習のいずれかで、マスク長まで一致する経路が RIB に載っている必要があります。

FortiGate の特徴は、この動作を無効化できる点です。set network-import-check disable にすると、ルーティングテーブルに経路がなくてもプレフィックスを広告します。グローバルだけでなく、プレフィックス単位で上書きすることもできます。

config router bgp
    set network-import-check enable
    config network
        edit 1
            set prefix 10.1.0.0 255.255.255.0
            set network-import-check disable
        next
    end
end

この例では、グローバルで enable(完全一致を要求)としつつ、10.1.0.0/24 だけは disable で上書きし、ルーティングテーブルに存在しなくても広告します(公式: https://docs.fortinet.com/document/fortigate/7.0.0/new-features/25435/allow-per-prefix-network-import-checking-in-bgp-7-0-4

経路が広告されないときは、get router info routing-table all で対象経路が RIB に載っているかを確認し、必要に応じて network-import-check の設定を見直します。

経路フィルタリング(prefix-list / route-map)と iBGP

送受信する経路の絞り込みと属性操作は、prefix-list と route-map を定義し、ネイバー単位で方向ごとに適用します。

prefix-list と route-map を定義する

プレフィックス単位の許可・拒否は config router prefix-list で定義します。

config router prefix-list
    edit "ALLOW"
        config rule
            edit 1
                set prefix 192.168.1.0 255.255.255.0
                set action permit
            next
        end
    next
end

複数条件の組み合わせや属性操作には config router route-map を使います。set match-ip-address で対象を絞り、set set-local-preference などで属性を操作します。

config router route-map
    edit "LP-IN"
        config rule
            edit 1
                set match-ip-address "ALLOW"
                set set-local-preference 200
            next
        end
    next
end

ネイバーへ in / out で適用する

定義したフィルタは、config neighbor 配下で方向ごとに適用します。

config router bgp
    config neighbor
        edit "10.1.1.1"
            set remote-as 65000
            set prefix-list-out "ALLOW"
            set route-map-in "LP-IN"
        next
    end
end

prefix-list のほかに、ACL ベースの distribute-list-in/distribute-list-out、AS-PATH ベースの filter-list-in/filter-list-out も同様にネイバー配下で指定できます。なお、FortiGate は route refresh が既定で有効なため、フィルタを変更してもセッションを切る必要がなく、数分で自動的に反映されます。 手動で反映する場合は execute router clear bgp ip <対向IP> soft を使います。

iBGP の設定(next-hop-self / update-source / ルートリフレクタ)

iBGP は set remote-as に自局と同じ AS を指定します。安定性のためループバック間でピアを張り、update-source を指定するのが一般的です。

config router bgp
    config neighbor
        edit "2.2.2.2"
            set remote-as 65001
            set update-source "loopback0"
            set next-hop-self enable
        next
    end
end

next-hop-self を有効にすると、eBGP で学習した経路を iBGP へ渡す際に NEXT-HOP が自分のアドレスに書き換わり、AS 内から到達可能になります。iBGP の再広告制約(フルメッシュが必要になるルール)を解消するルートリフレクタは、RR 側のネイバーに set route-reflector-client enable を指定します(クライアント側に特別な設定は不要です)。

config router bgp
    config neighbor
        edit "3.3.3.3"
            set remote-as 65001
            set route-reflector-client enable
        next
    end
end

iBGP やルートリフレクタの概念は、『BGP とは|eBGP と iBGP の違いと経路選択の基礎』でも解説しています。

SD-WAN / ADVPN での BGP

FortiGate の強みは、BGP と SD-WAN / ADVPN を組み合わせた経路制御です。ここでは要点を整理します。

neighbor-group と neighbor-range による動的ピアリング

多数の拠点(スポーク)ごとに config neighbor を個別定義するのは現実的ではありません。FortiGate では config neighbor-group でピアの共通設定をまとめ、config neighbor-range で対象アドレス範囲を指定することで、範囲内から接続してきたピアと動的に BGP を確立できます。

config router bgp
    set as 65001
    config neighbor-group
        edit "spokes"
            set remote-as 65001
            set route-reflector-client enable
        next
    end
    config neighbor-range
        edit 1
            set prefix 10.254.0.0 255.255.255.0
            set neighbor-group "spokes"
        next
    end
end

ADVPN と組み合わせる場合、ハブとスポークの間は iBGP で構成し、ハブをルートリフレクタにする設計が基本です。FortiOS 7.4.1 以降では、ADVPN ショートカットの確立を契機にスポーク間で動的に BGP ネイバーを張る方式も選べます。

SD-WAN との連携(SLA に応じた経路制御)

SD-WAN と BGP を組み合わせると、リンクの SLA(遅延・損失など)の状態に応じて広告する経路を変えられます。代表的な構成は、SLA を満たすときと満たさないときで異なる route-map やコミュニティを広告し、受信側でルートタグに変換して SD-WAN ルールの振り分けに使う方法です。

  • SLA 正常時は route-map-out-preferable、SLA 逸脱時は route-map-out を適用し、異なるコミュニティを広告する。
  • ハブ側でコミュニティをルートタグに変換し、SD-WAN サービスルールで出力インターフェイスを選択する。
  • FortiOS 7.6.1 以降では、スポークの SD-WAN メンバー優先度を BGP MED に対応づけ、ハブ経由の経路選択に反映できる。

詳細は構成規模により異なるため、公式の該当ガイドを参照してください(公式: https://docs.fortinet.com/document/fortigate/7.2.0/administration-guide/256748/controlling-traffic-with-bgp-route-mapping-and-service-rules

確認コマンドとトラブルシューティング

状態と経路の確認コマンド

設定後の確認は、get router info bgp 系コマンドが基点です。

コマンド表示内容
get router info bgp summaryネイバー一覧と確立状態(State/PfxRcd)
get router info bgp neighbors <対向IP>ネイバーの詳細(BGP state、capabilities)
get router info bgp networkBGP テーブル(* 有効経路、> ベストパス)
get router info bgp neighbors <IP> advertised-routes対向へ広告中の経路
get router info bgp neighbors <IP> routes受信し採用した経路(受信ポリシー適用後)
get router info bgp neighbors <IP> received-routes受信した全経路(要 soft-reconfiguration enable)

received-routes を使うには、対象ネイバーに set soft-reconfiguration enable を設定しておく必要があります。フィルタ前の経路を確認したい場合の前提です。

ネイバーが確立しないとき

get router info bgp summary で State が Established にならない場合は、下位レイヤから切り分けます。

  • L3 到達性: execute ping <対向IP>(ループバックピアでは送信元インターフェイスに注意)で確認する。
  • TCP/179: diagnose sniffer packet any 'tcp and port 179' 4 で、TCP/179 のパケットが双方向に流れているかを確認する。ファイアウォールポリシーやローカルイン(local-in)ポリシーでの遮断にも注意する。
  • 設定の整合: set remote-as の AS 番号、set router-id の重複、set update-source の指定を確認する。

経路が広告・受信されないとき

ネイバーが Established なのに経路が流れない場合は、次の順で確認します。

  • 広告されない: get router info routing-table all で広告対象が完全一致で存在するかを確認し、config network のプレフィックスと network-import-check の設定を見直す。
  • 受信したのに使われない: NEXT-HOP に到達できているかを確認する。iBGP 経由では next-hop-self の設定漏れが典型原因。
  • フィルタの影響: prefix-list / route-map の方向(in / out)と内容を確認する。FortiGate は route refresh が既定で有効なため、修正後は数分で反映される。

まとめ

FortiGate(FortiOS)の BGP は、config router bgp を起点に CLI / GUI の両方で設定できます。広告されない原因の多くは network-import-check の完全一致前提に、受信経路が使われない原因の多くは iBGP の NEXT-HOP にあります。SD-WAN / ADVPN との連携が扱いやすい点が、FortiGate の特徴です。

  • FortiGate の BGP は config router bgp を起点に CLI / GUI で設定
  • 広告は config network、既定の network-import-check は RT 完全一致が前提
  • network-import-check はグローバル・プレフィックス単位で無効化可能
  • iBGP は next-hop-self と update-source、再広告制約に注意
  • フィルタは prefix-list / route-map をネイバーに in / out で適用
  • route refresh が既定で有効、フィルタ変更はセッション無停止で反映
  • SD-WAN / ADVPN は neighbor-group / neighbor-range で動的ピアリング

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

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

この記事を書いた人

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

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

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

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

目次