Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Microsoft Azure VPN Gateway

最終更新 Markdown で表示Agent セットアップ

このチュートリアルでは、Azure Virtual Network Gateway を使って、Cloudflare WAN(旧称 Magic WAN)を Azure Virtual Network に接続する方法を説明します。

前提条件

Azure アカウントに、既存の Resource group、Virtual Network、Virtual Machine が必要です。作成方法は Microsoft のドキュメント を参照してください。

Azure Virtual Network Gateway を設定する

1. Gateway subnet を作成する

すでに Virtual Network(VNET)があり、サブネットが割り当てられている想定です。次に、Azure が Virtual Network Gateway 関連のサービス用に使う gateway subnet を作成します。すでに gateway subnet がある場合、Azure は 2 つ目の作成を拒否します。その場合は、既存の gateway subnet 設定を更新します。

  1. Virtual Network > Subnets を開きます。
  2. Gateway subnet を追加するオプションを選びます。
  3. サブネットのアドレスレンジを設定します。gateway subnet は仮想ネットワークのアドレス空間に含まれ、サブネットマスクは /27 以上である必要があります。
  4. その他の設定はすべて None にします。

2. Virtual Network Gateway を作成する

Virtual Network Gateway は、拠点側のデバイスへのトンネルを形成するために使います。

Active/Active 構成

  1. Virtual Network Gateway を作成します。
  2. 新しいパブリック IP アドレスを 2 つ作成するか、既存の IP を使います。Virtual Network Gateway に割り当てられたパブリック IP アドレスを控えます。これが Cloudflare WAN の IPsec トンネル設定における Customer endpoint になります。
  3. 先ほど作成した Virtual Network Gateway を開きます。
  4. ConfigurationActive-active mode を有効にし、Gateway Private IPs を無効にします。
  5. Create を選びます。

Active/Standby 構成

  1. Virtual Network Gateway を作成します。
  2. 新しいパブリック IP アドレスを作成するか、既存の IP を使います。Virtual Network Gateway に割り当てられたパブリック IP アドレスを控えます。これが Cloudflare WAN の IPsec トンネル設定における Customer endpoint になります。
  3. すでに作成したリソースグループと VNET を選びます。
  4. ConfigurationActive-active modeGateway Private IPs を無効にします。
  5. Create を選びます。

Cloudflare WAN を設定する

  1. Cloudflare ダッシュボードで IPsec トンネル を作成します。
  2. 次の設定になっていることを確認します。
    1. Interface address: Azure Local Network Gateway は /31 サブネットの下位 IP アドレスしか指定できないため、/31 サブネット内の上位 IP アドレスを追加します。対応する /32 アドレスは、あとで Azure 側で設定します(IPsec トンネルヘルスチェック用に Local Network Gateway を設定する を参照)。詳細は Tunnel endpoints を参照してください。
    2. Customer endpoint: Azure Virtual Network Gateway に関連付けられたパブリック IP です。例: 40.xxx.xxx.xxx
    3. Cloudflare endpoint: Leased IPs で確認できる、アカウントに割り当てられた Cloudflare anycast アドレスのいずれかを使います。このアドレスは Azure 側の Local Network Gateway にも対応します。例: 162.xxx.xxx.xxx
    4. Health check rate: デフォルト(Medium)のままにします。
    5. Health check type: デフォルト(Reply)のままにします。
    6. Health check direction: デフォルト(Bidirectional)のままにします。
    7. Health check target: Custom を選びます。
    8. Target address: Customer endpoint フィールドと同じアドレスを入力します。
    9. Add pre-shared key later: このオプションを選び、あとで Azure で使う PSK を作成します。
    10. Replay protection: Enable
  3. Active/Active 構成を使う場合は Add IPsec tunnel を選び、ステップ 2 を繰り返して 2 本目の Cloudflare WAN IPsec トンネルを作成します。1 本目と同じ Cloudflare endpoint を使います。
  4. 完了したら Add Tunnels を選びます。
  5. Cloudflare ダッシュボードにトンネル一覧が表示されます。作成したトンネルを編集し、Generate a new pre-shared key を選んで生成されたキーをコピーします。Active/Active 構成の場合は、2 本目のトンネルで Change to a new custom pre-shared key を選び、1 本目で生成した PSK を使います。
  6. 新しく作成したトンネルをネクストホップとして、Azure Virtual Network のサブネット向けに 静的ルート を作成します。

Azure の設定を完了する

1. Local Network Gateway を作成する

Local Network Gateway は通常、オンプレミスの拠点を指します。この場合は、接続の Cloudflare 側を表します。

Cloudflare の IPsec トンネルごとに Local Network Gateway を作成することを推奨します。

  1. 新しい local network gateway を作成します。
  2. Instance details > EndpointIP address を選び、IP address フィールドに Cloudflare anycast アドレスを入力します。
  3. Address space(s) に、Cloudflare WAN 接続経由でリモートアクセスしたいサブネットのアドレスレンジを指定します。たとえば、192.168.1.0/24 のネットワークに到達したい場合で、そのネットワークが Cloudflare WAN テナントに接続されているときは、local network gateway のアドレス空間に 192.168.1.0/24 を追加します。
  4. Advanced タブ > BGP settings を開き、No が選ばれていることを確認します。

2. IPsec トンネルヘルスチェック用に Local Network Gateway を設定する

