This document assumes that you're familiar with the basic concepts of VPC networks, Border Gateway Protocol (BGP), VPNs, and Internet Protocol Security (IPsec) tunnels.
Google Cloud provides a highly available (HA) VPN service to connect your VPC network to environments running outside of Google Cloud, such as Microsoft Azure, through an IPsec VPN connection. An HA VPN provides a service level agreement (SLA) of 99.99% service availability when configured based on Google best practices.
Architecture overview
The following diagram shows the architecture that is described in this document.
The architecture shown in the diagram includes the following components:
- Cloud Router: A fully distributed and managed Google Cloud service to provide dynamic routing using BGP for your VPC networks.
- HA VPN gateway: A Google-managed VPN gateway running on Google Cloud. Each HA VPN gateway is a regional resource that has two interfaces: interface 0 and 1. Each of these interfaces has its own external IP address.
- VPN tunnels: Connections from the HA VPN gateway on Google Cloud to the peer VPN gateway on Azure through which encrypted traffic passes.
- Virtual Network Gateway: Two private networks defined in the Azure Cloud service.
Each Virtual Network Gateway connection comes with two tunnels that are pre-configured to point to a single customer gateway, which in this case is an HA VPN gateway interface in Google Cloud. With this configuration, the minimum number of Cloud VPN tunnels required to meet the 99.99% service availability SLA is two.
IP addresses needed for the procedures
To complete the procedures in this document, you use a variety of IP addresses in both Google Cloud and Azure. Some of these IP addresses are automatically assigned when you create a resource.
For those addresses that are not automatically assigned, you define these IP addresses based upon the IP addresses that you have available and the needs of your organization.
Google Cloud resources require the following IP addresses:
- Creating a subnet for a Virtual Private Cloud network requires a user-defined IP address range.
- After creating the HA VPN gateway, Google Cloud automatically assigns two external IP addresses to the HA VPN gateway. Google assigns one IP address to each of the gateway's two interfaces. You need the IP addresses for these interfaces to set up the local network gateways in Azure.
When you create HA VPN tunnels in Google Cloud, each tunnel needs a BGP interface to the Cloud Router and a BGP interface to the active-active virtual network gateway (VPN gateway) in Azure. For each tunnel, decide on a pair of link-local BGP peering IPv4 addresses in a /30 block from the
169.254.21.*
and169.254.22.*
ranges. These ranges are the valid ranges for Azure APIPA BGP peering IPv4 addresses. You must select four IP addresses in total.The BGP peering IPv4 addresses that you select must be unique among all Cloud Routers in all regions of a VPC network.
Azure resources require the following IP addresses:
- When you create the virtual network (VNet), the VNet requires an IP address space for the network and an IP address space for the network's subnet. You can use the default address spaces or enter user-defined address spaces.
- When you create the active-active virtual network gateway (VPN gateway), the gateway requires a subnet address range. You can use the default range or enter a user-defined range.
- When you configure the BGP for the active-active
VPN gateway, the gateway requires two APIPA BGP peering IP addresses. As
mentioned previously, the valid ranges for Azure APIPA BGP peering IP addresses
are
169.254.21.*
and169.254.22.*
. - After you create an active-active VPN gateway, Azure automatically assigns an external IP address to each of the gateway's interfaces. You need these IP addresses to set up the peer VPN gateway in Google Cloud.
When defining IP addresses, make sure to use a unique set of IP addresses for each network.
Objectives
- Create an Azure virtual network (VNet) and an active-active virtual network gateway (VPN gateway).
- Create the necessary components on Google Cloud: a VPC network, a Cloud Router, an HA VPN gateway, a peer VPN gateway, and two HA VPN tunnels with BGP sessions.
- Create two local network gateways and two VPN connections in Azure. Verify the Cloud Router configuration and check the status of your HA VPN tunnels in Google Cloud.
- Test the Cloud VPN connection between the VPC network on Google Cloud and the virtual network (VNet) on Azure.
Costs
The procedures in this document use billable components of Google Cloud, including the following:
For an estimate of the costs for the Google Cloud components, use the Google Cloud pricing calculator.
The procedures in this document use billable components of Microsoft Azure Cloud services, including the following:
- VPN gateways
- Local network gateways
For an estimate of the costs for the Azure components, use the Azure pricing calculator.
Before you begin
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine API.
-
In the Google Cloud console, activate Cloud Shell.
-
Make sure that you have the required administrative roles to configure networking components:
- Network Admin:
compute.networkAdmin
- Security Admin:
compute.securityAdmin
- Compute Admin:
compute.admin
For more information about the purposes of these roles, see IAM roles for networking-related job functions.
- Network Admin:
Create a VNet and an active-active VPN gateway on Azure
In Azure, you need to set up the following components:
- An Azure virtual network (VNet) that allows Azure resources to communicate with your Google Cloud VPN.
- An active-active virtual network gateway (VPN gateway) that allows both instances of the gateway's virtual machines (VMs) to establish VPN tunnels to your Google Cloud VPN.
Create a VNet
A VNet lets Azure resources securely communicate with each other, the internet, and other networks (such as Cloud VPN). For more information on creating a VNet, see the Azure documentation on creating a VNet.
- Sign in to the Azure Portal.
- In the Search resources, service, and docs (G+/) box,
type
virtual network
. - In the list of Marketplace results, select Virtual network.
- On the Virtual network page, select Create.
On the Basics tab of the Create virtual network page, configure the following VNet settings for Project details and Instance details:
- In the Subscription box, verify that the subscription that is listed is the correct one. To change the subscription, select the subscription from the list .
- To specify the resource group, click Create new to create
a new group and enter a name such as
azure‑to‑google‑resgroup
for the name of the resource group. - In the Name box, enter the name for your VNet such as
azure‑to‑google‑network
. In the Region box, select a location for your VNet.
The location that you select determines the storage location of the resources that you deploy to this virtual network.
On the IP Addresses tab, in the IPv4 address space box, use the default address space and subnet that was created by Azure.
On the Security tab, leave the values for BastionHost, DDos Protection Standard, and Firewall set to the default value of Disable.
To validate the VNet settings, select Review + create.
After the settings have been validated, select Create.
Create an active-active VPN gateway
The following procedures create the active-active VPN gateway:
- The first procedure defines the project and instance details
- The second procedure specifies the IP address for the gateway.
You only create the active-active VPN gateway at this time. You need to create your Google Cloud components before you can configure the necessary tunnels in Azure. For more information about creating an active-active VPN gateway, see the Configure active-active VPN gateways using the portal topic in the Azure documentation.
Define the gateway details
- Sign in to the Azure Portal.
- In Search resources, service, and docs (G+/),
type
virtual network gateway
. - Under Services in the search results, locate and select Virtual network gateways.
- On the Virtual network gateway page, select Create.
On the Basics tab of the Create virtual network gateway page, specify the following values for options in the Project details and Instance details sections:
- In the Subscription list, select the subscription that you want to use.
- Optional: In the Gateway subnet address range box, enter the address range for the subnet.
- Verify that Resource Group displays the resource group that corresponds to the virtual network that you select on this page.
- For Name, enter the name of your gateway such as
azure‑to‑google‑gateway
. - For Region, select the same region that you used to when you created your VNET.
- For Gateway type, select VPN.
For VPN type, select the Route-based VPN type.
In the SKU list, select the gateway SKU that you want to use.
The SKUs that are listed in the dropdown depend on the VPN type you select.
In the Generation list, select the generation that you want to use.
In the Virtual network list, select the VNet that you previously created
Stay on this page for the next procedure.
Define the gateway IP addresses
On the Basics tab of the Create virtual network gateway page, use the following steps to create the external IP addresses that are used by the active-active VPN gateway:
For Public IP address, select Create new.
Azure automatically assigns the external IP address to your active-active VPN gateway.
In the Public IP address name box, type a name for your external IP address instance, such as
azure‑to‑google‑network‑ip1
.For Enable active-active mode, select Enabled.
Optional: If available for your region, configure the Availability Zone. For example, you can select Zone-redundant.
For Second Public IP Address, select Create new.
In the Public IP address name box, type the name of the second external IP address, such as
azure‑to‑google‑network‑ip2
.For Configure BGP, select Enabled.
For Autonomous system numbers (ASN), set the ASN to an allowable and valid value.
You use this ASN value when you set up the BGP sessions for the tunnels in Google Cloud. Record this value as
AZURE_ASN
to refer to this active-active VPN gateway.For Custom Azure APIPA BGP IP address, enter the first APIPA BGP IP address and record the value as
AZURE_BGP_IP_0
. The valid ranges for Azure APIPA BGP IP addresses are169.254.21.*
and169.254.22.*
.For Second Custom Azure APIPA BGP IP address, enter the second APIPA BGP IP address and record the value as
AZURE_BGP_IP_1
. You'll use these variables when you configure the BGP sessions in Google Cloud.
To run validation, select Review + create.
After validation is complete, select Create to deploy the VPN gateway.
View and record the external IP addresses for the active-active VPN gateway
You need the external IP addresses that Azure automatically assigned to the active-active VPN gateway. You use these IP addresses to create the peer VPN gateway resource in Google Cloud.
- On the Overview page for the active-active gateway that you just created, locate the external IP addresses for the gateway.
- Record the IP addresses that you see on the screen:
- Record the first external IP address as
AZURE_GW_IP_0
. - Record the second external IP address as
AZURE_GW_IP_1
.
- Record the first external IP address as
Later on, this document refers to these IP addresses as
AZURE_GW_IP_0
and AZURE_GW_IP_1
.
Create your Google Cloud components
On Google Cloud, you need to set up the following components:
- A VPC network.
- An HA VPN gateway.
- A Cloud Router.
- A peer VPN gateway.
- HA VPN tunnels with BGP sessions.
The following procedures assume that you have set up Google Cloud as described in Before you begin. If you haven't completed those steps, do so now.
Create a VPC network, subnet, HA VPN gateway, and Cloud Router on Google Cloud
On Google Cloud, you create a VPC network, create an HA VPN gateway, create a Cloud Router, and then configure the firewall rules on Google Cloud.
In Google Cloud Shell, make sure that you're working in the Cloud project that you created or selected:
gcloud config set project YOUR_PROJECT_ID export PROJECT_ID=`gcloud config list --format="value(core.project)"`
Replace
YOUR_PROJECT_ID
with your Cloud project ID.Create a custom VPC network with a single subnet:
gcloud compute networks create NETWORK \ --subnet-mode SUBNET_MODE \ --bgp-routing-mode BGP_ROUTING_MODE
Replace the following:
NETWORK
: The name of the network, such asgoogle‑to‑azure‑vpc
.SUBNET_MODE
: The subnet mode set tocustom
.
BGP_ROUTING_MODE
: The BGP routing mode set toglobal
.The command should look similar to the following example:
gcloud compute networks create google-to-azure-vpc \ --subnet-mode custom \ --bgp-routing-mode global
Create one subnet to host the test VMs:
gcloud compute networks subnets create SUBNET_NAME \ --network NETWORK \ --region SUBNET_REGION \ --range SUBNET_IP_ADDRESS_RANGE
Replace the following:
SUBNET_NAME
: The subnet name.SUBNET_REGION
: The region in which to create the subnet.SUBNET_IP_ADDRESS_RANGE
: The IP address range for the subnet.
The command should look similar to the following example:
gcloud compute networks subnets create subnet-central1 \ --network google-to-azure-vpc \ --region us-central1 \ --range 10.1.1.0/24
Create the HA VPN gateway:
gcloud compute vpn-gateways create HA_VPN_GATEWAY_NAME \ --network NETWORK \ --region REGION
Replace
HA_VPN_GATEWAY_NAME
with the name for the HA VPN gateway.The command should look similar to the following example:
gcloud compute vpn-gateways create ha-vpn-gw-a \ --network google-to-azure-vpc \ --region us-central1
The gateway that you create should look similar to the following example output:
Created [https://www.googleapis.com/compute/v1/projects/YOUR_PROJECT_ID/regions/us-central1/vpnGateways/ha-vpn-gw-a]. NAME INTERFACE0 INTERFACE1 NETWORK REGION ha-vpn-gw-a 203.0.113.1 203.0.113.2 google-to-azure-vpc us-central1
The output lists the external IPv4 addresses that have been automatically assigned to each gateway interface (
INTERFACE0
andINTERFACE1
). You need these IP addresses when you set up the local network gateways on Azure:- Record the IP address for
INTERFACE0
inHA_VPN_INT_0
. - Record the IP address for
INTERFACE1
inHA_VPN_INT_1
.
- Record the IP address for
Create a Cloud Router:
gcloud compute routers create ROUTER_NAME \ --region REGION \ --network NETWORK \ --asn GOOGLE_ASN \
Replace the following:
ROUTER_NAME
: The name for your Cloud Router.REGION
: The region where you are creating the HA VPN gateway and tunnels.GOOGLE_ASN
: The private autonomous system number (ASN) for the Cloud Router that you're creating. It can be any private ASN in the range64512-65534
or4200000000-4294967294
that you aren't already using as a peer ASN in the same region and network.
The command should look similar to the following example:
gcloud compute routers create cloud-router \ --region us-central1 \ --network google-to-azure-vpc \ --asn 65534
Create a peer VPN gateway for the Azure VPN
In this section, you create an external VPN gateway resource that provides information to Google Cloud about your active-active VPN gateway in Azure. You create a single peer VPN gateway that uses two separate interfaces, each with its own external IP address.
Create a single external peer VPN gateway with two interfaces:
gcloud compute external-vpn-gateways create AZURE_GW_NAME \ --interfaces 0=AZURE_GW_IP_0,1=AZURE_GW_IP_1
Replace the following:
AZURE_GW_NAME
: the name of your Azure active-active VPN gatewayAZURE_GW_IP_0
: the external IP address for one interface from the peer gatewayAZURE_GW_IP_1
: the external IP address for another interface from the peer gateway
The peer VPN gateway resource that you created should look similar to the
following example where AZURE_GW_IP_0
and
AZURE_GW_IP_1
show the actual external IP addresses of the peer
gateway interfaces:
gcloud compute external-vpn-gateways create azure-peer-gw \ --interfaces 0=203.0.113.1,1=203.0.113.2 Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/externalVpnGateways/peer-gw]. NAME INTERFACE0 INTERFACE1 azure-peer-gw 203.0.113.1 203.0.113.2
Create VPN tunnels
You need to create two VPN tunnels: one tunnel for each interface in the peer VPN gateway. When configuring VPN tunnels to Azure, use the IKEv2 encryption protocol.
For the commands used in this section, replace the following:
TUNNEL_NAME_IF0
andTUNNEL_NAME_IF1
: a name for the tunnel; naming the tunnels by including the gateway interface name can help identify the tunnels later.AZURE_GW_NAME
: the name of the external peer gateway created earlierAZURE_GW_INT_NUM_0
andAZURE_GW_INT_NUM_1
: the interface numbers configured earlier on the external peer gateway.IKE_VERS
: use2
for IKEv2.SHARED_SECRET
: your pre-shared key (shared secret), which must correspond with the pre-shared key that you specify when you set up VPN connections in Azure. For recommendations, see Generate a strong pre-shared key.HA_VPN_GATEWAY_NAME
: the name of the HA VPN gateway.INT_NUM_0
: the number0
for the first interface on the HA VPN gateway that you created earlier.INT_NUM_1
: the number1
for the second interface on the HA VPN gateway that you created earlier.
Use the following steps to create the VPN tunnels:
Create the VPN tunnel for interface 0:
gcloud compute vpn-tunnels create TUNNEL_NAME_IF0 \ --peer-external-gateway=AZURE_GW_NAME \ --peer-external-gateway-interface=AZURE_GW_INT_NUM_0 \ --region=REGION \ --ike-version=IKE_VERS \ --shared-secret=SHARED_SECRET \ --router=ROUTER_NAME \ --vpn-gateway=HA_VPN_GATEWAY_NAME \ --interface=INT_NUM_0
The command should look similar to the following example:
gcloud compute vpn-tunnels create azure-tunnel-1 \ --peer-external-gateway azure-peer-gw \ --peer-external-gateway-interface 0 \ --region us-central1 \ --ike-version 2 \ --shared-secret xo2aTKHipD/oE1GAXgj3lMwjBmJXZjqD \ --router cloud-router \ --vpn-gateway ha-vpn-gw-a \ --interface 0
Create the VPN tunnel for interface 1:
gcloud compute vpn-tunnels create TUNNEL_NAME_IF1 \ --peer-external-gateway=AZURE_GW_NAME \ --peer-external-gateway-interface=AZURE_GW_INT_NUM_1 \ --region=REGION \ --ike-version=IKE_VERS \ --shared-secret=SHARED_SECRET \ --router=ROUTER_NAME \ --vpn-gateway=HA_VPN_GATEWAY_NAME \ --interface=INT_NUM_1
The command should look similar to the following example:
gcloud compute vpn-tunnels create azure-tunnel-2 \ --peer-external-gateway azure-peer-gw \ --peer-external-gateway-interface 1 \ --region us-central1 \ --ike-version 2 \ --shared-secret xo2aTKHipD/oE1GAXgj3lMwjBmJXZjqD \ --router cloud-router \ --vpn-gateway ha-vpn-gw-a \ --interface 1
Create BGP sessions
For dynamic routing, you use Cloud Router to establish BGP sessions between Google Cloud and Azure. We recommend using dynamic routing instead of static routing whenever possible, as discussed in the Cloud VPN Overview and Cloud VPN Network and Tunnel Routing.
You need to create a BGP session for each VPN tunnel. Each BGP session consists of a BGP interface to the Cloud Router and a BGP peer. You create a BGP peer for each of the two VPN tunnels that you just created.
For the commands used in this section, replace the following:
ROUTER_NAME
: the name you assigned to the Cloud Router.ROUTER_INTERFACE_NAME_0
andROUTER_INTERFACE_NAME_1
: the name for the Cloud Router BGP interface; it can be helpful to use names related to the tunnel names configured previously.MASK_LENGTH
: specify30
; each BGP session on the same Cloud Router must use a unique/30
CIDR from the169.254.0.0/16
block.GOOGLE_BGP_IP_0
andGOOGLE_BGP_IP_1
: the BGP peering IP addresses for the HA VPN gateway interfaces that you configure; each tunnel uses a different gateway interface. Because the allowed ranges for Azure APIPA BGP peering IP addresses are169.254.21.*
and169.254.22.*
, you must select an available IP address in the/30
CIDR of those ranges for your Cloud Router BGP peering IP addresses.AZURE_BGP_IP_0
andAZURE_BGP_IP_1
: the APIPA BGP peering IP addresses that you already configured on the Azure active-active VPN gateway; each tunnel uses a different address.TUNNEL_NAME_IF0
andTUNNEL_NAME_IF1
: the tunnels associated with the HA VPN gateway interface that you configured.AZURE_ASN
: the ASN that you configured for the active-active peer VPN gateway in Azure.BGP_PEER_NAME_1
andBGP_PEER_NAME_2
with unique names for each BGP peer. For example,azure‑bgp‑peer‑1
andazure‑bgp‑peer‑2
.
To create BGP sessions for the VPN tunnels, follow these steps:
For the first VPN tunnel, add a BGP interface to the Cloud Router:
gcloud compute routers add-interface ROUTER_NAME \ --interface-name=ROUTER_INTERFACE_NAME_0 \ --mask-length=MASK_LENGTH \ --vpn-tunnel=TUNNEL_NAME_IF0 \ --ip-address=GOOGLE_BGP_IP_0 \ --region=REGION
The command should look similar to the following example:
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 us-central1
For the first VPN tunnel, add a BGP peer to the interface:
gcloud compute routers add-bgp-peer ROUTER_NAME \ --peer-name=BGP_PEER_NAME_1 \ --peer-asn=AZURE_ASN \ --interface=ROUTER_INTERFACE_NAME_0 \ --peer-ip-address=AZURE_BGP_IP_0 \ --region=REGION
The command should look similar to the following example:
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 us-central1
For the second VPN tunnel, add a BGP interface to the Cloud Router:
gcloud compute routers add-interface ROUTER_NAME \ --interface-name=ROUTER_INTERFACE_NAME_1 \ --mask-length=MASK_LENGTH \ --vpn-tunnel=TUNNEL_NAME_IF0 \ --ip-address=GOOGLE_BGP_IP_1 \ --region=REGION
The command should look similar to the following example:
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 us-central1
For the second VPN tunnel, add a BGP peer to the interface:
gcloud compute routers add-bgp-peer ROUTER_NAME \ --peer-name=BGP_PEER_NAME_2 \ --peer-asn=AZURE_ASN \ --interface=ROUTER_INTERFACE_NAME_1 \ --peer-ip-address=AZURE_BGP_IP_1 \ --region=REGION
The command should look similar to the following example:
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 us-central1
Create local network gateways and VPN connections in Azure
With your Google Cloud components created and configured, you return to your Azure environment to finish connecting Google Cloud to Azure. To finish this connection, you create the following components in Azure:
- Two local network gateways that represent your Google Cloud VPN in Azure.
- Two VPN connections that correspond to the two HA VPN tunnels that you configured in Google Cloud.
Create two local network gateways
A local network gateway is a specific object that represents your Google Cloud VPN in Azure. When you create a local network gateway, you specify the following information:
- A name for the local network gateway.
- The IP address of the HA VPN interface to be used in the connection.
- The IP address of the Google Cloud Router to which you want to create a connection.
- The IP address prefixes that are routed through the VPN gateway to the Cloud Router. The address prefixes that you specify are the prefixes that are located on your Cloud VPN. If your Cloud virtual private network changes or you need to change the external IP address for the Cloud Router, you can update the values later.
You need to create two local network gateways: one gateway that connects to the first HA VPN tunnel interface on Google Cloud and another gateway that connects to the second HA VPN tunnel interface.
For more information, see the create a local network gateway section of the Create a site-to-site VPN connection in the Azure portal tutorial in the Azure documentation.
To create the first local network gateway, follow these steps:
- Sign in to the Azure Portal.
- In Search resources, service, and docs (G+/), type local network gateway.
- In the search results under Marketplace, locate and select local network gateway.
- Click Create.
On the Basics tab of the Create local network gateway page, specify the following values for your local network gateway:
- In the Subscription list, verify that the correct subscription is showing.
- In the Resource group list, select the same resource group as the one that you created for the VNet earlier in this document.
- For Region, select the same location that your VNet resides in.
- For Name, enter a name for your local network gateway, such as
azure-to-google-locgateway1
. - For Endpoint, select IP address.
- In the IP address box, enter the IP address for
INTERFACE0
of your HA VPN (that is, enterHA_VPN_INT_0
). For Address Space, enter the address ranges for the network that this local network represents.
You can add multiple address space ranges. Make sure that the ranges you specify here do not overlap with ranges of other networks that you want to connect to.
On the Advanced tab, configure the BGP settings as follows:
- For Configure BGP settings, select Yes.
- For Autonomous system number (ASN), enter the ASN for your Cloud Router (that is, enter
GOOGLE_ASN
). - For BGP peer IP address, enter the BGP IP address for the Cloud Router in tunnel 1 (that is, enter
GOOGLE_BGP_IP_0
).
To validate the local network gateway configuration, click Review and create at the bottom of the page.
After the validation passes, click Create to create the local network gateway.
To create the second local network gateway, follow these steps:
- In the Azure Portal, in Search resources, service, and docs (G+/), type
local network gateway
. - Under Marketplace, in the search results, locate and select local network gateway.
On the Basics tab of the Create local network gateway page, specify the following values for your local network gateway:
- In the Subscription list, verify that the correct subscription is showing.
- In the Resource group list, select the same resource group as the one that you created for the VNet earlier in this document.
- For Region, select the same region as that of your VNet.
- For Name, enter a name for your local network gateway, such as
azure-to-google-locgateway2
. - For Endpoint, select IP address.
- In the IP address box, enter the IP address for
INTERFACE1
of your HA VPN (that is, enterHA_VPN_INT_1
). - For Address Space, enter the address ranges for the network that this local network represents.
You can add multiple address space ranges. Make sure that the ranges you specify here do not overlap with ranges of other networks that you want to connect to.
On the Advanced tab, configure the BGP settings as follows:
- For Configure BGP settings, select Yes.
- For Autonomous system number (ASN), enter the ASN for your Cloud Router (that is, enter
GOOGLE_ASN
). - For BGP peer IP address, enter the BGP IP address for the Cloud Router in tunnel 1 (that is, enter
GOOGLE_BGP_IP_1
).
To validate your local network gateway configuration, click Review and create at the bottom of the page.
After the validation passes, click Create to create the local network gateway.
Create two VPN connections
To create the VPN connections in Azure, you need the preshared keys, or SHARED_SECRET, that you configured when you set up the HA VPN tunnels on Google Cloud.
- In the Azure Portal, locate the active-active VPN gateway that you created in Create an active-active VPN gateway.
- Select Connections.
- At the top of the Connections page, select +Add.
- On the Add connection page, specify the following values for your first
connection:
- For Name, enter a name for the connection, such as
azure-vnet-to-google1
. - For Connection type, select Site-to-site (IPsec).
- For Local network gateway, specify the first local network gateway
that you created, such as
azure-to-google-locgateway1
. - For Shared key (PSK), specify the shared key that you configured for the first HA VPN tunnel.
- Select Enable BGP.
- For IKE Protocol, select IKEv2.
- Click OK.
- On the Connections page, select +Add to add a second connection with the following values:
- For Name, enter a name for the connection, such as
azure-vnet-to-google2
. - For Connection type, select Site-to-site (IPsec).
- For Local network gateway, specify the second local network gateway
that you created, such as
azure-to-google-locgateway2
. - For Shared key (PSK), specify the shared key that you configured for the second HA VPN tunnel.
- Select Enable BGP.
- For IKE Protocol, select IKEv2.
- Click OK.
- For Name, enter a name for the connection, such as
- On the Connections page, verify that the status of both connections is listed as Connected.
Verify the configuration
In Google Cloud, you can verify your HA VPN configuration by first examining (listing) your Cloud Router configuration and then checking the status of the HA VPN tunnels.
In Cloud Shell, list the BGP peering IP addresses chosen by Cloud Router:
gcloud compute routers get-status ROUTER_NAME \ --region=REGION \ --format='flattened(result.bgpPeerStatus[].name, result.bgpPeerStatus[].ipAddress, result.bgpPeerStatus[].peerIpAddress)'
The command should look similar to the following example:
gcloud compute routers get-status cloud-router \ --region us-central1 \ --format='flattened(result.bgpPeerStatus[].name,result.bgpPeerStatus[].ipAddress,result.bgpPeerStatus[].peerIpAddress)'
The expected output for a Cloud Router managing two HA VPN tunnels (index
0
and index1
) should look like the following example:result.bgpPeerStatus[0].ipAddress: 169.254.21.2 result.bgpPeerStatus[0].name: azure-bgp-peer-1 result.bgpPeerStatus[0].peerIpAddress: 169.254.21.1 result.bgpPeerStatus[1].ipAddress: 169.254.22.2 result.bgpPeerStatus[1].name: azure-bgp-peer-2 result.bgpPeerStatus[1].peerIpAddress: 169.254.22.1
In Cloud Shell, view the status of the first HA VPN tunnel:
gcloud compute vpn-tunnels describe TUNNEL_NAME_IF0 \ --region=REGION
Replace the following:
TUNNEL_NAME_IF0
: the tunnel associated with the first HA VPN gateway interface that you configured.REGION
: region where you deployed the HA VPN gateway.
The command should look similar to the following example:
gcloud compute vpn-tunnels describe azure-tunnel-1 -–region=us-central1
The expected output for the tunnel should look similar to the following example:
creationTimestamp: '2022-09-28T17:13:21.592-07:00' description: '' detailedStatus: Tunnel is up and running. id: '278561789474069966' ikeVersion: 2 kind: compute#vpnTunnel localTrafficSelector: - 0.0.0.0/0 name: azure-tunnel-1 peerExternalGateway: https://www.googleapis.com/compute/v1/projects/PROJECT-ID/global/externalVpnGateways/azure-peer-gw peerExternalGatewayInterface: 0 peerIp: 203.0.113.1 region: https://www.googleapis.com/compute/v1/projects/PROJECT-ID/regions/us-central1 remoteTrafficSelector: - 0.0.0.0/0 router: https://www.googleapis.com/compute/v1/projects/PROJECT-ID/regions/us-central1/routers/cloud-router selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT-ID/regions/us-central1/vpnTunnels/azure-tunnel-1 sharedSecret: '*************' sharedSecretHash: ALDZGgSMUxj8KFahMoG_L0Fz9paz status: ESTABLISHED vpnGateway: https://www.googleapis.com/compute/v1/projects/PROJECT-ID/regions/us-central1/vpnGateways/ha-vpn-gw-a vpnGatewayInterface: 0
In Cloud Shell, view the status of the second HA VPN tunnel:
gcloud compute vpn-tunnels describe TUNNEL_NAME_IF1 \ --region=REGION
Replace the following:
TUNNEL_NAME_IF1
: the tunnel associated with the second HA VPN gateway interface that you configured.REGION
: region where you deployed the HA VPN gateway.
The command should look similar to the following example:
gcloud compute vpn-tunnels describe azure-tunnel-2 --region=us-central1
The expected output for the tunnel should look similar to the following example:
creationTimestamp: '2022-09-28T17:13:21.592-07:00' description: '' detailedStatus: Tunnel is up and running. id: '5665972275117479944' ikeVersion: 2 kind: compute#vpnTunnel localTrafficSelector: - 0.0.0.0/0 name: azure-tunnel-2 peerExternalGateway: https://www.googleapis.com/compute/v1/projects/PROJECT-ID/global/externalVpnGateways/azure-peer-gw peerExternalGatewayInterface: 1 peerIp: 203.0.113.2 region: https://www.googleapis.com/compute/v1/projects/PROJECT-ID/regions/us-central1 remoteTrafficSelector: - 0.0.0.0/0 router: https://www.googleapis.com/compute/v1/projects/PROJECT-ID/regions/us-central1/routers/cloud-router selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT-ID/regions/us-central1/vpnTunnels/azure-tunnel-2 sharedSecret: '*************' sharedSecretHash: ALDZGgSMUxj8KFahMoG_L0Fz9ddd
Test connectivity
To test HA VPN connections, you first need to create VMs on each side of the tunnel.
Next, you need to make sure that you have firewall rules defined in Google Cloud that allow inbound ICMP traffic from the Azure network subnets. With the VMs and firewall rules in place, you can then test connectivity by using ping and test bandwidth by using iperf.
Create test VMs on each side of the tunnels to test ping requests.
You must also configure the Azure network firewall to allow inbound traffic from the subnet prefixes that are used in your Virtual Private Cloud.
On Google Cloud, configure a firewall rule that allows inbound ICMP traffic from your Azure VPN:
gcloud compute firewall-rules create RULE_NAME \ --network NETWORK \ --direction ingress \ --action allow \ --source-ranges AZURE_VNET_RANGE \ --rules icmp \
Replace
AZURE_VNET_RANGE
with the IP address range that is assigned to your Azure VNet.The command should look similar to the following example:
gcloud compute firewall-rules create allow-azure-icmp \ --network google-to-azure-vpc \ --direction ingress \ --action allow \ --source-ranges 10.0.0.0/16 \ --rules icmp
Test the connection using the ping command.
Measure bandwidth between your test machines using iperf.
Clean up
Delete the Google Cloud and Azure resources that you have created during this tutorial.
Delete the Google Cloud project
To avoid incurring charges to your Google Cloud account for the resources used in this tutorial, you can delete your project:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Delete Azure resource group
Delete the Azure Manager resource group that you created when you created the
VNet. In this tutorial, the name of the example resource group
is azure-to-google-resgroup
.
For more information, see Azure Resource Manager resource group and resource deletion.
What's next
- Learn more about Google Cloud VPN.
- Learn more about best practices and reference architectures for VPC design.