FortiGateのトラブルシューティングにおいて最も強力な武器となるのがdiagnoseコマンドです。GUIでは確認できない詳細なセッション情報、パケットキャプチャ、デバッグログなどをCLIから直接取得でき、障害の原因特定を大幅に加速できます。本記事では、現場で実際に使用頻度の高いdiagnoseコマンドを体系的に解説し、実践的なトラブルシューティング手順を紹介します。

現場での体験談

以前、FortiGateを経由した特定の通信が突然遮断される障害に遭遇しました。ポリシーログには何も表示されず、GUIのセッションモニターでも原因が分かりませんでした。最終的に「diagnose sniffer packet」でパケットキャプチャを行い、FortiGateがTCP RSTを返していることを発見。「diagnose sys session list」でセッション数が上限に達していたことが判明しました。

diagnoseコマンドを知っているかどうかで、障害対応の速度が劇的に変わります。この記事で紹介するコマンドは、すべて私が実際の現場で何度も使ってきたものばかりです。

diagnoseコマンドの基本と全体像

FortiGateのdiagnoseコマンドは、通常のshow/get/configコマンドとは異なり、機器のリアルタイム動作状態を直接確認・操作するためのコマンド群です。主に以下のカテゴリに分類されます。

コマンドカテゴリ主な用途使用頻度
diagnose sys sessionセッションテーブルの確認・フィルタリング非常に高い
diagnose sniffer packetパケットキャプチャ(tcpdump相当)非常に高い
diagnose debugアプリケーションのリアルタイムデバッグ高い
diagnose vpn tunnelVPNトンネルの状態確認高い
diagnose hardwareハードウェア・NIC情報の取得中程度
セッション管理コマンド(diagnose sys session)
セッション統計の確認(session stat)

まず最初に確認すべきは現在のセッション統計です。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 sessions

session_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: 443
セッションリストの読み方
FortiGate # 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がフリーズする可能性があります。必ずフィルタを設定してから実行してください。

パケットキャプチャ(diagnose sniffer packet)

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レベルと情報量の比較

Level 1(IP)
20%
Level 2(+Ethernet)
35%
Level 3(+Hex)
65%
Level 4(+IF名)
80%
# 出力例(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)

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 reset
⚠ 注意

debugコマンドはCPU負荷が高くなるため、本番環境ではタイムアウトを設定してから実行してください。作業完了後は必ず「diagnose debug disable」と「diagnose debug reset」でデバッグを無効化してください。

IKE VPNデバッグの実例
# 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グループ等)が対向と一致していないことが原因だと特定できます。

VPNトンネル管理(diagnose vpn tunnel)
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=12345678

stat行のrxp/txp(受信/送信パケット数)が増加していればトンネル通信は正常です。dpd countが増加し続けている場合、対向との接続に問題があります。

図2: VPNトラブルの原因別発生頻度

プロポーザル不一致
35%
事前共有鍵の不一致
25%
ルーティング問題
20%
NAT-T/ポート問題
20%
ハードウェア・NIC情報(diagnose hardware)
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:        0

Rx Errors/Tx Errors/Rx Dropが増加している場合、物理層(ケーブル不良やSFP障害)の問題が疑われます。

diagnoseコマンド主な確認内容障害タイプ
sys session statセッション数・レート性能・容量
sys session list個別セッション・ポリシーマッチ通信断・NAT
sniffer packetパケット到達確認・フロー追跡通信断・遅延
debug app ikeVPN IKEネゴシエーションVPN障害
vpn tunnel listトンネル状態・SA・DPDVPN障害
hardware deviceinfo nicNIC統計・エラーカウンタ物理層障害
実践トラブルシューティング手順

ここまでのコマンドを組み合わせた実践的な障害対応手順を紹介します。「特定の通信がFortiGateを通過できない」というよくあるシナリオです。

1
セッション統計の確認

「diagnose sys session stat」でセッション数が上限に達していないか確認。

2
パケットキャプチャで到達確認

「diagnose sniffer packet」で入力/出力インターフェースのパケット到達を確認。

3
セッションテーブルを確認

「diagnose sys session filter/list」で該当通信のポリシーマッチを特定。

4
デバッグログで詳細分析

原因不明の場合は「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情報を確認
  • 本番環境ではフィルタ設定とタイムアウト設定を必ず行い、安全に実行する