DESAFIO INSTALANDO VPN SERVER NO WINDOWS SERVER ATRÁS DE NAT

·

·

, ,

Boa tarde meus caros consagrados! Hoje surgiu um pedido de um cliente um pouco ambicioso, mas aceitamos o desafio e implantamos uma VPN no Window Server 2022 com uso de Certificado, Chave Privada, Criptografia e controle de Integridade!

Vamos ao desafio!

CENÁRIO DO CLIENTE

SERVIDOR1 = Windows Server 2022

SERVIDOR2 = Windows Server 2019

INTERNET = Modem da Vivo roteador (NAT)

IP VÁLIDO = Dinâmico

EXIGÊNCIA: Seguro e criptografado

VPN NATIVA DO WINDOWS SERVER COM RRAS

O maior de todos os desafios em usar o Windows Server como Servidor de VPN é que este está atrás de uma infraestrutura com NAT. E nativamente o Windows não funciona atrás de NAT. Alguns ajustes precisam ser feitos, como uso de NAT-Traversal. Isso porque o VPN trabalha com NAT e ele precisa negociar NAT no NAT, logo o NAT-T contorna esse problema negociando a VPN com a origem e destino atrás de NAT encapsulando de novo o pacote ESP dentro da porta UDP 4500. É um ajustão.

Segundo, o cliente Windows 11 e 10 não consegue se conectar em um Windows Server atŕas de um NAT mesmo com a porta 4500 negociando e encapsulando o ESP. Um ajuste no Registro do Windows precisa ser feito.

Resumo da ópera, tentei usar o L2TP com IPSec pela segurança exigida e para não usar protocolos antigos e inseguros. Não funcionou.

O Wireshark até detectou os pacotes de negociação com a porta UDP 500 e UDP 4500, mas não fecha o túnel.

Muito ajuste pra usar a forma nativa.

Minha conclusão

O Modem da Vivo não apresenta claramente suporte a L2TP ou PPTP, e possivelmente não estavam passando tudo que precisaria. É necessário um L2TP ou PPP passthrough para funcionar.

Configurar uma VPN em uma infraestrutura que está atrás de um NAT (Network Address Translation) é muito complexo, apesar de possível.

Fui atrás de uma solução que atenda tanto o Servidor atrás de um NAT como também para os usuários que com certeza também estarão atrás de NAT.

ESTUDANDO ALTERNATIVAS

WireGuard

Eu gostei muito dele por ser uma solução mais focada em Linux. A documentação é incrível com vídeos explicativos e com passo a passo. Apesar de difundido e mais fácil de configurar, achei pouco suporte para Windows. Ah! Ele também usa NAT e Firewall Traversal Persistence. Não escolhi esse.

SoftEther VPN

Esse seria uma solução segura quanto à criptografia, pois usa o HTTPS que faz uso do TLS/SSL. E ele se passa tudo pela porta 443. Seria fácil redirecionar a 443 no modem da Vivo. Mas eu fui atrás de documentação (Eu amo documentação de solução!) e esse este tem boa documentação, bastante texto e poucas imagens, mas elucida, porém a comunidade da Internet se mostra mais ativa sobre o OpenVPN.

O SoftEther VPN Manual fala uma parte importante quando trabalhando com infraestrutura atrás de NAT, basicamente ele fala que apenas fazendo o Port Forwarding da 443 resolve. Achei legal:

11.2.6 Installing VPN Server Behind a NAT Enabled Router

If you are installing VPN Server behind a consumer or small business targeted generic broadband router or a router with a built-in firewall that contains NAT functionality, you will have to configure it properly for VPN Server to work. You can enable static NAT or port mapping on the router so that traffic from the Internet will be forwarded to a port on the VPN Server, allowing it to be accessed from the Internet. Please refer to your broadband router’s instruction manual for more information on how to achieve this.

OpenVPN

Eu achei esse aqui demais! É meio dia para configurar esse cara, mas tudo que é bom exige determinação. A instalação dele é simples de tudo, o que pega mesmo é o arquivo de configuração e a Shell de criação do Ambiente PKI (o CA e os Certificados com Chave Privada).

Firewall de Borda / Roteador de Borda / Proxy Gateway

Um firewall seria interessante para prover tudo que eles não têm de gestão de rede local e segurança geral, mas inclui custos.

Escolhido OpenVPN vamos fazer!

