コンテンツにスキップ

Microsoft Azure

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

前提条件

Azureアカウントに既存のリソースグループ、仮想ネットワーク、および仮想マシンが作成されている必要があります。これらの作成方法については、Microsoftのドキュメントを参照してください。

Azureの構成

1. ゲートウェイサブネットの作成

すでにサブネットが割り当てられた仮想ネットワーク(VNET)が作成されている必要があります。次のステップは、AzureがAzureのVirtual Network Gatewayに関連するサービスのアドレッシングに使用するゲートウェイサブネットを作成することです。すでにゲートウェイサブネットがある場合、Azureは2つ目の作成を防ぎます。その場合は、ゲートウェイサブネットの設定を更新してください。

  1. 仮想ネットワーク > サブネットに移動します。
  2. ゲートウェイサブネットを追加するオプションを選択します。
  3. サブネットアドレス範囲を構成します。ゲートウェイサブネットは仮想ネットワークのアドレス空間に含まれ、サブネットマスクは/27以上である必要があります。
  4. 他のすべての設定がなしに設定されていることを確認します。

2. 仮想ネットワークゲートウェイの作成

仮想ネットワークゲートウェイは、オンプレミスのデバイスとのトンネルを形成するために使用されます。

  1. 仮想ネットワークゲートウェイを作成します。
  2. 新しいパブリックIPアドレスを作成するか、既存のIPを使用します。仮想ネットワークゲートウェイに割り当てられたパブリックIPアドレスに注意してください。これはMagic WANのIPsecトンネル構成の顧客エンドポイントになります。
  3. すでに作成したリソースグループとVNETを選択します。
  4. 構成で、アクティブ-アクティブモードゲートウェイプライベートIPを無効にします。
  5. 作成を選択します。

3. ローカルネットワークゲートウェイの作成

ローカルネットワークゲートウェイは通常、オンプレミスの場所を指します。この場合、ローカルネットワークゲートウェイは接続のCloudflare側を表します。

Cloudflare IPsecトンネル用のローカルネットワークゲートウェイを作成することをお勧めします。

  1. 新しいローカルネットワークゲートウェイを作成します。
  2. インスタンスの詳細 > エンドポイントで、IPアドレスを選択し、IPアドレスフィールドにCloudflareのAnycastアドレスを入力します。
  3. アドレス空間で、Magic WAN接続を介してリモートでアクセスしたいサブネットのアドレス範囲を指定します。たとえば、IP範囲が192.168.1.0/24のネットワークに到達したい場合、このネットワークがMagic WANテナントに接続されている場合、ローカルネットワークゲートウェイのアドレス空間に192.168.1.0/24を追加します。
  4. 詳細タブ > BGP設定に移動し、いいえを選択します。

4. Magic IPsecトンネルのヘルスチェック用にローカルネットワークゲートウェイを構成する

Magic WANは、トンネルが利用可能であることを確認するためにトンネルヘルスチェックを使用します。

トンネルヘルスチェックは、Cloudflare側のMagic IPsecトンネルからリモートエンドポイント(Azure)へのICMPプローブを使用します。

CloudflareとAzureをヘルスチェックをサポートするように構成する方法には重要な違いがあります:

  • Magic IPsecトンネル構成設定では、特定のIPアドレス(/31ネットマスク推奨)を指定する必要があります。
  • Azureローカルネットワークゲートウェイ設定では、サブネット(CIDR表記)を指定する必要があります。

Cloudflareは、各IPsecトンネルに対してユニークな/31サブネットを選択することを推奨しています(RFC 1918 - プライベートインターネットのアドレス割り当て)。これはポイントツーポイントリンクとして扱われ、両方の要件を満たす理想的なアドレッシングスキームを提供します。

例:

10.252.3.54/31 - AzureポータルのAzureローカルネットワークゲートウェイでCIDR表記のサブネットとして定義します。
10.252.3.55/31 - CloudflareダッシュボードのMagic IPsecトンネルのインターフェースアドレス(VTI - Virtual Tunnel Interface)に割り当てられた特定のIPアドレスとして定義します(下記のMagic WANの構成を参照)。

トンネルヘルスチェックをサポートするためにローカルネットワークゲートウェイのアドレス空間を構成するには:

  1. 前のセクションで構成したローカルネットワークゲートウェイを編集します。
  2. 接続を選択します。
  3. CIDR表記で/31サブネット(例:10.252.3.54/31)をアドレス空間に追加します。
  4. 保存を選択します。

5. IPsec VPN接続の作成

