Rotear tráfego com uma tabela de rotas utilizando o PowerShell

Por padrão, o Azure roteia automaticamente o tráfego entre todas as sub-redes dentro de uma rede virtual. É possível criar as próprias rotas para substituir o roteamento padrão do Azure. A capacidade de criar rotas personalizadas será útil, por exemplo, se você quiser rotear o tráfego entre sub-redes por meio de uma NVA (solução de virtualização de rede). Neste artigo, você aprenderá como:

  • 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
  • Criar uma NVA que roteia o tráfego
  • Implantar VMs (máquinas virtuais) em diferentes sub-redes
  • Rotear o tráfego de uma sub-rede para outra por meio de uma NVA

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

Azure Cloud Shell

O Azure hospeda o Azure Cloud Shell, um ambiente de shell interativo que pode ser usado por meio do navegador. É possível usar o bash ou o PowerShell com o Cloud Shell para trabalhar com os serviços do Azure. É possível usar os comandos pré-instalados do Cloud Shell para executar o código neste artigo, sem precisar instalar nada no seu ambiente local.

Para iniciar o Azure Cloud Shell:

Opção Exemplo/Link
Selecione Experimentar no canto superior direito de um bloco de código ou de comando. Selecionar Experimentar não copia automaticamente o código nem o comando para o Cloud Shell. Screenshot that shows an example of Try It for Azure Cloud Shell.
Acesse https://shell.azure.com ou selecione o botão Iniciar o Cloud Shell para abri-lo no navegador. Button to launch Azure Cloud Shell.
Selecione o botão Cloud Shell na barra de menus no canto superior direito do portal do Azure. Screenshot that shows the Cloud Shell button in the Azure portal

Para usar o Azure Cloud Shell:

  1. Inicie o Cloud Shell.

  2. Selecione o botão Copiar em um bloco de código (ou bloco de comando) para copiar o código ou o comando.

  3. Cole o código ou comando na sessão do Cloud Shell selecionando Ctrl+Shift+V no Windows e no Linux, ou selecionando Cmd+Shift+V no macOS.

  4. Selecione Enter para executar o código ou o comando.

Se você optar por instalar e usar o PowerShell localmente, este artigo exigirá o módulo do Azure PowerShell versão 1.0.0 ou posterior. Execute Get-Module -ListAvailable Az para localizar a versão instalada. Se você precisa atualizar, consulte Instalar o módulo do Azure PowerShell. Se você estiver executando o PowerShell localmente, também precisará executar o Connect-AzAccount para criar uma conexão com o Azure.

Criar uma tabela de rotas

Antes de criar uma tabela de roteamento, crie um grupo de recursos com New-AzResourceGroup. O exemplo a seguir cria um grupo de recursos chamado myResourceGroup para todos os recursos criados neste artigo.

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

Crie uma tabela de rotas com New-AzRouteTable. O exemplo a seguir cria uma tabela de rotas nomeada myRouteTablePublic.

$routeTablePublic = New-AzRouteTable `
  -Name 'myRouteTablePublic' `
  -ResourceGroupName myResourceGroup `
  -location EastUS

Criar uma rota

Crie uma rota recuperando o objeto da tabela de rotas com Get-AzRouteTable, crie uma rota com Add-AzRouteConfig e, em seguida, escreva a configuração de rota na tabela de rotas com Set-AzRouteTable.

Get-AzRouteTable `
  -ResourceGroupName "myResourceGroup" `
  -Name "myRouteTablePublic" `
  | Add-AzRouteConfig `
  -Name "ToPrivateSubnet" `
  -AddressPrefix 10.0.1.0/24 `
  -NextHopType "VirtualAppliance" `
  -NextHopIpAddress 10.0.2.4 `
 | Set-AzRouteTable

Associar uma tabela de rotas a uma sub-rede

Antes de poder associar uma tabela de rotas a uma sub-rede, será necessário criar uma rede virtual e uma sub-rede. Crie uma rede virtual com New-AzVirtualNetwork. O exemplo a seguir cria uma rede virtual nomeada myVirtualNetwork com o prefixo de endereço 10.0.0.0/16.

$virtualNetwork = New-AzVirtualNetwork `
  -ResourceGroupName myResourceGroup `
  -Location EastUS `
  -Name myVirtualNetwork `
  -AddressPrefix 10.0.0.0/16

Crie três sub-redes criando três configurações de sub-rede com New-AzVirtualNetworkSubnetConfig. O exemplo a seguir cria três configurações de sub-rede para sub-redes Pública, Privada e DMZ:

$subnetConfigPublic = Add-AzVirtualNetworkSubnetConfig `
  -Name Public `
  -AddressPrefix 10.0.0.0/24 `
  -VirtualNetwork $virtualNetwork

