はじめに
Fortigateで IPsec VPNを利用している場合のトラブルシューティングについて、メーカーの Knowledge Baseや Handbookなどから情報を集めまとめてみました。
参考URLについては、記事末尾にリンクを貼ってます。
情報収集
トラブルシューティングを行う前に、以下の情報を確認しておきます。
トラブルシューティングで使用するコマンド
IPsec VPNのトラブルシューティーングでは 以下のコマンドを使用します。
# get ipsec tunnnel list # get vpn ipsec tunnel summary # diagnose vpn ike gateway list # diagnose vpn tunnel list
上記はもっとも基本的な構成(VDOM環境でないスタンドアローン構成)でのコマンド例になります。
VDOM環境の場合、 VDOM設定内で実行する必要があります。
# config vdom # edit VDOM名 (VDOM名を入力)
トラブルシューティング実行例
1. 問題がある IPsec VPN通信の識別
以下のコマンドで、IPsec VPNのトンネル情報概要を取得します。
# get vpn ipsec tunnel summary 'to10.174.0.182' 10.174.0.182:0 selectors(total,up): 1/1 rx(pkt,err): 1921/0 tx(pkt,err): 69/2 'to10.189.0.182' 10.189.0.182:0 selectors(total,up): 1/0 rx(pkt,err): 0/0 tx(pkt,err): 0/0
上記の例では、2つのVPNトンネル情報(to10.174.0.182とto10.189.0.182)が表示されています。
リストの2番目のVPNトンネルはセレクタがダウン状態になっているので、問題が発生していると考えられます。
2. IKE フェーズ 1の状態確認
IKEフェーズ 1が確立されているか確認
1で確認した問題が発生していると思われるトンネルのフェーズ 1の状態を以下のコマンドで確認します。
# diagnose vpn ike gateway list name to10.189.0.182 vd: root/0 name: to10.189.0.182 version: 1 interface: port9 10 addr: 10.189.0.31:500 -> 10.189.0.182:500 created: 15s ago IKE SA: created 1/1 IPsec SA: created 0/0 id/spi: 19576 a83334b3c66f871b/0000000000000000 direction: responder status: connecting, state 3, started 15s ago
コマンド出力結果の中の「status」部分を確認します。
ステータスは「Established」か「Connectiong」のどちらかが出力されます。それぞれの意味は以下の通りです。
ステータス | 意味 |
---|---|
Established | フェーズ 1 がアップし確立している |
Connecting | 接続はフェーズ 1 がダウンしている |
フェーズ 1 がダウンしている場合は、追加のチェックを行い、原因を特定します。
IKEフェーズ 1が確立されていない場合
# execute traceroute-options source 10.189.0.31 # execute traceroute 10.189.0.182
- IKE通信(500番ポート または 4500番ポート )が経路上のどこかでブロックされていないか確認 以下のコマンドで、パケットキャプチャを実行します。
# diagnose sniffer packet any 'host 10.189.0.182 and port 500' 4 0 l interfaces=[any] filters=[host 10.189.0.182 and port 500]
※4500番ポートを確認する場合は上記コマンド中の "500" の部分を "4500"にして実行。
※diagnose snifer コマンドの使用方法詳細については、以下の記事を参照してください。
# diagnose vpn ike log-filter dst-addr4 10.189.0.182 # diagnose debug application ike -1 # diagnose debug enable
3. IKE フェーズ 2の状態確認
IKEフェーズ 1が確立状態だった場合は、以下のコマンドで IKEフェーズ 2の状態を確認します。
# diagnose vpn tunnel list name 10.189.0.182 list all ipsec tunnel in vd 0 name=to10.189.0.182 ver=1 serial=2 10.189.0.31:0->10.189.0.182:0 bound_if=10 lgwy=static/1 tun=intf/0 mode=auto/1 encap=none/8 options[0008]=npu proxyid_num=1 child_num=0 refcnt=10 ilast=25 olast=25 ad=/0 stat: rxp=0 txp=0 rxb=0 txb=0 dpd: mode=on-demand on=0 idle=20000ms retry=3 count=0 seqno=534 natt: mode=none draft=0 interval=0 remote_port=0 proxyid=to10.189.0.182 proto=0 sa=0 ref=1 serial=4 src: 0:172.16.170.0/255.255.255.0:0 dst: 0:192.168.50.0/255.255.255.0:0
コマンド出力結果の中の「sa=0」の部分を確認します。
saは以下の3つの値を持つことができます。
saの値 | 意味 |
---|---|
0 | セレクタ間に不一致があるか、トラフィックが開始されていないことを示す。 |
1 | IPsec SA が一致しており、セレクタ間にトラフィックがあることを示す。 |
2 | IPsecのSAリキー時にのみ表示される。 |
最後に、IKEフェーズ 2 の暗号化アルゴリズムとハッシュアルゴリズムがミスマッチしている場合が考えられます。 そのようなエラーを特定するためには、上記で説明したように IKE デバッグを実行する必要があります。
よくある不具合の原因と対処方法
IPsec VPNはアップしているが、ネットワークにアクセスできない
2つのFortiGates間のサイト間VPNとトンネルのステータスはアップしているのに、ローカルとリモートの両方のサブネットがお互いに到達できないか、一方通行の通信しかできない場合。
原因
クイックモードセレクタの不一致
送信元NATが有効になっている
ルーティングの誤り
対処方法
- クイックモードセレクタの不一致
→クイックモードセレクタの設定に誤りがないか確認する。
- 送信元 NATが有効になっている
→IPsec VPN用のファイアウォールポリシーで送信元 NATを無効する。
- ルーティングの誤り
→IPsec VPNトラフィック用の経路(宛先やゲートウェイ)を正しく設定する。
IKEデバッグログに "could not send IKE Packet" が出力される
原因
ローカルの Fortigateからリモートの Fortigateへのアクティブなスタティックルートがない
対処方法
以下のコマンドでルーティングテーブルの情報を確認し、スタティックルートを正しく設定する
# get router info routing-table
参考URL
Knowledge Base: Troubleshooting IPsec VPNs
Knowledge Base: Phase 2 status in ipsec monitor page
Knowledge Base: Troubleshooting Tip: IPsec VPN Phase 1 Process - Aggressive Mode
Knowledge Base: IPsec VPN 'could not send IKE Packet' message
Knowledge Base: IPsec VPN is up but network is not reachable