Rotear o tráfego de rede com uma tabela de rotas usando o PowerShell

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
  • Criar uma NVA que encaminha o tráfego
  • 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 antes de começar.

Azure Cloud Shell

O Azure aloja o Azure Cloud Shell, um ambiente de shell interativo que pode utilizar através do seu browser. Pode utilizar o Bash ou o PowerShell com o Cloud Shell para trabalhar com os serviços do Azure. Você pode usar os comandos pré-instalados do Cloud Shell para executar o código neste artigo, sem precisar instalar nada em seu ambiente local.

Para iniciar o Azure Cloud Shell:

Opção Exemplo/Ligação
Selecione Experimentar no canto superior direito de um código ou bloco de comandos. Selecionar Experimentar não copia automaticamente o código ou comando para o Cloud Shell. Screenshot that shows an example of Try It for Azure Cloud Shell.
Aceda a https://shell.azure.com ou selecione o botão Iniciar Cloud Shell para abrir o Cloud Shell no browser. Button to launch Azure Cloud Shell.
Selecione o botão Cloud Shell na barra de menus, na parte direita 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 comando.

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

  4. Selecione Enter para executar o código ou 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 precisar de atualizar, veja Install Azure PowerShell module (Instalar o módulo do Azure PowerShell). Se estiver a executar localmente o PowerShell, também terá de executar o Connect-AzAccount para criar uma ligação com o Azure.

Criar uma tabela de rotas

Antes de criar uma tabela de rotas, 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 chamada 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 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 associar uma tabela de rotas a uma sub-rede, é 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 chamada 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, em seguida, escreva a configuração da sub-rede na rede virtual com 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 encaminhamento, proteção com firewalls ou otimização de WAN.

Antes de criar uma VM, crie uma interface de rede.

Criar uma interface de rede

Antes de criar uma interface de rede, você precisa recuperar a ID da rede virtual com Get-AzVirtualNetwork, 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 IP habilitado:

# 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 VM

Para criar uma VM e anexar uma interface de rede existente a ela, você deve primeiro criar 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 a 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 da VM com New-AzVM. O exemplo a seguir cria uma VM chamada myVmNva.

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

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

Criar máquinas virtuais

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

Crie uma VM na sub-rede Pública com New-AzVM. O exemplo a seguir cria uma VM chamada 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 criação da VM demora alguns minutos. Não continue com a próxima etapa até que a VM seja criada e o Azure retorne a saída para o PowerShell.

Encaminhar o tráfego através 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 endereço IP devolvido no comando anterior.

mstsc /v:<publicIpAddress>

Abra o ficheiro RDP transferido. Se lhe for pedido, selecione Ligar.

Introduza o nome de utilizador e a palavra-passe que especificou ao criar a VM (poderá ter de selecionar Mais opções e Utilizar uma conta diferente para especificar as credenciais que introduziu quando criou a VM) e, em seguida, selecione OK. Poderá receber um aviso de certificado durante o processo de início de sessão. Selecione Sim para continuar a ligação.

Em uma etapa posterior, o comando é usado para testar o tracert.exe roteamento. Tracert usa o Internet Control Message Protocol (ICMP), que é negado através do Firewall do Windows. Introduza o seguinte comando do PowerShell na VM myVmPrivate para ativar o ICMP através da Firewall do Windows:

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

Embora a rota de rastreamento seja usada para testar o roteamento neste artigo, não é recomendável permitir o ICMP por meio do Firewall do Windows para implantações de produção.

Ativou o reencaminhamento de IP dentro do Azure na interface de rede da VM em Ativar o encaminhamento de IP. 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. Habilite o encaminhamento de IP dentro do sistema operacional do myVmNva.

A partir de uma linha de comandos na VM myVmPrivate , ambiente de trabalho remoto para o myVmNva:

mstsc /v:myvmnva

Para ativar o reencaminhamento de IP no sistema operativo, introduza 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, o que também desliga a sessão de ambiente de trabalho remoto.

Ainda ligado à VM myVmPrivate, crie uma sessão de ambiente de trabalho remoto para a VM myVmPublic, após a VM myVmNva ser reiniciada:

mstsc /v:myVmPublic

Introduza o seguinte comando do PowerShell na VM myVmPublic para ativar o ICMP através da Firewall do Windows:

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

Para testar o encaminhamento do tráfego de rede para a VM myVmPrivate a partir da VM myVmPublic, introduza 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.

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 a sessão de ambiente de trabalho remoto para a VM myVmPublic, o que mantém a ligação à VM myVmPrivate ativa.

Para testar o encaminhamento do tráfego de rede para a VM myVmPublic a partir da VM myVmPrivate, introduza o seguinte comando numa linha de comandos 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.

Pode ver que o tráfego é encaminhado diretamente da VM myVmPrivate para a VM myVmPublic. Por predefinição, o Azure encaminha o tráfego diretamente entre sub-redes.

Feche a sessão de ambiente de trabalho remoto para a VM myVmPrivate.

Clean up resources (Limpar 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óximos passos

Neste artigo, você criou uma tabela de rotas e a associou a uma sub-rede. Você criou um dispositivo virtual de rede simples que roteou o tráfego de uma sub-rede pública para uma sub-rede privada. Implante uma variedade de dispositivos virtuais de rede pré-configurados que executam funções de rede, como 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.