INTEGRITY Документация

Microsoft Azure VPN Gateway

В этом руководстве приведены сведения о том, как подключить Cloudflare WAN (ранее Magic WAN) к вашей Azure Virtual Network с помощью Azure Virtual Network Gateway.

Предварительные требования

У вас уже должны быть созданы группа ресурсов, виртуальная сеть и виртуальная машина в вашем аккаунте Azure. См. Документация Microsoft чтобы узнать больше о том, как их создавать.

Настройте Azure Virtual Network Gateway

1. Создайте Gateway subnet

У вас уже должна быть создана виртуальная сеть (VNET) с назначенной ей подсетью. Следующий шаг: создать подсеть шлюза, которую Azure будет использовать для адресации служб, связанных с Azure Virtual Network Gateway. Если подсеть шлюза уже создана, Azure не позволит создать вторую: в этом случае обновите настройки существующей подсети шлюза.

  1. Перейдите в свой Виртуальная сеть > Подсети.
  2. Выберите опцию, чтобы добавить Подсеть Gateway.
  3. Настройте диапазон адресов подсети. Подсеть шлюза должна находиться в пределах адресного пространства виртуальной сети и иметь маску подсети /27 или новее.
  4. Убедитесь, что все остальные параметры заданы как None.

2. Создайте Virtual Network Gateway

Virtual Network Gateway используется для формирования туннеля к устройствам в вашей локальной сети.

Конфигурация Active/Active

  1. Создайте Virtual Network Gateway.
  2. Создайте два новых публичных IP-адреса или используйте существующие. Запишите публичные IP-адреса, назначенные Virtual Network Gateway, так как они будут Клиентский endpoint для настройки туннелей IPsec в Cloudflare WAN.
  3. Перейдите к Virtual Network Gateway, созданному ранее.
  4. В Конфигурация, включите Режим Active-Active и отключите Частные IP-адреса Gateway.
  5. Выберите Создание.

Конфигурация Active/Standby

  1. Создайте Virtual Network Gateway.
  2. Создайте новый публичный IP-адрес или используйте существующий. Запишите публичный IP-адрес, назначенный Virtual Network Gateway, так как это будет Клиентский endpoint для настройки туннелей IPsec в Cloudflare WAN.
  3. Выберите группу ресурсов и VNET, которые вы уже создали.
  4. В Конфигурация, отключите Режим Active-Active и Частные IP-адреса Gateway.
  5. Выберите Создание.

Настройте Cloudflare WAN

  1. Создайте Туннель IPsec в Cloudflare dashboard.
  2. Убедитесь, что у вас настроены следующие параметры:
    1. Адрес интерфейса: Так как Azure Local Network Gateway позволяет указывать только нижний IP-адрес в /31 подсети добавьте верхний IP-адрес в пределах /31 подсеть. Вы настроите соответствующий /32 адрес в Azure на следующем шаге (см. Настройте Local Network Gateway для проверки работоспособности туннеля IPsec). См. Конечные точки туннеля для дополнительных сведений.
    2. Клиентский endpoint: Публичный IP-адрес, связанный с вашим Azure Virtual Network Gateway. Например, 40.xxx.xxx.xxx.
    3. конечная точка Cloudflare: Используйте один из anycast-адресов Cloudflare, назначенных вашему аккаунту, доступных в Арендованные IP-адреса. Это также будет IP-адрес, соответствующий Local Network Gateway в Azure. Например, 162.xxx.xxx.xxx.
    4. Частота проверки работоспособности: Оставьте выбранным вариант по умолчанию (Medium).
    5. Тип проверки работоспособности: Оставьте выбранным вариант по умолчанию (Reply).
    6. Направление проверки работоспособности: Оставьте выбранным вариант по умолчанию (Bidirectional).
    7. Цель проверки работоспособности: Выберите Custom.
    8. Адрес цели: Введите тот же адрес, что указан в Клиентский endpoint поле.
    9. Добавить общий ключ позже: Выберите этот вариант, чтобы создать PSK, который будет использоваться позже в Azure.
    10. Защита от повторного воспроизведения: Включить.
  3. Если вы используете конфигурацию Active/Active, выберите Добавление IPsec-туннеля и повторите шаг 2, чтобы создать второй туннель Cloudflare WAN IPsec. Используйте тот же конечная точка Cloudflare как и для первого туннеля.
  4. Выберите Добавить Tunnels когда вы закончите.
  5. Панель управления Cloudflare покажет вам список ваших туннелей. Измените созданный туннель (или туннели) > выберите Создайте новый предварительный общий ключ > скопируйте сгенерированный ключ. Если используется конфигурация Active/Active, выберите Изменить на новый пользовательский предварительный общий ключ (PSK) на втором туннеле и используйте PSK, сгенерированный для первого туннеля.
  6. Создайте статические маршруты для подсетей вашей Azure Virtual Network, указав только что созданный туннель в качестве next hop.

