A conexão de VPN entre AVS e o ambiente On-premises na maioria das vezes é realizada através do Virtual WAN, conforme descrito em: https://learn.microsoft.com/en-us/azure/azure-vmware/configure-site-to-site-vpn-gateway.
Contudo, caso necessário utilizar em uma topologia Hub-Spoke, existem componentes adicionais que devem ser considerados para permitir o trânsito entre o ExpressRoute do AVS e o VPN Gateway, bem como a propagação das rotas para o ambiente On-premises, assim como é feito por padrão com o Virtual WAN.
Nesta topologia, o Azure Route Server deve ser integrado para habilitar esse trânsito (propagação de rotas)
O objetivo deste artigo é demonstrar em um ambiente de laboratório como conectar um ambiente On-premises com o Azure VMware Solution (AVS) através de uma VPN Site-to-Site em topologia Hub-Spoke.
Arquitetura do Laboratório com topologia Hub-Spoke.
Componentes Azure.
- Vnet 10.90.0.0/16 com 3 Subnets.
- Gateway Subnet - 10.90.0.0/24
- RouteServerSubnet - 10.90.1.0/24
- VmSubnet : 10.90.2.0/24
- Virtual Network Gateway - VPN
- Virtual Network Gateway - Express Route
- Azure Route Server
- Azure Vm Linux Ubuntu
Componentes On-premises
- Firewall VPN PfSense - 192.168.90.0/24 , 192.168.200.0/22 , 192.168.92.0/24
Componetes Azure Vmware Solution
- VMware SDDC
- Circuito Express Route
*Este laboratório presume que os componentes como o Azure Vmware Solution e ambiente On-premises com Pfsense ou qualquer outro equipamento esteja presente.
1. Deploy componentes Azure
# 1. Variáveis - Altere conforme necessário
RESOURCE_GROUP="rg-avs-lab"
LOCATION="eastus2"
VNET_NAME="vnet-avs-lab"
VNET_ADDRESS_PREFIX="10.90.0.0/16"
SUBNET_GATEWAY_PREFIX="10.90.0.0/24"
SUBNET_ROUTE_SERVER_PREFIX="10.90.1.0/24"
SUBNET_GATEWAY_NAME="GatewaySubnet"
SUBNET_ROUTE_SERVER_NAME="RouteServerSubnet"
EXPRESSROUTE_GW_NAME="er-avs-lab"
VPN_GW_NAME="vpn-avs-lab"
VPN_GW_IP1_NAME="vpn-gw-ip1"
VPN_GW_IP2_NAME="vpn-gw-ip2"
VPN_GW_ASN=65515
EXPRESSROUTE_IP_NAME="er-ip"
LOCAL_NETWORK_GATEWAY_NAME="local-gw-avs-lab"
BGP_PEER_IP="192.168.90.1"
ASN_LOCAL=65503
ROUTE_SERVER_NAME="rserver-avs-lab"
# Variáveis para subnet e VM
SUBNET_VM_NAME="subnet-vm"
SUBNET_VM_PREFIX="10.90.5.0/24"
VM_NAME="vm-ubuntu"
VM_ADMIN_USERNAME='azureuser'
VM_ADMIN_PASSWORD='P@ssword123!' # Use um método seguro em produção
VM_NIC_NAME="vm-ubuntu-nic"
VM_IMAGE="Canonical:0001-com-ubuntu-server-focal:20_04-lts:latest"
VM_SIZE="Standard_B2ms"
# 2. Criar grupo de recursos
az group create --name $RESOURCE_GROUP --location $LOCATION
# 3. Criar VNet e subnets
az network vnet create \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--name $VNET_NAME \
--address-prefixes $VNET_ADDRESS_PREFIX \
--subnet-name $SUBNET_GATEWAY_NAME \
--subnet-prefix $SUBNET_GATEWAY_PREFIX
az network vnet subnet create \
--resource-group $RESOURCE_GROUP \
--vnet-name $VNET_NAME \
--name $SUBNET_ROUTE_SERVER_NAME \
--address-prefix $SUBNET_ROUTE_SERVER_PREFIX
# Criar subnet para a VM
az network vnet subnet create \
--resource-group $RESOURCE_GROUP \
--vnet-name $VNET_NAME \
--name $SUBNET_VM_NAME \
--address-prefix $SUBNET_VM_PREFIX
# 4. Criar IP público para ExpressRoute
az network public-ip create \
--resource-group $RESOURCE_GROUP \
--name $EXPRESSROUTE_IP_NAME \
--sku Standard \
--allocation-method Static
# 5. Criar Gateway ExpressRoute
az network vnet-gateway create \
--resource-group $RESOURCE_GROUP \
--name $EXPRESSROUTE_GW_NAME \
--location $LOCATION \
--vnet $VNET_NAME \
--public-ip-addresses $EXPRESSROUTE_IP_NAME \
--gateway-type ExpressRoute \
--sku Standard
# 6. Criar IPs públicos para VPN Gateway ativo-ativo
az network public-ip create \
--resource-group $RESOURCE_GROUP \
--name $VPN_GW_IP1_NAME \
--sku Standard \
--allocation-method Static
az network public-ip create \
--resource-group $RESOURCE_GROUP \
--name $VPN_GW_IP2_NAME \
--sku Standard \
--allocation-method Static
# 7. Criar VPN Gateway
az network vnet-gateway create \
--resource-group $RESOURCE_GROUP \
--name $VPN_GW_NAME \
--location $LOCATION \
--vnet $VNET_NAME \
--public-ip-addresses $VPN_GW_IP1_NAME $VPN_GW_IP2_NAME \
--gateway-type Vpn \
--vpn-type RouteBased \
--sku VpnGw1
# Após a criação, configurar ativo-ativo e BGP
az network vnet-gateway update \
--resource-group $RESOURCE_GROUP \
--name $VPN_GW_NAME \
--set activeActive=true enableBgp=true bgpSettings.asn=$VPN_GW_ASN
# 8. Criar Local Network Gateway com BGP e ASN
az network local-gateway create \
--resource-group $RESOURCE_GROUP \
--name $LOCAL_NETWORK_GATEWAY_NAME \
--gateway-ip-address $BGP_PEER_IP \
--local-address-prefixes "192.168.90.0/24" \
--asn $ASN_LOCAL \
--bgp-peering-address $BGP_PEER_IP \
--location $LOCATION
# 9. Criar conexão VPN entre o Gateway de VPN e o Local Network Gateway
az network vpn-connection create \
--resource-group $RESOURCE_GROUP \
--name vpn-s2s-connection \
--vnet-gateway1 $VPN_GW_NAME \
--local-gateway2 $LOCAL_NETWORK_GATEWAY_NAME \
--shared-key 'teste@123' \
--enable-bgp
# 10. Criar NIC para a VM
az network nic create \
--resource-group $RESOURCE_GROUP \
--name $VM_NIC_NAME \
--vnet-name $VNET_NAME \
--subnet $SUBNET_VM_NAME
# 12. Criar VM com Ubuntu
az vm create \
--resource-group $RESOURCE_GROUP \
--name $VM_NAME \
--nics $VM_NIC_NAME \
--image $VM_IMAGE \
--admin-username $VM_ADMIN_USERNAME \
--admin-password $VM_ADMIN_PASSWORD \
--size $VM_SIZE \
--location $LOCATION
2. Conectando o Express Route do AVS no VPN Gateway da Hub.
No Virtual Network Gateway de ER , adicione uma conexão
Defina o connection type como ExpressRoute
No AVS, copie o authorization key e o ExpressRoute ID
Para este cenário será utilizado o modelo de resiliência standard, o Virtual network gateway, informe um nome para conexão, insira a "authorization key" e "ExpressRoute ID" (per cirtuit URI) copiados nos passos acima e execute o deploy.
Verificando que a conexão foi estabelecida com sucesso.
Verificando as rotas na Vm de teste.
Ao verificar as rotas do Pfsense ( onprem) , é possível observar que não temos as rotas do AVS, somente da Vnet do Azure.
Para habilitar o trânsito e troca de rotas entre o Express Route do AVS e o VPN gateway precisamos inserir o Azure Route Server.
3. Deploy do Azure Route Server.
#Criar Azure Route Server
#Cria Public IP para o Route Server
az network public-ip create --resource-group $RESOURCE_GROUP --name routeserver-pip --sku Standard --allocation-method Static
# Identifica o ID da Subnet do Route Server
SUBNET_ID=$(az network vnet subnet list --resource-group $RESOURCE_GROUP --vnet-name $VNET_NAME --query "[?name=='$SUBNET_ROUTE_SERVER_NAME'].id" --output tsv)
# Cria o Route Server
az network routeserver create \
--resource-group $RESOURCE_GROUP \
--name $ROUTE_SERVER_NAME \
--hosted-subnet $SUBNET_ID \
--location $LOCATION \
--public-ip-address routeserver-pip
Após criado habilitamos a opção Branch-to-Branch
Podemos verificar que agora as rotas do AVS (172.30.0.0/22), agora foram propagadas para o Pfsense.
Validando acesso ao Vcenter do AVS.
Referências:
https://learn.microsoft.com/en-us/azure/route-server/overview
https://learn.microsoft.com/en-us/azure/architecture/networking/architecture/hub-spoke