$subnetConfigPrivate = Add-AzVirtualNetworkSubnetConfig `
  -Name Private `
  -AddressPrefix 10.0.1.0/24 `
  -VirtualNetwork $virtualNetwork

$subnetConfigDmz = Add-AzVirtualNetworkSubnetConfig `
  -Name DMZ `
  -AddressPrefix 10.0.2.0/24 `
  -VirtualNetwork $virtualNetwork

Escreva as configurações de sub-rede na rede virtual com Set-AzVirtualNetwork, que cria as sub-redes na rede virtual:

$virtualNetwork | Set-AzVirtualNetwork

Associe a tabela de rotas myRouteTablePublic à sub-rede Pública com Set-AzVirtualNetworkSubnetConfig e escreva a configuração de sub-rede para a rede virtual com o Set-AzVirtualNetwork.

Set-AzVirtualNetworkSubnetConfig `
  -VirtualNetwork $virtualNetwork `
  -Name 'Public' `
  -AddressPrefix 10.0.0.0/24 `
  -RouteTable $myRouteTablePublic | `
Set-AzVirtualNetwork

Criar uma NVA

Uma NVA é uma VM que executa uma função de rede, como roteamento, firewall ou otimização de WAN.

Antes de criar uma VM, crie um adaptador de rede.

Criar um adaptador de rede

Antes de criar uma interface de rede, você precisa recuperar a ID da rede virtual com Get-AzVirtualNetwork e, em seguida, a ID da sub-rede com Get-AzVirtualNetworkSubnetConfig. Crie uma interface de rede com New-AzNetworkInterface na sub-rede DMZ com o encaminhamento de IP ativado:

# Retrieve the virtual network object into a variable.
$virtualNetwork=Get-AzVirtualNetwork `
  -Name myVirtualNetwork `
  -ResourceGroupName myResourceGroup

# Retrieve the subnet configuration into a variable.
$subnetConfigDmz = Get-AzVirtualNetworkSubnetConfig `
  -Name DMZ `
  -VirtualNetwork $virtualNetwork

# Create the network interface.
$nic = New-AzNetworkInterface `
  -ResourceGroupName myResourceGroup `
  -Location EastUS `
  -Name 'myVmNva' `
  -SubnetId $subnetConfigDmz.Id `
  -EnableIPForwarding

Criar uma máquina virtual

Para criar uma VM e anexar uma interface de rede existente a ela, crie primeiro uma configuração de VM com New-AzVMConfig. A configuração inclui a interface de rede criada na etapa anterior. Quando for solicitado um nome de usuário e senha, selecione o nome de usuário e senha com os quais você deseja fazer logon na VM.

# Create a credential object.
$cred = Get-Credential -Message "Enter a username and password for the VM."

# Create a VM configuration.
$vmConfig = New-AzVMConfig `
  -VMName 'myVmNva' `
  -VMSize Standard_DS2 | `
  Set-AzVMOperatingSystem -Windows `
    -ComputerName 'myVmNva' `
    -Credential $cred | `
  Set-AzVMSourceImage `
    -PublisherName MicrosoftWindowsServer `
    -Offer WindowsServer `
    -Skus 2016-Datacenter `
    -Version latest | `
  Add-AzVMNetworkInterface -Id $nic.Id

Crie a VM usando a configuração de VM com New-AzVM. O exemplo a seguir cria uma VM nomeada myVmNva.

$vmNva = New-AzVM `
  -ResourceGroupName myResourceGroup `
  -Location EastUS `
  -VM $vmConfig `
  -AsJob

A opção -AsJob cria a VM em segundo plano, para que você possa prosseguir para a próxima etapa.

Criar máquinas virtuais

Crie duas VMs na rede virtual para que seja possível validar esse tráfego da sub-rede Pública roteada para a sub-rede Privada por meio da solução de virtualização de rede em uma etapa posterior.

Crie uma VM na sub-rede Pública com New-AzVM. O exemplo a seguir cria uma VM nomeada myVmPublic na sub-rede Pública da rede virtual myVirtualNetwork.

New-AzVm `
  -ResourceGroupName "myResourceGroup" `
  -Location "East US" `
  -VirtualNetworkName "myVirtualNetwork" `
  -SubnetName "Public" `
  -ImageName "Win2016Datacenter" `
  -Name "myVmPublic" `
  -AsJob

Crie uma VM na sub-rede Privada.

New-AzVm `
  -ResourceGroupName "myResourceGroup" `
  -Location "East US" `
  -VirtualNetworkName "myVirtualNetwork" `
  -SubnetName "Private" `
  -ImageName "Win2016Datacenter" `
  -Name "myVmPrivate"

A VM demora alguns minutos para criar. Não continue com a próxima etapa até que a VM seja criada e o Azure retorne a saída ao PowerShell.

Rotear o tráfego por meio de uma NVA

Use Get-AzPublicIpAddress para retornar o endereço IP público da VM myVmPrivate. O exemplo a seguir retorna o endereço IP público da VM myVmPrivate:

