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 executadosscript-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
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