FortiGate における HA とは
HAはHigh Availability(高可用性)の略です。
FortiGate における HA とは、機器2台で冗長構成を構築することと考えておけば良いと思います。
HA を構築することで、運用中のサービス停止(通信断)の発生確率を小さくする、または発生したとしてもその停止時間を短くすることができます。
FortiGate の HA モードには以下の3つがあります。
- スタンドアロン
→HAを構築せず各機器は単独で動作します - アクティブ・アクティブ
→2台の機器両方がアクティブとして動作します - アクティブ・パッシブ
→通常時は1台がアクティブ、もう1台はパッシブ(スタンバイ)として動作します
アクティブ機で異常が発生した場合は、スタンバイ機にフェールオーバーします。
上の2と3のモードについては、HA を構成している各機器間で設定が同期されます。
※一部、同期されないコンフィグもあります。
一般的には3.のアクティブ・パッシブモードで構築されることが多いようです。
今回はこのアクティブ・パッシブ構成を構築してみます。
ネットワーク構成
今回構築するネットワーク構成は以下の通りです。
使用するFortiGateについては以下の通りです。
- 機種:FortiGate 60E 2台
- ファームウェアバージョン: v6.0.6 build0272 (GA)
HAの構築手順
HAの構築手順は以下の通りです。
- アクティブとする機器の設定
- スタンバイとする機器の設定(同期されない部分の設定)
- 機器同士を結線する
アクティブとする機器の設定
HAを構築するとアクティブ機の設定がスタンバイ機に同期(コピー)されます。
そのため一通りの設定はアクティブとする機器で設定します。
ここではHA関係の設定のみ説明します。
HAの設定
Web管理画面にて[システム]>[HA]を選択し、以下のように設定します。
CLIで設定する場合は以下のコマンドとなります。
config system ha
set group-name "HA-Group"
set mode a-p
set password "hogepiyo"
set hbdev "internal6" 200 "internal7" 100
set session-pickup enable
set ha-mgmt-status enable
config ha-mgmt-interfaces
edit 1
set interface "internal5"
set gateway 10.1.10.1
next
end
set override disable
set priority 200
set monitor "internal1" "wan1"
end
- High Availability
- モード:
モードを選択します - デバイスのプライオリティ:
HAを構成する機器の中でプライオリティ最大のものがアクティブ機になります。
アクティブ機にはスタンバイ機より大きい値を設定します。
- モード:
- クラスタ設定
- グループ名/パスワード:
HAを構成するすべての機器で同じグループ名/パスワードを設定します。 - セッションピックアップ:
アクティブ機とスタンバイ機でセッション情報を同期します。 - モニタインターフェース:
ここで設定したインターフェースがダウンするとフェールオーバーが発生します。 - ハートビートインターフェース:
HAハートビート(HAのステータスと同期情報)を通信するインターフェースです。
一般的には2つのインターフェースを設定します。
- グループ名/パスワード:
- ハートビートインターフェースのプライオリティ:
プライオリティの高いインターフェースが優先して使用されます。
管理インターフェースの予約について
HAを構築すると、アクティブ機とスタンバイ機との間でインターフェースのIPアドレスの設定が同期されます。このため、FortiGateにWebやSSHなどでアクセスしようとすると常にアクティブ機に接続され、スタンバイ機にアクセスできなくなります。
スタンバイ機にアクセスするために設定するのが管理インターフェースの設定です。
管理インターフェースとして設定されたインターフェースについては、機器間で設定が同期されず、別々のIPアドレスを設定することができます。
管理インターフェースは独自のルーティングテーブルを持つため、別のセグメントから管理インターフェースへアクセスする場合は「管理インターフェースの予約」設定の中でゲートウェイを設定する必要があります。
オーバーライド(override)設定について
オーバーライド設定とは、フェールオーバーが発生した後、もともとアクティブ機だったプライオリティが高い機器が復旧した場合に自動でフェールバック(切り戻し)を実施するかどうかの設定です。
デフォルトでは disable(自動フェールバックしない)となっています。自動でフェールバックさせる場合は enable と設定します。
この設定はCLIでのみ可能です。有効化させるコマンドは以下の通りです。
config system ha
set override enable
end
管理インターフェースの設定
管理インターフェースと設定したインターフェース(internal5)を以下のように設定します。
※IPアドレスはネットワーク環境に合わせて設定してください
スタンバイとする機器の設定
大体の設定はアクティブ機からコピーされることになりますが、以下の設定は同期されないため設定しておきます。
- 機器のホスト名
- HA関係の各種設定
- 管理インターフェースの予約で設定したインタフェースの設定
ここではHA関係の設定のみ説明します。
HAの設定
Web管理画面にて[システム]>[HA]を選択し、以下のように設定します。
- デバイスのプライオリティ:
アクティブ機側で200と設定していたのでそれよりも小さい100と設定します。
管理インターフェースの設定
管理インターフェースと設定したインターフェース(internal5)を以下のように設定します。
※IPアドレスはネットワーク環境に合わせて設定してください
機器同士の結線
設定ができたら各機器のハートビートインターフェース同士を結線します。
上の設定例の場合は、internal6同士とinternal7同士を結線します。
結線後、すぐにHAが構成されます。Web管理画面のHAの画面が以下のようになります。
アクティブ機がマスタに、スタンバイ機がスレーブになっていることが分かります。
■アクティブ機の画面
■スタンバイ機の画面
HAを検証する
障害を発生させてHAの動作を確認してみます。
以下の図のように、アクティブ機のWAN側のケーブルを抜線してみます。
抜線後、各機器のWeb管理画面は以下のようになりました。
アクティブ機がスレーブに、スタンバイ機がマスタに変わったことが分かります。
■アクティブ機
■スタンバイ機
続いて、フェールオーバー時の通信断時間を確認してみます。
以下の図の通りクライアントからグローバルIPアドレスにpingを飛ばし続けて疎通が途切れる時間を確認します。
抜線前後のpingの結果は以下の通りでした。
上の画像の通り、疎通が途切れた時間は1秒未満でした。
HAに関するその他事項
スタンバイ機への管理アクセスについて
上記の通り、スタンバイ機へ管理アクセスするためには管理インターフェースを設定する必要があります。また、管理インターフェースへ物理的に接続できるよう管理インターフェースにケーブルを接続して通信経路を構築する必要があります。つまり、FortiGateおよび管理インターフェースに接続するスイッチそれぞれの物理ポートを1ポート分消費するということになります。
例えば、ジュニパーのSSGではアクティブ機とスタンバイ機それぞれの各インターフェースにルーティングで使用するIPアドレスとは別に管理用のIPアドレスを設定することができますが、FortiGateではこのようなことはできなそうです。
→確認したところFortiGateでも管理用IPを設定できるようです。設定項目はインターフェース設定の中の以下項目です。
management-ip High Availability in-band management IP address of this interface.
設定コマンドは以下のような感じです。
※HAを構成している状態でないと設定できません
config system interface
edit "対象インターフェース"
set management-ip [IPアドレス] [サブネットマスク]
next
end
ただし、最近のファームウェアバージョンでないと使用できないかもしれません。
また、そのインターフェースに対して管理アクセスする際のプロトコルを指定する allowaccess の設定が通常のIPアドレスに対する設定と同じになるようです。管理IPに対して個別に設定できればかなり便利になる気がしますが、それが可能かは確認中です。
追記:management-ip について
management-ip について、FortiGate の販社に問い合わせて以下の点を確認しました。
- management-ip はセカンダリIP同様にルーティングで使用される
- management-ip と通常のIPとで別々に allowaccess を設定することはできない
どうやら管理IPというより、HA構成時でも機器別に設定できるセカンダリIPの下位互換みたいな機能の様です。素直に管理用インターフェースの予約を設定したほうがきれいな設計にできるかもしれません。
オーバーライド設定について
オーバーライド設定は各機器間で同期されません。
そのため機器間で異なった設定をすることができますが、自動フェールバックさせたい場合は、プライオリティが高い方の機器のオーバーライド設定を有効化してください。
プライオリティが低い方の機器だけオーバーライド設定を有効化して、プライオリティが高い機器で有効化していない場合、自動でフェールバックするようにはなりません。
HAの状態確認コマンド
get system ha status
FW01 # get system ha status
HA Health Status: OK
Model: FortiGate-60E
Mode: HA A-P
Group: 0
Debug: 0
Cluster Uptime: 0 days 8:7:13
Cluster state change time: 2019-12-07 17:47:21
Master selected using:
<2019/12/07 17:47:21> FTG60EKTxxxxxxxx is selected as the master because it has the largest value of override priority.
<2019/12/07 17:46:56> FGT60ETKyyyyyyyy is selected as the master because it has the least value 0 of link-failure + pingsvr-failure.
<2019/12/07 17:46:26> FTG60EKTxxxxxxxx is selected as the master because it has the largest value of override priority.
<2019/12/07 17:45:00> FGT60ETKyyyyyyyy is selected as the master because it has the least value 0 of link-failure + pingsvr-failure.
ses_pickup: enable, ses_pickup_delay=disable
override: enable
Configuration Status:
FTG60EKTxxxxxxxx(updated 1 seconds ago): in-sync
FGT60ETKyyyyyyyy(updated 1 seconds ago): in-sync
System Usage stats:
FTG60EKTxxxxxxxx(updated 1 seconds ago):
sessions=194, average-cpu-user/nice/system/idle=0%/0%/0%/100%, memory=29%
FGT60ETKyyyyyyyy(updated 1 seconds ago):
sessions=85, average-cpu-user/nice/system/idle=0%/0%/0%/100%, memory=30%
HBDEV stats:
FTG60EKTxxxxxxxx(updated 1 seconds ago):
internal6: physical/1000auto, up, rx-bytes/packets/dropped/errors=49548566/150243/0/0, tx=59955905/159874/0/0
internal7: physical/1000auto, up, rx-bytes/packets/dropped/errors=40208315/117871/0/0, tx=41282430/117650/0/0
FGT60ETKyyyyyyyy(updated 1 seconds ago):
internal6: physical/1000auto, up, rx-bytes/packets/dropped/errors=86694316/206567/0/0, tx=61123193/188442/0/0
internal7: physical/1000auto, up, rx-bytes/packets/dropped/errors=51186172/146381/0/0, tx=49852491/150204/0/0
MONDEV stats:
FTG60EKTxxxxxxxx(updated 1 seconds ago):
internal1: physical/100auto, up, rx-bytes/packets/dropped/errors=58528721/339162/0/0, tx=656120096/618396/0/0
wan1: physical/100auto, up, rx-bytes/packets/dropped/errors=637590770/585086/0/0, tx=37975685/239964/0/0
FGT60ETKyyyyyyyy(updated 1 seconds ago):
internal1: physical/100auto, up, rx-bytes/packets/dropped/errors=11926473/88775/0/0, tx=19837628/23315/0/0
wan1: physical/100auto, up, rx-bytes/packets/dropped/errors=24687361/32950/0/0, tx=2412035/14898/0/0
Master: FW01 , FTG60EKTxxxxxxxx, cluster index = 1
Slave : FW02 , FGT60ETKyyyyyyyy, cluster index = 0
number of vcluster: 1
vcluster 1: work 169.254.0.2
Master: FTG60EKTxxxxxxxx, operating cluster index = 0
Slave : FGT60ETKyyyyyyyy, operating cluster index = 1
―――――――――――――
次のステップ → FortiGate の link-monitor を検証する
―――――――――――――