質問

質問

必要なものは次のとおりです:

静的 1:1 NAT の背後にある Fortigate デバイスをインターネットの Google Cloud Platform (GCP) VPN ゲートウェイに接続します。

簡略化された ASCII 図:

LOCAL_LAN ---- Fortigate ----- Fiber modem ---- Internet ---- GCP VPN Gateway ----- GCP_VPC

ファイバー モデムは Fortigate に対して NAT 1:1 を実行しており、このモデムでは DMZ モードが呼び出されます。

私はいくつかの指示に従いました:

GCP 上の外部ゲートウェイへの VPN を作成する方法 - Fortigate にパブリック IP が 1 つしかないため、ユースケース #3 になります。 https://cloud.google.com/network-connectivity/docs/vpn/how-to/creating-ha-vpn#gcloud_4

Fortinetとの相互運用性 - Fortigateのインターフェースごとに1つずつ、2つの静的IPを持っていません https://cloud.google.com/community/tutorials/ha-vpn-with-fortigate の使用

IKE v1 の結果:

フェーズ 1 はネゴシエートされますが、問題はフェーズ 2 がまったく取り上げられないことです。Google のトラブルシューティング ガイド:

https://cloud.google.com/network-connectivity/docs/vpn/support/troubleshooting

トンネルを起動するには、ピア ID をパブリック IP として定義する必要があります。

奇妙なのは、FortiGate Phase 1 の localid パラメータでパブリック IP を定義しており、それが GCP VPN ゲートウェイに適切に送信されていることです。

以下に示すように、GCP ログでイベントが確認されます。

{
insertId: "5abgbbg2313tdw"
labels: {1}
logName: "projects/my-project-name-xxxxx/logs/cloud.googleapis.com%2Fipsec_events"
receiveTimestamp: "2021-09-01T21:14:46.610751733Z"
resource: {2}
severity: "DEBUG"
**textPayload: "IDir '201.110.XXX.240' does not match to '201.110.XXX.240'"**
timestamp: "2021-09-01T21:14:46.592461252Z"
}

しかし、問題は、フェーズ 2 が GCP 側でネゴシエートされず、トンネルが削除されることです。ドキュメント化のために、Fortigate の ike デバッグ ログの出力を次に示します。

ike 0:gcp00-0:10752: processed INITIAL-CONTACT
ike 0:gcp00-0: schedule auto-negotiate
ike 0:gcp00-0:10752: no pending Quick-Mode negotiations
[...]
ike 0:gcp00-0:10751: recv ISAKMP SA delete 14cb5d60541aaaaa/d405bbbbf6d06acb

ISAKMP 切断は GCP ログで照合されます。

{
insertId: "5abgbbg2313tdx"
labels: {1}
logName: "projects/my-project-name-xxxxx/logs/cloud.googleapis.com%2Fipsec_events"
receiveTimestamp: "2021-09-01T21:14:46.610751733Z"
resource: {2}
severity: "NOTICE"
textPayload: "deleting IKE_SA vpn_201.110.XXX.240[2662] between 35.242.XXX.165[35.242.XXX.165]...201.110.XXX.240[%any]"
timestamp: "2021-09-01T21:14:46.592502955Z"
}

ネゴシエーションは無限ループでこの状態のままになります。

IKE v2 でテストします。

IKE v2 でも試してみましたが、結果は非常に似ています。トンネルは起動しません。唯一の違いは、FGT 側でパブリック IP を GCP VPN ゲートウェイに送信できないことです。IKEv2 で localid、local-gw、eap パラメータを変更してみましたが、成功しませんでした。GPC の観点からのログは AUTHENTICATION_FAILED です。PSK 認証は完了していますが、ピアが適切に識別されないため、起動しません。FGT の local-gw パラメータを Fortigate の前のモデムのパブリック IP として定義すると、ネゴシエーション自体はまったく完了しません。理由: FGT フェーズ 1 インターフェイス gw でこのパラメータを確立すると、Fortigate は local-gw で定義された IP のソース IP を使用してパケットを送信します。この IP はモデムに対して有効ではないため、パケットは送信されません。

テスト用に ike v1 と ike v2 の 2 つのトンネルを作成したことに注意してください。このため、次のトンネルの IP は異なります。GCP コンソールからの証拠ログは次のとおりです。

{
insertId: "134hqnjg23gnfib"
labels: {1}
logName: "projects/my-project-name-xxxxx/logs/cloud.googleapis.com%2Fipsec_events"
receiveTimestamp: "2021-09-01T21:52:39.566968571Z"
resource: {2}
severity: "DEBUG"
textPayload: "looking for peer configs matching 35.220.XXX.31[%any]...201.110.XXX.240[201.110.XXX.240]"
timestamp: "2021-09-01T21:52:39.552310603Z"
}

{
insertId: "134hqnjg23gnfia"
labels: {1}
logName: "projects/my-project-xxxxxx/logs/cloud.googleapis.com%2Fipsec_events"
receiveTimestamp: "2021-09-01T21:52:39.566968571Z"
resource: {2}
severity: "DEBUG"
textPayload: "parsed IKE_AUTH request 1 [ IDi N(INIT_CONTACT) AUTH N(MSG_ID_SYN_SUP) SA TSi TSr ]"
timestamp: "2021-09-01T21:52:39.552287263Z"
}

質問

IP が正しいにもかかわらず、ike v1 で GCP VPN ゲートウェイがトンネル (フェーズ 2) のセットアップを拒否する理由を知っている人はいますか?

Fortigate のフェーズ 1 定義で IKE v2 IDi または IDr を設定する方法をご存知の方はいらっしゃいますか?

この問題に遭遇した人はいますか? 何か提案はありますか?

答え1

さて、私自身の質問に答えてみましょう。次のようになります。

FortiOS 7.0.1 では、ForiGate が 1:1 NAT を実行する NAT デバイスの背後にある場合、GCP が受け入れてトンネルをセットアップする方法で FortiGate のフェーズ 1 定義の IDi または IDr を定義する方法は文書化されておらず、明示的ではありません。

FGT と GCP VPN ゲートウェイの間に VPN トンネルを設定する唯一の方法は、FortiGate で、GCP VPN に接続しているインターフェースにパブリック IP を直接割り当てることです。

こうすることで、FGT フェーズ 1 定義で、インターフェイスのパブリック IP に「ローカル gw」IP を定義できます。これにより、トンネル ネゴシエーションが完了し、VPN が機能します。

要約すると、FGT が NAT デバイスの背後にある場合は、FGT から GCP への VPN トンネルを設定しないでください。まったく機能しません。

これは、FortiGate 上の単一のパブリック IP と GCP VPN 側の 2 つの IP を IKE v2 を使用して GCP VPN 冗長ゲートウェイに接続する FortiOS 7.0.1 でテストされました。IKE v1 はテストされていません。

関連情報