Завершите настройку Azure

1. Создайте Local Network Gateway

Local Network Gateway обычно означает ваше локальное расположение. В этом случае Local Network Gateway представляет сторону Cloudflare в этом соединении.

Рекомендуем создать Local Network Gateway для туннеля IPsec Cloudflare.

  1. Создайте новый local network gateway.
  2. В Сведения об экземпляре > Конечная точка, выберите IP-адрес и введите anycast-адрес Cloudflare в поле IP-адреса.
  3. В Адресное пространство(а), укажите диапазон адресов любых подсетей, к которым нужен удалённый доступ через подключение Cloudflare WAN. Например, если нужно обратиться к сети с диапазоном IP-адресов 192.168.1.0/24, и эта сеть подключена к вашему тенанту Cloudflare WAN, добавьте 192.168.1.0/24 к адресному пространству локального сетевого шлюза.
  4. Перейдите в Продвинутый уровень вкладка > Настройки BGP, и обязательно выберите Нет.

2. Настройте Local Network Gateway для проверки работоспособности туннеля IPsec

Cloudflare WAN использует Tunnel Health Checks и отслеживайте, доступен ли туннель.

Проверки работоспособности туннеля используют зонды ICMP, отправляемые со стороны Cloudflare туннеля IPsec на удалённую конечную точку (Azure). Зонды отправляются с адреса интерфейса туннеля, который вы указываете в двух местах:

  1. Cloudflare Dashboard: В конфигурации туннеля IPsec в качестве адреса виртуального туннельного интерфейса (VTI) (чтобы Cloudflare знал, с какого адреса отправлять пробы). Cloudflare требует указывать этот адрес в нотации бесклассовой междоменной маршрутизации (CIDR) с /31 маска подсети.
  2. Azure Portal: В адресном пространстве вашего VPN-сайта (чтобы Azure направлял ответы на пробы обратно через туннель). Azure требует указывать этот адрес в нотации CIDR с /32 маска подсети.

Cloudflare рекомендует клиентам выбирать уникальный /31 подсеть (RFC 1918 - Address Allocation for Private Internets) для каждого туннеля IPsec, который рассматривается как канал Point-to-Point и обеспечивает оптимальную схему адресации, удовлетворяющую обоим требованиям.

Пример:

Чтобы настроить Address Space для Local Network Gateway с целью поддержки Tunnel Health Checks:

  1. Измените Local Network Gateway, настроенный в предыдущем разделе.
  2. Выберите Соединения.
  3. В разделе Адресное пространство(а) добавьте адрес интерфейса туннеля IPsec с панели управления Cloudflare в нотации CIDR (например, 10.252.3.55/32).
  4. При использовании конфигурации Active/Active также добавьте адрес интерфейса второго IPsec туннеля из Cloudflare Dashboard в нотации CIDR (например, 10.252.3.56/32) в разделе Адресное пространство(а). Оба адреса интерфейса туннеля необходимо настроить в Local Network Gateway Address Space, чтобы оба туннеля оставались в состоянии healthy.
  5. Выберите Save.

3. Создайте IPsec VPN Connection

Выберите следующие настройки при создании VPN Connection:

  1. Шлюз виртуальной сети: Выберите Virtual Network Gateway, который вы создали в Создайте Virtual Network Gateway.
  2. Local network gateway: Выберите Local Network Gateway, созданный в Создайте Local Network Gateway.
  3. Используйте Azure Private IP Address: Отключено
  4. BGP: Отключено
  5. Политика IPsec/IKE: Custom
    1. IKE, фаза 1
      1. Шифрование: GCMAES256
      2. Integrity/PRF: SHA384
      3. DH Group: ECP384
    2. IKE, фаза 2 (IPsec)
      1. IPsec Encryption: GCMAES256
      2. IPsec Integrity: GCMAES256
      3. PFS Group: ECP384
    3. IPsec SA lifetime in KiloBytes: 0
    4. IPsec SA lifetime in seconds: 28800
    5. Использовать селектор трафика на основе политик: Отключить
    6. Тайм-аут DPD в секундах: 45
    7. Режим подключения: InitiatorOnly
    8. Использовать пользовательские селекторы трафика: Отключено
  6. После создания подключения выберите Настройки > Аутентификация, и введите свой PSK (он должен совпадать с PSK, используемым в конфигурации Cloudflare WAN).

