{VPN}Site-to-Site VPN(Azure <-> GCP)

https://www.ether-zone.com/azure-s2s-vpn-bgp-gc/


BGP APIPA アドレスは、AZURE で予約されている VPN 用の APIPA 範囲 (169.254.21.0 から 169.254.22.255) 内にある必要があります。

 

前提: 
GCP側の作業OS: CentOS7(オンプレ)
Azure側の作業OS: CentOS7(オンプレ)
GCP側の作業ユーザ: testuser
Azure側の作業ユーザ: testuser

GCP側のASN: 64513
Azure側のASN: 64514

IPSec tunnel使用本数: 1本

GCP側のサブネット: 10.1.0.0/24
Azure側のサブネット: 10.2.0.0/24
Azure側のゲートウェイサブネット: 10.2.1.0/24

 

-- 1. gcloudコマンドのインストール【GCP

 

curl https://sdk.cloud.google.com | bash

source ~/.bash_profile
gcloud --version

 


gcloud init

※コンソールで実行

gcloud auth list

 

-- 2. azコマンドのインストール【Azure】

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc


echo -e "[azure-cli]
name=Azure CLI
baseurl=https://packages.microsoft.com/yumrepos/azure-cli
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc" | sudo tee /etc/yum.repos.d/azure-cli.repo

sudo yum -y install azure-cli
az --version 

az login

※コンソールで実行

az account show

-- 3. Azure Powershellモジュールのインストール【Azure】


curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo
sudo yum install -y powershell
pwsh

Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force

Connect-AzAccount -UseDeviceAuthentication


-- 4. VPC、サブネット作成【GCP

-- 4.1 プロジェクトの作成

gcloud projects list


gcloud projects create project01-9999999 \
--name="project01"

gcloud projects describe project01-9999999

-- 4.2 プロジェクトを請求先アカウントに紐づける(GUIから実施)

-- 4.3 プロジェクト設定

gcloud config list
gcloud config set project project01-9999999
gcloud config list


-- 4.4 Compute Engineの有効化
gcloud services enable compute.googleapis.com

 

-- 4.5 VPCを作成する


gcloud compute networks create vpc11 \
--subnet-mode=custom \
--mtu=1460 \
--bgp-routing-mode=regional


gcloud compute networks list

gcloud compute networks describe vpc11


-- 4.6 サブネット(10.1.0.0/24)を作成する

 

gcloud compute networks subnets create subnet11 \
--range=10.1.0.0/24 \
--stack-type=IPV4_ONLY \
--network=vpc11 \
--region=asia-northeast1

gcloud compute networks subnets list


gcloud compute networks subnets describe subnet11 \
--region=asia-northeast1

 

 

 

-- 5. リソースグループ作成【Azure】


az account list-locations

az group create \
--name rg01 \
--location japaneast

az group list


az configure --defaults group=rg01

 

-- 6. VNetを作成する【Azure】


az network vnet create \
--name vnet21 \
--resource-group rg01 \
--address-prefixes 10.2.0.0/16 \
--ddos-protection false \
--location japaneast


az network vnet list
az network vnet show --resource-group rg01 --name vnet21

 


-- 7. サブネットを作成する【Azure】

az network vnet subnet create \
--address-prefixes 10.2.0.0/24 \
--name subnet21 \
--resource-group rg01 \
--vnet-name vnet21


az network vnet subnet create \
--address-prefixes 10.2.1.0/24 \
--name GatewaySubnet \
--resource-group rg01 \
--vnet-name vnet21


az network vnet subnet list --resource-group rg01 --vnet-name vnet21
az network vnet subnet show --resource-group rg01 --vnet-name vnet21 --name subnet21
az network vnet subnet show --resource-group rg01 --vnet-name vnet21 --name GatewaySubnet


-- 8. パブリックIPアドレスを作成する【Azure】

az network public-ip create \
--name pip21 \
--resource-group rg01 \
--allocation-method Static \
--location japaneast \
--sku Standard \
--tier Regional \
--version IPv4

az network public-ip create \
--name pip22 \
--resource-group rg01 \
--allocation-method Static \
--location japaneast \
--sku Standard \
--tier Regional \
--version IPv4


az network public-ip list 
az network public-ip show --resource-group rg01 --name pip21
az network public-ip show --resource-group rg01 --name pip22

 


-- 9. 仮想ネットワークゲートウェイを作成する【Azure】
※azコマンドはactive-activeに未対応の模様のためpowershellで実行
pwsh


