AzureとGCPをVPN(s2s)接続する
以下の内容の補足
準備
まず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