Conectar Filiais ao Azure Virtual WAN com VPN
Neste tutorial você aprenderá a conectar filiais ao Azure Virtual WAN com VPN Site-to-Site. Vamos criar o VPN Gateway, registrar VPN Sites e estabelecer conexões IPsec/IKEv2. Este é o Artigo 4 da série Azure Virtual WAN. Este tutorial pressupõe que você já criou o Virtual WAN e o Virtual Hub (Artigo 3).
Sumário
Esses pré-requisitos garantem que você poderá conectar filiais ao Azure Virtual WAN com VPN de forma segura e estável.
Pré-requisitos
- Virtual WAN e Virtual Hub criados (Artigo 3) com
provisioningState: Succeeded - IP público estático do roteador da filial on-premises
- Bloco CIDR da rede interna da filial (ex:
192.168.1.0/24) - Pré-shared key (PSK) para o túnel IPsec
Para conectar filiais ao Azure Virtual WAN com VPN, utilize as mesmas variáveis de ambiente definidas nos artigos anteriores.
Variáveis de Ambiente
# ── Herdadas do Artigo 2 ──────────────────────────────────────────────────────
RESOURCE_GROUP="rg-vwan-castilho"
VWAN_NAME="vwan-castilho"
HUB_NAME="vhub-castilho-eastus"
# ── Novos recursos deste artigo ───────────────────────────────────────────────
VPN_GW_NAME="vpngw-castilho"
VPN_SITE_NAME="vpnsite-filial-sp"
VPN_CONNECTION_NAME="conn-filial-sp"
# ── Dados da Filial (substitua pelos valores reais) ───────────────────────────
BRANCH_PUBLIC_IP="203.0.113.10" # IP público do roteador da filial
BRANCH_ADDRESS_PREFIX="192.168.1.0/24" # CIDR interno da filial
# ── Segurança ─────────────────────────────────────────────────────────────────
VPN_PSK="$(openssl rand -base64 32)" # Gera PSK aleatória (salve em cofre)
echo "PSK gerada (configure também no roteador da filial): $VPN_PSK"
Passo 1 — Criar o VPN Gateway no Hub
Em primeiro lugar, o VPN Gateway do Virtual WAN é diferente do VPN Gateway tradicional. Ele é provisionado dentro do hub e totalmente gerenciado pelo Azure. Além disso, a escala é definida em unidades de escala: 1 unidade equivale a 500 Mbps de throughput agregado.
az network vpn-gateway create \
--name "$VPN_GW_NAME" \
--resource-group "$RESOURCE_GROUP" \
--location "eastus" \
--vhub "$HUB_NAME" \
--scale-unit 1 \
--tags \
projeto="vwan-castilho" \
ambiente="producao"
echo "VPN Gateway em provisionamento — aguarde ~30 minutos..."
# Monitorar provisionamento
az network vpn-gateway show \
--name "$VPN_GW_NAME" \
--resource-group "$RESOURCE_GROUP" \
--query "{nome:name, status:provisioningState, bgpAsn:bgpSettings.asn, ips:ipConfigurations[].publicIpAddress}" \
-o json
{
"nome": "vpngw-castilho",
"status": "Succeeded",
"scaleUnit": 1,
"bgpAsn": 65515,
"publicIPs": [
"<vpn-gw-ip-1>",
"<vpn-gw-ip-2>"
]
}
echo "VPN Gateway em provisionamento — aguarde ~30 minutos..."
# ↑ Neste deploy: ~33 min do create ao Succeeded
Os dois IPs públicos (<vpn-gw-ip-1> e <vpn-gw-ip-2>) são as extremidades Azure do túnel IPsec. Configure ambos no roteador da filial para alta disponibilidade ativo/passivo. O ASN 65515 é o padrão do Virtual WAN.
| Scale | para | ||
|---|---|---|---|
| 1 | 500 Mbps | Até 1.000 | Lab / pequenas empresas |
| 2 | 1 Gbps | Até 1.000 | Médias empresas |
| 10 | 5 Gbps | Até 5.000 | Grandes empresas |
| 20 | 10 Gbps | Até 10.000 | Corporações globais |
Passo 2 — Criar o VPN Site (Filial)
Em seguida, o VPN Site representa a filial on-premises no Azure. Você registra o IP público do roteador e o CIDR interno. Dessa forma, o Azure usa essas informações para configurar o túnel IPsec.
az network vpn-site create \
--name "$VPN_SITE_NAME" \
--resource-group "$RESOURCE_GROUP" \
--location "eastus" \
--virtual-wan "$VWAN_NAME" \
--ip-address "$BRANCH_PUBLIC_IP" \
--address-prefixes "$BRANCH_ADDRESS_PREFIX" \
--device-vendor "Cisco" \
--device-model "ASR1000" \
--link-speed 100 \
--tags \
projeto="vwan-castilho" \
filial="sao-paulo"
# Capturar o ID do VPN Site
VPN_SITE_ID=$(az network vpn-site show \
--name "$VPN_SITE_NAME" \
--resource-group "$RESOURCE_GROUP" \
--query id -o tsv)
echo "VPN Site criado: $VPN_SITE_ID"
Nome Status Ip Prefixo ----------------- --------- ------------ -------------- vpnsite-filial-sp Succeeded 203.0.113.10 192.168.1.0/24 VPN Site criado: /subscriptions/<subscription-id>/resourceGroups/rg-vwan-castilho/providers/Microsoft.Network/vpnSites/vpnsite-filial-sp
VPN Site com BGP (roteamento dinâmico)
Também é possível usar roteamento dinâmico via BGP. Nesse caso, adicione as configurações abaixo ao criar o VPN Site:
# VPN Site com BGP habilitado
az network vpn-site create \
--name "$VPN_SITE_NAME" \
--resource-group "$RESOURCE_GROUP" \
--location "eastus" \
--virtual-wan "$VWAN_NAME" \
--ip-address "$BRANCH_PUBLIC_IP" \
--address-prefixes "$BRANCH_ADDRESS_PREFIX" \
--asn 65001 \
--bgp-peering-address "192.168.1.254" \
--tags filial="sao-paulo"
Passo 3 — Criar a Conexão VPN
Por fim, a conexão vincula o VPN Site ao VPN Gateway, estabelecendo o túnel IPsec/IKEv2. O --shared-key deve ser idêntico ao configurado no roteador da filial.
az network vpn-gateway connection create \
--name "$VPN_CONNECTION_NAME" \
--resource-group "$RESOURCE_GROUP" \
--gateway-name "$VPN_GW_NAME" \
--vpn-site "$VPN_SITE_ID" \
--shared-key "$VPN_PSK" \
--enable-bgp false \
--protocol-type IKEv2 \
--connection-bandwidth 100
# Verificar o status da conexão
az network vpn-gateway connection show \
--name "$VPN_CONNECTION_NAME" \
--resource-group "$RESOURCE_GROUP" \
--gateway-name "$VPN_GW_NAME" \
--query "{nome:name, status:provisioningState, conexao:connectionStatus}" \
-o table
Baixar a Configuração para o Roteador da Filial
Além disso, o Azure gera automaticamente arquivos de configuração para roteadores (Cisco, Palo Alto, Fortinet, Check Point, Juniper). Ou seja, o arquivo contém todos os parâmetros IPsec, IKE e BGP para configurar o lado da filial.
# Salvar a configuração do VPN Site em arquivo JSON local
az network vpn-site download \
--resource-group "$RESOURCE_GROUP" \
--vwan-name "$VWAN_NAME" \
--vpn-sites "[{\"id\": \"$VPN_SITE_ID\"}]" \
--output-blob-sas-url "$(az storage blob generate-sas \
--account-name \
--container-name configs \
--name "vpn-config-filial-sp.json" \
--permissions rw \
--expiry "$(date -u -d '+1 hour' '+%Y-%m-%dT%H:%MZ')" \
--full-uri -o tsv)"
Verificar o Status da Conexão
# Status de todas as conexões do VPN Gateway
az network vpn-gateway connection list \
--resource-group "$RESOURCE_GROUP" \
--gateway-name "$VPN_GW_NAME" \
--query "[].{Nome:name, Status:provisioningState, Conexao:connectionStatus, Largura:connectionBandwidth}" \
-o table
# IPs públicos do VPN Gateway (necessários para configurar o roteador da filial)
az network vpn-gateway show \
--name "$VPN_GW_NAME" \
--resource-group "$RESOURCE_GROUP" \
--query "ipConfigurations[].{IP:publicIpAddress}" \
-o table
# IPs públicos do VPN Gateway (configure no roteador da filial)
[
{ "IP": "<vpn-gw-ip-1>" },
{ "IP": "<vpn-gw-ip-2>" }
]
# Status da conexão
{
"nome": "conn-filial-sp",
"status": "Succeeded",
"conexao": "NotConnected",
"bandwidth": 100
}
NotConnected é o estado esperado em laboratório — o roteador on-premises (203.0.113.10) não existe fisicamente. Em produção, após configurar o roteador com os IPs do VPN Gateway, a PSK e os parâmetros IKEv2/IPsec, o status muda para Connected.
Conectar Múltiplas Filiais
Para conectar várias filiais, repita os Passos 2 e 3 para cada uma. Crie um VPN Site e uma conexão individuais. Por exemplo, use o script abaixo para automatizar o processo:
# Exemplo: array com dados das filiais
declare -A FILIAIS=(
["filial-rj"]="200.100.50.1:10.1.0.0/24"
["filial-bh"]="177.80.30.5:10.2.0.0/24"
["filial-cu"]="189.45.20.8:10.3.0.0/24"
)
for NOME in "${!FILIAIS[@]}"; do
IFS=':' read -r IP CIDR <<< "${FILIAIS[$NOME]}"
PSK="$(openssl rand -base64 32)"
# VPN Site
az network vpn-site create \
--name "vpnsite-$NOME" \
--resource-group "$RESOURCE_GROUP" \
--location "eastus" \
--virtual-wan "$VWAN_NAME" \
--ip-address "$IP" \
--address-prefixes "$CIDR" \
--tags filial="$NOME"
SITE_ID=$(az network vpn-site show \
--name "vpnsite-$NOME" \
--resource-group "$RESOURCE_GROUP" \
--query id -o tsv)
# Conexão
az network vpn-gateway connection create \
--name "conn-$NOME" \
--resource-group "$RESOURCE_GROUP" \
--gateway-name "$VPN_GW_NAME" \
--vpn-site "$SITE_ID" \
--shared-key "$PSK" \
--protocol-type IKEv2
echo "Filial $NOME conectada | IP: $IP | CIDR: $CIDR | PSK: $PSK"
done
Troubleshooting de Conexão VPN
connectionStatus: Unknown |
VPN Gateway ainda provisionando | Aguardar provisioningState: Succeeded no gateway |
connectionStatus: NotConnected |
PSK divergente ou IP errado | Verificar PSK e IP no VPN Site vs configuração do roteador da filial |
| Tráfego não passa após conectado | Rotas não propagadas | Verificar tabela de rotas efetivas com az network vhub get-effective-routes |
| IKE Phase 1 falha | Parâmetros IKE incompatíveis | Verificar proposta IKEv2 no roteador — o Azure usa AES-256, SHA-256, DH Group 14 por padrão |
| IKE Phase 2 falha | Selectors de tráfego incorretos | Usar 0.0.0.0/0 como traffic selector no roteador (Virtual WAN usa route-based VPN) |
Com a topologia completa para conectar filiais ao Azure Virtual WAN com VPN estabelecida, o próximo passo é implementar segurança centralizada com Azure Firewall.
Próximos Passos da Série
- 📖 Artigo 1: O que é Azure Virtual WAN — conceitos e arquitetura
- ⚙️ Artigo 2: Configurar o Azure Virtual WAN
- 🔧 Artigo 3: Criar o Azure Virtual WAN
- 🔌 Artigo 4 (este): Conectar Filiais ao Azure Virtual WAN com VPN
- 🔒 Artigo 5: Segurança Azure Virtual WAN com Firewall
Referências oficiais:
Tutorial: Conexão site a site com Virtual WAN — Microsoft Learn
VPN sobre ExpressRoute no Virtual WAN — Microsoft Learn
Referência AZ CLI — az network vpn-gateway
Interessado em saber mais sobre artigos relacionados ao Microsoft Azure CLIQUE AQUI
🚀 Vamos nos conectar?
Não perca nenhuma oportunidade! Cadastre-se nas minhas redes e no canal do YouTube para receber conteúdos de TI, Cloud, Azure, Kubernetes e DevOps em primeira mão.
Dica: No Facebook, todos os artigos do blog são publicados automaticamente. Vale a pena curtir!
💬 Dúvidas ou Problemas?
Com o intuito de ajudar a comunidade, caso você tenha dúvidas ou encontre problemas na execução dos comandos deste artigo, deixe um comentário abaixo. Responderei o mais breve possível!
Muito obrigado pela visita e até o próximo post!
Jefferson Castilho Especialista em Cloud & DevOps.Este guia técnico é exclusivo do Blog do Castilho. Explore nossa para mais conteúdos sobre IA e Cloud.


