Share via


Encaminhar o tráfego de rede com uma tabela de rotas usando a CLI do Azure

O Azure encaminha automaticamente o tráfego entre todas as sub-redes numa rede virtual, por predefinição. Pode criar as sua próprias rotas para substituir o encaminhamento predefinido do Azure. A capacidade de criar rotas personalizadas é útil se, por exemplo, pretender encaminhar o tráfego entre sub-redes através de uma aplicação virtual de rede (NVA). Neste artigo, vai aprender a:

  • Criar uma tabela de rotas
  • Criar uma rota
  • Criar uma rede virtual com várias sub-redes
  • Associar uma tabela de rotas a uma sub-rede
  • Crie um NVA básico que roteie o tráfego de uma VM do Ubuntu
  • Implementar máquinas virtuais (VMs) em sub-redes diferentes
  • Encaminhar o tráfego de uma sub-rede para outra através de uma NVA

Se não tiver uma subscrição do Azure, crie uma conta gratuita do Azure antes de começar.

Pré-requisitos

  • Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, consulte Guia de início rápido para Bash no Azure Cloud Shell.

  • Se preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se estiver a utilizar o Windows ou macOS, considere executar a CLI do Azure num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.

    • Se estiver a utilizar uma instalação local, inicie sessão no CLI do Azure ao utilizar o comando az login. Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de entrada, consulte Entrar com a CLI do Azure.

    • Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre as extensões, veja Utilizar extensões com o CLI do Azure.

    • Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando az upgrade.

  • Este artigo requer a versão 2.0.28 ou posterior da CLI do Azure. Se estiver usando o Azure Cloud Shell, a versão mais recente já está instalada.

Criar uma tabela de rotas

Antes de criar uma tabela de rotas, crie um grupo de recursos com az group create para todos os recursos criados neste artigo.

# Create a resource group.
az group create \
  --name myResourceGroup \
  --location eastus

Crie uma tabela de rotas com az network route-table create. O exemplo a seguir cria uma tabela de rotas chamada myRouteTablePublic.

# Create a route table
az network route-table create \
  --resource-group myResourceGroup \
  --name myRouteTablePublic

Criar uma rota

Crie uma rota na tabela de rotas com az network route-table route create.

az network route-table route create \
  --name ToPrivateSubnet \
  --resource-group myResourceGroup \
  --route-table-name myRouteTablePublic \
  --address-prefix 10.0.1.0/24 \
  --next-hop-type VirtualAppliance \
  --next-hop-ip-address 10.0.2.4

Associar uma tabela de rotas a uma sub-rede

Antes de associar uma tabela de rotas a uma sub-rede, é necessário criar uma rede virtual e uma sub-rede. Crie uma rede virtual com uma sub-rede com az network vnet create.

az network vnet create \
  --name myVirtualNetwork \
  --resource-group myResourceGroup \
  --address-prefix 10.0.0.0/16 \
  --subnet-name Public \
  --subnet-prefix 10.0.0.0/24

Crie duas sub-redes adicionais com az network vnet subnet create.

# Create a private subnet.
az network vnet subnet create \
  --vnet-name myVirtualNetwork \
  --resource-group myResourceGroup \
  --name Private \
  --address-prefix 10.0.1.0/24

# Create a DMZ subnet.
az network vnet subnet create \
  --vnet-name myVirtualNetwork \
  --resource-group myResourceGroup \
  --name DMZ \
  --address-prefix 10.0.2.0/24

Associe a tabela de rotas myRouteTablePublic à sub-rede Pública com a atualização da sub-rede az network vnet.

az network vnet subnet update \
  --vnet-name myVirtualNetwork \
  --name Public \
  --resource-group myResourceGroup \
  --route-table myRouteTablePublic

Criar uma NVA

Uma NVA é uma VM que executa uma função de rede, como encaminhamento, proteção com firewalls ou otimização de WAN. Vamos criar um NVA básico a partir de uma VM Ubuntu de uso geral, para fins de demonstração.

Crie uma VM para ser usada como NVA na sub-rede DMZ com az vm create. Quando você cria uma VM, o Azure cria e atribui uma interface de rede myVmNvaVMNic e um endereço IP público à VM, por padrão. O --public-ip-address "" parâmetro instrui o Azure a não criar e atribuir um endereço IP público à VM, uma vez que a VM não precisa estar conectada a partir da Internet. Se as chaves SSH ainda não existirem numa localização de chaves predefinida, o comando cria-as. Para utilizar um conjunto específico de chaves, utilize a opção --ssh-key-value.

az vm create \
  --resource-group myResourceGroup \
  --name myVmNva \
  --image Ubuntu2204 \
  --public-ip-address "" \
  --subnet DMZ \
  --vnet-name myVirtualNetwork \
  --generate-ssh-keys

A criação da VM demora alguns minutos. Não continue para a próxima etapa até que o Azure termine de criar a VM e retorne a saída sobre a VM.

Para que uma interface de rede myVmNvaVMNic possa encaminhar o tráfego de rede enviado para ela, que não se destina ao seu próprio endereço IP, o encaminhamento IP deve ser habilitado para a interface de rede. Habilite o encaminhamento de IP para a interface de rede com az network nic update.

az network nic update \
  --name myVmNvaVMNic \
  --resource-group myResourceGroup \
  --ip-forwarding true

Dentro da VM, é necessário que o sistema operativo, ou uma aplicação em execução na mesma, consiga também reencaminhar o tráfego de rede. Usaremos o comando para habilitar o sysctl kernel Linux a encaminhar pacotes. Para executar este comando sem fazer logon na VM, usaremos o conjunto de extensões az vm da extensãoScript Personalizado:

az vm extension set \
  --resource-group myResourceGroup \
  --vm-name myVmNva \
  --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --settings '{"commandToExecute":"sudo sysctl -w net.ipv4.ip_forward=1"}'

O comando pode levar até um minuto para ser executado. Observe que essa alteração não persistirá após a reinicialização de uma VM, portanto, se a VM NVA for reinicializada por qualquer motivo, o script precisará ser repetido.

Criar máquinas virtuais

Crie duas VMs na rede virtual para que você possa validar que o tráfego da sub-rede Pública é roteado para a sub-rede Privada por meio do NVA em uma etapa posterior.

Crie uma VM na sub-rede Pública com az vm create. O --no-wait parâmetro permite que o Azure execute o comando em segundo plano para que você possa continuar para o próximo comando. Para simplificar este artigo, uma senha é usada. As chaves são normalmente usadas em implantações de produção. Se você usar chaves, também deverá configurar o encaminhamento do agente SSH. Para obter mais informações, consulte a documentação do seu cliente SSH. Substitua <replace-with-your-password> no comando a seguir por uma senha de sua escolha.

adminPassword="<replace-with-your-password>"

az vm create \
  --resource-group myResourceGroup \
  --name myVmPublic \
  --image Ubuntu2204 \
  --vnet-name myVirtualNetwork \
  --subnet Public \
  --admin-username azureuser \
  --admin-password $adminPassword \
  --no-wait

Crie uma VM na sub-rede privada .

az vm create \
  --resource-group myResourceGroup \
  --name myVmPrivate \
  --image Ubuntu2204 \
  --vnet-name myVirtualNetwork \
  --subnet Private \
  --admin-username azureuser \
  --admin-password $adminPassword

A criação da VM demora alguns minutos. Depois que a VM é criada, a CLI do Azure mostra informações semelhantes ao exemplo a seguir:

{
  "fqdns": "",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVmPrivate",
  "location": "eastus",
  "macAddress": "00-0D-3A-23-9A-49",
  "powerState": "VM running",
  "privateIpAddress": "10.0.1.4",
  "publicIpAddress": "13.90.242.231",
  "resourceGroup": "myResourceGroup"
}

Anote o publicIpAddress. Esse endereço é usado para acessar a VM da Internet em uma etapa posterior.

Encaminhar o tráfego através de uma NVA

Usando um cliente SSH de sua escolha, conecte-se às VMs criadas acima. Por exemplo, o comando a seguir pode ser usado a partir de uma interface de linha de comando, como WSL , para criar uma sessão SSH com a VM myVmPrivate . Substitua <publicIpAddress> pelo endereço IP público da sua VM. No exemplo acima, o endereço IP é 13.90.242.231.

ssh azureuser@<publicIpAddress>

Quando for solicitada uma senha, digite a senha selecionada em Criar máquinas virtuais.

Use o seguinte comando para instalar a rota de rastreamento na VM myVmPrivate :

sudo apt update
sudo apt install traceroute

Use o comando a seguir para testar o roteamento do tráfego de rede para a VM myVmPublic a partir da VM myVmPrivate .

traceroute myVmPublic

A resposta é semelhante ao seguinte exemplo:

traceroute to myVmPublic (10.0.0.4), 30 hops max, 60 byte packets
1  10.0.0.4 (10.0.0.4)  1.404 ms  1.403 ms  1.398 ms

Pode ver que o tráfego é encaminhado diretamente da VM myVmPrivate para a VM myVmPublic. Rotas padrão do Azure, roteie o tráfego diretamente entre sub-redes.

Use o seguinte comando para SSH para a VM myVmPublic da VM myVmPrivate :

ssh azureuser@myVmPublic

Use o seguinte comando para instalar a rota de rastreamento na VM myVmPublic :

sudo apt-get install traceroute

Use o comando a seguir para testar o roteamento do tráfego de rede para a VM myVmPrivate a partir da VM myVmPublic .

traceroute myVmPrivate

A resposta é semelhante ao seguinte exemplo:

traceroute to myVmPrivate (10.0.1.4), 30 hops max, 60 byte packets
1  10.0.2.4 (10.0.2.4)  0.781 ms  0.780 ms  0.775 ms
2  10.0.1.4 (10.0.0.4)  1.404 ms  1.403 ms  1.398 ms

Pode ver que o primeiro salto é 10.0.2.4, que é o endereço IP privado da NVA. O segundo salto é 10.0.1.4, o endereço IP privado da VM myVmPrivate. A rota adicionada à tabela de rotas myRouteTablePublic e associada à sub-rede Pública fez com que o Azure encaminhe o tráfego através da NVA, em vez de diretamente para a sub-rede Privada.

Feche as sessões SSH para as VMs myVmPublic e myVmPrivate .

Clean up resources (Limpar recursos)

Quando não for mais necessário, use az group delete para remover o grupo de recursos e todos os recursos que ele contém.

az group delete --name myResourceGroup --yes

Próximos passos

Neste artigo, você criou uma tabela de rotas e a associou a uma sub-rede. Criou uma NVA simples que encaminhou o tráfego de uma sub-rede pública para uma privada. Implementou uma variedade de NVAs pré-configuradas que realizam funções de rede, como proteção com firewall e otimização de WAN, a partir do Azure Marketplace. Para saber mais sobre o encaminhamento, veja Descrição geral do encaminhamento e Manage a route table (Gerir uma tabela de rotas).

Embora possa implementar muitos recursos do Azure dentro de uma rede virtual, não é possível implementar recursos de alguns serviços PaaS do Azure nas redes virtuais. Contudo, pode restringir o acesso aos recursos de alguns serviços PaaS do Azure ao tráfego apenas a partir de uma sub-rede de rede virtual. Para saber como, consulte Restringir o acesso à rede a recursos PaaS.