Base de Conhecimento

Como instalar o Tinc e configurar uma VPN básica no Ubuntu 18.04  Imprimir este Artigo

Introdução

O Tinc é um daemon de rede virtual privada (VPN) de código-fonte aberto com recursos úteis como criptografia, compactação opcional e roteamento de malha automático que podem rotear oportunisticamente o tráfego da VPN diretamente entre os servidores. Esses recursos diferenciam o tinc de outras soluções de VPN e o tornam uma boa opção para criar uma VPN a partir de muitas redes pequenas e geograficamente distribuídas.

Neste tutorial, veremos como usar o tinc para criar uma VPN segura na qual seus servidores possam se comunicar como se estivessem em uma rede local. Também demonstraremos como usar o tinc para configurar um túnel seguro em uma rede privada. Usaremos servidores Ubuntu 18.04, mas as configurações podem ser adaptadas para uso com qualquer outro sistema operacional.

Metas

Para cobrir vários casos de uso, este tutorial descreve como conectar um nó cliente à VPN por uma interface de rede privada e outro por uma pública. No entanto, você pode adaptar essa configuração para atender às suas próprias necessidades. Você só precisa planejar como deseja que seus servidores acessem um ao outro e adaptar os exemplos apresentados neste tutorial às suas próprias necessidades. Se você estiver adaptando isso à sua própria configuração, substitua os valores destacados nos exemplos por seus próprios valores. Pode ser do seu interesse, no entanto, seguir primeiro o tutorial, como está escrito, para garantir que você entenda os componentes e processos envolvidos antes de modificar essas instruções.

Para ajudar a manter as coisas claras, este tutorial fará referência a servidores como este:

  • server-01 : Todos os nós da VPN se conectam a esta máquina e a conexão deve ser mantida para a funcionalidade VPN adequada. Servidores adicionais podem ser configurados da mesma maneira que este para fornecer redundância, se desejado
  • client-01 : conecta-se ao nó da VPN server-01 usando sua interface de rede privada
  • client-02 : conecta-se ao nó VPN server-01 pela interface de rede pública

Nota : O próprio Tinc não diferencia entre servidores (máquinas que hospedam e fornecem serviços VPN) e clientes (as máquinas que se conectam e usam a rede privada segura), mas pode ser útil entender e visualizar como o tinc funciona, pensando em seus servidores assim.

Aqui está um diagrama da VPN que queremos configurar:

Configuração da VPN Tinc

A caixa azul representa nossa VPN e o rosa representa a rede privada subjacente. Todos os três servidores podem se comunicar na VPN, mesmo que a rede privada seja inacessível ao cliente-02 .

Pré-requisitos

Se você deseja seguir exatamente este tutorial, provisione dois servidores Ubuntu 18.04 ( server-01 e client-01 ) no mesmo datacenter e ative a rede privada em cada um. Em seguida, crie outro servidor Ubuntu 18.04 ( client-02 ) em um datacenter separado. Cada servidor deve ter um usuário administrativo e um firewall configurado com ufwPara configurar isso, siga nosso guia inicial de configuração do servidor para o Ubuntu 18.04 .

Além disso, mais adiante neste tutorial, precisaremos transferir alguns arquivos entre cada máquina usando scpDevido a isso, você precisa gerar chaves SSH em cada um dos servidores, adicione ambos cliente-01 e cliente-02 ‘chaves SSH s para servidor-01 ‘s authorized_keysarquivo, e depois adicionar servidor-01 ‘s chaves SSH para ambos cliente-01 e cliente-02 ‘s authorized_keysarquivos. Para obter ajuda na configuração, consulte nosso guia sobre Como configurar chaves SSH no Ubuntu 18.04 .

Etapa 1 - Instalando o Tinc

O Tinc está disponível nos repositórios padrão do Ubuntu APT, o que significa que podemos instalá-lo com apenas alguns comandos.

Se você não fez isso recentemente, execute o seguinte comando em cada servidor para atualizar seus respectivos índices de pacotes:

Todos os servidores
  • sudo apt update

Em seguida, instale o tinc em cada servidor executando o seguinte comando:

Todos os servidores
  • sudo apt install tinc

Com isso, você instalou o tinc em cada um de seus servidores. No entanto, você precisará fazer algumas alterações na configuração do tinc em cada máquina para colocar sua VPN em funcionamento. Vamos começar com a atualização do server-01 .

Etapa 2 - Configurando o Tinc Server

