Невозможно подключить Fortigate VPN за статическим NAT к VPN-шлюзу GCP.
Вот необходимость:
Подключите устройство Fortigate за статическим NAT 1:1 к Интернету через VPN-шлюз Google Cloud Platform (GCP).
Упрощенная диаграмма ASCII:
LOCAL_LAN ---- Fortigate ----- Fiber modem ---- Internet ---- GCP VPN Gateway ----- GCP_VPC
Оптоволоконный модем выполняет NAT 1:1 к Fortigate, на этом модеме вызывается режим DMZ.
Я выполнил несколько инструкций:
Как создать VPN для внешнего шлюза на GCP. Я использую вариант №3, поскольку у меня есть только один общедоступный IP-адрес на Fortigatehttps://cloud.google.com/network-connectivity/docs/vpn/how-to/creating-ha-vpn#gcloud_4
Совместимость с Fortinet. У меня нет двух статических IP-адресов, по одному на каждый интерфейс Fortigatehttps://cloud.google.com/community/tutorials/using-ha-vpn-with-fortigate .
Результаты с IKE v1:
Фаза 1 обсуждается, проблема в том, что Фаза 2 никогда не обсуждается. Руководство по устранению неполадок в Google:
https://cloud.google.com/network-connectivity/docs/vpn/support/troubleshooting
Говорит: надо определить Peer ID как публичный IP, чтобы туннель поднялся.
Что странно, так это то, что я определил в параметре localid FortiGate Phase 1 общедоступный IP-адрес, и он правильно отправляется на VPN-шлюз GCP.
Это событие подтверждено в журналах 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. Я пытался изменить параметры localid, local-gw и eap на IKEv2, но безуспешно. Журнал с точки зрения GPC — AUTHENTICATION_FAILED. Аутентификация PSK завершена, но поскольку одноранговые узлы никогда не идентифицируются должным образом, она никогда не активируется. Если я определяю параметр local-gw на FGT как общедоступный IP-адрес модема перед Fortigate, само согласование вообще не может быть завершено. Причина: при установке этого параметра на интерфейсе gw фазы 1 FGT Fortigate будет отправлять пакеты с ИСТОЧНЫМ IP-адресом, определенным локальным gw. Поскольку этот IP-адрес недействителен для модема, пакет никогда не отправляется.
Важно отметить, что для тестирования я сделал 2 туннеля, один на ike v1, а другой на ike v2. Из-за этого 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"
}
ВОПРОСЫ
Кто-нибудь знает, почему в ike v1, даже если IP-адреса правильные, шлюз GCP VPN отказывается устанавливать туннель (фаза 2)?
Кто-нибудь знает способ установить IKE v2 IDi или IDr в определении фазы 1 на Fortigate?
Кто-нибудь видел эту проблему раньше? Какие-либо предложения?
1 ответ
Ну, отвечая на мой собственный вопрос. Вот оно:
В FortiOS 7.0.1, когда ForiGate находится за устройством NAT, выполняющим NAT 1:1, не существует документированного или явного способа определить IDi или IDr определения первой фазы на FortiGate таким образом, чтобы GCP принял его для настройки. туннель.
Единственный способ настроить VPN-туннель между FGT и GCP VPN-шлюзом — это назначить FortiGate общедоступный IP-адрес непосредственно интерфейсу, который подключается к GCP VPN.
Таким образом, вы можете определить IP-адрес «локального gw» для интерфейса, общедоступный IP-адрес в определении FGT Phase 1. На этом согласование туннеля завершено и VPN работает.
Таким образом, НЕ ПЫТАЙТЕСЬ настроить туннель FGT-GCP VPN, когда FGT находится за устройством NAT. Это вообще не сработает!
Это было протестировано с использованием FortiOS 7.0.1, подключенного к резервным шлюзам GCP VPN с одним общедоступным IP-адресом на FortiGate и Двумя IP-адресами на стороне GCP VPN с использованием IKE v2. IKE v1 не тестировался.