Como criar uma VPN no Ubuntu 20.04 Usando Wireguard

Como criar uma VPN no Ubuntu 20.04 Usando Wireguard

Wireguard é uma VPN moderna e muito fácil de configurar em múltiplos sistemas operacionais. O aplicativo está disponível no Ubuntu 20.04 Repositórios oficiais, por isso também é muito fácil de instalar. Ao contrário de outros softwares como o OpenVPN, baseados no uso de certificados SSL, o Wireguard é baseado no uso de pares de chaves. Neste tutorial, veremos como configurar, em poucas etapas fáceis, um servidor VPN e um colega de cliente na mais recente versão estável do Ubuntu.

Neste tutorial, você aprenderá:

  • Como instalar Wireguard no Ubuntu 20.04 Fossa focal
  • Como criar um par público e privado
  • Como configurar o servidor e um colega de cliente
  • Como redirecionar todo o tráfego que chegou para a VPN
Wireguard VPN no Ubuntu 20.04

Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Ubuntu 20.04 Fossa focal
Programas Wireguard
Outro Privilégios de raiz
Convenções # - requer que os comandos Linux sejam executados com privilégios root diretamente como usuário root ou por uso de sudo comando
$ - Requer que os comandos do Linux sejam executados como um usuário não privilegiado regular

Instalação

Wireguard está oficialmente disponível no repositório "Universo" do Ubuntu 20.04, portanto, podemos instalá -lo via apt. A versão disponível, no momento da escrita é 1.0.20200319-1Buntu1:

$ sudo apt install wireguard 

O sistema nos pedirá para confirmar que queremos instalar o programa e suas dependências e concluirá a operação em questão de segundos.

Gerando chaves

Devemos gerar um público e uma chave privada para cada máquina que queremos usar em nossa VPN. A chave privada deve ser mantida em segredo na máquina, a pública é usada para acessar a máquina dos outros pares.

Para gerar as chaves, podemos usar o WG Utilitário. Dentro do arquivo de configuração Wireguard, precisamos fazer referência à chave privada da máquina, enquanto a pública será usada nos outros pares. Observe que vamos fazer referência às chaves diretamente, então teoricamente não precisamos armazená -las para arquivos. No entanto, faremos de qualquer maneira, apenas por conveniência.

Para gerar a chave privada para o nosso servidor, devemos usar o Genkey Subcomando de WG. O comando gera a chave criada para stdout; Para escrever a chave para um arquivo, podemos usar o poder das redirecionamentos de shell:

$ wg genkey> server_private_key 

O comando gerará a chave e o armazenará para o Server_private_key arquivo, mas levantará o seguinte aviso:

Aviso: Escrevendo para o arquivo acessível ao mundo. Considere definir o Umask para 077 e tentar novamente. 

Isso ocorre porque com o usuário padrão Umask (002) Os arquivos são criados com o modo 664, Então, são legíveis mundiais, o que não é recomendado. Para resolver esse problema, podemos alterar o UMASK usado na sessão atual do shell antes de criar os arquivos:

$ Umask 077 

Ou altere as permissões de arquivos para 600 depois da criação. Aqui iremos para a última solução.

Uma vez que nossa chave privada estiver pronta, podemos gerar o público um que se baseia nisso. Para realizar a tarefa, usamos o PubKey Subcomando de WG. Assim como antes de usarmos redirecionamentos de concha: primeiro a passar o conteúdo do Server_private_key arquivo para o stdin do comando, e então e para redirecionar a chave gerada para o Server_public_key arquivo:

$ WG PubKey Server_public_key 

Para poupar um pouco de digitação, podemos gerar as duas chaves, com apenas um comando, que envolve o uso do shell | (tubo) operador e o Tee comando:

$ WG Genkey | tee server_private_key | WG PubKey> Server_public_key 

A saída do comando no lado esquerdo do operador do tubo (|) é passado para a entrada padrão do programa no lado direito. O Tee O comando, em vez disso, permita -nos redirecionar a saída de um comando para um arquivo e para a saída padrão (mais sobre redirecionamentos de shell aqui).

Depois que nossas chaves estiverem prontas, podemos criar o arquivo de configuração do servidor.

Arquivo de configuração do servidor

Para configurar nossa instalação de Wireguard, podemos criar um arquivo de configuração chamado WG0.conf Com o seguinte conteúdo:

[Interface] privateKey = endereço = 10.0.0.1/24 Listerport = 51820 

