Instalar uma VPN com Tinc no Ubuntu 16.04 LTS

 

Uma rede privada Virtual (VPN) é uma rede privada segura que opera em uma rede pública como a internet. VPNs tornaram-se cada vez mais populares nos últimos anos, em grande parte porque eles oferecem maior segurança e privacidade, sem a necessidade de criação de um novo hardware caro e complexo. Eles também oferecem várias outras vantagens, incluindo os custos de rede e suporte reduzidos.

VPNs de trabalho através da criação de um túnel criptografado através de uma rede pública, e usar isso para enviar dados com segurança entre servidores e terminais. Estas ligações podem ser criptografados em uma variedade de maneiras, e há muitos clientes VPN diferentes e daemons de acordo com sua arquitetura, orçamento, e nível de experiência.

Tinc é uma tal solução (1,2). Uma VPN daemon open-source, está agora disponível para uma ampla gama de plataformas, e tem várias vantagens sobre os clientes VPN semelhantes. Ele oferece criptografia segura e confiável, compressão opcional, e é facilmente expansível como sua rede cresce. O roteamento automático malha completa significa que o tráfego VPN é sempre (sempre que possível) enviada diretamente para a máquina de destino, sem sofrer transferência intermédios, e isso melhora muito a segurança, limitando a possibilidade de roubo de dados (3). Além disso, porque a VPN Tinc parece o código de rede de nível IP como um dispositivo de rede normal, depois de configurar uma VPN Tinc não há necessidade de adaptar o software existente. Isso faz com que a VPN Tinc inerentemente escalável.

A única questão menor com Tinc é que algumas pessoas têm encontrado um pouco complicado para configurar. Se isso soa como você, nunca medo - hoje eu vou levá-lo com uma maneira (mais ou menos) sem problemas de obtenção de um VPN Tinc instalado e funcionando em seus servidores.

Pré-Requisitos

Para seguir este tutorial totalmente, você vai precisar de pelo menos três Ubuntu 16.04 servidores, e acesso root, em cada máquina. Se você não tem isso ou não tem certeza do que isso significa, este tutorial não é para você - você deve primeiro verificar como configurar um servidor usando o Ubuntu (4).

Se você está construindo um sistema de servidor a partir do zero, você primeiro precisa pensar sobre como suas máquinas estão indo para se comunicar uns com os outros. Neste tutorial, Vou usar os nomes de variáveis ​​que eu acho que a maioria das pessoas iria escolher, mas estar ciente de que poderá ser necessário adaptar alguns dos nomes de variáveis ​​de acordo com sua própria configuração.

Se você quiser seguir este tutorial exatamente, você está indo para primeiro precisa configurar dois VPSs no mesmo datacenter, e, em seguida, fazer um terceiro VPS em um segundo data center. Meus centros de dados são chamados nyc2, que tem os dois VPSs, e AMS2, que tem o terceiro. Estes VPSs são chamados a seguinte:

externalnyc - Todos os nossos nós VPN irá conectar a este servidor, o que significa que ele deve ficar ligado e disponível para assegurar as funções de rede corretamente. Se você eventualmente quiser adicionar servidores extra para o seu set up, eles terão de ser configurado da mesma forma como externalnyc.

internalnyc - Este VPS se conecta ao nó VPN externalnyc usando uma interface de rede privada.

AMS1 - Esta é a nossa conexão VPN pública. Ele se conecta a externalnyc usando a internet pública.

Objetivo

O que queremos alcançar é o seguinte:

Nossa rede privada é representada pela linha verde, e conecta todos os três servidores. A laranja é a nossa rede privada, interligando os dois servidores nyc2. Todos os três servidores podem se conectar por meio da VPN, embora a rede privada não é acessível a AMS1.

Para fazer isso, Siga estas etapas:

eu instalo

Primeiro, precisamos instalar Tinc. Como sempre, certificar-se de todos os seus repositórios apt estão atualizados com o comando:

sudo apt-get update

Em seguida, instale Tinc da maneira padrão através apt:

sudo apt-get install I

E é isso! O aparelho irá baixar Tinc, além de quaisquer pré-requisitos que você precisa. Agora precisamos ter um olhar para a configuração.

Configuração

Configurando Tinc pode ser um pouco diferente das outras VPNs que você está acostumado. Ele usa um “netname” para distinguir uma VPN de outro, Isto torna-se muito útil quando você tem vários VPNs que atravessam Tinc, mas é um pouco contra-intuitivo à primeira. Uma vez que esta é a nossa primeira rede Tinc, vamos mantê-lo simples e chamar a nossa VPN “netname”.

