O pfSense vem com um assistente (wizard) que pode ser utilizado para criar VPNs, mais ou menos no famoso estilo next, next, next (avançar, avançar, avançar) do Windows. No entanto, eu o achei um tanto falho. Quando eu o utilizava, ele repetia algumas configurações entre as VPNs. Assim, passei a fazer a maior parte das etapas manualmente, deixando o assistente apenas para configurar a VPN propriamente dita e as regras do firewall, que são as etapas finais.
Vamos configurar manualmente os pré-requisitos para a VPN.
Primeiro, precisamos de uma autoridade certificadora (do inglês Certificate Authority, CA) para emitir os certificados do servidor e do cliente. Vá em System, Cert. Manager, aba CAs e clique no botão Add. Preencha o cadastro com as informações a seguir (claro, lembre-se sempre de alterar de acordo com as suas necessidades):
- Descriptive name: MINHACASA_CA
- Method: Create an internal Certificate Authority
- Country Code: BR
- State or Province: Rio Grande do Sul
- City: Pelotas
- Organization: Minha Casa
- Email Address: vinyanalista@minhacasa.net
- Common Name: minhacasa-ca
Clique em Save:
Depois, precisamos de um certificado para o servidor. De volta à tela Certificate Manager, clique na aba Certificates e clique no botão Add. Preencha o cadastro com as informações a seguir:
- Method: Create an internal Certificate
- Descriptive name: VPN de teste
- Certificate authority: MINHACASA_CA
- Certificate Type: Server Certificate
- Country Code: BR
- State or Province: Rio Grande do Sul
- City: Pelotas
- Organization: Minha Casa
- Email Address: vinyanalista@minhacasa.net
- Common Name: vpn-de-teste
Clique em Save:
Precisamos também cadastrar os usuários que utilizarão a VPN (login e senha) e criar certificados para esses usuários. Vá em System, User Manager e clique no botão Add. Preencha o cadastro com as informações a seguir:
- Username: vinyanalista
- Password: Alg0$3guro!
- Full name: Antônio Vinícius Menezes Medeiros
Em Certificate, marque Click to create a user certificate para que ele gere um certificado para o usuário que estamos cadastrando. Acrescente as informações:
- Descriptive name: vinyanalista
- Certificate authority: MINHACASA_CA
Clique em Save:
Agora vamos à configuração da VPN propriamente dita.
Vá em VPN, OpenVPN e clique na aba Wizards. É iniciado então o OpenVPN Remote Access Server Setup. Na primeira tela, Select an Authentication Backend Type, escolha Local User Access, e clique em Next:
Na segunda tela, Choose a Certificate Authority (CA), selecione a autoridade cerficadora que foi criada anteriormente (MINHACASA_CA) e clique em Next:
Na terceira tela, Choose a Server Certificate, selecione o certificado de servidor que foi criado anteriormente (VPN de teste) e clique em Next:
Na tela seguinte, Server Setup, vamos configurar o servidor da VPN. Aqui, você deve preencher de acordo com as configurações da rede do seu servidor (a rede da sua empresa, por exemplo). Vejamos algumas configurações:
- Interface: WAN (interface de rede na qual o servidor aguardará pela conexão do cliente, deve apresentar conexão com a Internet)
- Local Port: 1194 (porta na qual o servidor aguardará pela conexão do cliente, 1194 é a porta convencional para o protocolo OpenVPN, você pode utilizar essa porta para a primeira VPN, mas se for criar outras, deverá reservar portas diferentes para cada VPN, por exemplo 1195, 1196…)
- Description: VPN de teste (descrição da VPN, deve ser um nome informativo, até porque aparecerá na tela do cliente identificando a conexão)
- Tunnel Network: 192.168.26.0/24 (endereço e máscara da rede virtual privada, no formato de CIDR , observe que o pfSense tomará o primeiro endereço IP para ele, nesse caso 192.168.26.1, e os demais endereços IPs serão atribuídos aos clientes)
- Local Network: 192.168.25.0/24 (endereço e máscara da rede interna que o cliente conectado pela VPN poderá acessar, é possível especificar mais de uma rede separando as redes por vírgula e até mesmo restringir o acesso a apenas um computador na rede interna, por exemplo 192.168.25.2/32)
Com relação ao campo Tunnel Network, devo observar que ele determina a quantidade de computadores que poderão se conectar pela VPN. Obrigatoriamente, o servidor consumirá 1 endereço IP da VPN. Além disso, o pfSense não deixa criarmos uma VPN cujo endereço de rede utilize 30, 31 ou 32 bits do endereço IP. Então, a menor rede virtual privada que podemos criar utiliza 29 bits do endereço IP para se identificar. Com os 3 bits restantes, podemos endereçar 5 clientes.
Para esclarecer a explicação, se tivéssemos preenchido o campo Tunnel Network com 192.168.26.0/29, os endereços da nossa VPN seriam assim:
- 192.168.26.0: endereço da rede
- 192.168.26.1: endereço do pfSense
- 192.168.26.2: endereço atribuído ao primeiro cliente que se conectar à VPN
- 192.168.26.3: endereço atribuído ao segundo cliente
- 192.168.26.4: endereço atribuído ao terceiro cliente
- 192.168.26.5: endereço atribuído ao quarto cliente
- 192.168.26.6: endereço atribuído ao quinto cliente
- 192.168.26.7: endereço de broadcast
Provavelmente os campos Tunnel Network e Local Network são os que merecem mais cuidado nessa tela.
Há alguns campos que podem ser preenchidos caso você necessite configurar o cliente conectado à VPN usando DHCP.
Desses, destaco:
- DNS Default Domain
- DNS Server 1, DNS Server 2, DNS Server 3 e DNS Server 4
- NTP Server e NTP Server 2
- WINS Server 1 e WINS Server 2
Perceba que essa tela é extensa, mas nela estão quase todas as configurações da VPN:
Quando terminar de configurar a VPN, clique em Next.
Na penúltima tela do assistente, Firewall Rule Configuration, certifique-se de que as duas opções Firewall Rule e OpenVPN rule estejam marcadas. Com isso, o pfSense criará automaticamente as regras de firewall necessárias para que a VPN funcione. Clique em Next:
A última tela apenas informa que a VPN foi criada. Clique em Finish:
Exportando o software cliente
O pfSense é capaz de exportar o software e os arquivos de configuração que devem ser instalados no computador cliente para que ele consiga se conectar à VPN. Para isso, usamos o OpenVPN Client Export Utility. Esse utilitário não acompanha a instalação padrão do pfSense, sendo disponibilizado como um pacote.
Caso você ainda não o tenha instalado, vá em System, Package Manager, na aba Available Packages, busque por esse pacote e o instale clicando no botão Install:
Com o utilitário instalado, vá em VPN, OpenVPN, aba Client Export.
Em Remote Access Server, selecione a VPN (nesse exemplo, VPN de teste).
Mais abaixo, no final da página, na linha correspondente ao usuário que deve acessar a VPN (nesse exemplo, vinyanalista), clique no botão correspondente ao cliente que deseja exportar.
Vou demonstrar como conectar à VPN um computador cujo sistema operacional é o Windows 10 de 64 bits. Nesse caso, clique no botão x64-win6 para exportar o cliente correspondente:
O download do instalador do cliente é iniciado. Esse arquivo (cujo nome deve ser algo parecido com firewall-udp-1194-vinyanalista-install.exe) deve ser copiado ou movido para o computador cliente.
Também vou demonstrar como conectar à VPN um celular com sistema Android. Você pode aproveitar para já baixar também o arquivo de configuração que será necessário. Para isso, clique no botão Android. Esse arquivo (cujo nome deve ser algo parecido com firewall-udp-1194-vinyanalista-android-config.ovpn) deve ser copiado ou movido para o celular. No caso do Android, o software cliente é instalado pela Play Store , por isso o pfSense exporta apenas o arquivo de configuração.
Conectando à VPN pelo Windows 10
No computador cliente, execute o instalador do cliente OpenVPN, baixado do pfSense. A instalação é bem simples. Aqui, mais uma vez, é next, next, next:
Terminada a instalação, para iniciar o cliente OpenVPN, abra o menu Iniciar, clique em Todos os programas, depois em OpenVPN e, por fim, em OpenVPN GUI:
O cliente OpenVPN é iniciado. Observe seu ícone na área de notificação:
Dê dois clique nesse ícone. O cliente solicita usuário e senha para se conectar com a VPN. Informe o usuário e a senha que você configurou no pfSense e clique em OK:
Se conseguir se conectar, o cliente OpenVPN mostra uma notificação com o endereço IP que foi atribuído ao computador dentro da rede privada virtual. Observe também que o ícone do cliente muda sua cor para verde, indicando que está conectado:
Como teste, você pode abrir o Prompt de comando do Windows e verificar a conectividade com algum computador na rede da outra ponta da VPN:
Microsoft Windows [versão 10.0.10240]
(c) 2015 Microsoft Corporation. Todos os direitos reservados.
C:\Users\Vinicius>ping 172.20.0.4
Disparando 172.20.0.4 com 32 bytes de dados:
Resposta de 172.20.0.4: bytes=32 tempo=127ms TTL=62
Resposta de 172.20.0.4: bytes=32 tempo=78ms TTL=62
Resposta de 172.20.0.4: bytes=32 tempo=104ms TTL=62
Resposta de 172.20.0.4: bytes=32 tempo=97ms TTL=62
Estatísticas do Ping para 172.20.0.4:
Pacotes: Enviados = 4, Recebidos = 4, Perdidos = 0 (0% de
perda),
Aproximar um número redondo de vezes em milissegundos:
Mínimo = 78ms, Máximo = 127ms, Média = 101ms
C:\Users\Vinicius>
Quando não precisar usar mais a VPN, clique com o botão direito do mouse no ícone do cliente OpenVPN e em seguida clique em Sair:
Solução de problemas
Caso você perceba que não conseguiu se conectar à VPN e o cliente exibe uma mensagem como esta:
TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Significa que o cliente e o servidor OpenVPN não estão conseguindo se comunicar, podendo a causa do problema estar em uma ponta ou outra da conexão. É provável que seu computador esteja sem conexão com a Internet ou algum firewall esteja impedindo a conexão do seu computador com o servidor da VPN.
Algumas verificações que você pode fazer do lado do cliente:
- Tentar executar o cliente OpenVPN como administrador;
- Verificar a hora do computador (para que a conexão segura possa ser estabelecida é um pré-requisito que a hora esteja correta);
- Verificar no Firewall do Windows se a porta número 1194 está liberada para receber conexões TCP e UDP (se não estiver liberada, adicionar exceção);
- Verificar no Firewall do Windows se o aplicativo openvpn.exe está sendo bloqueado (se estiver bloqueado, adicionar exceção);
- Se houver algum firewall entre o computador e o provedor de Internet, verificá-lo também; e
- Se já havia um cliente OpenVPN instalado no computador e o instalador baixado do pfSense apenas acrescentou a configuração da VPN recém-criada, considere a possibilidade de desinstalar o cliente já instalado na máquina e instalar o fornecido, que pode ser mais novo e conter correções para bugs e falhas de segurança.
Falando em bug, pode acontecer de o cliente OpenVPN relatar que conseguiu se conectar, mas não conseguiu configurar rotas para a rede privada virtual:
Tue Jun 14 22:15:09 2016 ROUTE: route addition failed using CreateIpForwardEntry: Acesso negado. [status=5 if_index=4]
Tue Jun 14 22:15:09 2016 env_block: add PATH=C:\Windows\System32;C:\Windows;C:\Windows\System32\Wbem
Tue Jun 14 22:15:09 2016 ERROR: Windows route add command failed [adaptive]: returned error code 1
Tue Jun 14 22:15:09 2016 ROUTE: route addition failed using CreateIpForwardEntry: Acesso negado. [status=5 if_index=4]
Tue Jun 14 22:15:09 2016 env_block: add PATH=C:\Windows\System32;C:\Windows;C:\Windows\System32\Wbem
Tue Jun 14 22:15:10 2016 ERROR: Windows route add command failed [adaptive]: returned error code 1
Tue Jun 14 22:15:10 2016 Initialization Sequence Completed
Isso é um bug que afetava versões antigas do cliente OpenVPN, mas já foi corrigido. Você pode baixar a versão mais recente do cliente OpenVPN , instalá-la em seu computador e repetir os passos acima para se conectar à VPN normalmente. Ou, se não quiser fazer isso, você pode tentar executar o cliente já instalado em seu computador com permissões de administrador.
Quando você conseguir se conectar sem problemas, o cliente OpenVPN deve exibir uma sequência de mensagens parecida com esta:
Tue Jun 14 22:18:06 2016 OpenVPN 2.3.11 x86_64-w64-mingw32 [SSL (OpenSSL)] [LZO] [PKCS11] [IPv6] built on May 10 2016
Tue Jun 14 22:18:06 2016 Windows version 6.2 (Windows 8 or greater) 64bit
Tue Jun 14 22:18:06 2016 library versions: OpenSSL 1.0.1t 3 May 2016, LZO 2.09
Tue Jun 14 22:19:34 2016 Control Channel Authentication: using 'firewall-udp-1194-antonio.medeiros-tls.key' as a OpenVPN static key file
Tue Jun 14 22:19:34 2016 UDPv4 link local (bound): [undef]
Tue Jun 14 22:19:34 2016 UDPv4 link remote: [AF_INET]187.86.133.121:1194
Tue Jun 14 22:19:35 2016 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Tue Jun 14 22:19:35 2016 [VPN do HEUFPEL] Peer Connection Initiated with [AF_INET]187.86.133.121:1194
Tue Jun 14 22:19:38 2016 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Tue Jun 14 22:19:38 2016 open_tun, tt->ipv6=0
Tue Jun 14 22:19:38 2016 TAP-WIN32 device [Ethernet 3] opened: \\.\Global\{2D6F99C4-A78C-48F2-A301-AEBFDD5B5E30}.tap
Tue Jun 14 22:19:38 2016 Set TAP-Windows TUN subnet mode network/local/netmask = 10.100.201.0/10.100.201.2/255.255.255.0 [SUCCEEDED]
Tue Jun 14 22:19:38 2016 Notified TAP-Windows driver to set a DHCP IP/netmask of 10.100.201.2/255.255.255.0 on interface {2D6F99C4-A78C-48F2-A301-AEBFDD5B5E30} [DHCP-serv: 10.100.201.254, lease-time: 31536000]
Tue Jun 14 22:19:38 2016 Successful ARP Flush on interface [4] {2D6F99C4-A78C-48F2-A301-AEBFDD5B5E30}
Tue Jun 14 22:19:44 2016 Initialization Sequence Completed
Créditos:
Antonio Vinicius (https://vinyanalista.github.io/).
Thiago Melo (https://thiago.oxente.org).