Observe que o nome do arquivo é arbitrário, mas deve ser baseado no nome que usaremos para nossa interface, WG0 nesse caso. Este nome será referenciado ao iniciar o serviço, como veremos abaixo.

Em nosso exemplo. o [interface] A seção do arquivo de configuração contém os seguintes campos:

  • Chave privada
  • Endereço
  • ListenPort

O Chave privada O valor do campo nada mais é do que a chave privada do servidor que geramos anteriormente.

No Endereço Campo, especificamos o endereço para atribuir à interface na VPN juntamente com a máscara de sub -rede usando o Cidr notação. Nesse caso, usamos 10.0.0.1/24, Portanto, nosso endereço de “servidor” Wireguard dentro da VPN será 10.0.0.1, que está na gama disponível de endereços que vão de 10.0.0.1 para 10.0.0.254.

Finalmente, no ListenPort Campo, especificamos o que o Port Wireguard ouvirá para o tráfego recebido. Uma regra para permitir o referido tráfego também deve ser adicionado ao nosso firewall. Faremos isso na próxima seção.

Agora podemos alterar as permissões dos arquivos e movê -los para o /etc/wireguard diretório:

$ chmod 600 server_public_key server_private_key wg0.conf $ sudo mv server_private_key server_public_key wg0.conf /etc /wireguard 

Agora podemos começar o WG-Quick serviço especificando o nome da interface Wireguard depois @ no nome da unidade. Que notação é essa? É um recurso do Systemd: com ele, podemos gerar vários arquivos de unidade na base de um "modelo", passando o valor que será substituído no modelo, após o @ símbolo no nome da unidade. Este é o conteúdo do [email protected]ço unidade:

[Unidade] Descrição = Wireguard via WG-Quick (8) para %i After = Network-Online.Target NSS-Lookup.Desejo de Target = Network-OnLine.Target NSS-Lookup.Documentação de destino = Man: WG-Quick (8) Documentação = Man: WG (8) Documentation = https: // www.Wireguard.com/documentação = https: // www.Wireguard.com/quickstart/documentação = https: // git.ZX2C4.com/wireguard-tools/about/src/man/wg-quick.8 documentação = https: // git.ZX2C4.com/wireguard-tools/about/src/man/wg.8 [Serviço] Tipo = ONESHOT RESTERAFTEREXIT = SIM EXECSTART =/USR/BIN/WG-QICK UP %I EXECSTOP =/usr/bin/Wg-Quick %i Ambiente = WG_ENDPOINT_RESOLUCIO.alvo 

O valor que especificaremos após o @ no nome da unidade ao iniciá -lo ou interromper, substituirá %eu no Exectart e Execstop linhas. Nesse caso, usaremos WG0:

$ sudo systemctl atable--agora wg-quick@wg0 

Com o comando acima, iniciamos o serviço e também fazemos para iniciar automaticamente na inicialização. Para verificar nossa configuração foi aplicada, podemos executar o WG comando. A saída produzida deve exibir informações sobre o WG0 interface:

$ sudo wg interface: wg0 chave pública: nnx3zpcv9d2dtghdsoygbnr64zg5jtj4z4t2se759v4 = chave privada: (oculto) Porta de escuta: 51820 

Agora, vamos prosseguir e configurar nosso firewall e encaminhamento de pacotes.

Firewall e configuração de rede

Neste tutorial, assumirei o uso de ufw. Como dissemos antes, devemos adicionar uma regra para permitir o tráfego recebido pela porta que especificamos no arquivo de configuração, 51820. Fazemos isso executando um comando muito simples:

$ sudo ufw permitir 51820/udp 

Também precisamos permitir o encaminhamento de pacotes em nosso sistema. Para realizar a tarefa, removemos o comentário da linha 28 do /etc/sysctl.conf Arquivo, para que pareça assim:

# Uncomment a próxima linha para ativar o encaminhamento de pacotes para IPv4 net.IPv4.ip_forward = 1 

Para tornar as alterações eficazes sem reiniciar o sistema, precisamos executar o seguinte comando:

$ sudo sysctl -p 

Na próxima etapa, configuraremos o cliente.

Geração de chaves do cliente

Agora vamos nos mover no sistema que queremos usar como cliente. Precisamos instalar o Wireguard nele; Uma vez feito, podemos gerar um par de chaves, como fizemos no servidor:

$ WG Genkey | tee client_private_key | WG PubKey> client_public_key 

Assim como fizemos ao lado do servidor, criamos o WG0.conf arquivo de configuração. Desta vez com este conteúdo:

[Interface] privateKey = endereço = 10.0.0.2/24 [PEER] PublicKey = EndPoint =: 51820 Permitido = 0.0.0.0/0 

Já vimos o significado dos campos contidos no Interface Seção, quando geramos a configuração do servidor. Aqui apenas adaptamos os valores ao nosso cliente (ele terá o 10.0.0.2 endereço na VPN).

Nesta configuração, usamos uma nova seção, [Par]. Nele, podemos especificar as informações em relação a um par, neste caso o que usamos como um "servidor". Os campos que usamos são:

  • Chave pública
  • Endpoint
  • Permitido

No Chave pública campo, especificamos o público Chave do par, então, neste caso, a chave pública que geramos no servidor.

O Endpoint é o endereço IP público ou o nome do host do colega seguido por um cólon e o número da porta que o colega escuta (no nosso caso 51820).

Finalmente, o valor passou para o Permitido Campo, é uma lista separada por vírgula de endereços IP e máscara de sub-rede com notação CIDR. Somente o tráfego direcionado para o par que vem dos endereços especificados será permitido. Nesse caso, usamos 0.0.0.0/0 Como valor: funciona como um valor de "Catch-All", para que todo o tráfego seja enviado para o par VPN (o servidor).

Assim como fizemos o lado do servidor, definimos as permissões apropriadas e movimentamos as chaves e o arquivo de configuração para o /etc/wireguard diretório:

$ chmod 600 client_public_key client_private_key wg0.conf $ sudo mv client_public_key client_private_key wg0.conf /etc /wireguard 

Com o arquivo de configuração no lugar, podemos iniciar o serviço:

$ sudo systemctl atable--agora wg-quick@wg0 

finalmente, o [Par] seção em relação ao nosso cliente, deve ser adicionado ao arquivo de configuração que criamos anteriormente no servidor. Nós acrescentar O seguinte conteúdo para ele:

[Par] PublicKey = permitido = 10.0.0.2/32 

Neste ponto, reiniciamos o serviço:

$ sudo systemctl reiniciar wg-quick@wg0 

As informações sobre o par associado devem ser relatadas agora na saída do WG comando:

$ sudo wg interface: wg0 chave pública: nnx3zpcv9d2dtghdsoygbnr64zg5jtj4z4t2Se759v4 = chave privada: (oculto) Porta de escuta: 51820: t5pkkg5/9fjkiU0lrntThv620s: t5pkkg5/9fjkiU0lrntThv620.0.0.2/32 

Neste ponto, a partir do sistema "cliente", devemos ser capazes de fazer ping no servidor no 10.0.0.1 endereço:

$ ping -c 3 10.0.0.1 ping 10.0.0.1 (10.0.0.1) 56 (84) bytes de dados. 64 bytes de 10.0.0.1: icmp_seq = 1 ttl = 64 tempo = 2.82 ms 64 bytes de 10.0.0.1: icmp_seq = 2 ttl = 64 tempo = 38.0 ms 64 bytes de 10.0.0.1: icmp_seq = 3 ttl = 64 tempo = 3.02 MS --- 10.0.0.1 estatística de ping --- 3 pacotes transmitidos, 3 recebidos, 0% de perda de pacotes, tempo 2003ms rtt min/avg/max/mdev = 2.819/14.613/37.999/16.536 ms 

Conclusões

Neste tutorial, vimos como criar uma VPN usando Wireguard na mais recente versão estável do Ubuntu: 20.04 Fossa focal. O software é realmente simples de instalar e configurar, especialmente se comparado a outras soluções, como por exemplo openVPN.

Vimos como gerar as chaves públicas e privadas usadas para nossa configuração e como configurar o servidor e um cliente para que todo o tráfego seja redirecionado para a VPN. Seguindo a instrução fornecida, você terá uma configuração de trabalho. Para mais informações, dê uma olhada na página do projeto.

Tutoriais do Linux relacionados:

  • Coisas para instalar no Ubuntu 20.04
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Como configurar um servidor OpenVPN no Ubuntu 20.04
  • Ubuntu básico 22.04 Configuração do OpenVPN Client/Server Connection
  • Ubuntu 20.04 truques e coisas que você pode não saber
  • Ubuntu 20.04 Guia
  • Coisas para instalar no Ubuntu 22.04
  • Lista de clientes FTP e instalação no Ubuntu 20.04 Linux…
  • Ubuntu 20.04: WordPress com instalação nginx
  • Os 8 melhores ambientes de desktop do Ubuntu (20.04 Fossa focal…