Agora, para cada um dos nossos servidores. Cada um vai precisar de três componentes de configuração:

Os arquivos de configuração: tinc.conf, meu-up, I-down, e um número opcional de outros arquivos.

pares de chaves públicas e privadas: estes são para criptografia e autenticação.

Hospedar arquivos de configuração: Estes contêm chaves públicas, e outros elementos de configuração VPN.

Vamos agora configurar cada um dos nossos servidores, por sua vez. Primeiro, externalnyc.

configurar externalnyc

Okey, agora para as porcas e parafusos. em externalnyc, começar por criar a estrutura de diretório de configuração para o netname VPN. Execute:

sudo mkdir -p / etc / I / netname / hosts

tinc.conf agora aberto no seu editor de texto escolhido:

sudo vi /etc/tinc/netname/tinc.conf

Assim que tiver o arquivo na frente de você, adicione o seguinte ao final do arquivo:

Name = externalnyc
AddressFamily = ipv4
Interface = tun0

Tudo o que você está fazendo aqui é para configurar um nó chamado externalnyc, e dizer ao servidor que é interface de rede irá utilizar IPv4 e ser chamado de “tun0”. Salve o arquivo., e fechá-lo.

Próximo, precisamos criar um arquivo de configuração de host para externalnyc. Para fazer isso, abra o arquivo de configuração de hosts em um editor de texto:

sudo vi / etc / I / netname / hosts / externalnyc

Mais uma vez, adicionar algumas linhas para a parte inferior deste arquivo, substituindo o endereço IP público de seu VPS na primeira linha:

Address = externalnyc_public_IP
Subnet = 10.0.0.1/32

Este é o arquivo que outros servidores irão utilizar para ligar externalnyc. O endereço diz outros nós como e onde se conectar a este servidor, eo endereço de sub-rede é a sub-rede que este daemon funcionará em. Mais uma vez, salvar as alterações a este arquivo e fechá-lo.

Agora precisamos gerar o público / par chave privada para este alojamento. Isso é fácil, Basta execute:

sudo tincd -n netname -K4096

Isso faz com que uma chave RSA privada, e adiciona um par de chaves pública até o fim do arquivo de configuração que acabamos de criar. Você pode abri-lo novamente para ver que isso tenha sido feito, Se você gosta.

Agora, nós precisamos fazer tinc-up, um pequeno script que será executado quando o nosso VPN é iniciado. Abra o seguinte arquivo para edição:

sudo vi / etc / I / netname / my-up

E adicione:

#!/bin/sh
ifconfig $INTERFACE 10.0.0.1 máscara de rede 255.255.255.0

Sempre que o netname VPN é iniciado, esse script será executado. Isso fará com que uma interface de rede a ser usado pelo nosso VPN, e sobre esta externalnyc VPN terá um IP 10.0.0.1.

Mas quando a VPN está parado, queremos que essa interface de rede a desaparecer, por isso precisamos de mais um roteiro. Isto deve ser anexado ao tinc-down. Aberto:

sudo vi / etc / I / netname / I-down

E, em seguida, acrescentar:

#!/bin/sh
ifconfig $INTERFACE down

E mais uma vez salvar e sair. Agora temos nossos scripts, mas para que eles trabalhem eles precisam ser sinalizado como executável. Isso é fácil, usando a linha de comando:

sudo chmod 755 /etc / I / netname / * tinc-

Salvar e sair, e de ter configurado este servidor. Próximo, internalnyc e AMS1.

Configurar internalnyc e AMS1

Para configurar os dois servidores restantes, você precisa executar os mesmos comandos em cada máquina. Existem algumas pequenas variações, que vou salientar, mas o processo é basicamente a mesma.

Como fizemos com externalnyc acima, primeiro precisamos fazer a estrutura de diretórios para os nossos arquivos de configuração. Em cada servidor, execute o seguinte, e em seguida, abra o arquivo de configuração Tinc para edição:

sudo mkdir -p / etc / I / netname / hosts
sudo vi /etc/tinc/netname/tinc.conf

Em seguida, adicionar algumas linhas para a parte inferior deste arquivo, substituindo “node_name” com o nome de cada nó:

Name = node_name
AddressFamily = ipv4
Interface = tun0
ConnectTo = externalnyc

Você pode ver que ambos os nossos servidores estão agora configurado para tentar ligar a externalnyc. Salve este arquivo, e fechá-lo.

Agora precisamos fazer o arquivo de configuração de hosts. Execute:

sudo vi / etc / I / netname / hosts / node_name

Então, para internalnyc, adicione esta linha:

sub-rede = 10.0.0.2/32

E para AMS1, adicione esta linha:

sub-rede = 10.0.0.3/32

A única diferença aqui é que os endereços diferentes, para que possamos dizer aos nossos servidores separados. Salve este arquivo, e fechá-lo.

Agora, Assim como antes, precisamos gerar nosso público / pares de chaves privadas, e criar a interface de rede iniciar roteiro. Em cada servidor, Execute:

sudo tincd -n netname -K4096

E então:

sudo vi / etc / I / netname / my-up

Agora. Para cada servidor, precisamos usar os endereços de nós especificados anteriormente. Se você está me seguindo precisamente, para internalnyc você precisa adicionar:

ifconfig $ INTERFACE 10.0.0.2 máscara de rede 255.255.255.0

E para AMS1:

ifconfig $ INTERFACE 10.0.0.3 máscara de rede 255.255.255.0

Mas, se tiver especificado endereços diferentes acima, mudá-los aqui também. Salve esses arquivos, e sair. Estamos quase lá.

Nós apenas precisamos de fazer o script de interface parada rede, Assim como antes:

sudo vi / etc / I / netname / I-down

E em seguida, adicione essa linha em ambos os servidores:

ifconfig $ INTERFACE baixo

E o último bit de configuração é fazer com que nossos novos scripts executável:

sudo chmod 755 /etc / I / netname / * tinc-

Salvar e sair. Ufa. Se tudo correu bem, três servidores são agora configurado. Agora, para implementar a criptografia.

distribuir Chaves

Se você já estiver usando um sistema de gerenciamento de configuração, Você está com sorte. Em um mundo ideal, cada nó que agora temos feito precisa ser capaz de falar diretamente com outro nó usando um público / interface de chave privada. As chaves, como vimos acima, agora estão nos arquivos de configuração de hosts para cada servidor. Na rede simples que estamos a fazer aqui, na verdade apenas externalnyc precisa trocar chaves com os outros nós.

E então, a maneira mais fácil de fazer isso é simplesmente para copiar cada chave pública para todos os membros dos vários nós. Isso é realmente muito fácil, só tome cuidado para alterar o valor “endereço” no arquivo de configuração do externalnyc para seu próprio endereço IP privado quando você copiá-lo. Dessa forma, a conexão será estabelecida através da rede privada.

Se você me seguiu e chamou o seu VPN “netname”, os arquivos de configuração de hosts está aqui: / etc / tinc / netname / hosts

Chaves intercâmbio entre externalnyc e internalnyc

Este é simples. em internalnyc, encontrar o arquivo de configuração de hosts e copiá-lo para externalnyc:

scp / etc / I / netname / hosts / internalnyc [email protegido]_private_IP: / tmp

Em seguida, em externalnyc, copiar o mesmo arquivo para o local adequado:

cd / etc / I / netname / hosts; sudo cp / tmp / internalnyc .

Agora vamos fazer o procedimento oposto. em externalnyc, copiar o arquivo de configuração de hosts para internalnyc:

scp / etc / I / netname / hosts / externalnyc [email protegido]_private_IP: / tmp

E, em seguida internalnyc copiar o arquivo para que ele está no lugar certo:

cd / etc / I / netname / hosts; sudo cp / tmp / externalnyc .

Agora precisamos editar o arquivo de configuração de hosts de externalnyc em internalnyc assim que o endereço está correto. Isto é assim que os nós irá se conectar à VPN através da rede privada. Então, em internalnyc, abra o arquivo de configuração de hosts para externalnyc:

sudo vi / etc / I / netname / hosts / externalnyc

E altere o valor do endereço para o endereço IP privado do externalnyc, Assim:

Address = externalnyc_private_IP

Salve o arquivo., e sair. Isso é essas duas chaves feito. Agora só precisamos de trocar chaves com nosso um nó restante.

Chaves intercâmbio entre externalnyc e AMS1

O processo aqui é muito semelhante. usando AMS1, copiar o arquivo de configuração de hosts para externalnyc:

scp / etc / I / netname / hosts / AMS1 [email protegido]_public_IP: / tmp

E então, novamente copiá-lo para o lugar certo, usando externalnyc:

cd / etc / I / netname / hosts; sudo cp / tmp / AMS1 .

Ficar em externalnyc, copiar o arquivo para o outro lado, em toda a AMS1:

scp / etc / I / netname / hosts / externalnyc [email protegido]_public_IP: / tmp

E mais uma vez, é AMS1, copiar este arquivo para que ele está no lugar certo:

