「FortiGateでHAを組みたいけど、何から手をつければいいか分からない」——そんな悩み、ネットワークエンジニアなら一度は通る道だと思う。
この記事では、FortiGateのHA(High Availability)をActive-Passive構成で構築する手順を、CLIとGUI両方でまとめた。事前準備のチェックリストから、実際の設定コマンド、HA同期の確認、フェイルオーバーテストの方法、そして現場でよくハマるポイントまで、実務ベースで解説している。ちなみに、自分は過去にFortiGate 60E〜600Eまで計20台以上のHA構成を組んできた経験があるので、その中で学んだ落とし穴も隠さず書いていく。
FortiGate HAとは?冗長化の仕組みをざっくり理解する
FortiGate HAは、2台のFortiGateをクラスター構成にして、片方が故障しても自動的にもう1台が処理を引き継ぐ仕組み。要するに「壊れても止まらない」を実現するための機能だ。
FortiGateのHAにはActive-Passive(A-P)とActive-Active(A-A)の2つのモードがある。正直なところ、実務で使うのは圧倒的にActive-Passiveの方が多い。理由は単純で、トラブルシュートが楽だから。Active-Activeはセッション分散の仕組みが絡むので、障害時の切り分けが一気に複雑になる。
FortiGateのHAはFGCP(FortiGate Clustering Protocol)という独自プロトコルで動作する。HA heartbeatポート経由で死活監視とコンフィグ同期を行い、プライマリ障害時にはセカンダリが仮想MACアドレスを引き継ぐ。Fortinet公式ドキュメントでは「FGSP(FortiGate Session Life Support Protocol)」との混同に注意するよう記載されている。
以前、客先でFortiGate 200EのHA構成を組んだとき、最初Active-Activeで設計してしまった。結果、セッション同期周りでパケットロスが断続的に発生して、原因特定に丸2日かかった。結局Active-Passiveに変更して安定稼働した。それ以来、「特別な理由がない限りA-P一択」が自分のポリシーになった。
Active-Passive vs Active-Active 比較
図1: Active-Passive vs Active-Active 運用難易度比較
90%
50%
85%
35%
| 比較項目 | Active-Passive | Active-Active |
|---|---|---|
| 動作モード | 1台が処理、1台は待機 | 2台ともトラフィックを処理 |
| スループット | 1台分のスペック | 最大2倍(UTM処理時のみ分散) |
| フェイルオーバー時間 | 約1〜3秒 | 約1〜3秒 |
| セッション同期 | TCP/UDP/ICMPセッション同期 | セッション同期+負荷分散 |
| 設定難易度 | 低い(おすすめ) | やや高い |
| 主な用途 | 一般的な冗長化構成 | UTM負荷が高い大規模環境 |
| 推奨シーン | 迷ったらこっち | IPS/AV処理がボトルネックの場合 |
HA構成を組む前に確認すべきこと
HAの設定自体はそこまで複雑じゃない。ただ、事前準備を怠ると「設定したのにHAが組めない」という事態に陥る。ここで紹介するチェックリストは、自分が現場で毎回確認している項目だ。
| 確認項目 | 要件 | 備考 |
|---|---|---|
| 機種(モデル) | 2台とも同一モデル | 60Eと60Fなど異なるモデルではHA不可 |
| FortiOSバージョン | 2台とも同一バージョン | マイナーバージョンまで一致させる |
| HA heartbeatポート | 専用ポートまたは任意ポートを確保 | 100E以上はha1/ha2専用ポートあり |
| HA heartbeatケーブル | 直結またはスイッチ経由で接続 | 直結推奨(クロスケーブル不要、Auto MDI-X対応) |
| ライセンス | 2台とも有効なライセンス | UTMライセンスはプライマリのみ必要な場合あり |
| 管理用IPアドレス | HA管理IPを別途用意 | ha-mgmt-interfaceで個別管理IP設定 |
| 初期設定の状態 | セカンダリ側は工場出荷状態が理想 | コンフィグが入っているとHA join時に上書きされる |
FortiOSのバージョンが「7.2.5」と「7.2.6」のように1つでもズレていると、HAクラスターが組めない。片方だけアップデートしてしまったケースを何度も見てきた。get system statusでファームウェアバージョンを必ず両方で確認してから作業に入ること。
あと、地味に忘れがちなのがheartbeatケーブルの物理接続。ラックマウント後にLANケーブルだけ繋いでheartbeatポートを繋ぎ忘れるパターン、自分も一回やった。コンソールで設定を流し終えて「あれ、HA組めないな…」と30分悩んだ末に気づいたときの脱力感は忘れられない。
config system haでActive-Passive構成を設定する
ここからが本題。CLIでのHA設定は config system ha ブロックに集約されている。まずプライマリ機から設定し、次にセカンダリ機を設定する。
プライマリ機(Active側になる方)にコンソール接続して、以下のコマンドを投入する。
config system ha
set mode a-p
set group-name "FG-HA-CLUSTER"
set group-id 10
set password <HA用パスワード>
set priority 200
set hbdev "ha1" 50 "ha2" 100
set session-pickup enable
set session-pickup-connectionless enable
set override disable
set monitor "port1" "port2" "port3"
end
各パラメータの意味を整理しておく。
| パラメータ | 説明 | 推奨値 |
|---|---|---|
| mode | HAモード(a-p / a-a / standalone) | a-p |
| group-name | HAグループの識別名(2台で同一にする) | 任意の文字列 |
| group-id | HAグループID(同一LAN上に複数HAがある場合に区別) | デフォルト0、複数HAなら変更 |
| password | HA認証パスワード(2台で同一にする) | 強固なパスワード |
| priority | プライオリティ値(高い方がプライマリになる) | プライマリ: 200 / セカンダリ: 100 |
| hbdev | heartbeatに使うインターフェースと優先度 | “ha1” 50 “ha2” 100 |
| session-pickup | フェイルオーバー時のTCPセッション引き継ぎ | enable |
| override | プライマリ復旧時に自動で切り戻すか | disable(意図しない切り戻しを防ぐ) |
| monitor | リンク監視対象のインターフェース | 通信に使う物理ポートを全て指定 |
セカンダリ機にも同じ構成を入れるが、priorityだけ低い値にする。
config system ha
set mode a-p
set group-name "FG-HA-CLUSTER"
set group-id 10
set password <HA用パスワード>
set priority 100
set hbdev "ha1" 50 "ha2" 100
set session-pickup enable
set session-pickup-connectionless enable
set override disable
set monitor "port1" "port2" "port3"
end
コマンドを投入すると、heartbeatポート経由で相手を検出し、自動的にHAクラスターが形成される。この瞬間、セカンダリ側はプライマリからコンフィグを同期され始める。だから、セカンダリ側に独自設定が入っていると全部上書きされる。これ、知らないと焦る。
HA構成後、セカンダリ機に直接アクセスするには「HA管理インターフェース」の設定が必要。これを設定しないと、セカンダリ単体にSSHやHTTPSで入れなくなる。
config system ha
set ha-mgmt-status enable
config ha-mgmt-interfaces
edit 1
set interface "mgmt"
set gateway 192.168.99.1
next
end
end
# プライマリの管理IP
config system interface
edit "mgmt"
set ip 192.168.99.11 255.255.255.0
set allowaccess ping https ssh
next
end
余談だけど、この管理インターフェースの予約設定は60Eクラスのエントリーモデルだとmgmt専用ポートがないから、データポートの1つを管理用に割り当てる必要がある。地味に面倒。
FortiGate GUIからHA設定を行う方法
GUIでもHA設定は可能。CLIほど細かいパラメータ制御はできないけれど、基本的なActive-Passive構成なら十分対応できる。
FortiGateの管理画面にHTTPSでログインし、左メニューから「System」→「HA」を選択する。デフォルトでは「Standalone」が選択されている状態。
HA画面で以下を設定する。
Modeを「Active-Passive」に変更。Group Nameにクラスター名を入力(例:FG-HA-CLUSTER)。PasswordにHA認証パスワードを入力。Device Priorityをプライマリ側は200、セカンダリ側は100に設定。Heartbeat Interfaceでha1, ha2にチェックを入れる。Port Monitorで監視対象のインターフェースを選択する。
設定が終わったら「OK」をクリック。この瞬間FortiGateが再起動的な動作をして一時的にGUI接続が切れるので慌てないこと。だいたい30秒〜1分で復帰する。
GUIではha-mgmt-interface(個別管理IP)の設定ができない場合がある(FortiOSバージョンによる)。また、session-pickup-connectionlessなどの細かいパラメータはCLIでしか設定できない。実務ではGUIで基本設定→CLIで追加パラメータという流れが多い。
HAが正しく動作しているか確認する方法
設定を入れたら終わりじゃない。HAが正しく組めているか、フェイルオーバーが期待通りに動くか、必ず確認する。この確認を怠って本番障害で初めて「実はHA動いてませんでした」と発覚したら目も当てられない。
| コマンド | 確認できること |
|---|---|
| get system ha status | HAモード、グループ名、各ノードの役割と優先度 |
| diagnose sys ha status | 詳細なHA状態(heartbeat状態、同期状態、uptime) |
| diagnose sys ha checksum cluster | コンフィグ同期のチェックサム比較(不一致を検出) |
| execute ha manage ? | HAクラスター内のノード一覧を表示 |
| execute ha manage 1 | セカンダリのCLIに直接ログイン |
FG-PRIMARY # diagnose sys ha status HA information Statistics traffic.local = s:0 p:0 b:0 traffic.total = s:0 p:0 b:0 activity.ha_id_changes = 1 activity.ha_role_changes = 0 Model=FortiGate-200E, Mode=HA A-P, Group=10, Master_up=1 ses_pickup=1, override=0 [Debug_Zone HA information] HA group member information: is_manage_primary=1. FG200E-PRIMARY , 200, FG200EXXXXXXXXXX FG200E-SECONDARY , 100, FG200EYYYYYYYYYY cluster uptime: 45 days 12:33:20
ここで確認すべきは3つ。Mode=HA A-Pになっていること。Master_up=1でプライマリが稼働中であること。そして2台のノードが両方リストに出ていること。どれか1つでも欠けていたらHAが正常に動作していない。
HAの設定が終わったら、必ずフェイルオーバーテストを実施する。テスト方法は主に3つ。
方法1: CLIコマンドで手動切り替え——最も安全な方法。プライマリのCLIで以下を実行する。
# プライマリからセカンダリに手動で切り替え diagnose sys ha reset-uptime # またはセカンダリのCLI上で execute ha failover set 1
方法2: 監視ポートのケーブル抜去——monitorに設定したポートのLANケーブルを抜く。物理的な障害をシミュレートできるが、本番環境でやる場合は影響範囲をよく確認すること。
方法3: プライマリの電源OFF——最もリアルなテスト。ただし、復旧時にoverride設定によっては意図しない切り戻しが発生する可能性がある。
テスト時は端末から連続pingを打ちながら切り替え時間を計測するのが定番。正常なら1〜3秒程度のロスで収まるはず。5秒以上ロスが続く場合は何かおかしい。
FortiGate HAで現場でハマるポイントと対処法
一番多いトラブル。原因はだいたい以下のどれか。
heartbeatケーブルが接続されていない(物理的な確認不足)。group-nameまたはpasswordが2台で一致していない(タイポ含む)。FortiOSバージョンが不一致。モデルが異なる。group-idが同一LAN上の別HAクラスターと衝突している。
切り分けは diagnose sys ha status の出力を確認するところから。1台しか表示されない場合、heartbeatの疎通ができていない。
HAが組めたのに設定変更がセカンダリに反映されないケース。diagnose sys ha checksum cluster でチェックサムを比較して、不一致のセクションを特定する。
# チェックサム比較 diagnose sys ha checksum cluster # 不一致がある場合、手動同期を実行 execute ha synchronize start
それでも直らない場合は、セカンダリを一度standaloneに戻してから再度HAに参加させるという荒業もある。ただしこれは最終手段。
overrideをenableにしていると、プライマリが復旧した瞬間に自動的に切り戻しが発生する。つまりフェイルオーバーが2回起きることになり、その都度通信断が発生する。特に理由がなければ set override disable にしておくのが安全。
FortiGate 60E/60Fなどのエントリーモデルでは、LANポートがデフォルトで「ハードウェアスイッチ」モードになっている。この状態だとHA heartbeatに個別ポートを指定できない場合がある。ハードウェアスイッチを解除して個別インターフェースモードに変更するか、専用のHA設定に対応したポート構成にする必要がある。この変更はインターフェース設定のリセットを伴うので、事前にコンフィグのバックアップを取ること。
FortiGate HA設定のポイント整理
FortiGateのHA(Active-Passive)は config system ha で設定する。事前に同一モデル・同一FortiOSバージョン・heartbeatケーブル接続を確認するのが最重要。設定後は diagnose sys ha status と diagnose sys ha checksum cluster で同期状態を確認し、手動フェイルオーバーテストまで実施して初めて「HA設定完了」と言える。overrideは基本disableにしておくのが安全。
よくある質問(FAQ)
Q. FortiGate HAのActive-PassiveとActive-Activeはどっちを選ぶべき?
特別な理由がない限り、Active-Passive(A-P)がおすすめ。A-Pは設定がシンプルで、障害時の切り分けも楽。Active-ActiveはUTM機能(IPS、アンチウイルス等)の負荷分散が必要な大規模環境向け。ただし、セッション分散の仕組みが複雑になるため、運用負荷は確実に上がる。
Q. HA構成でFortiGateのファームウェアアップデートはどうやる?
HA構成ではuninterruptible upgrade(無停止アップグレード)機能が使える。プライマリ側からファームウェアをアップロードすると、セカンダリ→プライマリの順に自動でアップデートされる。この間、フェイルオーバーが発生するので一時的に通信断(約3〜10秒)が発生する。メンテナンスウィンドウ内での実施を推奨する。
Q. HAのheartbeatポートはスイッチ経由でも大丈夫?
技術的にはスイッチ経由でも動作する。ただし、Fortinet公式では直結を推奨している。スイッチ経由にすると、スイッチ障害でheartbeatが途絶えてスプリットブレイン(両方がプライマリになる)を起こすリスクがある。直結の場合、Auto MDI-Xに対応しているのでクロスケーブルは不要。ストレートケーブルでOK。



