Post

Configurando VPN Site to Site com Azure e MikroTik [CLI-Only]

Fala galera! Seis tão baum?

A Microsoft tem uma lista de dispositivos suportados e testados que funcionam com o Azure VPN Gateway. Infelizmente o Mikrotik não está nesta lista, o que significa que você está sozinho para descobrir como configurar a conexão VPN entre os dois ambientes.

Aqui no meu Homelab eu utlizo o Mikrotik como roteador central, ele gerência toda minha rede desde a conexão com ISP, DHCP, ACLs e controle de banda, além disso ainda tenho uma infinidade de recursos para usar e estudar, como OSPF, MPLS, BGP e por aí vai.

MikroTik é uma empresa da Letônia, fabricante de equipamentos para redes wireless e roteadores. Foi fundada em 1995 e se popularizou no mercado de provedores por conta da sua versatilidade e excelente custo-benefício.

O MikroTik possui vários modelos de dispositivos de rede, sugiro você dar uma olhada no site oficial e conhecer um pouco mais sobre os produtos.

Atenção: o IKEv2 foi introduzido na versão 6.38. Portanto, certifique-se de ter uma versão compatível para poder prosseguir com a configuração demonstrada neste artigo.

Objetivo

Implantar uma VPN Site to Site com Microsoft Azure e Mikrotik RouterOS.

Cenário proposto

Informações relevantes para a configuração do laboratório:

Microsoft Azure

  • VNET: 10.0.0.0/24
  • Public IP: 13.85.83.ZZ (trocar para seu cenário)

Unicast on-premises

  • VNET: 172.16.0.0/24
  • Public IP: 47.180.119.YY (trocar para seu cenário)

Fluxo do laboratório

Para este laboratório iremos utilizar somente linha de comando (CLI) em ambos os lados, no lado do Azure vamos utilizar comandos de powershell e no lado do Mikrotik vamos utilizar a syntax própria do RouterOS que lembra bastante sistemas operacionais Linux.

Caso você queira reproduzir o laboratório via portal ou Winbox (interface GUI para gerenciar equipamentos Mikrotik), fique à vontade.

Configurando VPN Site-to-Site route-based no Azure

Nesta seção, veremos passo a passo como configurar o Site-to-Site VPN no lado do Azure.

1.1 Definindo as variáveis de rede

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Declare variables
  $VNetName  = "vnet-azure-to-mikrotik"
  $RG = "rg-azure-to-mikrotik"
  $Location = "East US"
  $SubName = "snet-azure"
  $GWSubName = "GatewaySubnet"
  $VNetPrefix1 = "10.0.0.0/24"
  $SubPrefix = "10.0.0.0/25"
  $GWSubPrefix = "10.0.0.128/27"
  $VPNClientAddressPool = "172.16.0.0/24"
  $GWName = "vng-azure-to-mikrotik"
  $GWIPName = "pip-azure-to-mikrotik"
  $GWIPconfName = "gwipconf"
  $LNGName = "lng-azure-to-mikrotik"
  $ConName = "cn-azure-to-mikrotik"
  $ShareKey = "q1w2e3r4t5"

1.2 Criando o Resource Groups

1
New-AzResourceGroup -Name $RG -Location $Location

1.3 Criando a Virtual Network

1
2
3
4
5
$virtualNetwork = New-AzVirtualNetwork `
  -ResourceGroupName $RG `
  -Location $Location `
  -Name $VNetName `
  -AddressPrefix $VNetPrefix1

1.4 Criando a Subnet

1
2
3
4
$subnetConfig = Add-AzVirtualNetworkSubnetConfig `
  -Name $SubName `
  -AddressPrefix $SubPrefix `
  -VirtualNetwork $virtualNetwork

1.5 Setando as configurações

1
$virtualNetwork | Set-AzVirtualNetwork

1.6 Adicionando a subnet do Virtual Network Gateway

1
2
$vnet = Get-AzVirtualNetwork -ResourceGroupName $RG -Name $VNetName
Add-AzVirtualNetworkSubnetConfig -Name $GWSubName -AddressPrefix $GWSubPrefix -VirtualNetwork $vnet

1.7 Definindo a configuração de subnet para a vnet

1
$vnet | Set-AzVirtualNetwork

1.8 Criando IP Público

1
2
$gwpip= New-AzPublicIpAddress -Name $GWIPName -ResourceGroupName $RG -Location $Location `
 -AllocationMethod Dynamic

1.9 Criando a configuração do gateway

1
2
3
$vnet = Get-AzVirtualNetwork -Name $VNetName -ResourceGroupName $RG
$subnet = Get-AzVirtualNetworkSubnetConfig -Name $GWSubName -VirtualNetwork $vnet
$gwipconfig = New-AzVirtualNetworkGatewayIpConfig -Name $GWIPconfName -SubnetId $subnet.Id -PublicIpAddressId $gwpip.Id

1.10 Criando o VPN Gateway

1
2
3
New-AzVirtualNetworkGateway -Name $GWName -ResourceGroupName $RG `
 -Location $Location -IpConfigurations $gwipconfig -GatewayType Vpn `
 -VpnType RouteBased -GatewaySku VpnGw1

1.11 Criando o Local Network Gateway