cd / etc / I / netname / hosts; sudo cp / tmp / externalnyc .

E você é feito com troca de chaves. Em teoria, agora você tem um trabalho, VPN encriptado através Tinc. Se você seguiu este tutorial para a letra, você pode passar para testar sua configuração. Se, no entanto, você também tenha tido a oportunidade de adicionar nós extras, agora é um bom momento para a troca de todas as chaves que você vai precisar.

Lembre-se que se você estiver usando um nó central, como eu estou fazendo aqui, você não precisa copiar todas as chaves para todos os servidores. Entanto, se você quiser nós para ser capaz de falar diretamente uns aos outros, eles terão de trocar chaves. O processo para fazer isso é o mesmo que eu descrevi acima - basta fazer o maior número de iterações que você precisa para alcançar a sua conectividade desejada.

Teste

Agora você deve estar pronto para testar. Para fazer isso, é uma boa idéia para começar Tinc no modo de depuração, para que possamos detectar quaisquer erros e obter mais algumas informações, se alguma coisa der errado. Lembre-se que uma VPN mal configurado pode realmente ser um risco de segurança, portanto certifique-se tudo funciona corretamente antes de você começar a usar o VPN para qualquer coisa importante.

Para iniciar Tinc no modo de depuração, em cada nó, começando com externalnyc, Execute:

sudo tincd -n netname -D-D3

Se você chamou o seu VPN algo diferente, É claro, alterar a variável “netname” para o nome apropriado.

Após o daemon inicia em cada nó, ele deve retornar saída dando-lhe o nome de cada nó como eles se conectam. Se isso não acontecer., que cometeu um erro em algum lugar.

Agora, podemos testar a VPN. Em uma nova janela sobre AMS1, de ping internalnyc usando seu endereço IP. Nós atribuímos isso 10.0.0.2 cedo, então digite:

ping 10.0.0.2

Espero que, seu ping irá funcionar. Você também deve ver alguns saída de depuração na outra janelas, descrevendo as conexões que você acabou de fazer. AMS1 está agora ligado, através de sua nova VPN, para externalnyc, e pode se conectar a internalnyc através dele. Pressione CTRL-C e o ping vai parar.

Agora você tem uma conexão VPN segura, você pode usá-lo para qualquer outro tipo de comunicação de rede - conexões de aplicativos, cópia de arquivos, SSH, ou qualquer outra coisa que você gosta.

Se seu ping não funcionou, mas você acha que fez tudo certo, pode ser que um firewall ficou no caminho. Verifique suas configurações de firewall, e tente novamente.

Onde eu Inicializar

Só uma última coisa. Se você está indo agora para usar o seu Tinc VPN para todas as suas redes, você pode querer configurá-lo para inicialização no arranque. Você precisará fazer isso em cada nó, editando o arquivo de configuração nets.boot. Abra o arquivo usando:

sudo vi /etc/tinc/nets.boot

E, em seguida, adicione o nome do seu novo VPN para este arquivo. Se você escolheu “netname” como eu, este será parecido com o seguinte:

# Este arquivo contém todos os nomes das redes a ser iniciado na inicialização do sistema.
netname

Salvar e sair, e já está. Tinc está trabalhando agora, e vai começar na inicialização. Bem feito você.

Se você precisa controlar Tinc, Agora você pode executar o comando “serviço” a fazê-lo. Em cada nó, Basta execute:

Eu iniciar o serviço sudo

E ter um jogo ao redor. Mais controle básico pode ser alcançado através deste comando.

Conclusão

Agora você deve ter uma conexão VPN segura que atravessa Tinc em todas as suas máquinas. Este VPN pode ser usado como uma base para construir-se ainda mais a funcionalidade da rede.

Se você quiser adicionar mais nós no futuro, ou combinar Tinc com outras VPNs, Tinc lhe permitirá fazer isso. O processo para cada nó extra é o mesmo que eu descrevi acima, e você deve ser capaz de ver facilmente quais variáveis ​​e endereços precisam mudar. Basta lembrar que se você quiser nós para ser capaz de se conectar diretamente uns aos outros, você precisará trocar chaves entre eles diretamente. Assim, Tinc opera como uma rede VPN, que é um pouco mais seguro do que a minha abordagem (3). Caso contrário, você pode apenas configurar sua rede como eu fiz, e tem tudo passando por um nó central.

De qualquer maneira, agora você é livre para brincar. Boa sorte!

Recursos

(1) https://www.tinc-vpn.org/

(2) https://www.linux.com/news/creating-vpn-tinc

(3) https://thebestvpn.com/cryptography/

(4) https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04

Fonte