Azure VPN Gateway と Fortigate で VPN がつながらない場合のトラブルシューティング方法


どこのご家庭にある一般的な Fortigate 100E で Azure と VPN の接続検証をしてみたので、個人的なメモとして残しておきます。

各種ドキュメント

ドキュメントを見ると、Azure 的には FortiOS 5.6 が最小要件みたいですね。Fortigate とは IKEv2 で接続するので、Azure 側はルートベースのゲートウェイを作りましょう。

構成手順

Cookbook の通りに設定すればつながったので省略。

VPN トンネルをクリア

diagnose vpn ike restart
diagnose vpn ike gateway clear

パケット採取

とりあえずパケット採取から。100E はストレージを積んでないので、CLI でキャプチャして、fgt2eth で pcap に変換すれば良さそう。

FG100E # diagnose sniffer packet any "" 6
fgt2eth.exe -in <上記でキャプチャしたテキスト ファイル> -out packet.pcap

VPN トンネルを確認

まず初めに、トンネルの一覧を取得して現状を確認。以下は接続できていない場合の例です。

FG100E # diagnose vpn tunnel list
list all ipsec tunnel in vd 0
------------------------------------------------------
name=Azure ver=2 serial=1 ff.ff.ff.ff:0->aa.aa.aa.aa:0
bound_if=7 lgwy=static/1 tun=intf/0 mode=auto/1 encap=none/8 options[0008]=npu
proxyid_num=1 child_num=0 refcnt=9 ilast=0 olast=0 ad=/0 itn-status=a1
stat: rxp=0 txp=0 rxb=0 txb=0 //切断状態なので、TX/RX ともに 0 になっています
dpd: mode=on-idle on=0 idle=20000ms retry=3 count=0 seqno=129956
natt: mode=none draft=0 interval=0 remote_port=0
proxyid=Azure proto=0 sa=0 ref=1 serial=1
 src: 0:0.0.0.0/0.0.0.0:0
 dst: 0:0.0.0.0/0.0.0.0:0

正常に接続出来ている状態だと、以下のような結果になるはず。

FG100E # diagnose vpn tunnel list
list all ipsec tunnel in vd 0
------------------------------------------------------
name=Azure ver=2 serial=1 xx.xx.xx.xx:0->yy.yy.yy.yy:0
bound_if=7 lgwy=static/1 tun=intf/0 mode=auto/1 encap=none/8 options[0008]=npu
proxyid_num=1 child_num=0 refcnt=12 ilast=6 olast=3 ad=/0 itn-status=a2
stat: rxp=3 txp=2 rxb=312 txb=168 //接続済みであればパケットがカウントされています
dpd: mode=on-idle on=1 idle=20000ms retry=3 count=0 seqno=129979
natt: mode=none draft=0 interval=0 remote_port=0
proxyid=Azure proto=0 sa=1 ref=3 serial=1
 src: 0:0.0.0.0/0.0.0.0:0
 dst: 0:0.0.0.0/0.0.0.0:0

 //先ほどまで表示されていなかった SA の情報が追加で出ています
 SA: ref=6 options=10026 type=00 soft=0 mtu=1438 expire=26584/0B replaywin=1024
 seqno=3 esn=0 replaywin_lastseq=00000003 itn=0
 life: type=01 bytes=0/0 timeout=26731/27000
 dec: spi=101af04b esp=aes key=32 47f48f9be216cd73b0583d192569138e2a44480dfca10e7b41a833f2b565bb3c
 ah=sha1 key=20 8da6cf572039a77cc454e39d294d47842f4fa71c
 enc: spi=b9c6a7b0 esp=aes key=32 d8361980da39eab24e49527f2b1c08ac0583114d7b94228d98b465e1c3366dce
 ah=sha1 key=20 88442398c9fb9fff1d76f6d0fc029ccdf9b50763
 dec:pkts/bytes=3/96, enc:pkts/bytes=2/304
 npu_flag=03 npu_rgwy=aa.aa.aa.aa npu_lgwy=ff.ff.ff.ff npu_selid=0 dec_npuid=1 enc_npuid=1

デバッグログの有効化

トンネルが正しく張れていない場合などは、IKE のデバッグ ログを有効化してみましょう。

トラブルシューティング ガイドには 2 パターン書かれていますが、それぞれ何が違うんだろう・・・。(Phase 1, 2 ?)

diag vpn ike log 
diag debug app ike -1
diag debug enable

デバッグ ログを止める場合は以下のコマンドで。(以降の手順でも同様)

diagnose debug reset
diagnose debug disable

PSK の不一致

PSK が間違っている場合、以下のように明確に pre-shared key mismatch のログが出ます。

ike 0:Azure:230: PSK auth failed: probable pre-shared key mismatch
ike Negotiate SA Error: ike ike [6253]

Proposal Mismatch

SA の Proposal が一致しない (mismatch) 場合、以下のようなログが出ます。

//Fortigate から Azure へ接続要求 (SA_INIT) を送付
ike 0:Azure:781: sent IKE msg (SA_INIT): ff.ff.ff.ff:500->aa.aa.aa.aa:500, len=252, id=c9b9112fd4614416/0000000000000000
ike 0: comes aa.aa.aa.aa:500->ff.ff.ff.ff:500,ifindex=7....
ike 0: IKEv2 exchange=SA_INIT_RESPONSE id=c9b9112fd4614416/d00184a2a68d4b91 len=36
ike 0: in C9B9112FD4614416D00184A2A68D4B91292022200000000000000024000000080000000E

//Azure から応答を受信
ike 0:Azure:781: initiator received SA_INIT response
ike 0:Azure:781: processing notify type NO_PROPOSAL_CHOSEN
ike 0:Azure:781: malformed message
ike 0: comes aa.aa.aa.aa:500->ff.ff.ff.ff:500,ifindex=7....
ike 0: IKEv2 exchange=SA_INIT id=d4455f39cff0dd02/0000000000000000 len=620
ike 0: in D4455F39CFF0DD02000000000000000021202208000000000000026C220001040200002C010100040300000C0100000C800E01000300000803000002030000080200000200000008040000020200002C020100040300000C0100000C800E0100030000080300000C030000080200000500000008040000020200002C030100040300000C0100000C800E00800300000803000002030000080200000200000008040000020200002C040100040300000C0100000C800E0080030000080300000C030000080200000500000008040000020200002805010004030000080100000303000008030000020300000802000002000000080400000200000028060100040300000801000003030000080300000C0300000802000005000000080400000228000088000200004191FDF37EC6B68E1EFC9C40EDCE63919DE238DCD0A45B2B165EE30D6B0050953F4D4617E4449B4E96D455DEB34660FBA90308D82D11F29726B1BE27DB39DDC1605A2AC986F00D7F150649C954FA56ECC0183F1020FEFBCDA895F5A8EF33D959F0C1685C81AE533F1FE4904E2F8E9C4A300E8CD7795D1232910E68C852CAD9DE2900003499BE0BCCC36A0A9785CD1A2648ACB60B6E04D55DD3164797685AA6B06722E13D17CDACB1039FA8C7F01A697901B453442900001C000040048BF34E42B5DCB2F629EA1E8D91A7C71CB30388ED2B00001C00004005727E19E5CC569747EC22A6DD9CC63D94AA49EE642B0000181E2B516905991C7D7C96FCBFB587E461000000092B000014FB1DE3CDF341B7EA16B7E5BE0855F1202B00001426244D38EDDB61B3172A36E3D0CFB8190000001801528BBBC00696121849AB9A1C5B2A5100000002
ike 0:d4455f39cff0dd02/0000000000000000:782: responder received SA_INIT msg
ike 0:d4455f39cff0dd02/0000000000000000:782: received notify type NAT_DETECTION_SOURCE_IP
ike 0:d4455f39cff0dd02/0000000000000000:782: received notify type NAT_DETECTION_DESTINATION_IP

//Azure 側から受け取った proposal
ike 0:d4455f39cff0dd02/0000000000000000:782: incoming proposal:
ike 0:d4455f39cff0dd02/0000000000000000:782: proposal id = 1:
ike 0:d4455f39cff0dd02/0000000000000000:782:   protocol = IKEv2:
ike 0:d4455f39cff0dd02/0000000000000000:782:      encapsulation = IKEv2/none
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=ENCR, val=AES_CBC (key_len = 256)
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=INTEGR, val=AUTH_HMAC_SHA_96
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=PRF, val=PRF_HMAC_SHA
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=DH_GROUP, val=MODP1024.
ike 0:d4455f39cff0dd02/0000000000000000:782: proposal id = 2:
ike 0:d4455f39cff0dd02/0000000000000000:782:   protocol = IKEv2:
ike 0:d4455f39cff0dd02/0000000000000000:782:      encapsulation = IKEv2/none
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=ENCR, val=AES_CBC (key_len = 256)
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=INTEGR, val=AUTH_HMAC_SHA2_256_128
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=PRF, val=PRF_HMAC_SHA2_256
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=DH_GROUP, val=MODP1024.
ike 0:d4455f39cff0dd02/0000000000000000:782: proposal id = 3:
ike 0:d4455f39cff0dd02/0000000000000000:782:   protocol = IKEv2:
ike 0:d4455f39cff0dd02/0000000000000000:782:      encapsulation = IKEv2/none
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=ENCR, val=AES_CBC (key_len = 128)
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=INTEGR, val=AUTH_HMAC_SHA_96
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=PRF, val=PRF_HMAC_SHA
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=DH_GROUP, val=MODP1024.
ike 0:d4455f39cff0dd02/0000000000000000:782: proposal id = 4:
ike 0:d4455f39cff0dd02/0000000000000000:782:   protocol = IKEv2:
ike 0:d4455f39cff0dd02/0000000000000000:782:      encapsulation = IKEv2/none
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=ENCR, val=AES_CBC (key_len = 128)
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=INTEGR, val=AUTH_HMAC_SHA2_256_128
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=PRF, val=PRF_HMAC_SHA2_256
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=DH_GROUP, val=MODP1024.
ike 0:d4455f39cff0dd02/0000000000000000:782: proposal id = 5:
ike 0:d4455f39cff0dd02/0000000000000000:782:   protocol = IKEv2:
ike 0:d4455f39cff0dd02/0000000000000000:782:      encapsulation = IKEv2/none
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=ENCR, val=3DES_CBC
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=INTEGR, val=AUTH_HMAC_SHA_96
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=PRF, val=PRF_HMAC_SHA
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=DH_GROUP, val=MODP1024.
ike 0:d4455f39cff0dd02/0000000000000000:782: proposal id = 6:
ike 0:d4455f39cff0dd02/0000000000000000:782:   protocol = IKEv2:
ike 0:d4455f39cff0dd02/0000000000000000:782:      encapsulation = IKEv2/none
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=ENCR, val=3DES_CBC
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=INTEGR, val=AUTH_HMAC_SHA2_256_128
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=PRF, val=PRF_HMAC_SHA2_256
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=DH_GROUP, val=MODP1024.

//Fortigate 側の proposal
ike 0:d4455f39cff0dd02/0000000000000000:782: my proposal, gw Azure:
ike 0:d4455f39cff0dd02/0000000000000000:782: proposal id = 1:
ike 0:d4455f39cff0dd02/0000000000000000:782:   protocol = IKEv2:
ike 0:d4455f39cff0dd02/0000000000000000:782:      encapsulation = IKEv2/none
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=ENCR, val=DES_CBC
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=INTEGR, val=AUTH_HMAC_MD5_96
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=PRF, val=PRF_HMAC_MD5
ike 0:d4455f39cff0dd02/0000000000000000:782:         type=DH_GROUP, val=MODP1024.

//no proposal chosen で Fortigate と Azure の proposal が一致しないためエラーになっている
ike 0:d4455f39cff0dd02/0000000000000000:782: lifetime=28800
ike 0:d4455f39cff0dd02/0000000000000000:782: no proposal chosen
ike Negotiate SA Error: ike ike  [9697]

正常な場合のログは以下。