1
2
New-AzLocalNetworkGateway -Name $LNGName -ResourceGroupName $RG `
 -Location $Location -GatewayIpAddress '47.180.119.YY' -AddressPrefix $VPNClientAddressPool

1.12 Criando a conexão VPN

1
2
3
4
5
$gateway1 = Get-AzVirtualNetworkGateway -Name $GWName -ResourceGroupName $RG
$local = Get-AzLocalNetworkGateway -Name $LNGName -ResourceGroupName $RG
New-AzVirtualNetworkGatewayConnection -Name $ConName -ResourceGroupName $RG `
-Location $Location -VirtualNetworkGateway1 $gateway1 -LocalNetworkGateway2 $local `
-ConnectionType IPsec -ConnectionProtocol IKEv2 -RoutingWeight 10 -SharedKey $ShareKey

Configurando VPN Site-to-Site no Mikrotik RouterOS

Nesta seção, veremos passo a passo como configurar o Site-to-Site VPN no lado do Mikrotik.

Lembrando mais uma vez:

IMPORTANTE: Embora demonstremos o Mikrotik neste artigo, é importante mencionar que a Microsoft não suporta a configuração do dispositivo diretamente. Caso você tenha problemas, entre em contato com o fabricante do dispositivo para obter suporte adicional e instruções de configuração.

Atenção: o IKEv2 foi introduzido na versão 6.38. Portanto, certifique-se de ter uma versão compatível para poder prosseguir com a configuração demonstrada neste artigo.

No meu laboratório estou utilizando um MikroTik hAP Ac2 com a versão 6.49.2 do RouterOS.

Como mencionei, você pode utilizar o Winbox para realizar as configuraçãos no MikroTik utilizando uma interface gráfica.

2.1 Configurando o IPSEC Profile

1
2
/ip ipsec profile
set [ find default=yes ] dh-group=modp1024 enc-algorithm=aes-256,aes-128,3des nat-traversal=no

2.2 Criando o IPSEC Peer

1
2
3
/ip ipsec peer
add address=13.85.83.ZZ/32 comment="Unicastlab - VPN Azure to Mikrotik" exchange-mode=ike2 \
    local-address=47.180.119.YY name=mikrotik-to-azure

2.3 Criando o IPSEC Identity

1
2
/ip ipsec identity
add comment="Unicastlab - VPN Azure to Mikrotik" peer=mikrotik-to-azure secret=q1w2e3r4t5

2.4 Configurando o IPSEC Proposal

1
2
/ip ipsec proposal
set [ find default=yes ] enc-algorithms=aes-256-cbc,aes-128-cbc lifetime=7h30m

2.5 Criando o IPSEC Policy

1
2
3
/ip ipsec policy
add comment="Unicastlab - VPN Azure to Mikrotik" dst-address=10.0.0.0/24 peer=mikrotik-to-azure \
    src-address=172.16.0.0/24 tunnel=yes

2.6 Criando regras de NAT

1
2
3
4
5
/ip firewall nat
add action=accept chain=srcnat comment="Unicastlab - VPN Azure to Mikrotik (SRCNAT)" \
    dst-address=10.0.0.0/24 log=yes src-address=172.16.0.0/24
add action=accept chain=dstnat comment="Unicastlab - VPN Azure to Mikrotik (DSTNAT)" \
    dst-address=172.16.0.0/24 log=yes src-address=10.0.0.0/24

2.7 [Extra] Configurando o Bypass de pacotes (Tabela Raw)

Caso você esteja com contrack habilitado, você precisa fazer um bypass dos pacotes antes que cheguem até a connection tracking, assim será possível pingar e acessar as máquinas sem problemas.

A tabela RAW pode lhe ajudar a reduzir drasticamente a sobrecargas na CPU, vale a pena dar uma estudada.

As ações mais comuns da tabela RAW são:

  • Drop: Usada para dropar pacotes antes que ele avance para processos internos.
  • No track: Usada para fazer com que pacotes façam um bypass da connection tracking.
1
2
3
/ip firewall raw
add action=notrack chain=prerouting dst-address=10.0.0.0/24 src-address=172.16.0.0/24
add action=notrack chain=prerouting dst-address=172.16.0.0/24 src-address=10.0.0.0/24

2.8 [Extra] Configurando o TCP MSS (Tabela Mangle)

Outra dica interessante é o TCP MSS, quando você tem um alto volume de pacotes TCP no túnel VPN é normal ter descartes de pacotes. Com a Mangle você consegue fazer marcas especiais e modificar alguns campos do cabeçalho IP, desta forma é possível melhorar o desempenho no fluxo de dados.

1
2
3
/ip firewall mangle
add action=change-mss chain=forward comment="Unicastlab - VPN Azure to Mikrotik - TCP MSS" \
    dst-address=10.0.0.0/24 new-mss=1360 passthrough=yes protocol=tcp tcp-flags=syn

Validando a conexão VPN

Agora já podemos validar a conexão de ambos os lados e fazer um teste de acesso.

Faça o deploy de uma VM no Azure e teste a conexão com seu ambiente on-premises.

Mikrotik

1
ip ipsec active-peers print 
1
2
3
4
Flags: R - responder, N - natt-peer 
 #    ID                   STATE              UPTIME          PH2-TOTAL
 0    ;;; Unicastlab - VPN Azure to Mikrotik
      13.85.83.ZZ         established        31m53s                  1

Azure (Powershell)

1
Get-AzVirtualNetworkGatewayConnection -Name cn-azure-to-mikrotik -ResourceGroupName rg-azure-to-mikrotik
1
2
3
4
5
6
7
RoutingWeight           : 10
ConnectionStatus        : Connected
EgressBytesTransferred  : 84146
IngressBytesTransferred : 48761
TunnelConnectionStatus  : []
IngressNatRules         : []
EgressNatRules          : []

É isso galera, espero que gostem.

Forte abraço a todos!

Este post está licenciado sob CC BY 4.0 e pelo autor.