Uma VPN (Virtual Private Network) ou Rede Virtual Privada é uma ferramenta que cria uma conexão "tunelada" (geralmente criptografada) entre dois ou mais dispositivos em uma rede.
Ela funciona como um túnel virtual, permitindo, dentre outras opções, acesso a redes sem endereço IP público para conexão direta, proteção de dados em redes não confiáveis e navegação anônima (acesso à Internet usando um IP de um servidor VPN para evitar restrições, por exemplo).
VPN no Linux (OpenVPN)
Instalação do OpenVPN no Linux
apt install openvpn easy-rsa
Copie o Easy-RSA para um diretório adequado (/etc/openvpn por padrão)
cp -r /usr/share/easy-rsa/ /etc/openvpn/
cd /etc/openvpn/easy-rsa/
Edite o arquivo vars:
nano vars
Defina as seguintes variáveis, substituindo os valores pelos da empresa/instituição:
Configurações principais a serem mantidas/configuradas:
port 1194 # Porta UDP
proto udp # Protocolo UDP
dev tun # Interface de túnel
ca easy-rsa/pki/ca.crt # Certificado da CA
cert easy-rsa/pki/issued/server.crt # Certificado do servidor
key easy-rsa/pki/private/server.key # Chave privada do servidor
dh easy-rsa/pki/dh.pem # Parâmetros Diffie-Hellman
server 10.8.0.0 255.255.255.0 # Rede VPN
push "redirect-gateway def1 bypass-dhcp" # Redireciona o tráfego do cliente
push "dhcp-option DNS 8.8.8.8" # Define o servidor DNS
keepalive 10 120 # Mantém a conexão ativa
cipher AES-256-CBC # Criptografia
user nobody # Usuário para o OpenVPN
group nogroup # Grupo para o OpenVPN
persist-key # Mantém as chaves abertas
persist-tun # Mantém a interface TUN aberta
status openvpn-status.log # Arquivo de status
verb 3 # Nível de detalhes do log
Habilite o repasse de pacotes:
echo 1 > /proc/sys/net/ipv4/ip+forward
O ideal é fazer isso de forma definitiva alterando o valor da variável no arquivo /etc/sysctl.conf (como fizemos na configuração do firewall no Linux)
ca.crt
client1.crt
client1.key
client.ovpn (arquivo de configuração do cliente que será criado a seguir)
Crie o arquivo client.ovpn:
Configurações principais a serem mantidas/configuradas:
client
dev tun
proto udp
remote <endereço_ip_do_servidor> 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
remote-cert-tls server
cipher AES-256-CBC
verb 3
O servidor VPN fica ativo aguardando conexões (como todo servidor) e o cliente deve ser executado todas as vezes que desejar "subir" a VPN.