Configure uma VPN auto-hospedada usando Wireguard
UMA VPN (rede privada virtual) permite que o usuário se conecte a uma rede privada remotamente, como se o computador do usuário estivesse diretamente conectado à rede privada. A tecnologia foi desenvolvida inicialmente para permitir o acesso remoto à rede privada interna de uma empresa, para funcionários que não estão realmente presentes na localização da rede interna.
Um servidor VPN é implantado no local da rede interna. Este servidor está na rede pública e pode ser acessado por meio de um cliente VPN pelo funcionário. A autenticação é necessária para se conectar ao servidor VPN. A comunicação entre o servidor VPN e o cliente VPN é protegida por meio de um protocolo de túnel. Observe que essa comunicação pode ou não ser criptografada, mas geralmente na maioria dos protocolos VPN ela é criptografada.
Outro uso da VPN é para ganhar anonimato ao acessar a Internet ou para contornar restrições geográficas impostas durante o acesso a alguns sites. Nesses casos, a rede à qual o usuário deseja se conectar não é uma rede privada, mas sim a Internet.
Muitos protocolos VPN foram desenvolvidos ao longo dos anos. Esses protocolos fazem uso de diferentes protocolos de encapsulamento e algoritmos de criptografia para a comunicação entre o servidor e o cliente.
Um desses protocolos, que está ganhando amplo uso recentemente, é Wireguard. O Wireguard é mais leve, mais simples e mais eficiente do que os protocolos VPN tradicionalmente usados, como OpenVPN, IPSec. Já está implementado para Windows, Mac OS e um grande número de distribuições Linux. No Linux, ele é implementado como um módulo do kernel. Ele está disponível nos repositórios oficiais do Ubuntu 20.04.
Neste artigo, veremos como configurar um servidor e cliente VPN Wireguard no Ubuntu 20.04.
Instalação
Para este artigo, estou configurando um servidor Wireguard em um Linode Ubuntu 20.04 e um cliente Wireguard em minha máquina local com Ubuntu 20.04.
O pacote wireguard
instala o servidor e o cliente Wireguard. Execute o seguinte comando na máquina do servidor e na máquina do cliente.
sudo apt install wireguard
Configuração do Servidor
Chaves de Segurança
Precisamos gerar um conjunto de pares de chaves públicas / privadas para autenticar e proteger a conexão Wireguard. Isso pode ser feito usando os seguintes comandos:
sudo su cd / etc / wireguard umask 077 wg genkey | tee private_key | wg pubkey> public_key
Observe que estamos realizando todas as tarefas de configuração como superusuário. A razão é que o acesso ao diretório / etc / wireguard
é impedido para usuários normais e o acesso ao diretório não pode ser obtido apenas com privilégios sudo para um usuário normal.
Em seguida, definimos a máscara de criação de arquivo para 077
. Isso significa que sempre que um novo arquivo é criado nesta pasta por qualquer processo, suas permissões serão automaticamente mascaradas com 077. Ex. se um arquivo for criado nesta pasta com as permissões 777, ele será mascarado automaticamente e as permissões passarão a ser 700. Isso é feito para que apenas o proprietário do arquivo tenha todas as permissões no arquivo e todos os outros não tenham permissões.
Na próxima linha, nós geramos o par de chave pública / privada para o servidor. Eles são salvos em arquivos chave privada
e chave pública
. Para ver as chaves, execute:
cat private_key cat public_key
Copie a chave privada, precisamos dela na próxima etapa.
Observação: Nunca compartilhe sua chave privada publicamente!
Arquivo de configuração
Vamos criar um arquivo de configuração para o servidor Wireguard. Você pode escolher qualquer nome para o arquivo. Vamos criar um arquivo wg0.conf
neste exemplo.
vim wg0.conf
Adicione o seguinte ao arquivo.
[Interface] Endereço = 10.20.43.1/24 SaveConfig = true ListenPort = 51190 PrivateKey = PostUp = iptables -A FORWARD -i wg0 -j ACEITAR; iptables -t nat -A POSTROUTING -o -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACEITAR; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACEITAR; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACEITAR; ip6tables -t nat -D POSTROUTING -o -j MASQUERADE
Cole a chave privada que copiamos anteriormente na linha 5 do código acima.
Temos que configurar o Wireguard em uma sub-rede (virtual) diferente do que o endereço IP do servidor. Aqui, usei 10.20.43.1 para o servidor e irei usar 10.20.43.2 para o cliente. Qualquer sub-rede pode ser usada aqui. Para obter o endereço IP do servidor e a interface, execute:
ifconfig
Observe o endereço IP do servidor. Isso é necessário durante a configuração do cliente.
A interface usada pelo servidor, como visto na imagem acima, é eth0
. O nome da interface pode ser diferente com base na rede do usuário, pode ser wlan0
ou wlp2s0
caso o usuário esteja conectado a uma rede WiFi por meio de uma placa wireless.
Substitua o dentro
PostUp
e PostDown
com sua interface; neste exemplo é eth0
.PostUp
e PostDown
as diretivas são usadas para especificar quais comandos devem ser executados quando o servidor é iniciado e interrompido, respectivamente. Em nosso exemplo, usamos o iptables
comando para definir regras de IP de forma que o endereço de IP do servidor seja compartilhado pelos clientes. As regras cairão assim que o servidor parar.
Salve e saia do arquivo. Ao usar o vim, pressione Esc, então digite : wq
e pressione Entrar para salvar e sair.
Se você estiver usando um ufw
firewall no servidor, precisamos permitir conexões UDP à porta do servidor VPN, 51190.
ufw permitir 51190 / udp
Iniciando o serviço
Agora que a configuração está feita, podemos iniciar o serviço VPN Wireguard.
Para habilitar o serviço para iniciar no momento da inicialização, execute:
systemctl enable wg-quick @ wg0
Observe que aqui wg0
é o nome do arquivo de configuração.
Para iniciar o serviço, execute:
service wg-quick @ wg0 start
Verificar que o serviço foi iniciado com sucesso:
serviço wg-quick @ wg0 status
Verifique se a interface que criamos no arquivo de configuração foi iniciado, usando o comando IP.
ip a show wg0
O Wireguard VPN Server agora está configurado e funcionando. Vamos configurar o cliente agora.
Configuração de Cliente
A configuração do cliente para Wireguard é mais ou menos igual à configuração do servidor. Geramos as chaves para o cliente e, a seguir, criamos um arquivo de configuração.
Chaves de Segurança
Para gerar a chave pública / privada par para o cliente, execute:
sudo su cd / etc / wireguard umask 077 wg genkey | tee client_private_key | wg pubkey> client_public_key
As chaves públicas e privadas para o cliente agora são geradas respectivamente em arquivos client_private_key
e client_public_key
.
Verifique se eles foram criados, usando gato
comando.
cat client_private_key cat client_public_key
Copie a chave privada exibida, pois precisamos adicioná-la ao arquivo de configuração do cliente.
Arquivo de configuração
Crie o arquivo de configuração com qualquer nome que desejar. Estaremos criando com o nome wg0-client
para este exemplo.
vim wg0-client.conf
Adicione a seguinte configuração.
[Interface] # Endereço IP e Chave Privada do Endereço do Cliente = 10.20.43.2/24 PrivateKey = [Peer] # Chave Pública, Endereço IP e Porta do Servidor PublicKey = Endpoint =: 51190 AllowedIPs = 0.0.0.0/0,: : / 0
Insira o endereço de sub-rede do cliente. Conforme descrito anteriormente, usamos 10.20.43.2
para o cliente neste exemplo.
Adicione a chave privada do cliente gerado na etapa anterior na linha 4 no código de configuração acima.
Em ‘Peer’, adicionamos informações sobre o servidor Wireguard VPN queremos nos conectar.
Insira a chave pública do servidor. Introduzir o endereço IP do servidor, que observamos anteriormente, e a portabilidade no formato fornecido em relação Endpoint. Esta é a porta que especificamos no arquivo de configuração do servidor e na qual o serviço VPN no servidor foi iniciado.
Os IPs permitidos devem ser inseridos conforme fornecido (0.0.0.0/0) para que qualquer solicitação em um IP público dinâmico usado pelo cliente sempre encaminhe para o servidor VPN.
Salve e saia do arquivo. Ao usar o vim, pressione Esc, então digite : wq
e pressione Entrar para salvar e sair.
Habilite o serviço ao cliente para executar a cada inicialização e iniciá-lo.
systemctl enable wg-quick @ wg-client service wg-quick @ wg-client start
Verificar se o serviço foi iniciado.
service wg-quick @ wg-client status
Adicionando Ponto ao Servidor
Agora temos o servidor VPN e o cliente funcionando. No entanto, um túnel seguro entre os dois não é estabelecido a menos que estabeleçamos uma conexão ponto a ponto entre o servidor e o cliente.
Volte para o servidor. Primeiro, pare o serviço VPN.
serviço wg-quick @ wg0 stop
Em seguida, abra o arquivo de configuração para adicionar configuração para o par (cliente).
vim /etc/wireguard/wg0.conf
Acrescentar as seguintes linhas para o arquivo.
[Peer] PublicKey = AllowedIPs = 10.20.43.2/32
Agora, inicie o serviço VPN novamente.
service wg-quick @ wg0 start
É isso! Esta é toda a configuração necessária para o cliente Wireguard VPN e a configuração do servidor. Agora vamos testar nosso VPN.
Testando a VPN
Primeiro, vamos fazer um ping simples do cliente para o servidor, para garantir que a comunicação do túnel VPN funcione. Execute o seguinte no cliente:
ping 10.20.43.1
Próximo, abra um navegador da web e qualquer site para verificar se você consegue se conectar à Internet a partir da máquina cliente. Você também pode verificar sua conectividade com a Internet na linha de comando usando wget
.
wget
Agora, verificamos a conectividade do túnel e a conectividade da Internet. Se ambos estiverem funcionando, agora precisamos nos certificar de que todo o tráfego da Internet que chega ao cliente está passando pelo servidor.
Para isso, basta verificar o endereço IP do cliente visto pela Internet. Uma maneira de fazer isso é acessar whatsmyip.org. Ou então, a partir da linha de comando, podemos consultar outro serviço semelhante chamado informações de IP, usando o Curl.
Execute o seguinte na máquina cliente
curl //ipinfo.io/ip
sim. É o endereço IP público do Linode onde o servidor VPN está hospedado. É assim que se consegue o anonimato usando VPN, já que em toda a Internet agora é visto o IP do servidor VPN e não do seu computador.
Conclusão
A facilidade de configuração é uma das vantagens mais importantes do Wireguard sobre o software VPN tradicional como o OpenVPN, que precisa de um nível mais alto de conhecimento de rede e roteamento para ser configurado. No entanto, há uma falta de documentação oficial detalhada para o Wireguard, o que pode causar problemas se a configuração do Wireguard apresentar erros ou não funcionar como esperado.
No entanto, o Wireguard é uma excelente escolha se você deseja uma VPN auto-hospedada para comunicação segura pela Internet. Para saber mais sobre o Wireguard e os protocolos e tecnologias que ele usa, você pode verificar o site oficial.