OpenVPN + pfSense

Como forçar um DNS pela VPN no Linux?

Ao se conectar em uma OpenVPN (como cliente), recebe-se do servidor um endereço de DNS para usar como padrão, forçado-o a substituir o DNS atual pelo DNS definido pelo OpenVPN Server.

Por padrão, o cliente OpenVPN do Windows, do Android e do Linux via interface gráfica no Network Manager reescrevem o DNS normalmente, mas no Linux via linha de comando isso não funciona!

Para fazer funcionar é preciso instalar o resolvconf:

sudo apt install resolvconf

Além disso, é preciso adicionar no arquivo de configuração ".conf":

#Isso permite que os scripts up e down possam ser executados script-security 2 #Segundo a documentação: 2 -- Allow calling of built-in executables and user-defined scripts #Scripts que arrumam o DNS up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf

O que é a opção Inter-client communication?

Há uma opção na configuração do OpenVPN dizendo "Allow communication between clients connected to this server". Estando essa opção desativada, as regras de firewall se aplicam para a VPN. Estando desativada, os pacotes dentro da VPN não são lidos pelo pfSense, logo não são filtrados pelo firewall.
https://forum.netgate.com/post/836822

Configurações de Firewall para permitir o tráfego

O pfSense impede por padrão todo o tráfego proveniente da rede WAN, ou seja, se não há nenhuma regra permitindo um certo tráfego, ele é proibido. Se você espera receber conexões provenientes da OpenVPN por ali, é preciso criar regras.

O pfSense cria uma "interface" para todas as conexões dentro da OpenVPN chamada OpenVPN. Lá dentro você define as regras para todas as OpenVPNs criadas. Se você quer segregar regras por VPN individualmente, você pode criar uma interface para cada VPN (Interfaces -> Assignments) e aí conseguirá definir regras para cada uma.

Como logar automaticamente em uma VPN pelo terminal em um Linux?

Abra o arquivo .conf (arquivo com as configurações de conexão da VPN) e localize a linha com auth-user-pass. Adicione ao fim dela o caminho para um arquivo com o login e a senha.

Exemplo de arquivo .conf

auth-user-pass authentication.txt

Exemplo do arquivo de login e senha authentication.txt

meu-loginsenha-super-secreta12345

Client Specific Overrides

Por padrão o servidor envia configurações padrão para os clientes VPN assim que eles se conectam. Essas configurações definem o IP e rotas a serem adicionadas na máquina do cliente. Mas e se há algum cliente que precisa de configurações diferentes?

O Client Specific Overrides serve para isso, enviar configurações do servidor diferentes e especiais para um ou mais clientes.

Referência

https://serverfault.com/questions/780390/autostart-openvpn-with-username-password-authentication-in-ubuntu

OpenVPN + pfSense + AWS

Usar o pfSense na AWS traz algumas particularidades.

Você precisa desabilitar Source/Destination Check. A AWS automaticamente verifica os ips de origem e destino que chegam e saem da máquina. Como o pfSense pode trabalhar como um roteador, nem sempre o pfSense receberá pacotes com seu ip como destino/origem. Não precisa desabilitar isso para as outras máquinas (por mais que elas recebam pacotes de dentro da VPN, por exemplo).

Permitindo conexão entre VPN e Instancias da AWS

Liberando o firewall

Interface: LAN
Regra: Allow
source: *
destination: (ip/rede do computador ec2)

Interface: OpenVPN
Regra: Allow
Source: (ip/rede do computador ec2)
Destination: *

Criando rotas estáticas

É preciso informar à rede VPC que todos os pacotes para a rede da VPN devem passar pelo pfSense. Voce tem duas opções, escolha uma das duas.

Adicionando rota manualmente no computador

No computador ec2 que poderá acessar a VPN

route add -net (rede OpenVPN) netmask (máscara da rede OpenVPN) gw (ip do pfSense)

Adicionando rota pelo AWS Route Tables

VPC -> Route Tables

Adicione a rota manualmente.

Arquivo de configuração do cliente

Forçando todo o tráfego do computador pela VPN

redirect-gateway def1

Arquivo de configuração .conf ou .ovpn para Cliente

Ignorando comandos enviados pelo servidor no cliente

Você pode ignorar comandos enviados pelo servidor usando o arquivo .conf.

Para ignorar os comandos de DNS enviados pelo OpenVPN server adicione o seguinte ao arquivo de configuração.

pull-filter ignore "dhcp-option DNS"

Referências

Tutorial OpenVPN da documentação oficial do pfSense
https://docs.netgate.com/pfsense/en/latest/vpn/openvpn/openvpn-remote-access-server.html

Tutorial OpenVPN da Wiki do ArchLinux
https://wiki.archlinux.org/index.php/OpenVPN

Tutoriais avançados e completos de pfSense e OpenVPN
https://nguvu.org/

Bons tutoriais sobre pfSense + OpenVPN
https://turbofuture.com/computers/How-to-Setup-a-Remote-Access-VPN-Using-pfSense-and-OpenVPN

https://www.samueldowling.com/2018/11/27/how-to-configure-an-openvpn-remote-access-server-in-pfsense/

https://www.samueldowling.com/2018/11/27/how-to-configure-an-openvpn-remote-access-server-in-pfsense/

Solucionando problemas de DNS na OpenVPN
http://www.softwarepassion.com/solving-dns-problems-with-openvpn-on-ubuntu-box/
https://stackoverflow.com/questions/47397568/openvpn-register-dns-error-despite-using-last-version

You should also read:

Instalando Emby Server no PfSense

Descobrindo a versão do FreeBSD no PfSense freebsd-version -k Explorando o repositório de arquivos do FreeBSD http://pkg.freebsd.org/ Emby Server no repositorio FreeBSD https://www.freebsd.org/cgi/ports.cgi?query=emby-server&stype=all…

Testando IPSec com o PfSense

Neste tutorial configuraremos dois servidores pfsense para interligarem duas redes (site-to-site VPN) através do protocolo IPSec com túnel nativo (sem GRE) usando esquema…