Get-AzPublicIpAddress `
  -Name myVmPrivate `
  -ResourceGroupName myResourceGroup `
  | Select IpAddress

Use o comando a seguir para criar uma sessão de área de trabalho remota com a VM myVmPrivate do seu computador local. Substitua <publicIpAddress> pelo o endereço IP retornado do comando anterior.

mstsc /v:<publicIpAddress>

Abra o arquivo RDP baixado. Se solicitado, selecione Conectar.

Insira o nome de usuário e senha especificados ao criar a VM (talvez seja necessário selecionar Mais escolhas, em seguida, Usar uma conta diferente, para especificar as credenciais inseridas ao criar a VM) e selecione OK. Você pode receber um aviso do certificado durante o processo de logon. Selecione Sim para prosseguir com a conexão.

Em uma etapa posterior, o comando tracert.exe será utilizado para testar o roteamento. O Tracert usa o protocolo ICMP, que é negado por meio do Firewall do Windows. Habilite o ICMP pelo firewall do Windows inserindo o seguinte comando do PowerShell na VM myVmPrivate:

New-NetFirewallRule -DisplayName "Allow ICMPv4-In" -Protocol ICMPv4

Embora o rastreamento de rota seja utilizado para testar o roteamento neste artigo, não é recomendável o ICMP através do Firewall do Windows para implantações de produção.

Você habilitou o encaminhamento de IP no Azure para a interface de rede da VM em Habilitar encaminhamento de IP. Dentro da VM, o sistema operacional, ou um aplicativo em execução na VM, também pode ser capaz de encaminhar o tráfego. Habilite o encaminhamento de IP no sistema operacional do myVmNva.

Em um prompt de comando na VM myVmPrivate, a área de trabalho remota para a myVmNva:

mstsc /v:myvmnva

Para habilitar o encaminhamento de IP dentro do sistema operacional, insira o seguinte comando no PowerShell da VM myVmNva:

Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters -Name IpEnableRouter -Value 1

Reinicie a VM myVmNva, que também desconecta a sessão da área de trabalho remota.

Ainda conectado à VM myVmPrivate, crie uma sessão da área de trabalho remota para a VM myVmPublic após a reinicialização da VM myVmNva:

mstsc /v:myVmPublic

Habilite o ICMP pelo firewall do Windows inserindo o seguinte comando do PowerShell na VM myVmPublic:

New-NetFirewallRule –DisplayName "Allow ICMPv4-In" –Protocol ICMPv4

Para testar o roteamento do tráfego para a VM myVmPrivate da VM myVmPublic, insira o seguinte comando do PowerShell na VM myVmPublic:

tracert myVmPrivate

A resposta é semelhante ao seguinte exemplo:

Tracing route to myVmPrivate.vpgub4nqnocezhjgurw44dnxrc.bx.internal.cloudapp.net [10.0.1.4]
over a maximum of 30 hops:

1    <1 ms     *        1 ms  10.0.2.4
2     1 ms     1 ms     1 ms  10.0.1.4

Trace complete.

Você 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 o Azure encaminhar o tráfego através de NVA, em vez de diretamente para a sub-rede Privada.

Feche a sessão da área de trabalho remota para a VM myVmPublic, que ainda mantém você ainda conectado à VM myVmPrivate.

Para testar o roteamento do tráfego para a VM myVmPublic da VM myVmPrivate, insira o seguinte comando de um prompt de comando na VM myVmPrivate:

tracert myVmPublic

A resposta é semelhante ao seguinte exemplo:

Tracing route to myVmPublic.vpgub4nqnocezhjgurw44dnxrc.bx.internal.cloudapp.net [10.0.0.4]
over a maximum of 30 hops:

1     1 ms     1 ms     1 ms  10.0.0.4

Trace complete.

Você pode ver que o tráfego é roteado diretamente da VM myVmPrivate para a VM myVmPublic. Por padrão, o Azure roteia o tráfego diretamente entre sub-redes.

Feche a sessão da área de trabalho remota para a VM myVmPrivate.

Limpar os recursos

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

Remove-AzResourceGroup -Name myResourceGroup -Force

Próximas etapas

Neste artigo, você criou uma tabela de rotas e associou-a a uma sub-rede. Você criou uma solução de virtualização de rede simples que roteou o tráfego de uma sub-rede pública para uma sub-rede privada. Implante uma variedade de soluções de virtualização de rede pré-configurados que executam funções de rede, como firewall e otimização de WAN do Azure Marketplace. Para saber mais sobre roteamento, consulte Visão geral de roteamento e Gerenciar uma tabela de rotas.

Embora seja possível implantar muitos recursos do Azure dentro de uma rede virtual, os recursos para alguns serviços PaaS do Azure não podem ser implantados em uma rede virtual. Ainda assim, é possível restringir acesso aos recursos de alguns serviços PaaS do Azure somente para tráfego de uma sub-rede de rede virtual. Para saber como, veja Restringir o acesso à rede para recursos PaaS.