Baixado o OpenVPN

OpenVPN-2.6.14-I001-amd64.msi

Instalado

OpenVPN Service

Serviço principal do OpenVPN.

OpenVPN GUI

OpenVPN TAP Virtual Ethernet Adapter

A NIC virtual necessária.

OpenSSL Utilities

Linha de comando OpenSSL.

Easy-RSA

Gerenciar os certificados.

Gerado arquivo de configuração

Essa parte é um critério que só!

CURIOSIDADE

# = comentário

; = comentário

port 1194
proto udp
dev tun
server 10.10.10.0 255.255.255.0
push “redirect-gateway def1 bypass-dhcp”
push “dhcp-option DNS 192.168.15.212”
client-to-client
tls-server
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
keepalive 10 120
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305:AES-256-CBC
auth SHA256
user nobody
group nobody
user openvpn
group openvpn
persist-key
persist-tun
status openvpn-status.log
log openvpn.log
verb 3

Preparado o Ambiente PKI

O que é um Ambiente PKI (Public Key Infrastructure)?

PKI é Infraestrutura de Chaves Públicas, um sistema que usa criptografia de chave pública. Garante autenticidade e confidencialidade.

Os principais componentes de um PKI incluem:

  • Autoridade de Certificação (CA): A entidade confiável que emite e gerencia certificados digitais. Ela assina os certificados atestando a identidade do titular do certificado.
  • Certificado Digital: Associa uma identidade a uma chave pública. Contém informações sobre o titular, sua chave pública, o período de validade e é assinado digitalmente pela CA. É tipo o “crachá com chip” emitido pela empresa para o funcionário usar.
  • Chaves Públicas e Privadas: Pares de chaves criptográficas. A chave pública como o nome diz, pública, enquanto a chave privada o proprietário a mantém. Dados criptografados com a chave pública só podem ser descriptografados com a chave privada correspondente, e vice-versa (para assinaturas digitais).
  • Autoridade de Registro (RA): Uma entidade que verifica a identidade dos solicitantes de certificados antes que a CA os emita. Nesse caso aqui sou eu 😀
  • Políticas de Certificados (CP) e Declarações de Práticas de Certificação (CPS): Documentos que definem as regras e procedimentos para a operação do PKI. Não temos ainda. Processos são importantes. No meu caso é só para um usuário.

POLÍTICA DE BYOD

Estamos falando de um notebook de um usuário que usa ele em casa sem nossa supervisão.

E SE O NOTEBOOK DO USUÁRIO FOR COMPROMETIDO? Se o invasor tiver acesso onde a Chave Privada SEM SENHA (usuario.crt e usuario.key) está, ele poderá copiar ela e usar para se autenticar como o cliente sem precisar saber de nenhuma senha. Usando um cliente OpenVPN configurado com esses arquivos, o invasor poderá tentar estabelecer uma conexão VPN com o servidor se passando pelo usuário legítimo. #POLÍTICADEBYOD

CA

Chave TLS-AUTH

Aqui deu ruim

O tls-crypt é uma alternativa mais recente e geralmente recomendada porque oferece maior proteção contra metadados. Mas esse processo de configurar eles é muito complexo no Windows. Mesmo assim tentei e erros…

O script Bash Shell Linux no Prompt de Comando do Windows. As configurações simples de geração de CA e Certificados funcionam bem nesse script, porḿ quando solicitado binários da pasta anterior, o Prompt de Comando gerado não os encontra. Ele vai insistir no erro “Cannot find an OpenVPN binary” quando tentar executar gen-tls-auth server pois ele deveria usar apenas o openssl, mas o script parece ter uma verificação interna que falha. Mesmo tentando manipular o PATH e definir OPENSSL dentro do shell falham, e considerando que o script é um script shell Unix, talvez a melhor abordagem seja tentar executá-lo usando um ambiente mais nativo para ele. No meu caso tentei Shell do Git e mesmo assim outros erros de temp file.

Certificado e Chave para o Servidor

E os parâmetros Diffie-Hellman (o tal do dh)

UM POUCO DE WIKIPDIA

A troca de chaves de Diffie-Hellman é um método de criptografia para trocas de chaves de maneira segura em canal público. Desenvolvido por Whitfield Diffie e Martin Hellman, foi um dos primeiros exemplos práticos de métodos de troca de chaves implementado dentro do campo da criptografia, tendo sido publicado em 1976. Fonte: https://pt.wikipedia.org/wiki/Troca_de_chaves_de_Diffie–Hellman acessado em 05-04-2025 20:07