Cloudflare WAN は、トンネルが利用可能かどうかを監視するために Tunnel Health Checks を使います。

トンネルヘルスチェックは、IPsec トンネルの Cloudflare 側からリモートエンドポイント(Azure)へ送る ICMP プローブを使います。プローブはトンネルのインターフェイスアドレスから送られます。このアドレスは次の 2 か所で指定します。

  1. Cloudflare Dashboard: IPsec トンネル設定の仮想トンネルインターフェイス(VTI)のアドレスとして指定します(Cloudflare がどのアドレスからプローブを送るかを知るため)。Cloudflare では、このアドレスを /31 ネットマスクの Classless Inter-Domain Routing(CIDR)表記で指定する必要があります。
  2. Azure Portal: VPN サイトのアドレス空間として指定します(Azure がプローブ応答をトンネル経由で返すため)。Azure では、このアドレスを /32 ネットマスクの CIDR 表記で指定する必要があります。

Cloudflare は、IPsec トンネルごとに一意の /31 サブネット(RFC 1918 - Address Allocation for Private Internets)を選ぶことを推奨します。ポイントツーポイントリンクとして扱い、両方の要件を満たす理想的なアドレス方式になります。

例:

  • 一意のポイントツーポイントリンクサブネットとして 10.252.3.55/31 を選びます。
  • Cloudflare ダッシュボードで、トンネルの IPv4 Interface address10.252.3.55/31 を設定します(Cloudflare WAN を設定する を参照)。
  • Azure ポータルで、Local Network Gateway の Address space10.252.3.55/32 を追加します。

Tunnel Health Checks に対応するよう、Local Network Gateway の Address Space を設定するには:

  1. 前のセクションで設定した Local Network Gateway を編集します。
  2. Connections を選びます。
  3. Address Space(s) に、Cloudflare ダッシュボードの IPsec トンネルの Interface Address を CIDR 表記で追加します(例: 10.252.3.55/32)。
  4. Active/Active 構成の場合は、Address Space(s) に 2 本目の IPsec トンネルの Interface Address も CIDR 表記で追加します(例: 10.252.3.56/32)。両方のトンネルを正常に保つには、Local Network Gateway の Address Space に両方のトンネルインターフェイスアドレスを設定する必要があります。
  5. Save を選びます。

3. IPsec VPN Connection を作成する

VPN Connection の作成時は、次の設定を選びます。

  1. Virtual network gateway: Virtual Network Gateway を作成する で作成した Virtual Network Gateway を選びます。
  2. Local network gateway: Local Network Gateway を作成する で作成した Local Network Gateway を選びます。
  3. Use Azure Private IP Address: Disabled
  4. BGP: Disabled
  5. IPsec / IKE policy: Custom
    1. IKE Phase 1
      1. Encryption: GCMAES256
      2. Integrity/PRF: SHA384
      3. DH Group: ECP384
    2. IKE Phase 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. Use policy based traffic selector: Disable
    6. DPD timeout in seconds: 45
    7. Connection mode: InitiatorOnly
    8. Use custom traffic selectors: Disabled
  6. 接続作成後、Settings > Authentication を開き、PSK を入力します(Cloudflare WAN の設定で使った PSK と一致させる必要があります)。

冗長な Cloudflare anycast IP アドレスに対応する Local Network Gateway への Connection についても、同じ手順で設定を定義します。

4. すべてのインターネットトラフィックを Cloudflare WAN と Cloudflare Gateway 経由にする

Cloudflare Zero Trust のお客様は、インターネット向けトラフィックを Cloudflare WAN 経由で Cloudflare Gateway を通してインターネットへルーティングできます。

Microsoft は、Local Network Gateway の Address Space にデフォルトルート(0.0.0.0/0)を指定することを許可していません。ただし、ルート集約を使えばこの制限を回避できます。

  1. Local network gateways を開き、対象のオブジェクトを選びます。
  2. Configuration > Address Space(s) を開き、次の 2 つのサブネットを指定します。0.0.0.0/1128.0.0.0/1
  3. Tunnel Health Checks 用に設定したサブネットは削除しないでください。
  4. Save を選びます。

Cloudflare Zero Trust の CA 証明書をインストールする

インターネット向けトラフィックをすべて Cloudflare WAN 経由にし、HTTPS TLS 復号 を使いたい場合は、ユーザーのデバイスに Cloudflare Zero Trust のルート認証局(CA)証明書をインストールして信頼する必要があります。Cloudflare が提供する証明書(デフォルト)をインストールするか、独自のカスタム証明書を生成して Cloudflare にアップロードできます。

ルート CA 証明書のインストール方法の詳細は、Cloudflare Zero Trust ドキュメントの User-side certificates を参照してください。

ルート CA 証明書をインストールしたら、Web ブラウザーを開くか 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"
}

接続を検証し、Azure Virtual Network Gateway のアンチリプレイ保護を無効にする

接続が確立されたことを確認したら、Azure Virtual Network Gateway のサイト間 VPN 接続ではアンチリプレイ保護を無効にすることを Cloudflare は推奨します。これは Microsoft Azure API で行えます。

  1. PowerShell で API トークンを取得します。
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. Azure Virtual Network Gateway に関連するサイト間 VPN Connection の詳細を表示する API 呼び出し(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. 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 ダッシュボードでは replay protection の設定をオンのままにし、数分待ってから接続を再検証します。

役に立ちましたか?