L'installazione di una VPN con Tinc su Ubuntu 16.04 LTS

 

Una rete privata virtuale (VPN) è una rete privata protetta che opera in una più grande rete pubblica come internet. Le VPN sono diventati sempre più popolari negli ultimi anni, in gran parte perché offrono una maggiore sicurezza e privacy, senza la necessità per l'impostazione di costosi e complessi nuovo hardware. Offrono anche diversi altri vantaggi, compresi i costi di rete e di supporto ridotti.

VPN lavoro creando un tunnel cifrato attraverso una rete pubblica, e l'utilizzo di questa opzione per inviare in modo sicuro i dati tra server e terminali. Queste connessioni possono essere crittografati in una varietà di modi, e ci sono molti diversi client VPN e demoni per soddisfare la vostra architettura, bilancio, e livello di esperienza.

Tinc è una tale soluzione (1,2). Un demone VPN open-source, è ora disponibile per una vasta gamma di piattaforme, e ha diversi vantaggi rispetto client VPN simili. Esso offre la crittografia sicura e affidabile, compressione facoltativa, ed è facilmente espandibile come la rete cresce. L'instradamento automatico a maglia piena significa che il traffico VPN è sempre (quando possibile) inviato direttamente alla macchina di destinazione, senza subire trasferimenti intermedi, e questo migliora notevolmente la sicurezza, limitando la possibilità di furto di dati (3). Inoltre, perché la VPN Tinc appare al codice di rete di livello IP come un normale dispositivo di rete, dopo aver impostato una VPN Tinc non v'è alcuna necessità di adattare il software esistente. Questo rende il VPN Tinc intrinsecamente scalabile.

L'unico piccolo problema con Tinc è che alcune persone hanno trovato un po 'difficile da configurare. Se questo suona come voi, niente paura - oggi ti porto attraverso un modo (più o meno) senza problemi di ottenere una VPN Tinc installato e funzionante sul vostro server.

Pre-requisiti

Per seguire pienamente questo tutorial, che si sta per bisogno di almeno tre Ubuntu 16.04 Server, e accesso root su ogni macchina. Se non si dispone di questo o non siete sicuri di ciò che questo significa, questo tutorial non è per voi - si dovrebbe innanzitutto verificare il modo di impostare un server utilizzando Ubuntu (4).

Se si sta costruendo un sistema di server da zero, è necessario prima di pensare a come le macchine stanno andando a comunicare tra loro. In questo tutorial, Ho intenzione di utilizzare i nomi delle variabili che penso la maggior parte delle persone sceglierebbe, ma essere consapevoli che potrebbe essere necessario per adattare alcuni dei nomi delle variabili per soddisfare il proprio configurazione.

Se si desidera seguire questo tutorial esattamente, si sta andando ad avere bisogno prima di istituire due VPS nella stessa data center, e poi una terza VPS in un secondo centro dati. Le mie data center sono chiamati NYC2, che ha le due VPS, e AMS2, che ha la terza. Questi VPS sono chiamati il ​​seguente:

externalnyc - Tutti i nostri nodi VPN si vuole connettere a questo server, il che significa che deve rimanere in contatto e disponibili per garantire le funzioni di rete correttamente. Se alla fine si desidera aggiungere i server in più per il vostro set up, essi dovranno essere impostato allo stesso modo come externalnyc.

internalnyc - Questo VPS si collega al nodo externalnyc VPN utilizzando un'interfaccia di rete privata.

AMS1 - Questa è la nostra connessione pubblica VPN. Si collega al externalnyc utilizzando Internet pubblico.

Obbiettivo

Quello che vogliamo raggiungere è la seguente:

La nostra rete privata è rappresentato dalla linea verde, e collega tutti e tre i server. L'arancia è la nostra rete privata, che collega tra loro i due server NYC2. Tutti e tre i server possono connettersi tramite VPN, anche se la rete privata non è accessibile a AMS1.

Per fare questo, attenersi alla seguente procedura:

installo

Primo, abbiamo bisogno di installare Tinc. Come sempre, assicurarsi che tutti i repository apt siano aggiornati eseguendo:

sudo apt-get update

Quindi installare Tinc nel modo standard tramite apt:

sudo apt-get install I

E questo è tutto! La macchina ora scaricare Tinc, più eventuali prerequisiti è necessario. Ora bisogno di avere uno sguardo alla configurazione.

Configurazione