$pip21 = Get-AzPublicIpAddress -Name pip21 -ResourceGroupName rg01
$pip22 = Get-AzPublicIpAddress -Name pip22 -ResourceGroupName rg01

$gatewaysubnet = Get-AzVirtualNetworkSubnetConfig -Name GatewaySubnet -VirtualNetwork $(Get-AzVirtualNetwork -Name vnet21 -ResourceGroupName rg01)


$pip21conf = New-AzVirtualNetworkGatewayIpConfig -Name pip21conf -Subnet $gatewaysubnet -PublicIpAddress $pip21
$pip22conf = New-AzVirtualNetworkGatewayIpConfig -Name pip22conf -Subnet $gatewaysubnet -PublicIpAddress $pip22


$addresslist21 = @('169.254.21.2','169.254.22.2')
$pip21bgpconf = New-AzIpConfigurationBgpPeeringAddressObject -IpConfigurationId $pip21conf.Id  -CustomAddress $addresslist21

$addresslist22 = @('169.254.21.6','169.254.22.6')
$pip22bgpconf = New-AzIpConfigurationBgpPeeringAddressObject -IpConfigurationId $pip22conf.Id  -CustomAddress $addresslist22

 

New-AzVirtualNetworkGateway `
-Name vng21 `
-ResourceGroupName rg01 `
-Location japaneast `
-IpConfigurations $pip21conf,$pip22conf `
-GatewayType Vpn `
-VpnType RouteBased `
-GatewaySku VpnGw1 `
-VpnGatewayGeneration "Generation1" `
-Asn 64514 `
-EnableActiveActiveFeature `
-IpConfigurationBgpPeeringAddresses $pip21bgpconf,$pip22bgpconf `
-EnableBGP $True


※作成に20分程度かかる

 

 

az network vnet-gateway list
az network vnet-gateway show --resource-group rg01 --name vng21

 

-- 10. ピアVPNゲートウェイ作成【GCP


gcloud compute external-vpn-gateways create pvg11 \
--interfaces 0=192.0.2.1

ipアドレスはAzure側Tunnel 1の外部IPアドレス

 

gcloud compute external-vpn-gateways list

gcloud compute external-vpn-gateways describe pvg11

 

-- 11. Cloud HA VPN ゲートウェイ作成 【GCP

gcloud compute vpn-gateways create vpn11 \
--region=asia-northeast1 \
--network=vpc11 \
--stack-type=IPV4_ONLY

 

gcloud compute vpn-gateways list

gcloud compute vpn-gateways describe vpn11 \
--region=asia-northeast1

 

-- 12. Cloud Router作成 【GCP

 

gcloud compute routers create cr11 \
--region=asia-northeast1 \
--network=vpc11 \
--asn=64513

gcloud compute routers list

gcloud compute routers describe cr11 \
--region=asia-northeast1

-- 13. VPNトンネル作成【GCP

 

gcloud compute vpn-tunnels create tun11 \
--shared-secret=PreSharedKey1 \
--peer-external-gateway=pvg11 \
--vpn-gateway=vpn11 \
--ike-version=2 \
--interface=0 \
--peer-external-gateway-interface=0 \
--region=asia-northeast1 \
--router=cr11 \
--router-region=asia-northeast1

 

 

gcloud compute vpn-tunnels list

gcloud compute vpn-tunnels describe tun11 \
--region=asia-northeast1

 

-- 14. BGPセッションの構成【GCP

gcloud compute routers add-interface cr11 \
--interface-name=bgp-interface11 \
--vpn-tunnel=tun11 \
--vpn-tunnel-region=asia-northeast1 \
--ip-address=169.254.21.1 \
--mask-length=30 \
--region=asia-northeast1


※ip-addressはGCPIPSec Tunnel #1の内部IPアドレス

 


gcloud compute routers add-bgp-peer cr11 \
--interface=bgp-interface11 \
--peer-asn=64514 \
--peer-name=bgp-peer11 \
--advertisement-mode=DEFAULT \
--no-enable-ipv6 \
--peer-ip-address=169.254.21.2 \
--region=asia-northeast1

※peer-ip-addressはAzure側IPSec Tunnel #1の内部IPアドレス

 

 

-- 15. ローカル ネットワーク ゲートウェイを作成する【Azure】