//Fortigate から Azure へ接続要求 (SA_INIT) を送付
ike 0:Azure:815: sent IKE msg (SA_INIT): ff.ff.ff.ff:500->aa.aa.aa.aa:500, len=340, id=a773817d787e06a4/0000000000                                                                                                                        000000
ike 0: comes aa.aa.aa.aa:500->ff.ff.ff.ff:500,ifindex=7....
ike 0: IKEv2 exchange=SA_INIT_RESPONSE id=a773817d787e06a4/5d4182e9c4e71157 len=364
ike 0: in A773817D787E06A45D4182E9C4E7115721202220000000000000016C220000300000002C010100040300000C0100000C800E0100030                                                                                                                        000080300000203000008020000020000000804000002280000880002000041168ABAA25B349FEF74B97112D464ACBDD24E9D415DB600ADA95C48                                                                                                                        F9FB09DD63388A7C14FDBF75EA926F25A97DFED9BDE66FD5E614A7B3FA0E6E72C4D25F018B709EFECFCDCADD3D3407B3821658A63EC9B9396EDCC                                                                                                                        AAFC79B68362928275364452E4513CD12AAD700846D45E52A8C91B3DF1168BE4A28BFCCCA1030949CAD29000034C2C8CB225C4F02C82BA41D222F                                                                                                                        C47318C9BB968E42109586814018DD44781D172DA7821374A5C71FF61120A6D5D8ADE92900001C0000400412B129D9A38E93680D50A89633A517B                                                                                                                        C0DF692582B00001C0000400572B08CE048FE1A5A0644D512093F674262CDEACE2B0000181E2B516905991C7D7C96FCBFB587E461000000090000                                                                                                                        0014FB1DE3CDF341B7EA16B7E5BE0855F120

//Azure から応答を受信
ike 0:Azure:815: initiator received SA_INIT response
ike 0:Azure:815: processing notify type NAT_DETECTION_SOURCE_IP
ike 0:Azure:815: ignoring unauthenticated notify payload (NAT_DETECTION_SOURCE_IP)
ike 0:Azure:815: processing notify type NAT_DETECTION_DESTINATION_IP
ike 0:Azure:815: ignoring unauthenticated notify payload (NAT_DETECTION_DESTINATION_IP)

//Azure 側から受け取った proposal
ike 0:Azure:815: incoming proposal:
ike 0:Azure:815: proposal id = 1:
ike 0:Azure:815:   protocol = IKEv2:
ike 0:Azure:815:      encapsulation = IKEv2/none
ike 0:Azure:815:         type=ENCR, val=AES_CBC (key_len = 256)
ike 0:Azure:815:         type=INTEGR, val=AUTH_HMAC_SHA_96
ike 0:Azure:815:         type=PRF, val=PRF_HMAC_SHA
ike 0:Azure:815:         type=DH_GROUP, val=MODP1024.

//Fortigate 側と一致した proposal
ike 0:Azure:815: matched proposal id 1
ike 0:Azure:815: proposal id = 1:
ike 0:Azure:815:   protocol = IKEv2:
ike 0:Azure:815:      encapsulation = IKEv2/none
ike 0:Azure:815:         type=ENCR, val=AES_CBC (key_len = 256)
ike 0:Azure:815:         type=INTEGR, val=AUTH_HMAC_SHA_96
ike 0:Azure:815:         type=PRF, val=PRF_HMAC_SHA
ike 0:Azure:815:         type=DH_GROUP, val=MODP1024.

//INITIAL-CONTACT を送付
ike 0:Azure:815: lifetime=28800
ike 0:Azure:815: IKE SA a773817d787e06a4/5d4182e9c4e71157 SK_ei 32:936D0D524FBD63007463875227CCF5EBF8E57329DEB3CAA91E                                                                                                                        3E2EB2E888CD10
ike 0:Azure:815: IKE SA a773817d787e06a4/5d4182e9c4e71157 SK_er 32:47962985DA68DEB918F4046430BE910B47081089B99EF38507                                                                                                                        1C0B517A3B0AAA
ike 0:Azure:815: IKE SA a773817d787e06a4/5d4182e9c4e71157 SK_ai 20:289FE8FA93A7F8428E837BFBAF9C0DEAB3315E65
ike 0:Azure:815: IKE SA a773817d787e06a4/5d4182e9c4e71157 SK_ar 20:CCA087CA7FFBC1F6F89A56A6EF762EEDA60EA9D4
ike 0:Azure:815: initiator preparing AUTH msg
ike 0:Azure:815: sending INITIAL-CONTACT

 

あ、当然ですが Fortigate のコンフィグとかトラブルシューティングは Fortinet 社に確認してくださいね。MS から各社の VPN デバイスについて正式な回答とかできるはずもないので、その辺は是非とも空気読んでくださいませ。

 

また気が向いたら追記します。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です