🚀

AzureとGCPをVPN(s2s)接続する

2023/09/24に公開

以下の内容の補足
https://cloud.google.com/network-connectivity/docs/vpn/tutorials/create-ha-vpn-connections-google-cloud-azure?hl=ja

準備

まずGCP側のVPCを確認しておきます
(今回は最初からあるdefaultのVPCとAzureのvnetを接続します)
Azureでvnetを作るときにこのネットワークアドレスと被らないようにします

AzureでVPN Gatewayを作成

すべてのサービス -> 仮想ネットワークを選んで、以下の設定でVnetを作成します

作成後に、vnetの画面でゲートウェイサブネットを追加

すべてのサービス -> 仮想ネットワークゲートウェイと進んでVPN Gatewayを作成
以下の設定で作成します
HA-VPNなので、2つのpublic ipとAPIPAアドレスを用意します

ここまでの構成は以下の通りです
矢印は参照しているという意味です(VPN GatewayがPublic IPとSubnetを使用している)

作成したpublic ipを記録します
ここでは 1つ目と2つ目のpublic ipをそれぞれ AZURE_GW_IP_0, AZURE_GW_IP_1と表記します

GCP側作業

VPCを開いて編集以下のように 動的ルーティングモードをグローバルにしておきます

以下のコマンドで、VPN-gateway, cloud router, external-vpn-gatewaysを作成

export GCP_VPC_NAME=default

gcloud compute vpn-gateways create ha-vpn-gw-a \
   --network $GCP_VPC_NAME \
   --region asia-northeast1

gcloud compute routers create cloud-router \
    --region asia-northeast1 \
    --network $GCP_VPC_NAME \
    --asn 65534

gcloud compute external-vpn-gateways create azure-peer-gw \
     --interfaces 0=$AZURE_GW_IP_0,1=$AZURE_GW_IP_1

構成図はこんな感じ

次にVPNトンネルを作成

export SHARED_SECRET=$(pwgen -B -n 32 -1)

gcloud compute vpn-tunnels create azure-tunnel-1 \
   --peer-external-gateway azure-peer-gw \
   --peer-external-gateway-interface 0  \
   --region asia-northeast1 \
   --ike-version 2 \
   --shared-secret $SHARED_SECRET \
   --router cloud-router \
   --vpn-gateway ha-vpn-gw-a \
   --interface 0

gcloud compute vpn-tunnels create azure-tunnel-2 \
   --peer-external-gateway azure-peer-gw \
   --peer-external-gateway-interface 1  \
   --region asia-northeast1  \
   --ike-version 2 \
   --shared-secret $SHARED_SECRET \
   --router cloud-router \
   --vpn-gateway ha-vpn-gw-a \
   --interface 1

VPNトンネルは, external-vpn-gateway, vpn-gateway, cloud-routerを参照します

cloud-routerにインターフェイスを設定、BGPのピア設定を追加

gcloud compute routers add-interface cloud-router \
   --interface-name azure-tunnel-1-int-0 \
   --mask-length 30 \
   --vpn-tunnel azure-tunnel-1 \
   --ip-address 169.254.21.2 \
   --region asia-northeast1

gcloud compute routers add-bgp-peer cloud-router \
   --peer-name azure-bgp-peer-1 \
   --peer-asn 65515 \
   --interface azure-tunnel-1-int-0 \
   --peer-ip-address 169.254.21.1 \
   --region asia-northeast1

gcloud compute routers add-interface cloud-router \
   --interface-name azure-tunnel-2-int-1 \
   --mask-length 30 \
   --vpn-tunnel azure-tunnel-2 \
   --ip-address 169.254.22.2 \
   --region asia-northeast1

gcloud compute routers add-bgp-peer cloud-router \
  --peer-name azure-bgp-peer-2 \
  --peer-asn 65515 \
  --interface azure-tunnel-2-int-1 \
  --peer-ip-address 169.254.22.1 \
  --region asia-northeast1

最終的にこんな感じになります

GCP側のPublic IPを記録します

gcloud compute vpn-gateways list

それぞれ HA_VPN_INT_0, HA_VPN_INT_1 だったとします

Azure側での接続設定

すべてのサービス -> ローカルネットワークゲートウェイ -> 作成

以下の設定で作成します
IPアドレスは GCPで確認した HA_VPN_INT_0 を指定します

同様の設定で2つ目のローカルネットワークゲートウェイを作成

仮想ネットワークゲートウェイ選択 -> 接続 -> 追加
から、ローカルネットワークゲートウェイとの接続を作成します(2つ分行います)

最終的にはこんな感じになると思います

確認方法

アドバタイズされたルーティング情報の確認はGCP側ではVPC -> ルートから確認できます
(cloud routerの画面でも広告されたルートと広告したルートを確認できます)

Azure側ではVPNゲートウェイのBGPピアから確認できます

接続してうまくアドバタイズされない場合は一度リセットするうまく行く場合があります

GCP側でルーティング情報の更新が遅い場合、正常にアドバタイズされない場合は暫定措置としてCloud Routerに広告されたものとしてルーティングを手動で追加できます

p2s接続の追加

p2s接続 との併用もOKです

p2s接続を追加するとルートが自動的に追加されます
PC -> Azure vnet -> GCP の疎通が出来るようになります

/etc/ipsec.conf の設定例

conn azure
      keyexchange=ikev2
      type=tunnel
      leftfirewall=yes
      left=%any
      leftauth=eap-tls
      leftid=%my-server
      right=azuregateway-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.vpn.azure.com
      rightid=%azuregateway-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.vpn.azure.com
      rightsubnet=10.0.0.0/16
      leftsourceip=%config
      auto=add
      esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

削除

Azure側では以下のリソースを削除

GCP側では以下の順番で削除します

gcloud compute vpn-tunnels delete azure-tunnel-1
gcloud compute vpn-tunnels delete azure-tunnel-2
gcloud compute routers delete cloud-router 
gcloud compute external-vpn-gateways delete azure-peer-gw
gcloud compute vpn-gateways delete ha-vpn-gw-a

Discussion