az network local-gateway create \
--gateway-ip-address 192.0.2.2 \
--name lng21 \
--resource-group rg01 \
--asn 64513 \
--bgp-peering-address 169.254.21.1 \
--location japaneast


gateway-ip-addressはGCP側Tunnel #1の外部IPアドレス

 


az network local-gateway list
az network local-gateway show --resource-group rg01 --name lng21


-- 16. 接続を作成する【Azure】


az network vpn-connection create \
--name vpn21 \
--resource-group rg01 \
--vnet-gateway1 vng21 \
--enable-bgp \
--local-gateway2 lng21 \
--location japaneast \
--shared-key PreSharedKey1


BGP設定のコマンドオプションが見つからないのでGUIから下記更新実施

カスタム BGP アドレスを有効にする
169.254.21.2
169.254.21.6 

 

 


az network vpn-connection list
az network vpn-connection show --resource-group rg01 --name vpn21


IPSECトンネルがUPするまで5分程度待つ

 

 

-- 17. 疎通確認


-- 17.1 インスタンス作成(FW設定含む)【GCP

 

gcloud iam service-accounts list

gcloud compute instances create instance11 \
--zone=asia-northeast1-a \
--machine-type=e2-micro \
--network-interface=network-tier=STANDARD,subnet=subnet11 \
--maintenance-policy=MIGRATE \
--provisioning-model=STANDARD \
--service-account=999999999999-compute@developer.gserviceaccount.com \
--scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append \
--create-disk=auto-delete=yes,boot=yes,device-name=instance11,image=projects/centos-cloud/global/images/centos-7-v20220621,mode=rw,size=20,type=projects/project01-9999999/zones/asia-northeast1-a/diskTypes/pd-standard \
--no-shielded-secure-boot \
--shielded-vtpm \
--shielded-integrity-monitoring \
--reservation-affinity=any


10.2.0.0/24からのアクセス許可

gcloud compute \
firewall-rules create fw11 \
--direction=INGRESS \
--priority=1000 \
--network=vpc11 \
--action=ALLOW \
--rules=all \
--source-ranges=10.2.0.0/24


0.0.0.0/0からのSSH許可追加


gcloud compute \
firewall-rules create fw12 \
--direction=INGRESS \
--priority=1000 \
--network=vpc11 \
--action=ALLOW \
--rules=tcp:22 \
--source-ranges=0.0.0.0/0

 

インスタンスに公開鍵を設定する
ssh-keygen

gcloud compute instances add-metadata instance11 \
--zone=asia-northeast1-a \
--metadata=ssh-keys="testuser:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDPOfAbh3viQV5z8JtEfb4ruejb7LWI+5PLogAqrlAk4gJd70NTPROj1oIU4c8TDlV4Cb52dPdzjbzIV/KeDPyn03g4g6VWjev9ItJ3mHlP4hmtMujoslG8GaRQ63BSItB+ydX5zWmfDkCmRLbkFqqS2gSi5FlZeJMzl9s16nl73tG0Ge6E+SiIderNRWfViS3L0hX/+siXindfaB8jbMgYIQJ4ZCEhcRCw39LM1ESY7zhAj4BKfhqKoX3llHRZH4DZYvKYEeyHEWMSjVDcZqoOAPRNHgttpY3nx7lGNUcd2gADIe9mpXzAIPhWDLx3pnC9MH1DNAp+roxKbi9S8tih testuser@mmm127"


ssh testuser@192.0.2.3

 

-- 17.2 インスタンス作成【Azure】

ssh-keygen

az vm image list \
--location japaneast \
--offer CentOS \
--all

 


az vm create \
--resource-group rg01 \
--name instance-1 \
--image OpenLogic:CentOS:7_9-gen2:7.9.2022020701 \
--admin-username azureuser \
--generate-ssh-keys \
--size Standard_B1ls \
--public-ip-address ip01 \
--public-ip-sku Basic \
--enable-agent false \
--vnet-name vnet21 \
--subnet subnet21


ssh azureuser@192.0.2.4

 

 

-- 17.3 pingで疎通確認【GCP

ping 10.2.0.4

-- 17.4 pingで疎通確認【Azure】

ping 10.1.0.2

 

 

-- 18. クリーンアップ【Azure】
-- リソースグループの削除

az group list

az group delete \
--name rg01 \
--yes

az group delete \
--name NetworkWatcherRG \
--yes


-- 19. クリーンアップ【GCP

--プロジェクト削除

gcloud projects list

gcloud projects delete project01-9999999