FortiGateのトラブルシューティングにおいて最も強力な武器となるのがdiagnoseコマンドです。GUIでは確認できない詳細なセッション情報、パケットキャプチャ、デバッグログなどをCLIから直接取得でき、障害の原因特定を大幅に加速できます。本記事では、現場で実際に使用頻度の高いdiagnoseコマンドを体系的に解説し、実践的なトラブルシューティング手順を紹介します。
以前、FortiGateを経由した特定の通信が突然遮断される障害に遭遇しました。ポリシーログには何も表示されず、GUIのセッションモニターでも原因が分かりませんでした。最終的に「diagnose sniffer packet」でパケットキャプチャを行い、FortiGateがTCP RSTを返していることを発見。「diagnose sys session list」でセッション数が上限に達していたことが判明しました。
diagnoseコマンドを知っているかどうかで、障害対応の速度が劇的に変わります。この記事で紹介するコマンドは、すべて私が実際の現場で何度も使ってきたものばかりです。
FortiGateのdiagnoseコマンドは、通常のshow/get/configコマンドとは異なり、機器のリアルタイム動作状態を直接確認・操作するためのコマンド群です。主に以下のカテゴリに分類されます。
| コマンドカテゴリ | 主な用途 | 使用頻度 |
|---|---|---|
| diagnose sys session | セッションテーブルの確認・フィルタリング | 非常に高い |
| diagnose sniffer packet | パケットキャプチャ(tcpdump相当) | 非常に高い |
| diagnose debug | アプリケーションのリアルタイムデバッグ | 高い |
| diagnose vpn tunnel | VPNトンネルの状態確認 | 高い |
| diagnose hardware | ハードウェア・NIC情報の取得 | 中程度 |
まず最初に確認すべきは現在のセッション統計です。FortiGateが処理しているセッション数、セッションテーブルの使用率を一目で把握できます。
FortiGate # diagnose sys session stat
misc info: session_count=15234 setup_rate=128 exp_count=0
clash=0 memory_tension_drop=0 ephemeral=0/1048576
delete=12, flush=0, dev_down=0/0
TCP sessions:
12845 in ESTABLISHED state
1205 in SYN_SENT state
432 in TIME_WAIT state
UDP sessions: 487 in sessions
ICMP sessions: 50 in sessionssession_countが機器のセッション上限に近づいている場合、新規接続が拒否される原因になります。FortiGate 60Fの場合、最大セッション数は700,000ですが、メモリ搭載量によっては実効値がそれより低くなることがあります。
セッションリストを確認する前に、フィルタを設定して必要な情報だけを絞り込みます。フィルタなしで「session list」を実行すると、大量の出力で確認が困難になります。
# フィルタをクリア
FortiGate # diagnose sys session filter clear
# 送信元IPでフィルタ
FortiGate # diagnose sys session filter src 192.168.1.100
# 宛先IPでフィルタ
FortiGate # diagnose sys session filter dst 10.0.0.1
# ポート番号でフィルタ(宛先ポート443)
FortiGate # diagnose sys session filter dport 443
# 現在のフィルタを確認
FortiGate # diagnose sys session filter
vd: any sintf: any dintf: any
proto: any proto-state: any
src: 192.168.1.100 dst: 10.0.0.1 dport: 443FortiGate # diagnose sys session list
session info: proto=6 proto_state=01 duration=45 expire=3600
timeout=3600 flags=00000000 socktype=0
origin-shaper= reply-shaper= per_ip_shaper=
state=log may_dirty
statistic(bytes/packets/allow_err): org=15234/128/1 reply=42567/96/1
dev=39->40/40->39 gwy=10.0.0.1/192.168.1.100
hook=post dir=org act=snat 192.168.1.100:54321->10.0.0.1:443(203.0.113.1:12345)
hook=pre dir=reply act=dnat 10.0.0.1:443->203.0.113.1:12345(192.168.1.100:54321)
misc=0 policy_id=5 auth_info=0 vd=0特に重要な項目は「policy_id」(どのポリシーにマッチしたか)、「hook=post dir=org act=snat」(NATの変換内容)、「statistic」(通信量の統計)です。
本番環境でフィルタなしの「diagnose sys session list」を実行すると、数万行以上の出力が発生しCLIがフリーズする可能性があります。必ずフィルタを設定してから実行してください。
FortiGateに標準搭載されているパケットキャプチャ機能は、Linuxのtcpdumpをベースとしています。外部機器やミラーポートが不要で、その場ですぐにパケット解析ができます。
# 基本構文: diagnose sniffer packet <interface> '<filter>' <verbose> <count> <tsformat>
# port1のHTTPS通信をキャプチャ(詳細レベル4、100パケットまで)
FortiGate # diagnose sniffer packet port1 'host 192.168.1.100 and port 443' 4 100 a
# 全インターフェースでICMPをキャプチャ
FortiGate # diagnose sniffer packet any 'icmp' 4 50 a
# 特定サブネット間の通信をキャプチャ
FortiGate # diagnose sniffer packet any 'net 192.168.1.0/24 and net 10.0.0.0/24' 4 100 a図1: sniffer verboseレベルと情報量の比較
# 出力例(verbose=4)
2026-04-12 09:15:23.456 port1 in 192.168.1.100.54321 -> 10.0.0.1.443: syn 1234567890
2026-04-12 09:15:23.457 wan1 out 203.0.113.1.12345 -> 10.0.0.1.443: syn 1234567890
2026-04-12 09:15:23.485 wan1 in 10.0.0.1.443 -> 203.0.113.1.12345: syn ack 1234567891
2026-04-12 09:15:23.486 port1 out 10.0.0.1.443 -> 192.168.1.100.54321: syn ack 1234567891この結果から、パケットがport1で受信されFortiGateのSNAT処理を経てwan1から送出されていることが分かります。「in」「out」の表示でパケットの流れを追跡できます。
diagnose debugコマンドを使うと、FortiGateの各デーモンが内部でどのような処理を行っているかをリアルタイムで確認できます。
# デバッグ出力を有効化(必ず最初に実行)
FortiGate # diagnose debug enable
# IPsec VPNのデバッグ(IKEネゴシエーション)
FortiGate # diagnose debug application ike -1
# SSL-VPNのデバッグ
FortiGate # diagnose debug application sslvpn -1
# デバッグを停止
FortiGate # diagnose debug disable
FortiGate # diagnose debug resetdebugコマンドはCPU負荷が高くなるため、本番環境ではタイムアウトを設定してから実行してください。作業完了後は必ず「diagnose debug disable」と「diagnose debug reset」でデバッグを無効化してください。
# IKEデバッグ出力例(Phase1失敗)
ike 0: comes 203.0.113.50:500->198.51.100.1:500,ifindex=5
ike 0: IKEv2 exchange=SA_INIT id=xxxx len=350
ike 0:Site-A: selected proposal #1
ike 0:Site-A: matched proposal id 1
ike 0:Site-A: no matching proposal found
ike 0:Site-A: peer notified: NO_PROPOSAL_CHOSEN
ike 0:Site-A: negotiation failure「no matching proposal found」から、Phase1のプロポーザル(暗号化アルゴリズム、ハッシュ、DHグループ等)が対向と一致していないことが原因だと特定できます。
FortiGate # diagnose vpn tunnel list
name=Site-A ver=2 serial=5 198.51.100.1:0->203.0.113.50:0
bound_if=5 lgwy=static/1 tun=intf/0 mode=auto/1
proxyid_num=1 child_num=1 refcnt=6
stat: rxp=12456 txp=9876 rxb=15234567 txb=8765432
dpd: mode=on-idle on=1 idle=20000ms retry=3 count=0 seqno=156
proxyid=Site-A proto=0 sa=1
src: 0:192.168.1.0-192.168.1.255:0
dst: 0:10.10.0.0-10.10.0.255:0
SA: lifetime/rekey=43200/42380
in-spi=abcdef12 out-spi=12345678stat行のrxp/txp(受信/送信パケット数)が増加していればトンネル通信は正常です。dpd countが増加し続けている場合、対向との接続に問題があります。
図2: VPNトラブルの原因別発生頻度
FortiGate # diagnose hardware deviceinfo nic port1
Name: port1
Driver: igb
State: up
Link: yes
Speed: 1000
Duplex: full
Rx Pkts: 123456789
Tx Pkts: 98765432
Rx Errors: 0
Tx Errors: 0
Rx Drop: 12
Tx Drop: 0Rx Errors/Tx Errors/Rx Dropが増加している場合、物理層(ケーブル不良やSFP障害)の問題が疑われます。
| diagnoseコマンド | 主な確認内容 | 障害タイプ |
|---|---|---|
| sys session stat | セッション数・レート | 性能・容量 |
| sys session list | 個別セッション・ポリシーマッチ | 通信断・NAT |
| sniffer packet | パケット到達確認・フロー追跡 | 通信断・遅延 |
| debug app ike | VPN IKEネゴシエーション | VPN障害 |
| vpn tunnel list | トンネル状態・SA・DPD | VPN障害 |
| hardware deviceinfo nic | NIC統計・エラーカウンタ | 物理層障害 |
ここまでのコマンドを組み合わせた実践的な障害対応手順を紹介します。「特定の通信がFortiGateを通過できない」というよくあるシナリオです。
「diagnose sys session stat」でセッション数が上限に達していないか確認。
「diagnose sniffer packet」で入力/出力インターフェースのパケット到達を確認。
「diagnose sys session filter/list」で該当通信のポリシーマッチを特定。
原因不明の場合は「diagnose debug application」で該当プロセスのログを取得。
FortiGateのdiagnoseコマンドは、ネットワーク障害の原因を素早く特定するための必須ツールです。GUIだけでは分からない情報をCLIから取得でき、障害対応時間を大幅に短縮できます。
- 「diagnose sys session stat/list」でセッション状態とポリシーマッチを確認
- 「diagnose sniffer packet」でリアルタイムのパケットキャプチャを取得
- 「diagnose debug application」でVPN・認証などの内部処理をデバッグ
- 「diagnose vpn tunnel list」でIPsecトンネルの状態とSA情報を確認
- 本番環境ではフィルタ設定とタイムアウト設定を必ず行い、安全に実行する