Certificado e a Chave do Usuário

Achei a validade dos certificados padrão de 865 dias muito alta.

Achei 825 dias muito. Alterado e recomecei…

Limpa o ambiente PKI !

Gerar a CA de novo…

Agora sim…

Criar dos usuários

Copiado tudo pro Servidor

MANTIDO O server.key EM SEGREDO

Configurado OpenVPN de novo

server.ovpn

Firewall liberado

Iniciado serviço de OpenVPN

Port forward no modem

Gerado o arquivo do client

OpenVPN Client

Instalado o OpenVPN Client.

Copiado os arquivos do Usuário.

Posicionado os arquivos no OpenVPN Connect:

Configurado o OpenVPN Connect

Teste revelou senha errada. Revogar.

A Blacklist de revogados (CRL)

Bora criar de novo o usuário com senha certa

FASE FINAL

ROTEAMENTO VPN <> LAN

Questionamentos

O Servidor VPN é um Windows Server e está atrás de uma rede NAT e não é o servidor DHCP da rede?

Se a resposta for sim, um grande problema pode existir. O RRAS para VPN nativo do Windows server tem muita dificuldadee limitação para uso de protocolos e cifras de autenticação, criptografia e integride dos dados. Resumindo, ou adere uma solução de baixa segurança ou recorre para aplicativos de terceiros que tenham boa documentação e compatibilidade. É o meu caso aqui.

O Servidor VPN é o roteador da rede?

Se a resposta for não, saiba que os clientes VPN não vão conhecer as rotas para a rede interna, mas uma rota default deve ser configurada para enviar para o servidor. E sendo assim, se é um Windows server, precisaremos ativar o RRAS para informar a esse servidor que existe uma nova LAN VPN acontecendo dentro dele e ele vai passar a encaminhar trafegao entre as redes. E mesmo assim, o modem ou roteador da rede Local remota, no meu caso Modem da Vivo, não vai conhecer a rede VPN isolada dentro do servidor Windows, a menos que configuramos uma Rota Estática dentro dele informando que o caminho para a nova rede VPN é no Windws Server.

Em fim, vários desafios quando o servidor VPN não é o roteador principal da rede local. Não significa que não funciona, mas vai exigir algumas customizações.

Se o servidor VPN for o firewall, o gateway ou o roteador principal, seria ser bem simples!

DESAFIO

O cliente no meu caso é também um cliente da Operadora Vivo! Já sabemos no que isso leva!

CASA DO USUÁRIO 192.168.15.1 <> 172.16.15.2 TUNEL VPN 172.16.15.1 <> 192.168.15.1 EMPRESA

O usuário da Vivo usa um modem da Vivo com rede 192.168.15.0/24.

Ele vai fechar uma VPN que recebe o endereço 172.16.15.1/24 para acessar os servidores da empresa.

Que por suas vezes estão na rede 192.168.15.0/24.

É isso!

RESOLVENDO

Servidor VPN configurado para receber o 172.16.15.1/24.

Servidor Windows configurado LAN para 192.168.15.212/24.

Servidor 2 configurado LAN para 192.168.15.213/24.

VPN Client com IP 172.16.15.2/24.

Usuário conectado na Wi-Fi com 192.168.15.115/24.

SOLUÇÃO APLICADA NOS SERVIDORES

Servidor Windows configurado RRAS para trabalhar com roteamento estático.

No Servidor Windows criado rota estática para a NIC TAP com a rede 172.16.15.0/24

No Servidor Windows criado rota estática para a NIC LAN com a rede 192.168.15.0/24

No Servidor Windows 2 criado rota estática no Prompt de Comando para ele saber chegar na rede 172.16.15.0/24.

SOLUÇÃO APLICADA NO LADO DO CLIENTE

Alterado arquivo hosts para configurar DNS Fixo para o SERVIDOR1 e SERVIDOR2.

Calculado e criado a rota para uma subnet que contenha os dois números 212 e 213. 192.168.15.212/30.

Agora sim quando o usuário requisita o ServidorX ele manda para a placa de rede certa.

Arquivos Mapeados com Sucesso!

RESOLVIDO!



Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *