Configurando VPN Point to Site para o Azure Manualmente – Azure Knowledge Base
August 2, 2015 October 2, 2016 Bruno Faria Network Services, Powershell, Sem categoria, Virtual Network, VPN
Estou assumindo que alguns pre-requisitos já foram executados antes de chegar neste ponto:
A rede virtual foi criada e configurada
O gateway dinâmico da VPN e a configuração do Point-to-site já foi realizada
O gateway está ativado
O cliente precisa estar instalado mesmo que não esteja funcionando – não necessariamente na mesma máquina
Primeira tarefa que precisamos fazer é criar os certificados raiz e cliente, pois é através de certificados que o gateway do Azure efetua autenticação. Para isso, vamos utilizar a ferramenta makecert.exe que pode ser encontrada em diversos softwares da Microsoft. Um deles é o Visual Studio ou o SDK do Windows, que pode ser baixado aqui [5].
Para gerar o certificado raiz, executamos o seguinte comando:
Substitua o RootCertificateName pelo nome que quiser identificar este certificado. Este comando vai gerar um arquivo .cer no diretório que você está trabalhando e este é o arquivo do certificado exportado que vamos precisar enviar para o Azure.
No portal do Azure, navegue para Rede Virtual -> Selecione a rede -> Aba certificados e faça upload do arquivo gerado (RootCertificateName.cer).
Agora que temos o certificado raiz, precisamos criar o certificado cliente. Para isso, utilize o comando abaixo:
Repare que estamos criando um certificado cliente a partir do emissor, logo, isso precisa ser feito na mesma máquina que foi criado o certificado raiz no passo anterior (RootCertificateName), caso contrário, o certificado raiz precisará ser exportado para o novo computador.
Extraindo informações do cliente de VPN
Agora que resolvemos o problema da autenticação, vamos para a configuração do cliente da VPN no Windows. Antes de continuar, precisamos obter o endereço do gateway de VPN e é aí que está o problema. O GUID é composto pelo Id da rede virtual e mais um sufixo que não conseguimos obter, exceto pelo client instalado em alguma máquina. O formato do endereço é:
Para obter este GUID, utilize um computador que tenha o cliente instalado e navegue para:
C:\Users\<usuario>\AppData\Roaming\Microsoft\Network\Connections\Cm\<VNetID>
Onde <usuário> é o seu usuário do Windows e VNetID é o Virtual Network ID que pode ser obtido pelo portal. Provavelmente, você terá apenas uma pasta neste caminho, então não será problema. Procure pelo arquivo .pbk e execute-o.
Clique em propriedades e copie o endereço de conexão do gateway.
Configurando a VPN do Windows
Agora com o certificado e dados da conexão em mãos, podemos configurar a VPN do Windows. Configure uma nova conexão de rede do Windows
Aqui colocamos o endereço do gateway que anotamos do arquivo .pbk.
Com a nova conexão criada, vamos agora configurar os detalhes. Entre nas propriedades dessa conexão e efetue as configurações conforme imagens abaixo:
Se você instalou o cliente na mesma máquina, o certificado raiz do gateway estará disponível na lista para seleção, caso contrário, exporte este certificado de algum computador que tenha o cliente instalado e importe-o na máquina (no mesmo path) que está configurando a conexão manualmente.
Clique em Advanced e escolha o certificado raiz criado no passo anterior.
O último passo é desligar a opção de utilizar o gateway remoto na conexão por padrão. Por algum motivo, no Windows 10 eu não estou conseguindo abrir as propriedades do TCP/IPv4 por isso vou demonstrar como fazer isso via powershell através do cmdlet Set-VpnConnection [4]. Execute o comando abaixo para desligar essa opção:
Set-VpnConnection -Name "Azure VPN" -SplitTunneling $True
É opcional que você desative esta opção, mas se você não o fizer, a internet vai parar de funcionar depois que você conectar já que ao invés de utilizar o seu gateway padrão da rede local, o Windows vai utilizar o gateway do VPN e neste caso, o tráfego de internet não é roteado.
Pronto! Agora é só conectar! Mas veja, apesar da conexão bem sucedida, não consigo pingar nem me conectar em nenhuma das VMs da minha rede no Azure.
C:\Users\Bruno>ping 10.0.1.4
Isso acontece porque as rotas não são criadas automaticamente como acontece utilizando o cliente oficial. Sendo assim precisaremos criar essas rotas na mão. Em seu post [1], Doug Rathbone desenvolveu um script bastante interessante que vamos utilizar para a criação dessas rotas. Copie o script de powershell abaixo e salve-o em algum lugar no seu computador com a extensão .ps1. Faça as modificações conforme o seu cenário, basicamente você precisa inserir as subnets e o range PPTP configurados no Azure que podem ser obtidos na configuração da rede virtual pelo portal.
A primeira coisa que precisa fazer para executar este script é modificar a política de execução [2] padrão do powershell, caso contrário ele será bloqueado. No powershell, execute o seguinte comando:
PS C:\Users\Bruno\Desktop> Set-ExecutionPolicy Unrestricted
PS C:\Users\Bruno\Desktop>
Agora podemos executar o script e testar a conexão:
PS C:\Users\Bruno\Desktop> .\routes.ps1
Adding route to Azure: 10.0.0.0
route add 10.0.2.0 MASK 255.255.255.0 172.16.0.4
Adding route to Azure: 10.0.1.0
Adding route to Azure: 10.0.2.0
PS C:\Users\Bruno\Desktop> ping 10.0.1.4
Reply from 10.0.1.4: bytes=32 time=135ms TTL=127
Reply from 10.0.1.4: bytes=32 time=136ms TTL=127
Ping statistics for 10.0.1.4:
Minimum = 135ms, Maximum = 136ms, Average = 135ms
Perfeito! Exceto que ainda temos um porém, será muito chato ser obrigado a criar essas rotas manualmente todas as vezes que reiniciarmos a conexão com a VPN. Há uma maneira de automatizar a execução desse script. Para isso, vamos criar uma tarefa agendada [3] no Windows. Execute no prompt ou powershell (lembre-se de ajustar o path e nome da VPN conforme suas configurações):
schtasks /create /F /TN "VPN Connection Update" /TR "Powershell.exe -NonInteractive -command C:\Users\Bruno\Desktop\routes.ps1" /SC ONEVENT /EC Application /MO "*[System[(Level=4 or Level=0) and (EventID=20225)]] and *[EventData[Data='Azure VPN']] " /RL HIGHEST
É isso, pessoal! Agora sempre que a conexão da VPN for fechada o script das rotas executará automaticamente.
[1] Deconstructing the Azure Point-to-Site VPN for Command Line usage. http://www.diaryofaninja.com/blog/2013/11/27/deconstructing-the-azure-point-to-site-vpn-for-command-line-usage
[2] about_Execution_Policies. https://technet.microsoft.com/pt-BR/library/hh847748.aspx
[3] Schtasks.exe. https://msdn.microsoft.com/en-us/library/windows/desktop/bb736357(v=vs.85).aspx
[4] Set-VpnConnection. https://technet.microsoft.com/en-us/library/jj554823(v=wps.630).aspx
[5] Software Development Kit do Windows (SDK do Windows) para Windows 8.1. https://msdn.microsoft.com/pt-br/windows/desktop/bg162891.aspx