O Tinc exige que todas as máquinas que farão parte da VPN tenham os três componentes de configuração a seguir:

  • Arquivos de configuração do Tinc : Existem três arquivos distintos que configuram o daemon do tinc:
    • tinc.conf, que define o nome da rede, o dispositivo de rede no qual a VPN será executada e outras opções da VPN;
    • tinc-up, um script que ativa o dispositivo de rede definido tinc.confapós o início do tinc;
    • tinc-down, que desativa o dispositivo de rede sempre que o tinc pára.
  • Pares de chaves públicas / privadas : o Tinc usa pares de chaves públicas / privadas para garantir que apenas usuários com chaves válidas possam acessar a VPN.
  • Arquivos de configuração do host : cada máquina (ou host) na VPN tem seu próprio arquivo de configuração que contém o endereço IP real do host e a sub-rede onde o tinc o servirá.

Tinc usa um nome de rede para distinguir uma VPN de tinc de outra. Isso é útil nos casos em que você deseja configurar várias VPNs, mas é recomendável que você use um nome de rede, mesmo que esteja pensando apenas em configurar uma VPN. Você pode dar à sua VPN o nome de rede que quiser, mas, por simplicidade, chamaremos nossa VPN netname.

No server-01 , crie a estrutura de diretórios de configuração para a VPN:

server-01
  • sudo mkdir -p /etc/tinc/netname/hosts

Use seu editor de texto preferido para criar um tinc.confarquivo. Aqui, usaremos nano:

server-01
  • sudo nano /etc/tinc/netname/tinc.conf

Adicione as seguintes linhas ao arquivo vazio. Eles configuram um nó tinc nomeado server_01com uma interface de rede chamada tun0que usará o IPv4:

server-01: /etc/tinc/netname/tinc.conf
Name = server_01
AddressFamily = ipv4
Interface = tun0

Aviso: Observe como o valor após a Namediretiva inclui um sublinhado ( _) em vez de um hífen ( -). Isso é importante, pois o tinc exige que o Namevalor contenha apenas caracteres alfanuméricos ou sublinhados. Se você usar um hífen aqui, encontrará um erro ao tentar iniciar a VPN posteriormente neste guia.

Salve e feche o arquivo depois de adicionar essas linhas. Se você usou nano, fazê-lo pressionando CTRL+XYe, em seguida ENTER.

Em seguida, crie um arquivo de configuração do host nomeado server_01no hostssubdiretório. Por fim, os nós do cliente usarão esse arquivo para se comunicar com o server-01 :

server-01
  • sudo nano /etc/tinc/netname/hosts/server_01

Novamente, observe que o nome desse arquivo contém um sublinhado em vez de um hífen. Dessa forma, ele se alinha à Namediretiva no tinc.confarquivo, que permitirá que o tinc acrescente automaticamente a chave pública RSA do servidor a esse arquivo quando gerarmos mais tarde.

Adicione as seguintes linhas ao arquivo, certificando-se de incluir o endereço IP público do server-01 :

server-01: / etc / tinc / netname / hosts / server_01
Address = server-01_public_IP_address
Subnet = 10.0.0.1/32

Addresscampo especifica como outros nós se conectarão a este servidor e Subnetespecifica qual sub-rede esse daemon servirá. Salve e feche o arquivo.

Em seguida, gere um par de chaves RSA públicas e privadas para este host com o seguinte comando:

server-01
  • sudo tincd -n netname -K4096

Após executar este comando, você será solicitado a digitar os nomes dos arquivos em que o tinc salvará as chaves RSA públicas e privadas:

Output
. . .
Please enter a file to save private RSA key to [/etc/tinc/netname/rsa_key.priv]: 
Please enter a file to save public RSA key to [/etc/tinc/netname/hosts/server_01]: 

Pressione ENTERpara aceitar os locais padrão em cada prompt; isso fará com que o tinc armazene a chave privada em um arquivo nomeado rsa_key.prive adicione a chave pública ao server_01arquivo de configuração do host.

Em seguida, crie tinc-upo script que será executado sempre que a netnameVPN for iniciada:

server-01
  • sudo nano /etc/tinc/netname/tinc-up

Adicione as seguintes linhas:

server-01: / etc / tinc / netname / tinc-up
#!/bin/sh
ip link set $INTERFACE up
ip addr add 10.0.0.1/32 dev $INTERFACE
ip route add 10.0.0.0/24 dev $INTERFACE

Aqui está o que cada uma dessas linhas faz:

  • ip link …: define o status da interface de rede virtual do tinc como up
  • ip addr …: adiciona o endereço IP 10.0.0.1com uma máscara de 32rede à interface de rede virtual do tinc, o que fará com que as outras máquinas na VPN vejam o endereço IP do servidor-01 como10.0.0.1
  • ip route …: adiciona uma rota ( 10.0.0.0/24) que pode ser acessada na interface de rede virtual do tinc

Salve e feche o arquivo depois de adicionar essas linhas.

Em seguida, crie um script para remover a interface de rede virtual quando sua VPN estiver parada:

server-01
  • sudo nano /etc/tinc/netname/tinc-down

Adicione as seguintes linhas:

server-01: / etc / tinc / netname / tinc-down
#!/bin/sh
ip route del 10.0.0.0/24 dev $INTERFACE
ip addr del 10.0.0.1/32 dev $INTERFACE
ip link set $INTERFACE down

Essas linhas têm efeitos opostos aos do tinc-upscript:

  • ip route …: exclui a 10.0.0.0/24rota
  • ip addr …: exclui o endereço IP 10.0.0.1da interface de rede virtual do tinc
  • ip link …: define o status da interface de rede virtual do tinc como down

Salve e feche o arquivo e, em seguida, torne esses dois novos scripts de rede executáveis:

server-01
  • sudo chmod 755 /etc/tinc/netname/tinc-*

Como etapa final da configuração do server-01 , adicione uma regra de firewall que permita o tráfego pela porta 655, a porta padrão do tinc:

server-01
  • sudo ufw allow 655

server-01 agora está totalmente configurado e você pode prosseguir para configurar os nós do cliente.

Etapa 3 - Configurando os nós do cliente

As duas máquinas clientes exigirão uma configuração ligeiramente diferente da do servidor, embora o processo geralmente seja bastante semelhante.

Devido à configuração que pretendemos neste guia, configuraremos o cliente-01 e o cliente-02 quase de forma idêntica, com apenas algumas pequenas diferenças entre eles. Portanto, muitos dos comandos dados nesta etapa devem ser executados nas duas máquinas. Observe, porém, que se o cliente-01 ou o cliente-02 exigir um comando específico ou uma configuração especial, essas instruções serão mostradas em um bloco de comandos em azul ou vermelho, respectivamente.

No cliente 01 e no cliente 02 , replique a estrutura de diretórios criada no servidor 01 :

cliente-01 e cliente-02
  • sudo mkdir -p /etc/tinc/netname/hosts

Em seguida, crie um tinc.confarquivo:

cliente-01 e cliente-02
  • sudo nano /etc/tinc/netname/tinc.conf

Adicione as seguintes linhas ao arquivo nas duas máquinas:

client-01 & client-02 /etc/tinc/netname/tinc.conf
Name = node_name
AddressFamily = ipv4
Interface = tun0
ConnectTo = server_01

Substitua node_namepelo nome do respectivo nó do cliente. Novamente, verifique se esse nome usa sublinhado ( _) em vez de hífen.

Observe que este arquivo contém uma ConnectTodiretiva apontando para server_01, enquanto arquivo do server-01tinc.conf não incluiu essa diretiva. Ao não incluir uma ConnectTodeclaração no servidor-01 , significa que o servidor-01 apenas escutará as conexões de entrada. Isso funciona para a nossa configuração, pois não se conecta a nenhuma outra máquina.

Salve e feche o arquivo.

Em seguida, crie um arquivo de configuração do host em cada nó do cliente. Novamente, verifique se o nome do arquivo está escrito com um sublinhado em vez de um hífen:

cliente-01 e cliente-02
  • sudo nano /etc/tinc/netname/hosts/node_name

Para client-01 , adicione esta linha:

client-01: / etc / tinc / netname / hosts / client_01
Subnet = 10.0.0.2/32

Para o cliente-02 , adicione esta linha:

client-02: / etc / tinc / netname / hosts / client_02
Subnet = 10.0.0.3/32

Observe que cada cliente tem uma sub-rede diferente que o tinc servirá. Salve e feche o arquivo.

Em seguida, gere os pares de chaves em cada máquina cliente:

cliente-01 e cliente-02
  • sudo tincd -n netname -K4096

Novamente, como você fez com o server-01, quando solicitado a selecionar arquivos para armazenar as teclas RSA, pressione ENTERpara aceitar as opções padrão.

Em seguida, crie o script inicial da interface de rede em cada cliente:

cliente-01 e cliente-02
  • sudo nano /etc/tinc/netname/tinc-up

Para client-01 , adicione estas linhas:

client-01: / etc / tinc / netname / tinc-up
#!/bin/sh
ip link set $INTERFACE up
ip addr add 10.0.0.2/32 dev $INTERFACE
ip route add 10.0.0.0/24 dev $INTERFACE

Para o cliente-02 , adicione o seguinte:

client-02: / etc / tinc / netname / tinc-up
#!/bin/sh
ip link set $INTERFACE up
ip addr add 10.0.0.3/32 dev $INTERFACE
ip route add 10.0.0.0/24 dev $INTERFACE

Salve e feche cada arquivo.

Em seguida, crie o script de parada da interface de rede em cada cliente:

cliente-01 e cliente-02
  • sudo nano /etc/tinc/netname/tinc-down

No cliente-01 , adicione o seguinte conteúdo ao arquivo vazio:

client-01: / etc / tinc / netname / tinc-down
#!/bin/sh
ip route del 10.0.0.0/24 dev $INTERFACE
ip addr del 10.0.0.2/32 dev $INTERFACE
ip link set $INTERFACE down

No cliente-02 , adicione o seguinte:

client-02: / etc / tinc / netname / tinc-down
#!/bin/sh
ip route del 10.0.0.0/24 dev $INTERFACE
ip addr del 10.0.0.3/32 dev $INTERFACE
ip link set $INTERFACE down

Salve e feche os arquivos.

Torne os scripts de rede executáveis ​​executando o seguinte comando em cada máquina cliente :

cliente-01 e cliente-02
  • sudo chmod 755 /etc/tinc/netname/tinc-*

Por fim, abra a porta 655 em cada cliente :

cliente-01 e cliente-02
  • sudo ufw allow 655

Nesse ponto, os nós do cliente estão quase, embora não totalmente, configurados. Eles ainda precisam da chave pública que criamos no servidor-01 na etapa anterior para autenticar a conexão com a VPN.

Etapa 4 - Distribuindo as chaves

Cada nó que deseja se comunicar diretamente com outro nó deve ter trocado chaves públicas, que estão dentro dos arquivos de configuração do host. No nosso caso, o server-01 precisa trocar chaves públicas com os outros nós.

Trocar chaves entre server-01 e client-01

No cliente-01 , copie seu arquivo de configuração do host para o servidor-01 . Como o cliente-01 e o servidor-01 estão no mesmo datacenter e ambos têm a rede privada ativada, você pode usar o endereço IP privado do server01 aqui:

client-01
  • scp /etc/tinc/netname/hosts/client_01 sammy@server-01_private_IP:/tmp

Em seguida, no server-01 , copie o client-01arquivo de configuração do host no diretório:/etc/tinc/netname/hosts/

server-01
  • sudo cp /tmp/client_01 /etc/tinc/netname/hosts/

Em seguida, enquanto ainda estiver no server-01 , copie seu arquivo de configuração do host para o client-01 :

server-01
  • scp /etc/tinc/netname/hosts/server_01 user@client-01_private_IP:/tmp

No cliente 01 , copie o arquivo do servidor 01 para o local apropriado:

client-01
  • sudo cp /tmp/server_01 /etc/tinc/netname/hosts/

No cliente-01 , edite o arquivo de configuração de host do servidor-01 para que o Addresscampo seja definido como o endereço IP privado do servidor-01 . Dessa forma, o cliente-01 se conectará à VPN através da rede privada:

client-01
  • sudo nano /etc/tinc/netname/hosts/server_01

Alterar a Addressdirectiva para apontar para servidor-01 é privado endereço IP:

client-01: / etc / tinc / netname / hosts / server_01
Address = server-01_private_IP
Subnet = 10.0.0.1/32

Salve e saia. Agora vamos para o nó restante, client-02 .

Trocar chaves entre server-01 e client-02

No cliente-02 , copie seu arquivo de configuração do host para o servidor-01 :

client-02
  • scp /etc/tinc/netname/hosts/client_02 sammy@server-01_public_IP:/tmp

Em seguida, no server-01 , copie o client_02arquivo de configuração do host no local apropriado:

server-01
  • sudo cp /tmp/client_02 /etc/tinc/netname/hosts/

Em seguida, copie o arquivo de configuração do servidor-01 para o cliente-02 :

