Como configurar o servidor VPN WireGuard e o cliente no Ubuntu 20.04

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.