Desafio 24: rotas definidas pelo usuário & controle de tráfego
60-75 minutos | Custo estimado: ~$0,25 | Peso no Exame: 15-20%
Cenário
A Contoso Ltd. possui uma topologia de rede hub-spoke no Azure. A equipe de segurança exige que todo o tráfego destinado à internet a partir das VNets spoke passe por um Network Virtual Appliance (NVA) central na VNet hub para inspeção e registro. Você deve implementar rotas definidas pelo usuário (UDRs) para substituir o roteamento padrão do Azure e impor esse padrão de fluxo de tráfego (túnel forçado).
Habilidades do exame cobertas
- Criar e configurar tabelas de rotas
- Criar e configurar rotas definidas pelo usuário
- Associar tabelas de rotas a sub-redes
- Configurar túnel forçado (forced tunneling)
- Configurar tipos de próximo salto (Virtual Appliance, VNet Gateway, Internet, None)
- Diagnosticar problemas de roteamento usando rotas efetivas
Referência sysadmin ↔ Azure
| On-Prem / Tradicional | Equivalente no Azure |
|---|---|
| Rotas estáticas em roteadores | User-Defined Routes (UDRs) |
| Configuração de gateway padrão | Próximo salto na tabela de rotas |
| Roteador/Firewall como inspetor de tráfego | Network Virtual Appliance (NVA) |
| Roteamento baseado em política (PBR) | Tabela de rotas associada à sub-rede |
| Forçar tráfego através de proxy/firewall | Túnel forçado (Forced tunneling) |
ip route show / route print | Visualização de rotas efetivas |
| Tabelas de rotas BGP | Propagação de rotas do VNet Gateway |
Configuração inicial
# Variables
RG="rg-az104-challenge24"
LOCATION="eastus"
# Create resource group
az group create --name $RG --location $LOCATION
Tarefas
Tarefa 1: criar topologia de VNet Hub-Spoke
# Create Hub VNet
az network vnet create \
--resource-group $RG \
--name vnet-hub \
--address-prefix 10.0.0.0/16 \
--subnet-name subnet-nva \
--subnet-prefix 10.0.1.0/24
# Add a GatewaySubnet to hub (for VPN scenarios)
az network vnet subnet create \
--resource-group $RG \
--vnet-name vnet-hub \
--name GatewaySubnet \
--address-prefix 10.0.255.0/27
# Create spoke VNet
az network vnet create \
--resource-group $RG \
--name vnet-spoke \
--address-prefix 10.1.0.0/16 \
--subnet-name subnet-workload \
--subnet-prefix 10.1.1.0/24
# Peer Hub to spoke
az network vnet peering create \
--resource-group $RG \
--name hub-to-spoke \
--vnet-name vnet-hub \
--remote-vnet vnet-spoke \
--allow-forwarded-traffic \
--allow-gateway-transit
# Peer spoke to Hub
az network vnet peering create \
--resource-group $RG \
--name spoke-to-hub \
--vnet-name vnet-spoke \
--remote-vnet vnet-hub \
--allow-forwarded-traffic \
--use-remote-gateways false
Tarefa 2: implantar um Network Virtual appliance (nva) simulado
# Create NVA VM in the hub
az vm create \
--resource-group $RG \
--name vm-nva \
--image Ubuntu2204 \
--size Standard_B1s \
--vnet-name vnet-hub \
--subnet subnet-nva \
--private-ip-address 10.0.1.4 \
--public-ip-address nva-pip \
--admin-username azureuser \
--generate-ssh-keys
# Enable IP forwarding on the NVA NIC (critical for routing)
NVA_NIC=$(az vm show -g $RG -n vm-nva \
--query "networkProfile.networkInterfaces[0].id" -o tsv)
NVA_NIC_NAME=$(basename $NVA_NIC)
az network nic update \
--resource-group $RG \
--name $NVA_NIC_NAME \
--ip-forwarding true
# Enable IP forwarding inside the VM OS
az vm run-command invoke \
--resource-group $RG \
--name vm-nva \
--command-id RunShellScript \
--scripts "sudo sysctl -w net.ipv4.ip_forward=1 && echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf && sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE"
Para que uma VM do Azure funcione como roteador/NVA, o encaminhamento de IP deve ser habilitado em DOIS níveis:
- Nível da NIC do Azure (
az network nic update --ip-forwarding true) - Nível do SO (
sysctl net.ipv4.ip_forward=1)
Sem ambos, os pacotes encaminhados serão descartados.
Tarefa 3: criar uma tabela de rotas
# Create a route table for the spoke subnet
az network route-table create \
--resource-group $RG \
--name rt-spoke-workload \
--disable-bgp-route-propagation true
# Verify route table
az network route-table show \
--resource-group $RG \
--name rt-spoke-workload \
--query "{Name:name, DisableBGP:disableBgpRoutePropagation}" -o table
Definir --disable-bgp-route-propagation true impede que rotas aprendidas via BGP (de gateways VPN/ExpressRoute) sejam injetadas na tabela de rotas. Isso lhe dá controle total sobre o roteamento para aquela sub-rede.
Tarefa 4: criar rotas definidas pelo usuário
# Route all internet traffic (0.0.0.0/0) through the NVA
az network route-table route create \
--resource-group $RG \
--route-table-name rt-spoke-workload \
--name route-to-internet \
--address-prefix 0.0.0.0/0 \
--next-hop-type VirtualAppliance \
--next-hop-ip-address 10.0.1.4
# Route traffic to hub VNet through the NVA
az network route-table route create \
--resource-group $RG \
--route-table-name rt-spoke-workload \
--name route-to-hub \
--address-prefix 10.0.0.0/16 \
--next-hop-type VirtualAppliance \
--next-hop-ip-address 10.0.1.4
# Create a "black hole" route to drop traffic to a specific range
az network route-table route create \
--resource-group $RG \
--route-table-name rt-spoke-workload \
--name route-block-range \
--address-prefix 192.168.0.0/16 \
--next-hop-type None
# List all routes in the table
az network route-table route list \
--resource-group $RG \
--route-table-name rt-spoke-workload -o table
Tarefa 5: associar tabela de rotas à sub-rede
# Associate the route table with the spoke workload subnet
az network vnet subnet update \
--resource-group $RG \
--vnet-name vnet-spoke \
--name subnet-workload \
--route-table rt-spoke-workload
# Verify association
az network vnet subnet show \
--resource-group $RG \
--vnet-name vnet-spoke \
--name subnet-workload \
--query "{Subnet:name, RouteTable:routeTable.id}" -o table
Tarefa 6: implantar uma VM de carga de trabalho e verificar o roteamento
# Create a workload VM in the spoke
az vm create \
--resource-group $RG \
--name vm-workload \
--image Ubuntu2204 \
--size Standard_B1s \
--vnet-name vnet-spoke \
--subnet subnet-workload \
--public-ip-address workload-pip \
--admin-username azureuser \
--generate-ssh-keys
# Check effective routes on the workload VM NIC
WORKLOAD_NIC=$(az vm show -g $RG -n vm-workload \
--query "networkProfile.networkInterfaces[0].id" -o tsv)
WORKLOAD_NIC_NAME=$(basename $WORKLOAD_NIC)
az network nic show-effective-route-table \
--resource-group $RG \
--name $WORKLOAD_NIC_NAME -o table
Tarefa 7: verificar rotas efetivas e diagnosticar
# Show effective routes (combines system routes + UDRs)
az network nic show-effective-route-table \
--resource-group $RG \
--name $WORKLOAD_NIC_NAME -o table
# Expected output should show:
# - 0.0.0.0/0 -> VirtualAppliance (10.0.1.4) [User route]
# - 10.0.0.0/16 -> VirtualAppliance (10.0.1.4) [User route]
# - 192.168.0.0/16 -> none [User route - black hole]
# - 10.1.0.0/16 -> VnetLocal [System route]
Passos no Portal:
- Navegue até a NIC da VM > Effective routes
- Compare rotas de Usuário vs rotas de Sistema
- Observe que rotas de Usuário substituem rotas de Sistema para o mesmo prefixo
Tarefa 8: entender os tipos de próximo salto
Crie rotas demonstrando cada tipo de próximo salto:
# Create a second route table for demonstration
az network route-table create \
--resource-group $RG \
--name rt-demo-nexthops
# Next-hop: VirtualAppliance (send to a specific IP | firewall/NVA)
az network route-table route create \
--resource-group $RG \
--route-table-name rt-demo-nexthops \
--name demo-virtual-appliance \
--address-prefix 172.16.0.0/12 \
--next-hop-type VirtualAppliance \
--next-hop-ip-address 10.0.1.4
# Next-hop: VnetGateway (send to VPN/ExpressRoute gateway)
az network route-table route create \
--resource-group $RG \
--route-table-name rt-demo-nexthops \
--name demo-vnet-gateway \
--address-prefix 192.168.100.0/24 \
--next-hop-type VirtualNetworkGateway
# Next-hop: internet (override to force direct internet path)
az network route-table route create \
--resource-group $RG \
--route-table-name rt-demo-nexthops \
--name demo-internet \
--address-prefix 203.0.113.0/24 \
--next-hop-type Internet
# Next-hop: none (black hole | drop traffic)
az network route-table route create \
--resource-group $RG \
--route-table-name rt-demo-nexthops \
--name demo-drop \
--address-prefix 10.99.0.0/16 \
--next-hop-type None
# List all demo routes
az network route-table route list \
--resource-group $RG \
--route-table-name rt-demo-nexthops -o table
Tarefa 9: implementar túnel forçado
O túnel forçado redireciona todo o tráfego destinado à internet (0.0.0.0/0) do Azure de volta para on-premises via um gateway VPN ou através de um NVA. Isso garante que todo o tráfego seja inspecionado antes de alcançar a internet.
# Forced tunneling via UDR is already in place (Task 4):
# route-to-internet: 0.0.0.0/0 -> VirtualAppliance (10.0.1.4)
# For VPN-based forced tunneling, you would:
# 1. create a VPN Gateway in the hub
# 2. configure the default route (0.0.0.0/0) via BGP from on-premises
# 3. OR create a UDR with next-hop VirtualNetworkGateway
# Verify forced tunneling is active
az network nic show-effective-route-table \
--resource-group $RG \
--name $WORKLOAD_NIC_NAME \
--query "[?addressPrefix[0]=='0.0.0.0/0']" -o table
Critérios de sucesso
- ⬜Topologia de VNet hub-spoke criada com peering
- ⬜VM NVA implantada com encaminhamento de IP habilitado (NIC + nível do SO)
- ⬜Tabela de rotas criada com propagação BGP desabilitada
- ⬜UDR para tráfego de internet (0.0.0.0/0) apontando para NVA
- ⬜UDR para tráfego cross-VNet apontando para NVA
- ⬜Rota black hole (próximo salto None) configurada
- ⬜Tabela de rotas associada à sub-rede spoke
- ⬜Rotas efetivas mostram UDRs substituindo rotas de sistema
- ⬜Todos os tipos de próximo salto compreendidos e demonstrados
Cenários de quebrar & consertar
Cenário a: encaminhamento de IP do NVA ausente
# Disable IP forwarding on the NVA NIC
az network nic update \
--resource-group $RG \
--name $NVA_NIC_NAME \
--ip-forwarding false
# Try to reach the internet from the workload VM: it will fail
# because packets reach the NVA but are dropped (not forwarded)
# Diagnosis: check NIC IP forwarding setting
az network nic show -g $RG -n $NVA_NIC_NAME \
--query "enableIPForwarding"
# Fix: re-enable IP forwarding
az network nic update \
--resource-group $RG \
--name $NVA_NIC_NAME \
--ip-forwarding true
Cenário b: endereço IP de próximo salto incorreto
# Create a route with wrong NVA IP
az network route-table route update \
--resource-group $RG \
--route-table-name rt-spoke-workload \
--name route-to-internet \
--next-hop-ip-address 10.0.1.99
# Traffic is now sent to a non-existent IP: packets are black-holed
# Diagnosis: check effective routes and verify next-hop IP exists
# Fix: update to correct NVA IP (10.0.1.4)
az network route-table route update \
--resource-group $RG \
--route-table-name rt-spoke-workload \
--name route-to-internet \
--next-hop-ip-address 10.0.1.4
Cenário c: tabela de rotas não associada
# Disassociate route table from subnet
az network vnet subnet update \
--resource-group $RG \
--vnet-name vnet-spoke \
--name subnet-workload \
--remove routeTable
# Traffic now uses default system routes (direct to internet)
# Diagnosis: check subnet configuration
az network vnet subnet show -g $RG --vnet-name vnet-spoke -n subnet-workload \
--query "routeTable"
# Fix: re-associate
az network vnet subnet update \
--resource-group $RG \
--vnet-name vnet-spoke \
--name subnet-workload \
--route-table rt-spoke-workload
Verificação de conhecimento
1. Qual é a ordem de precedência de rotas no Azure?
Mostrar Resposta
A seleção de rotas segue a correspondência de prefixo mais longo. Quando múltiplas rotas correspondem ao mesmo prefixo:
- Rotas Definidas pelo Usuário (UDRs) | maior prioridade
- Rotas BGP | de gateways VPN/ExpressRoute
- Rotas de sistema | rotas padrão do Azure
Dentro da mesma origem, o prefixo mais específico (correspondência mais longa) vence.
2. Quais são as rotas de sistema padrão do Azure?
Mostrar Resposta
Toda sub-rede recebe automaticamente estas rotas de sistema:
| Prefixo | Próximo Salto |
|---|---|
| Espaço de endereço da VNet | VNet Local |
| 0.0.0.0/0 | Internet |
| 10.0.0.0/8 | None (descartar) |
| 172.16.0.0/12 | None (descartar) |
| 192.168.0.0/16 | None (descartar) |
| 100.64.0.0/10 | None (descartar) |
As rotas "None" do RFC 1918 são substituídas quando você cria sub-redes nesses intervalos.
3. O que acontece quando o NVA (próximo salto) está indisponível?
Mostrar Resposta
Se a VM do NVA estiver parada ou a NIC estiver inativa, o tráfego roteado para ela é descartado (black-holed). O Azure NÃO faz failover automaticamente para a rota de sistema. Por isso, implantações de NVA em produção devem usar:
- Load balancer na frente de múltiplas instâncias de NVA
- Azure Firewall (gerenciado, HA por padrão)
- Health probes para detectar falha do NVA
4. Qual é a diferença entre desabilitar a propagação de rotas BGP e mantê-la habilitada?
Mostrar Resposta
- Habilitada (padrão): Rotas aprendidas via BGP de gateways VPN/ExpressRoute são automaticamente adicionadas às rotas efetivas da sub-rede. Rotas on-premises ficam visíveis.
- Desabilitada: Rotas aprendidas via BGP NÃO são injetadas. Apenas UDRs e rotas de sistema se aplicam. Use quando quiser controle total e não quiser que rotas do gateway interfiram no seu roteamento personalizado.
Limpeza
# Delete all resources
az group delete --name $RG --yes --no-wait
echo "Resources are being deleted in the background."