Configurazione Tinc può essere un po 'diversa dalle altre reti VPN a cui siete abituati. Esso utilizza un “netname” per distinguere una VPN da un altro, Questo diventa molto utile quando si dispone di più VPN che attraversano Tinc, ma è un po 'contro-intuitivo. Dal momento che questa è la nostra prima rete Tinc, teniamolo semplice e chiamare il nostro VPN “netname”.

Ora, per ciascuno dei nostri server. Ognuno avrà bisogno di tre componenti di configurazione:

I file di configurazione: tinc.conf, my-up, I-down, e un numero opzionale di altri file.

coppie di chiavi pubbliche e private: questi sono per crittografia e l'autenticazione.

Host file di configurazione: Questi contengono chiavi pubbliche, e altri elementi di configurazione VPN.

Vediamo ora configurare ciascuno dei nostri server a sua volta. Primo, externalnyc.

configurare externalnyc

Ok, ora ai dadi e bulloni. su externalnyc, iniziare con la creazione della struttura di directory di configurazione per il netname VPN. Correre:

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

tinc.conf ora aperto nel vostro editor di testo scelto:

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

Una volta che avete il file di fronte a voi, aggiungere il seguente alla fine del file:

Name = externalnyc
AddressFamily = ipv4
Interface = tun0

Tutto quello che state facendo qui è quello di configurare un nodo chiamato externalnyc, e dicendo al server che la sua interfaccia di rete utilizzerà IPv4 ed essere chiamato “tun0”. Salvare il file, e chiuderlo.

Avanti fino, abbiamo bisogno di creare un file di configurazione host per externalnyc. Per fare questo, aprire il file di configurazione host in un editor di testo:

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

Ancora una volta, aggiungere alcune righe alla fine di questo file, sostituendo l'indirizzo IP pubblico della VPS nella prima riga:

Address = externalnyc_public_IP
Subnet = 10.0.0.1/32

Questo è il file che gli altri server utilizzeranno per connettersi a externalnyc. L'indirizzo racconta altri nodi come e dove collegarsi a questo server, e l'indirizzo di sottorete è la sottorete che questo demone opererà su. Ancora una volta, salvare le modifiche apportate a questo file e chiuderlo.

Ora abbiamo bisogno di generare il pubblico / coppia di chiavi private per questo host. Questo è abbastanza facile, Basta eseguire:

sudo tincd -n netname -K4096

Questo rende una chiave privata RSA, e aggiunge una coppia di chiavi pubblica alla fine del file di configurazione che abbiamo appena creato. È possibile aprire di nuovo per vedere che questo è stato fatto, Se ti piace.

Ora, abbiamo bisogno di fare tinc-up, un piccolo script che verrà eseguito quando viene avviato il nostro VPN. Aprire il seguente file per la modifica:

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

E aggiungi:

#!/bin/sh
ifconfig $INTERFACE 10.0.0.1 netmask 255.255.255.0

Ogni volta che si avvia il netname VPN, questo script verrà eseguito. Si farà un'interfaccia di rete per essere utilizzato dal nostro VPN, e su questa externalnyc VPN avrà un IP 10.0.0.1.

Ma quando il VPN viene arrestato, vogliamo che questa interfaccia di rete a scomparire, quindi abbiamo bisogno di una sceneggiatura più. Questo dovrebbe essere aggiunto a tinc-down. Aperto:

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

E poi aggiungere:

#!/bin/sh
ifconfig $INTERFACE down

E ancora salvare e uscire. Ora abbiamo i nostri script, ma in modo per loro di lavorare hanno bisogno di essere contrassegnato come eseguibile. Questo è abbastanza facile, utilizzando la riga di comando:

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

Salva ed esci, e si è fatto la configurazione di questo server. Avanti fino, internalnyc e AMS1.

Configurare internalnyc e AMS1

Per configurare i due server rimanenti, è necessario eseguire gli stessi comandi su ogni macchina. Ci sono alcune variazioni minori, che io segnalo, ma il processo è fondamentalmente la stessa.

Come abbiamo fatto con externalnyc sopra, abbiamo prima bisogno di rendere la struttura di directory per i nostri file di configurazione. Su ogni server, eseguire il seguente, e quindi aprire il file di configurazione Tinc per la modifica:

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

Quindi aggiungere un paio di righe alla fine di questo file, sostituendo “nome_nodo” con il nome di ogni nodo:

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

Si può vedere che entrambi i nostri server sono ora configurati per tentare di connettersi a externalnyc. Salvare il file, e chiuderlo.

Ora abbiamo bisogno di rendere il file di configurazione hosts. Correre:

sudo vi / etc / I / netname / hosts / nome_nodo

Poi per internalnyc, aggiungere questa riga:

subnet = 10.0.0.2/32

E per AMS1, aggiungere questa riga:

subnet = 10.0.0.3/32

L'unica differenza è che gli indirizzi differiscono, in modo che possiamo dire ai nostri server a parte. Salvare il file, e chiuderlo.

Ora, proprio come prima, abbiamo bisogno di generare il nostro pubblico / coppie di chiavi private, e creare l'interfaccia di rete script di avvio. Su ogni server, Correre:

sudo tincd -n netname -K4096

E poi:

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

Ora. Per ogni server, abbiamo bisogno di utilizzare gli indirizzi che abbiamo specificato in precedenza. Se mi state seguendo con precisione, per internalnyc è necessario aggiungere:

ifconfig $ INTERFACCIA 10.0.0.2 netmask 255.255.255.0

E per AMS1:

ifconfig $ INTERFACCIA 10.0.0.3 netmask 255.255.255.0

Ma, se è stato specificato indirizzi diversi sopra, cambiarle anche qui. Salvare questi file, e uscire. Siamo quasi li.

Abbiamo solo bisogno di rendere lo script di arresto di interfaccia di rete, proprio come prima:

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

E quindi aggiungere questa linea su entrambi i server:

ifconfig $ INTERFACCIA giù

E l'ultimo pezzo di configurazione è di rendere i nostri nuovi script eseguibile:

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

Salva ed esci. Uff. Se tutto è andato bene, tutti e tre i server sono configurate. Ora, per l'attuazione della crittografia.

distribuzione delle chiavi

Se si sta già utilizzando un sistema di gestione di configurazione, siete fortunati. In un mondo ideale, ogni nodo che ora abbiamo fatto deve essere in grado di parlare direttamente con un altro nodo utilizzando un pubblico / Interfaccia chiave privata. I tasti, come abbiamo visto sopra, sono ora nei file di configurazione host per ogni server. Nella semplice rete che stiamo facendo qui, effettivamente necessita solo externalnyc scambiare chiavi con gli altri nodi.

E così, il modo più semplice per farlo è semplicemente quello di copiare ogni chiave pubblica a tutti i membri dei vari nodi. Questo è in realtà abbastanza facile, basta fare attenzione a modificare il valore “indirizzo” nel file di configurazione di externalnyc ad un proprio indirizzo IP privato quando si copia. in questo modo, la connessione verrà stabilita tramite la rete privata.

Se mi avete seguito e chiamato il tuo VPN “netname”, i file di configurazione padroni di casa sono qui: / etc / tinc / netname / hosts

Chiavi scambio tra externalnyc e internalnyc

Questo è molto semplice. su internalnyc, trovare il file di configurazione host e copiarlo externalnyc:

SCP / etc / I / netname / hosts / internalnyc [email protected]_private_IP: / tmp

Quindi, su externalnyc, copiare lo stesso file nella posizione corretta:

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

Ora facciamo la procedura opposta. su externalnyc, copiare il file di configurazione host per internalnyc:

SCP / etc / I / netname / hosts / externalnyc [email protected]_private_IP: / tmp

E poi internalnyc copiare il file in modo che sia al posto giusto:

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

Ora abbiamo bisogno di modificare il file di configurazione hosts di externalnyc sulla internalnyc quindi l'indirizzo è corretto. Questo è così i nodi si connettono alla VPN attraverso la rete privata. Allora, su internalnyc, aprire il file di configurazione hosts per externalnyc:

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

E cambiare il valore di indirizzo per l'indirizzo IP privato del externalnyc, Così:

Indirizzo = externalnyc_private_IP

Salvare il file, e uscire. Ecco questi due tasti fatti. Ora abbiamo solo bisogno di scambiare chiavi con il nostro un nodo rimanente.

Chiavi scambio tra externalnyc e AMS1

Il processo qui è abbastanza simile. utilizzando AMS1, copiare il file di configurazione host per externalnyc:

SCP / etc / I / netname / hosts / AMS1 [email protected]_public_IP: / tmp

E poi di nuovo copiarlo nel posto giusto, utilizzando externalnyc:

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

Rimanendo sulla externalnyc, copiare il file nella direzione opposta, attraverso a AMS1:

SCP / etc / I / netname / hosts / externalnyc [email protected]_public_IP: / tmp

E ancora una volta, è AMS1, copiare questo file in modo che sia al posto giusto:

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

