本記事について
本記事では、Fortinet 社のファイアウォール製品である FortiGate について、ルートが冗長化されている場合にリンクモニタ機能によりルート監視を行い、メインルート障害時に自動でバックアップルートに切替えるための設定方法を説明します。
動作確認環境
本記事の内容は以下の機器にて動作確認を行った結果に基づいて作成されています。
- FortiGate-60F
- バージョン 7.4.3
想定するシナリオ
FortiGate では外部ネットワークへルーティングするルートとして wan1 を発信インターフェースとするルートと wan2 を発信インターフェースとするルートの2つのルートを持っています。通常時は wan1 から発信するルートをメインルートとして使いますが、このルートに障害が発生した場合は wan2 から発信するルートに自動でルートを切り替えたいです。
FortiGate では外部ネットワーク向けのデフォルトルートとして以下の2つのルートを設定しています。
config router static
edit 1
set gateway 10.100.1.254
set device "wan1"
next
edit 2
set gateway 10.100.2.254
set distance 11
set device "wan2"
next
end
wan2 から発信するルートは distance を 11 と設定することにより優先度を落とし、wan1 から発信するルートを優先して使用するようにしています。
ファイアウォールポリシーの設定としては、internal1 から wan1 への通信を許可するポリシーと、internal1 から wan2 への通信を許可するポリシーが設定されています。
config firewall policy
edit 1
set name "internal1_to_wan1"
set uuid ad7bc670-f406-51ee-8445-98f18762e5a1
set srcintf "internal1"
set dstintf "wan1"
set action accept
set srcaddr "10.1.1.0/24"
set dstaddr "all"
set schedule "always"
set service "ALL"
set logtraffic all
set nat enable
next
edit 2
set name "internal1_to_wan2"
set uuid 385deb68-f40e-51ee-ebe5-e0a964ffb686
set srcintf "internal1"
set dstintf "wan2"
set action accept
set srcaddr "10.1.1.0/24"
set dstaddr "all"
set schedule "always"
set service "ALL"
set logtraffic all
set nat enable
next
end
FortiGate のリンクモニタ機能の利用
ルーティング要件を満たすために、FortiGate で wan1 から発信するルートで外部ネットワーク上の 8.8.8.8 を定期的に ping 監視し、疎通が取れなくなった場合はルート上に障害発生と判断してルートを wan2 から発信するルートに切替えます。これを実現するための機能として「リンクモニタ」という機能が FortiGate にはあります。
以下でリンクモニタの設定方法を説明します。
リンクモニタで障害検知時に削除される対象ルート
リンクモニタの設定では監視対象 IP を設定しますが、監視対象 IP が決まるとその IP へルーティング時の発信インターフェースとゲートウェイアドレスが決まります(もしくは明示的に設定します)。リンクモニタのデフォルト設定では障害検知時、発信インターフェースとゲートウェイアドレスがリンクモニタ設定と一致しているようなスタティックルートのすべてが削除対象ルートになります。
OS バージョン 7.0 からは、削除対象のルートを指定する機能が追加されました。これにより、指定したルートのみを削除対象にすることができるようになりました。(これはオプションです。)
リンクモニタの設定方法
リンクモニタの設定は GUI ではできないため、CLI で設定します。
リンクモニタのコンフィグはconfig system link-monitor
です。以下の例の通り監視対象ごとにedit
項目を作成して設定します。
config system link-monitor
edit "8.8.8.8_from_wan1"
set addr-mode ipv4
set srcintf "wan1"
set server-config default
set server-type static
set server "8.8.8.8"
set protocol ping
set gateway-ip 0.0.0.0
set source-ip 0.0.0.0
set interval 500
set probe-timeout 500
set failtime 5
set recoverytime 5
set probe-count 30
set ha-priority 1
set update-cascade-interface enable
set update-static-route enable
set update-policy-route enable
set status enable
set diffservcode 000000
unset class-id
set service-detection disable
next
end
主な設定項目は以下の通りです。
項目 | set 設定項目 | デフォルト値 | 備考 |
---|---|---|---|
設定名 | edit の ID 値として設定 | ー | |
ソースインターフェース | srcintf | ー | |
監視対象 IP | server | ー | 複数のIPを指定可能 (スペース区切り) 複数指定時はすべてのIPで 疎通不可がトリガーになる |
監視で使用するプロトコル | protocol | ping | |
監視通信のゲートウェイ | gateway-ip | ー | |
削除対象ルート | route | ー | バージョン 7.0 以降の機能 |
監視通信のソース IP | source-ip | ー | |
監視通信の間隔 | interval | 500 [ミリ秒] | |
障害と判定する失敗回数 | failtime | 5 [回] | |
復旧と判定する成功回数 | recoverytime | 5 [回] | |
障害時指定インターフェースを ダウンさせるか | update-cascade-interface | enable | 詳細は後述 |
障害時対象ルートを削除するか | update-static-route | enable | |
リンクモニタ有効化 | status | enable |
今回のシナリオでは以下の設定値とします。
項目 | set 設定項目 | 設定値 |
---|---|---|
設定名 | edit の ID 値として設定 | 8.8.8.8_from_wan1 |
ソースインターフェース | srcintf | wan1 |
監視対象 IP | server | 8.8.8.8 |
監視で使用するプロトコル | protocol | ping |
監視通信のゲートウェイ | gateway-ip | 10.100.1.254 |
削除対象ルート | route | 設定無し |
監視通信のソース IP | source-ip | 10.100.1.1 |
その他項目 | ー | デフォルト値 |
config system link-monitor
edit 8.8.8.8_from_wan1
set srcintf wan1
set server 8.8.8.8
set protocol ping
set gateway-ip 10.100.1.254
set source-ip 10.100.1.1
next
end
設定後のコンフィグは以下のようになります。
config system link-monitor
edit "8.8.8.8_from_wan1"
set srcintf "wan1"
set server "8.8.8.8"
set gateway-ip 10.100.1.254
set source-ip 10.100.1.1
next
end
リンクモニタの設定は以上です。
update-cascade-interface 設定について
config system link-monitor
edit "8.8.8.8_from_wan1"
set update-cascade-interface enable
next
end
update-cascade-interface
が有効な場合、リンクモニタで障害を検知した際に指定したインターフェースをダウンさせることができます。この機能を利用するためには追加の設定が必要です。
今回の想定シナリオでは wan1 を発信インターフェースとするルートが監視対象のため、config system interface
の wan1 の設定に以下の設定を追加します。
config system interface
edit "wan1"
set fail-detect enable
set fail-detect-option detectserver link-down
set fail-alert-interfaces "internal5"
next
end
上の追加設定の内、5行目のset fail-alert-interfaces "internal5"
の部分でリンクモニタで障害検知時にダウンさせるインターフェースを指定します。この設定例の場合、internal5 がダウンすることになります。
set fail-alert-interfaces
の設定値としてはスペース区切りで複数のインターフェースを指定することが可能です。
リンクモニタの動作確認
内部ネットワークの端末から外部ネットワーク上の 8.8.8.8 に連続 Ping を実行しつつ、経路上の FortiGate~外部ネットワーク間で障害を発生させてみます。
まず障害発生前の FortiGate のルーティングテーブルは以下の通りです。
Routing table for VRF=0
S* 0.0.0.0/0 [10/0] via 10.100.1.254, wan1, [1/0]
障害発生前後の端末の Ping の状況は以下の通りです。
5秒ほどで通信断から復旧していることが分かります。
障害発生中の FortiGate のルーティングテーブルは以下の通りです。
Routing table for VRF=0
S* 0.0.0.0/0 [11/0] via 10.100.2.254, wan2, [1/0]
wan2 から発信するルートに切り替わっていることが分かります。
リンクモニタの状態確認コマンド
diagnose sys link-monitor status all
コマンドでリンクモニタの状態を確認できます。
以下は正常時のコマンド出力です。
Link Monitor: 8.8.8.8_from_wan1, Status: alive, Server num(1), cfg_version=0 HA state: local(alive), shared(alive)
Flags=0x1 init, Create time: Sat Apr 6 20:59:45 2024
Source interface: wan1 (5)
VRF: 0
Source IP: 10.100.1.1
Gateway: 10.100.1.254
Interval: 500 ms
Service-detect: disable
Diffservcode: 000000
Class-ID: 0
Transport-Group: 0
Class-ID: 0
Peer: 8.8.8.8(8.8.8.8)
Source IP(10.100.1.1)
Route: 10.100.1.1->8.8.8.8/32, gwy(10.100.1.254)
protocol: ping, state: alive
Latency(Min/Max/Avg): 15.165/141.997/28.880 ms
Jitter(Min/Max/Avg): 0.046/121.683/15.488 ms
Packet lost: 0.000%
MOS: 4.373
Number of out-of-sequence packets: 0
Fail Times(0/5)
Packet sent: 4435, received: 3115, Sequence(sent/rcvd/exp): 4436/4436/4437
1行目のStatus: alive
や16行目のstate: alive
で正常であることを確認できます。
以下は障害発生時のコマンド出力です。
Link Monitor: 8.8.8.8_from_wan1, Status: dead, Server num(1), cfg_version=0 HA state: local(dead), shared(dead)
Flags=0x9 init log_downgateway, Create time: Sat Apr 6 20:59:45 2024
Source interface: wan1 (5)
VRF: 0
Source IP: 10.100.1.1
Gateway: 10.100.1.254
Interval: 500 ms
Service-detect: disable
Diffservcode: 000000
Class-ID: 0
Transport-Group: 0
Class-ID: 0
Peer: 8.8.8.8(8.8.8.8)
Source IP(10.100.1.1)
Route: 10.100.1.1->8.8.8.8/32, gwy(10.100.1.254)
protocol: ping, state: dead
Packet lost: 16.000%
MOS: 4.396
Number of out-of-sequence packets: 0
Recovery times(0/5) Fail Times(2/5)
Packet sent: 4591, received: 3253, Sequence(sent/rcvd/exp): 4592/4574/4575
1行目のStatus: dead
や16行目のstate: dead
で障害発生中であることを確認できます。
リンクモニタ使用時の通信断時間について
リンクモニタ使用時の通信断時間は以下の設定項目の設定値に依存します。
項目 | set 設定項目 | デフォルト値 |
---|---|---|
監視通信の間隔 | interval | 500 <ミリ秒> |
障害と判定する失敗回数 | failtime | 5 <回> |
デフォルトの設定では 500 ミリ秒間隔で送信される Ping が 5 回連続で失敗した場合に障害と判定されるため、少なくとも 2.5 秒間は通信断が発生します。上の設定項目の値を変えると通信断時間も変わってきます。
ただし、通信経路上の FortiGate 以外のネットワーク機器の設定内容もかかわってくるためネットワーク全体の設計を考慮する必要があります。
障害復旧時の通信断について
障害から復旧時は通信経路の切り戻りが発生します。経路が戻るタイミングで瞬断程度の通信断が発生します。
【要注意】サーバダウンによる意図しない経路切り替わりが起こり得る
リンクモニタでは特定の経路上に障害が無いかを監視するために指定したアドレスへ Ping を実行しますが、指定したアドレスを持つサーバがダウンした場合もリンクモニタとしては障害発生と判断してしまいます。
経路上に障害が無ければ経路を切り替えたくは無いので、意図しない経路切り替わりが起こってしまうことになります。
これを防止する方法として、監視対象となるアドレス(サーバ)を複数設定する方法があります。
リンクモニタのserver
設定では以下のように複数のアドレスを指定することが可能です。
config system link-monitor
edit "8.8.8.8_from_wan1"
set server "8.8.8.8" "8.8.4.4"
next
end
server
設定で複数のアドレスを指定した場合、すべてのアドレスに対して通信不可とならない限りは障害と判定されません。よって、一つのサーバのダウンによって経路切り替わりが発生することを防止できます。
2つのアドレスを指定した場合のdiagnose sys link-monitor status all
の表示は以下のようになります。
FortiGate-60F # diagnose sys link-monitor status all
Link Monitor: 8.8.8.8_from_wan1, Status: alive, Server num(2), cfg_version=0 HA state: local(alive), shared(alive)
Flags=0x1 init, Create time: Mon Apr 8 21:01:49 2024
Source interface: wan1 (5)
VRF: 0
Source IP: 10.100.1.1
Gateway: 10.100.1.254
Interval: 500 ms
Service-detect: disable
Diffservcode: 000000
Class-ID: 0
Transport-Group: 0
Class-ID: 0
Peer: 8.8.8.8(8.8.8.8)
Source IP(10.100.1.1)
Route: 10.100.1.1->8.8.8.8/32, gwy(10.100.1.254)
protocol: ping, state: alive
Latency(Min/Max/Avg): 0.527/0.654/0.584 ms
Jitter(Min/Max/Avg): 0.003/0.113/0.050 ms
Packet lost: 0.000%
MOS: 4.404
Number of out-of-sequence packets: 0
Fail Times(0/5)
Packet sent: 4533, received: 3666, Sequence(sent/rcvd/exp): 4534/4534/4535
Peer: 8.8.4.4(8.8.4.4)
Source IP(10.100.1.1)
Route: 10.100.1.1->8.8.4.4/32, gwy(10.100.1.254)
protocol: ping, state: alive
Latency(Min/Max/Avg): 0.551/0.652/0.592 ms
Jitter(Min/Max/Avg): 0.000/0.095/0.034 ms
Packet lost: 0.000%
MOS: 4.404
Number of out-of-sequence packets: 0
Fail Times(0/5)
Packet sent: 4533, received: 2310, Sequence(sent/rcvd/exp): 4534/4534/4535
ここで 8.8.4.4 への疎通が取れなくなった場合、以下のような表時になります。
FortiGate-60F # diagnose sys link-monitor status all
Link Monitor: 8.8.8.8_from_wan1, Status: alive, Server num(2), cfg_version=0 HA state: local(alive), shared(alive)
Flags=0x1 init, Create time: Mon Apr 8 21:01:49 2024
Source interface: wan1 (5)
VRF: 0
Source IP: 10.100.1.1
Gateway: 10.100.1.254
Interval: 500 ms
Service-detect: disable
Diffservcode: 000000
Class-ID: 0
Transport-Group: 0
Class-ID: 0
Peer: 8.8.8.8(8.8.8.8)
Source IP(10.100.1.1)
Route: 10.100.1.1->8.8.8.8/32, gwy(10.100.1.254)
protocol: ping, state: alive
Latency(Min/Max/Avg): 0.546/0.652/0.594 ms
Jitter(Min/Max/Avg): 0.001/0.076/0.029 ms
Packet lost: 0.000%
MOS: 4.404
Number of out-of-sequence packets: 0
Fail Times(0/5)
Packet sent: 4718, received: 3851, Sequence(sent/rcvd/exp): 4719/4719/4720
Peer: 8.8.4.4(8.8.4.4)
Source IP(10.100.1.1)
Route: 10.100.1.1->8.8.4.4/32, gwy(10.100.1.254)
protocol: ping, state: dead
Packet lost: 65.000%
MOS: 4.370
Number of out-of-sequence packets: 0
Recovery times(0/5) Fail Times(0/5)
Packet sent: 4718, received: 2429, Sequence(sent/rcvd/exp): 4719/4653/4654
8.8.4.4 の状態を示す29行目ではstate: dead
となっていますが、全体の状態を示す3行目ではStatus: alive
となっていて経路障害とは判定されていないことがわかります。
ここでさらに 8.8.8.8 へも疎通が取れなくなった場合は以下の表示になります。全体の状態を示す3行目でStatus: dead
となり経路障害であると判定されていることが分かります。
FortiGate-60F # diagnose sys link-monitor status all
Link Monitor: 8.8.8.8_from_wan1, Status: dead, Server num(2), cfg_version=0 HA state: local(dead), shared(dead)
Flags=0x9 init log_downgateway, Create time: Mon Apr 8 21:01:49 2024
Source interface: wan1 (5)
VRF: 0
Source IP: 10.100.1.1
Gateway: 10.100.1.254
Interval: 500 ms
Service-detect: disable
Diffservcode: 000000
Class-ID: 0
Transport-Group: 0
Class-ID: 0
Peer: 8.8.8.8(8.8.8.8)
Source IP(10.100.1.1)
Route: 10.100.1.1->8.8.8.8/32, gwy(10.100.1.254)
protocol: ping, state: dead
Packet lost: 11.000%
MOS: 4.399
Number of out-of-sequence packets: 0
Recovery times(0/5) Fail Times(1/5)
Packet sent: 4963, received: 4084, Sequence(sent/rcvd/exp): 4964/4952/4953
Peer: 8.8.4.4(8.8.4.4)
Source IP(10.100.1.1)
Route: 10.100.1.1->8.8.4.4/32, gwy(10.100.1.254)
protocol: ping, state: dead
Packet lost: 100.000%
MOS: 4.350
Number of out-of-sequence packets: 0
Recovery times(0/5) Fail Times(0/5)
Packet sent: 4963, received: 2429, Sequence(sent/rcvd/exp): 4964/4653/4654
以上です。
参考資料
【おすすめ】FortiGate の設計構築中なら以下の記事も役立つかもです
- 基礎知識
- HA (冗長構成) 設定
- FortiGate HA モードの Active-Passive と Active-Active の違いを解説します
- FortiGate HA(冗長構成)の概要と設定ガイド【詳しく解説】※note記事
- FortiGate HA 構成時のコンフィグ同期の仕様について解説します
- FortiGate HA 構成時の NTP,Syslog,SNMP 等の送信元インターフェースを解説 [ha-direct 設定]
- FortiGate HA 構成時の仮想 MAC アドレスについて解説します
- FortiGate HA ハートビート送信間隔と障害判定しきい値の設定ガイド
- FortiGate HA 構成時のバックアップ及びリストア実施ガイド
- FortiGate HA 構成でのモニタインターフェースダウン時の通信断時間について解説
- FortiGate HA 構成に関するQ&A 【良くありそうな疑問集】
- VDOM (バーチャルドメイン) 設定
- トランスペアレントモード設定
- システム系設定
- 管理者アカウント設定
- 時刻・NTP 設定
- ロギング・Syslog 送信設定
- SNMP 設定
- DHCP サーバ機能設定
- Proxy サーバ機能設定
- アラートメール送信
- ネットワーク系設定
- インターフェース設定
- ルーティング設定
- DNS 設定
- NAT 及び NAPT 設定
- ファイアウォール系設定
- アドレス設定
- サービス設定
- ファイアウォールポリシー設定
- ゾーンを使用したポリシー設定
- VPN 系設定
- Tips
Amazon アフィリエイトリンク
以下は Amazon アフィリエイトリンクです。インフラエンジニアにそこそこおすすめなアイテムです。
note メンバーシップへの参加もお待ちしています!
【アフィリエイト】おすすめ WordPress テーマ【SWELL】
当サイトでは WordPress テーマとして SWELL を使用しています。以前は無料・高機能テーマとして知られる Cocoon を使用していて Cocoon も使いやすかったのですが、SWELL を使い始めてからは SWELL のほうが圧倒的に使いやすいなと思いました。そして何より読み込み速度が速い。SWELL を使い始めてから、過去の Cocoon のブログを見直したときに「あれ、こんなに表示遅かったっけ?」という感覚になりました。
また SWELL はデフォルトでもオシャレなデザインですが柔軟にカスタマイズすることもでき個性のあるサイトを作成できます。さらにブログパーツや広告タグといった再利用可能なブログの「部品」も作成することができ、ブログ作成効率も高いです。
技術ブログやアフィリエイト等での収益化を見据えたブログの作成に SWELL は最適です。初見では価格が高いなと思うと思いますが、私としては SWELL を採用して良かったしそれ以上の価値があると感じています。
ブログの新設やテーマ変更を考えている人は一度 SWELL を検討してみてください。
以下の画像リンクから詳細な情報を確認できます。
レンタルサーバーを探している人には安定性に定評のあるエックスサーバーをお勧めします。
当サイトもエックスサーバーを使用しています。WordPress のインストールも簡単にできます。
コメント