server-01
  • scp /etc/tinc/netname/hosts/server_01 user@client-02_public_IP:/tmp

No cliente 02 , copie o arquivo do servidor 01 para o local apropriado:

client-02
  • sudo cp /tmp/server_01 /etc/tinc/netname/hosts/

Supondo que você esteja configurando apenas dois nós clientes, você terminou de distribuir chaves públicas. Se, no entanto, você estiver criando uma VPN maior, agora é um bom momento para trocar as chaves entre esses outros nós. Lembre-se de que, se você deseja que dois nós se comuniquem diretamente entre si (sem um servidor de encaminhamento entre eles), eles precisam ter trocado seus arquivos de configuração de chaves / hosts e precisam poder acessar as interfaces de rede reais um do outro. Além disso, é bom copiar apenas o arquivo de configuração de cada host para cada nó na VPN.

Etapa 5 - Testando a configuração

Em cada nó, começando com server-01 , inicie o tinc com o seguinte comando:

Todos os servidores
  • sudo tincd -n netname -D -d3

Este comando inclui a -nbandeira, que aponta para o nome da rede da nossa VPN netname,. Isso é útil se você tiver mais de uma VPN configurada e precisar especificar qual deseja iniciar. Ele também inclui a -Dbandeira, que evita que o tinc bifurque e desconecte, além de desativar o mecanismo de reinício automático do tinc. Por fim, inclui a -dflag, que informa ao tinc para executar no modo de depuração, com um nível de depuração de 3.

Nota: Quando se trata do daemon tinc, um nível de depuração 3mostrará todas as solicitações trocadas entre dois servidores, incluindo solicitações de autenticação, trocas de chaves e atualizações da lista de conexões. Níveis mais altos de depuração mostram mais informações sobre o tráfego de rede, mas, por enquanto, estamos preocupados apenas com a possibilidade de os nós se comunicarem entre si, portanto, um nível 3será suficiente. No entanto, em um cenário de produção, você deseja alterar para um nível de depuração mais baixo para não preencher discos com arquivos de log.

Você pode aprender mais sobre os níveis de depuração do tinc revisando a documentação oficial .

Após iniciar o daemon em cada nó, você deverá ver a saída com os nomes de cada nó conforme eles se conectam ao server-01 . Agora vamos testar a conexão pela VPN.

Em uma janela separada, no cliente-02 , execute o ping no endereço IP da VPN do cliente-01 . Atribuímos isso 10.0.0.2antes:

client-02
  • ping 10.0.0.2

O ping deve funcionar corretamente e você deve ver algumas saídas de depuração nas outras janelas sobre a conexão na VPN. Isso indica que o cliente-02 é capaz de se comunicar pela VPN através do servidor-01 para o cliente-01 . Pressione CTRL+Cpara sair do ping.

Você também pode usar as interfaces VPN para realizar qualquer outra comunicação de rede, como conexões de aplicativos, cópia de arquivos e SSH.

Em cada janela de depuração do daemon tinc, feche o daemon pressionando CTRL+\.

Etapa 6 - Configurando o Tinc para iniciar na inicialização

Os servidores Ubuntu usam systemdcomo o gerenciador de sistema padrão para controlar os processos de inicialização e execução. Por esse motivo, podemos ativar a netnameVPN para iniciar automaticamente na inicialização com um único systemctlcomando.

Execute o seguinte comando em cada nó para configurar a VPN tinc para iniciar sempre que as máquinas inicializarem:

Todos os servidores
  • sudo systemctl enable tinc@netname

O Tinc está configurado para iniciar na inicialização em cada uma de suas máquinas e você pode controlá-lo com o systemctlcomando Se você deseja iniciá-lo agora, execute o seguinte comando em cada um de seus nós:

Todos os servidores
  • sudo systemctl start tinc@netname

Nota : Se você tiver várias VPNs, ative ou inicie cada uma delas de uma vez, assim:

Todos os servidores
  • sudo systemctl start tinc@natename_01 tinc@netname_02 … tinc@netname_n

Com isso, sua VPN totalmente configurada e em execução em cada um de seus nós.

Conclusão

Agora que você passou por este tutorial, deve ter uma boa base para criar sua VPN para atender às suas necessidades. O Tinc é muito flexível e qualquer nó pode ser configurado para conectar-se a qualquer outro nó (que ele possa acessar pela rede), para que possa atuar como uma VPN de malha sem depender de um nó individual.

Esta resposta lhe foi útil?