FortiGate設定マニュアル - HA徹底入門
【第4回】HAの同期と切り替え
セッション同期は通信維持の生命線
セッションとは、通信を処理するための「識別情報」であり、他のデバイスからの「接続数(コネクション数)」を表す単位を示します。セッションの中には、送信元IPアドレス、宛先IPアドレス、送信元ポート番号、宛先ポート番号、プロトコル番号、ポリシーIDなどの様々な情報が記されています。FortiGateはこれらの情報を見て、どこにパケットを送り届けるか判断します。
もし通信の途中でセッションが失われることがあれば通信断が発生し、ネットワークを利用しているユーザーに影響が出ます。セッションが正しく引き継がれていないと、フェイルオーバーによる切り替えが起きたとき、多くの通信が切断されてしまいます。
| セッションが同期されている状態 | セッションが同期されていない状態 |
|---|---|
![]() |
![]() |
同期されるセッションとされないセッション
同期されるものと、されないものがあります。全てを救うことはできません。セッションを失ったクライアントの通信は切断されます。プロキシベースを利用している場合、セキュリティプロファイル(UTM機能)によってスキャンされたセッションは同期の対象外です。
| 同期されるセッション | 同期されないセッション |
|---|---|
|
|
※1:一部例外あり。
※2:専用の設定が必要。
※3:SIPはActive-Passiveの場合のみ。
※4:フローベースとプロキシベースが混在した場合は同期されない。
※5:一部制限あり。
※6:Active-Activeの場合も、プライマリでしか処理されない。
セッション数の確認方法
[ダッシュボード] > [ステータス] > [セッション]のウィジェットを選択
現在FortiGateが保持しているセッション数(最大同時セッション数)を確認できます。セッションは完全に一致するわけではないので、注意してください。なぜならデフォルトでは、UDPやICMPのセッションは同期されないからです。UDPやICMPは通信相手との間で事前のコネクション確立を必要としない「コネクションレス通信」なので、セッションはFortiGate上に一時的に残りますが、それらは通過した後の証跡であり、本来は同期しておく必要のないセッションです。
セッション数監視の観点から、両者の数を厳密に合わせたい場合は(それでも完全には一致しません。近くはなります)、CLIコマンドによるHAの設定で「session-pickup-connectionless」オプションを有効にしてください。詳しくは「CLIによるHA設定の主なパラメータ」を参照してください。

misc info: session_count=70 setup_rate=0 exp_count=0 reflect_count=0 clash=1
memory_tension_drop=0 ephemeral=0/245760 removeable=0 extreme_low_mem=0
npu_session_count=25
nturbo_session_count=0
delete=0, flush=2, dev_down=22/128
session walkers: active=0, vf-76, dev-22, saddr-0, npu-0, wildcard-0
TCP sessions:
14 in ESTABLISHED state
(後略)
misc info: session_count=21 setup_rate=0 exp_count=0 reflect_count=0 clash=0
memory_tension_drop=0 ephemeral=0/245760 removeable=0 extreme_low_mem=0
npu_session_count=0
nturbo_session_count=0
delete=2, flush=2, dev_down=23/128
session walkers: active=0, vf-86, dev-22, saddr-0, npu-0, wildcard-0
TCP sessions:
14 in ESTABLISHED state
(後略)
| 種類 | 解説 |
|---|---|
| session_count | 現時点で作成された、TCP/UDP/SCTPを含むセッションの総数です。「最大同時セッション数」とも呼ばれます。 |
| setup_rate | 1秒あたりに作成されたセッション数です。「新規セッション数」とも呼ばれます。 |
| exp_count | 現時点のセッション期待数です。次に通信が来るであろうとFortiGateが予測して待っている数です。 |
| ephemeral | クラッシュしたセッションの総数(累積)です。通信が始まる時、競合するセッションが見つかった時にクラッシュが起きます。 |
| TCP sessions | 確立されたTCPセッションの数です。TCPセッションにおいては、この数が機器間で近い値になっていないと、フェイルオーバー時に通信の切断が起きます。 |
セッション同期専用ポートを追加して処理能力を強化する
通常はハートビートインターフェースが機器の死活監視、設定とセッションの同期を行いますが、通信量が多過ぎて処理能力をオーバーしてしまった場合、従来のハートビートだけではセッションの同期が追い付かず、機器間のセッション数が合わなくなることがあります。
このような場合は「セッション同期専用ポート」を作成すると、セッション同期の機能がハートビートから分離され、負荷が分散されます。ハートビートインターフェースは死活監視と設定同期、セッション同期専用ポートはセッション同期を行うように役割分担できます。セッション同期専用ポートは2本追加することで高い効果を見込めますが、それ以上の追加による効果は軽微です。例えば、3本目や4本目を追加しても、性能はほとんど向上しません。

セッション同期を強化する手順
1)セッションの同期モードを「sessionsync ⇒ session-sync-dev」へ変更する。
セッション同期をハートビートから分離して負荷を分散できる。
2)「session-sync-dev」の物理インターフェースを増やす(2本追加を推奨)。
同期のためのインターフェース数を増強して負荷を分散できる。
3)「sync-packet-balance」を有効化する。
同期のためのパケットを分割し、各CPUコアに並列処理させて負荷を分散できる。
4)「session-sync-dev」のMTUサイズを大きくする。
同期のためのパケットサイズを最適化できる。
(ha) # set session-sync-dev internal4 internal5 << 同期専用のインターフェースを選択
(ha) # set sync-packet-balance enable << 同期パケットの並列処理を有効
(ha) # end
# config system interface
(interface) # edit internal4
(internal4) # set mtu-override enable << MTUの上書を有効
(internal4) # set mtu 9216 << MTU値の変更
(internal4) # next
(interface) # edit internal5
(internal5) # set mtu-override enable << MTUの上書を有効
(internal5) # set mtu 9216 << MTU値の変更
(internal5) # end
冗長化の限界
フェイルオーバー時、ほとんどの通信は維持され、クライアントは切り替わりを意識することなく通信を継続できますが、通信の維持はあくまでも「最大限の努力」と捉えてください。「同期されるセッションとされないセッション」にもあるように、そもそも同期自体ができないセッションも存在します。
HAの同期が行われている間は、プライマリ機からセカンダリ機へ継続してセッション情報がコピーされています。フェイルオーバーのタイミングによっては、セッション情報のコピーが間に合わず、その通信は切断されます。また、送信が完了していないパケットは破棄(ドロップ)されます。クライアントの通信量が多く、FortiGateの負荷が高まっている場合、パケットのドロップが起こりやすくなります。ドロップされるパケットの数は、その時の通信量や機器の負荷状況にもよりますが、数千~数万単位で発生することもあります。HA機能を決して過信せず、フェイルオーバー時の通信断やパケットロスは「原則起きるもの」という前提で運用してください。

HA徹底入門 シリーズ一覧
著者
関連製品
-
FortiGate/FortiGateCloud強固なセキュリティ機能を一台で提供する統合脅威管理(UTM)アプライアンスです。
- Cloud / SaaS
- Network Security
- OT Security