VPN接続を作成する際に次の設定を選択します:

  1. 仮想ネットワークゲートウェイ:ステップ2で作成した仮想ネットワークゲートウェイを選択します。
  2. ローカルネットワークゲートウェイ:ステップ3で作成したローカルネットワークゲートウェイを選択します。
  3. AzureプライベートIPアドレスを使用無効
  4. BGP無効
  5. IPsec / IKEポリシーカスタム
    1. IKEフェーズ1
      1. 暗号化GCMAES256_または_AES256
      2. 整合性/PRFSHA256
      3. DHグループDHGroup14
    2. IKEフェーズ2(IPsec)
      1. IPsec暗号化GCMAES256_または_AES256
      2. IPsec整合性SHA256
      3. PFSグループPFS2048
    3. IPsec SAのライフタイム(キロバイト単位)0
    4. IPsec SAのライフタイム(秒単位)27000
    5. ポリシーベースのトラフィックセレクタを使用無効
    6. DPDタイムアウト(秒単位)45
    7. 接続モードデフォルト
    8. カスタムトラフィックセレクタを使用無効
  6. 接続が作成された後、設定 > 認証を選択し、PSKを入力します(これはMagic WAN構成で使用されるPSKと一致する必要があります)。

このプロセスを繰り返して、冗長のCloudflare Anycast IPアドレスに対応するローカルネットワークゲートウェイへの接続の設定を定義します。

6. すべてのインターネットトラフィックをMagic WANおよびCloudflare Gateway経由でルーティングする

Cloudflare Zero Trustの顧客は、Magic WANを介してインターネット向けトラフィックをCloudflare Gatewayを通じてルーティングできます。

Microsoftは、ローカルネットワークゲートウェイのアドレス空間でデフォルトルート(0.0.0.0/0)を指定することを許可していません。ただし、ルート要約を使用することでこの制限を回避することが可能です。

  1. ローカルネットワークゲートウェイに移動し、目的のオブジェクトを選択します。
  2. 構成 > アドレス空間に移動し、次の2つのサブネットを指定します:0.0.0.0/1 & 128.0.0.0/1
  3. トンネルヘルスチェックをサポートするために構成されたサブネットを削除しないでください。
  4. 保存を選択します。

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

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

ルートCA証明書のインストール方法の詳細は、Cloudflare Zero Trustのドキュメントにあるユーザー側の証明書を参照してください。

ルートCA証明書がインストールされたら、ウェブブラウザを開くか、curlを使用してインターネット接続を検証します:

Terminal window
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"
}

Magic WANの構成

  1. CloudflareダッシュボードでIPsecトンネルを作成します。
  2. 次の設定を確認します:
    1. インターフェースアドレス:Azureローカルネットワークゲートウェイは/31サブネット内の下位IPアドレスのみを指定することを許可するため、Azureの構成セクションのステップ4で選択した/31サブネット内の上位IPアドレスを追加します。詳細についてはトンネルエンドポイントを参照してください。
    2. 顧客エンドポイント:Azure仮想ネットワークゲートウェイに関連付けられたパブリックIP。たとえば、40.xxx.xxx.xxx
    3. Cloudflareエンドポイント:アカウントチームから受け取ったCloudflareのAnycastアドレスを使用します。これもAzureのローカルネットワークゲートウェイに対応するIPアドレスになります。たとえば、162.xxx.xxx.xxx
    4. ヘルスチェックレート:デフォルトオプション(中)を選択します。
    5. ヘルスチェックタイプ:デフォルトオプション(応答)を選択します。
    6. ヘルスチェック方向:デフォルトオプションを維持します。
    7. 後で事前共有キーを追加:このオプションを選択して、後でAzureで使用されるPSKを作成します。
    8. 再送信保護有効
  3. Azure仮想ネットワークサブネットのために新しく作成したトンネルを次のホップとして指定する静的ルートを作成します。

接続性を検証し、Azure仮想ネットワークゲートウェイの再送信保護を無効にする

接続が確立されたことを確認したら、CloudflareはAzure仮想ネットワークゲートウェイのサイト間VPN接続の再送信保護を無効にすることを推奨します。これはMicrosoft Azure APIを通じて実行できます。

  1. PowerShellを使用してAPIトークンを取得します:
Terminal window
PS C:\home\user_name> 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 : user@domain.com
  1. Azure仮想ネットワークゲートウェイに関連付けられたサイト間VPN接続の詳細を表示するためにAPI呼び出しを行います(GETリクエスト):
Terminal window
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": 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. IPsecのリプレイ保護を無効にする設定を見つけ、その値をfalseからtrueに変更します:
"disableIPSecReplayProtection": true
  1. すべてのレスポンスを次のAPI呼び出し(PUTリクエスト)でアップロードします:
Terminal window
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ダッシュボードでリプレイ保護設定をチェックしたままにし、接続性を再確認するまで数分待ちます。

トンネルのヘルスチェックとAzure

Azure Virtual Network Gatewayに設定されたIPsecトンネルが、トンネルのヘルスチェックが合格する前に一度再起動する必要があるケースを特定しました。

Azureトンネルの再起動

  1. Virtual Network Gatewayを開きます。
  2. 設定 > 接続に移動します。
  3. トンネルのプロパティを開きます。
  4. ヘルプ > リセットに移動します。
  5. リセットを選択します。

Azure側からトンネルがリセットされるまでに数分かかる場合があります。Cloudflareダッシュボードのトンネルヘルスチェックセクションを監視して、ステータスを確認します。