Повторите этот процесс, чтобы задать параметры Connection to the Local Network Gateway, соответствующей резервному anycast IP-адресу Cloudflare.

4. Направьте весь интернет-трафик через Cloudflare WAN и Cloudflare Gateway

Клиенты Cloudflare Zero Trust могут направлять исходящий в интернет трафик через Cloudflare WAN в интернет через Cloudflare Gateway.

Microsoft не разрешает указывать маршрут по умолчанию (0.0.0.0/0) в разделе Address Space шлюза Local Network Gateway. Однако это ограничение можно обойти с помощью суммирования маршрутов.

  1. Перейдите в Local network gateways и выберите нужный объект.
  2. Перейдите в Конфигурация > Адресное пространство(а) и укажите следующие две подсети: 0.0.0.0/1 & 128.0.0.0/1.
  3. Не удаляйте подсеть, настроенную для поддержки проверок работоспособности туннеля.
  4. Выберите Save.

Установите Cloudflare Zero Trust CA Certificate

Если вы решите направлять весь трафик в интернет через Cloudflare WAN и хотите воспользоваться Расшифровка TLS для HTTPS, потребуется установить и добавить в доверенные сертификат корневого центра сертификации (CA) Cloudflare Zero Trust на устройства ваших пользователей. Вы можете либо установить сертификат, предоставленный Cloudflare (вариант по умолчанию), либо создать собственный сертификат и загрузить его в Cloudflare.

Более подробную информацию об установке корневого сертификата CA можно найти в Сертификаты на стороне пользователя в документации Cloudflare Zero Trust.

После установки корневого сертификата CA откройте веб-браузер или используйте curl, чтобы проверить подключение к интернету:

curl https://ipinfo.io
{
	"ip": "104.xxx.xxx.225",
	"city": "Reston",
	"region": "Virginia",
	"country": "US",
	"loc": "xx.xxxx,-xx.xxxx",
	"org": "AS13335 Cloudflare, Inc.",
	"postal": "20190",
	"timezone": "America/New_York",
	"readme": "https://ipinfo.io/missingauth"
}

Проверить подключение и отключить защиту от повторного воспроизведения (anti-replay) Azure Virtual Network Gateway

После того как вы убедитесь, что соединение установлено, Cloudflare рекомендует отключить защиту от повторного воспроизведения (anti-replay) для VPN-подключения site-to-site Azure Virtual Network Gateway. Сделать это можно через Microsoft Azure API.

  1. Определите токен API с помощью PowerShell:
Get-AzAccessToken
Token: eyJ0e<REDACTED>AH-PdSPg
ExpiresOn : 04/08/2024 23:32:47 +00:00
Type      : Bearer
TenantId  : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
UserId    : [email protected]
  1. Выполните вызов API, чтобы отобразить сведения о VPN-подключении «сеть-сеть», связанном со шлюзом Azure Virtual Network Gateway (GET запрос):
curl --location 'https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.Network/virtualNetworkGateways/{{virtualNetworkGatewayName}}?api-version=2022-05-01' \
--header 'Authorization: Bearer eyJ0e<REDACTED>AH-PdSPg'
  1. Скопируйте и вставьте весь ответ в текстовый редактор:
{
    "name": "{{virtualNetworkGatewayName}}",
    "id": "/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.Network/virtualNetworkGateways/{{virtualNetworkGatewayName}}",
    "etag": "W/\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"",
    "type": "Microsoft.Network/virtualNetworkGateways",
    "location": "eastus"
    },
    "properties": {
        "provisioningState": "Succeeded",
        "resourceGuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "packetCaptureDiagnosticState": "None",
        "enablePrivateIpAddress": false,
        "isMigrateToCSES": false,
        "ipConfigurations": [
            {
                "name": "default",
                "id": "/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.Network/virtualNetworkGateways/{{virtualNetworkGatewayName}}/ipConfigurations/default",
                "etag": "W/\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"",
                "type": "Microsoft.Network/virtualNetworkGateways/ipConfigurations",
                "properties": {
                    "provisioningState": "Succeeded",
                    "privateIPAllocationMethod": "Dynamic",
                    "publicIPAddress": {
                        "id": "/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.Network/publicIPAddresses/{{virtualNetworkGatewayPublicIpAddress}}"
                    },
                    "subnet": {
                        "id": "/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.Network/virtualNetworks/{{virtualNetworkGatewayName}}/subnets/GatewaySubnet"
                    }
                }
            }
        ],
        "natRules": [],
        "virtualNetworkGatewayPolicyGroups": [],
        "enableBgpRouteTranslationForNat": false,
        "disableIPSecReplayProtection": false,
        "sku": {
            "name": "VpnGw2AZ",
            "tier": "VpnGw2AZ",
            "capacity": 2
        },
        "gatewayType": "Vpn",
        "vpnType": "RouteBased",
        "enableBgp": false,
        "activeActive": false,
        "bgpSettings": {
            "asn": 65515,
            "bgpPeeringAddress": "172.25.40.30",
            "peerWeight": 0,
            "bgpPeeringAddresses": [
                {
                    "ipconfigurationId": "/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.Network/virtualNetworkGateways/{{virtualNetworkGatewayName}}/ipConfigurations/default",
                    "defaultBgpIpAddresses": [
                        "172.25.40.30"
                    ],
                    "customBgpIpAddresses": [],
                    "tunnelIpAddresses": [
                        "{{CF ANYCAST IP}}"
                    ]
                }
            ]
        },
        "gatewayDefaultSite": {
            "id": "/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.Network/localNetworkGateways/{{localNetworkGatewayName}}"
        },
        "vpnGatewayGeneration": "Generation2",
        "allowRemoteVnetTraffic": false,
        "allowVirtualWanTraffic": false
    }
}
  1. Найдите строку, которая отвечает за отключение защиты anti-replay в IPsec, и измените её значение с false к true:
"disableIPSecReplayProtection": true
  1. Загрузите весь ответ в последующем вызове API (PUT запрос):
curl --location --request PUT \
'https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.Network/virtualNetworkGateways/{{virtualNetworkGatewayName}}?api-version=2022-05-01' \
--header "Authorization: Bearer eyJ0e<REDACTED>AH-PdSPg" \
--header "Content-Type: application/json" \
--data '{
    "name": "{{virtualNetworkGatewayName}}",
    "id": "/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.Network/virtualNetworkGateways/{{virtualNetworkGatewayName}}",
    "etag": "W/\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"",
    "type": "Microsoft.Network/virtualNetworkGateways",
    "location": "eastus"
    },
    "properties": {
        "provisioningState": "Succeeded",
        "resourceGuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "packetCaptureDiagnosticState": "None",
        "enablePrivateIpAddress": false,
        "isMigrateToCSES": false,
        "ipConfigurations": [
            {
                "name": "default",
                "id": "/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.Network/virtualNetworkGateways/{{virtualNetworkGatewayName}}/ipConfigurations/default",
                "etag": "W/\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"",
                "type": "Microsoft.Network/virtualNetworkGateways/ipConfigurations",
                "properties": {
                    "provisioningState": "Succeeded",
                    "privateIPAllocationMethod": "Dynamic",
                    "publicIPAddress": {
                        "id": "/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.Network/publicIPAddresses/{{virtualNetworkGatewayPublicIpAddress}}"
                    },
                    "subnet": {
                        "id": "/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.Network/virtualNetworks/{{virtualNetworkGatewayName}}/subnets/GatewaySubnet"
                    }
                }
            }
        ],
        "natRules": [],
        "virtualNetworkGatewayPolicyGroups": [],
        "enableBgpRouteTranslationForNat": false,
        "disableIPSecReplayProtection": true,
        "sku": {
            "name": "VpnGw2AZ",
            "tier": "VpnGw2AZ",
            "capacity": 2
        },
        "gatewayType": "Vpn",
        "vpnType": "RouteBased",
        "enableBgp": false,
        "activeActive": false,
        "bgpSettings": {
            "asn": 65515,
            "bgpPeeringAddress": "172.25.40.30",
            "peerWeight": 0,
            "bgpPeeringAddresses": [
                {
                    "ipconfigurationId": "/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.Network/virtualNetworkGateways/{{virtualNetworkGatewayName}}/ipConfigurations/default",
                    "defaultBgpIpAddresses": [
                        "172.25.40.30"
                    ],
                    "customBgpIpAddresses": [],
                    "tunnelIpAddresses": [
                        "{{CF ANYCAST IP}}"
                    ]
                }
            ]
        },
        "gatewayDefaultSite": {
            "id": "/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.Network/localNetworkGateways/{{localNetworkGatewayName}}"
        },
        "vpnGatewayGeneration": "Generation2",
        "allowRemoteVnetTraffic": false,
        "allowVirtualWanTraffic": false
    }
}'
  1. Оставьте включённым параметр защиты от повторного воспроизведения в панели управления Cloudflare и подождите несколько минут, прежде чем снова проверять подключение.