E il gioco è fatto con scambio di chiavi. In teoria, ora che hai avuto un lavoro, VPN criptata attraverso Tinc. Se avete seguito questo tutorial alla lettera, si può passare alla prova la tua set up. Se, Tuttavia, hai anche colto l'occasione per aggiungere nodi aggiuntivi, ora è un buon momento per lo scambio di tutte le chiavi di cui avrete bisogno.

Ricordate che se si utilizza un nodo centrale, come sto facendo qui, non c'è bisogno di copiare tutte le chiavi a tutti i server. Tuttavia, se si desidera che i nodi siano in grado di comunicare tra loro direttamente, avranno bisogno di scambiare chiavi. Il processo per fare questo è lo stesso che ho descritto sopra - basta fare il maggior numero di iterazioni di cui hai bisogno per raggiungere la connettività desiderata.

Test

Ora si dovrebbe essere pronto per il test. Per fare questo, è una buona idea per iniziare Tinc in modalità debug, in modo che possiamo rilevare eventuali errori e ottenere qualche informazione in più, se qualcosa va storto. Ricordate che una VPN mal configurato può effettivamente essere un rischio per la sicurezza, in modo da assicurarsi che tutto funzioni correttamente prima di utilizzare il VPN per qualcosa di importante.

Per avviare Tinc in modalità debug, su ciascun nodo, iniziano externalnyc, Correre:

sudo tincd -n netname -D -D3

Se hai chiamato il tuo qualcosa di diverso VPN, Naturalmente,, modificare la variabile “netname” per il nome appropriato.

Dopo il daemon avviato su ciascun nodo, deve restituire in uscita dando il nome di ogni nodo come si collegano. Se questo non accade, hai fatto un errore da qualche parte.

Ora, siamo in grado di testare la VPN. In una nuova finestra sul AMS1, ping internalnyc usando il suo indirizzo IP. Abbiamo assegnato questo per 10.0.0.2 versioni precedenti, così tipo:

ping 10.0.0.2

Si spera, il ping funzionerà. Si dovrebbe anche vedere un po 'di output di debug in altre finestre, descrivendo le connessioni che hai appena fatto. AMS1 è ora collegato, attraverso la vostra nuova VPN, a externalnyc, e può collegarsi ad internalnyc attraverso di essa. Premere Ctrl-C e il ping si fermerà.

Ora hai una connessione sicura VPN, è possibile utilizzarlo per qualsiasi altro tipo di comunicazione di rete - connessioni dell'applicazione, copia dei file, SSH, o qualsiasi altra cosa che ti piace.

Se il ping non funziona, ma si pensa che hai fatto tutto giusto, potrebbe essere che un firewall sbarrato la strada. Controllare le impostazioni del firewall, e riprovare.

Dove faccio il boot

Solo un'ultima cosa. Se stai ora intenzione di utilizzare il vostro Tinc VPN per tutti la vostra rete, si potrebbe desiderare di impostare per startup al boot. Avrete bisogno di fare questo su ogni nodo, modificando il file di configurazione nets.boot. Aprire il file utilizzando:

sudo vi /etc/tinc/nets.boot

E quindi aggiungere il nome del nuovo VPN per questo file. Se si è scelto “netname” come me, questo sarà simile al seguente:

# Questo file contiene tutti i nomi delle reti per essere avviato all'avvio del sistema.
netname

Salva ed esci, e hai finito. Tinc sta ora lavorando, e avrà inizio il caricamento del sistema. Ben fatto.

Se è necessario controllare Tinc, ora è possibile eseguire il comando “servizio” a farlo. Su ciascun nodo, Basta eseguire:

Comincio servizio di sudo

E hanno un gioco intorno. La maggior parte di controllo di base può essere raggiunto attraverso questo comando.

Conclusione

Ora si dovrebbe avere una connessione VPN sicura che attraversa Tinc su tutte le macchine. Questo VPN può essere utilizzato come base per costruire ulteriormente la funzionalità di rete.

Se si desidera aggiungere ulteriori nodi in futuro, o combinare con altri Tinc VPN, Tinc vi permetterà di fare questo. Il processo per ogni nodo in più è lo stesso che ho descritto sopra, e si dovrebbe essere in grado di vedere facilmente quali variabili e indirizzi bisogno di cambiare. Basta ricordare che se si desidera che i nodi siano in grado di connettersi tra loro direttamente, è necessario scambiare le chiavi tra loro direttamente. Come questo, Tinc funziona come una rete VPN, che è un po 'più sicuro di mio approccio (3). In caso contrario, si può solo configurare la rete, come ho fatto io, e hanno tutto passa attraverso un nodo centrale.

In entrambi i casi, ora siete liberi di giocare. Buona Fortuna!

Risorse

(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