GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Installazione di una VPN con Tinc su Ubuntu 16.04 LTS

Una rete privata virtuale (VPN) è una rete privata sicura che opera su una rete pubblica più ampia come Internet. Le VPN sono diventate sempre più popolari negli ultimi anni, soprattutto perché offrono maggiore sicurezza e privacy senza la necessità di configurare un nuovo hardware costoso e complesso. Offrono anche molti altri vantaggi, tra cui la riduzione dei costi di rete e supporto.

Le VPN funzionano creando un tunnel crittografato attraverso una rete pubblica e utilizzandolo per inviare dati in modo sicuro tra server e terminali. Queste connessioni possono essere crittografate in vari modi e sono disponibili molti client VPN e demoni diversi per adattarsi alla tua architettura, al tuo budget e al tuo livello di esperienza.

Tinc è una di queste soluzioni (1). Un demone VPN open source, ora è disponibile per un'ampia gamma di piattaforme e presenta numerosi vantaggi rispetto a client VPN simili. Offre crittografia sicura e affidabile, compressione opzionale ed è facilmente espandibile man mano che la rete cresce. L'instradamento automatico full mesh fa sì che il traffico VPN sia 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, poiché Tinc VPN appare al codice di rete a livello IP come un normale dispositivo di rete, dopo aver impostato una Tinc VPN non è necessario adattare il software esistente. Ciò rende Tinc VPN intrinsecamente scalabile.

L'unico problema minore con Tinc è che alcune persone l'hanno trovato un po' complicato da configurare. Se suona come te, non temere:oggi ti guiderò attraverso un modo (più o meno) semplice per far funzionare una VPN Tinc sui tuoi server.

Prerequisiti

Per seguire completamente questo tutorial, avrai bisogno di almeno tre server Ubuntu 16.04 e dell'accesso come root su ogni macchina. Se non lo hai o non sei sicuro di cosa significhi, questo tutorial non fa per te:dovresti prima controllare come configurare un server usando Ubuntu (2).

Se stai costruendo un sistema server da zero, devi prima pensare a come le tue macchine comunicheranno tra loro. In questo tutorial userò i nomi delle variabili che penso che la maggior parte delle persone sceglierebbe, ma tieni presente che potresti dover adattare alcuni dei nomi delle variabili per adattarli alla tua configurazione.

Se vuoi seguire esattamente questo tutorial, dovrai prima configurare due VPS nello stesso data center, quindi creare un terzo VPS in un secondo data center. I miei data center si chiamano NYC2, che ha i due VPS, e AMS2, che ha il terzo. Questi VPS sono chiamati come segue:

externalnyc – Tutti i nostri nodi VPN si collegheranno a questo server, il che significa che deve rimanere connesso e disponibile per garantire che la rete funzioni correttamente. Se alla fine desideri aggiungere altri server alla tua configurazione, dovranno essere configurati allo stesso modo di externalnyc.

internalnyc:questo VPS si connette al nodo VPN externalnyc utilizzando un'interfaccia di rete privata.

ams1 – Questa è la nostra connessione VPN pubblica. Si connette a externalnyc utilizzando la rete Internet pubblica.

Obiettivo

Quello che vogliamo ottenere è il seguente:

La nostra rete privata è rappresentata dalla linea verde e collega tutti e tre i server. L'arancione è la nostra rete privata, che collega tra loro i due server NYC2. Tutti e tre i server possono connettersi tramite la VPN, sebbene la rete privata non sia accessibile ad AMS1.

Per fare ciò, segui questi passaggi:

Installa Tinc

Per prima cosa, dobbiamo installare Tinc. Come sempre, assicurati che tutti i tuoi repository apt siano aggiornati eseguendo:

sudo apt-get update

Quindi installa Tinc in modo standard tramite apt:

sudo apt-get install tinc

E questo è tutto! La tua macchina ora scaricherà Tinc, oltre a tutti i prerequisiti necessari. Ora dobbiamo dare un'occhiata alla configurazione.

Configurazione

La configurazione di Tinc potrebbe essere leggermente diversa dalle altre VPN a cui sei abituato. Utilizza un "netname" per distinguere una VPN da un'altra, questo diventa molto utile quando hai più VPN in esecuzione tramite Tinc, ma all'inizio è un po' controintuitivo. Poiché questa è la nostra prima rete Tinc, semplifichiamoci e chiamiamo la nostra VPN "netname".

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

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

Coppie di chiavi pubbliche e private:servono per la crittografia e l'autenticazione.

File di configurazione host:contengono chiavi pubbliche e altri elementi di configurazione VPN.

Ora configuriamo ciascuno dei nostri server a turno. Innanzitutto, externalnyc.

Configura externalnyc

OK, ora ai dadi e bulloni. Su externalnyc, inizia creando la struttura della directory di configurazione per il netname della VPN. Corri:

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

Ora apri tinc.conf nell'editor di testo scelto:

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

Una volta che hai il file davanti a te, aggiungi quanto segue in fondo al file:

Name = externalnyc
AddressFamily = ipv4
Interface = tun0

Tutto quello che stai facendo qui è configurare un nodo chiamato externalnyc e dire al server che la sua interfaccia di rete utilizzerà ipv4 e sarà chiamata "tun0". Salva il file e chiudilo.

Successivamente, dobbiamo creare un file di configurazione dell'host per externalnyc. Per fare ciò, apri il file di configurazione degli host in un editor di testo:

 sudo vi /etc/tinc/netname/hosts/externalnyc

Ancora una volta, aggiungi alcune righe in fondo a questo file, sostituendo l'indirizzo IP pubblico del tuo 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 indica agli altri nodi come e dove connettersi a questo server e l'indirizzo di sottorete è la sottorete su cui opererà questo demone. Ancora una volta, salva le modifiche a questo file e chiudilo.

Ora dobbiamo generare la coppia di chiavi pubblica/privata per questo host. Questo è abbastanza facile, basta eseguire:

 sudo tincd -n netname -K4096

Questo crea una chiave RSA privata e aggiunge una coppia di chiavi pubbliche alla fine del file di configurazione che abbiamo appena creato. Puoi riaprirlo per vedere che è stato fatto, se lo desideri.

Ora, dobbiamo creare tinc-up, un piccolo script che verrà eseguito all'avvio della nostra VPN. Apri il seguente file per la modifica:

 sudo vi /etc/tinc/netname/tinc-up

E aggiungi:

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

Ogni volta che viene avviato il netname VPN, questo script verrà eseguito. Creerà un'interfaccia di rete che sarà utilizzata dalla nostra VPN e su questa VPN externalnyc avrà un IP di 10.0.0.1.

Ma quando la VPN viene interrotta, vogliamo che questa interfaccia di rete scompaia, quindi abbiamo bisogno di un altro script. Questo dovrebbe essere aggiunto a tinc-down. Aperto:

 sudo vi /etc/tinc/netname/tinc-down

E poi aggiungi:

#!/bin/sh
ifconfig $INTERFACE down

E ancora salva ed esci. Ora abbiamo i nostri script, ma affinché funzionino, devono essere contrassegnati come eseguibili. Questo è abbastanza facile, usando la riga di comando:

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

Salva ed esci e hai finito di configurare questo server. Avanti, internalnyc e ams1.

Configura internalnyc e ams1

Per configurare i due server rimanenti, è necessario eseguire gli stessi comandi su ciascuna macchina. Ci sono alcune piccole variazioni, che farò notare, ma il processo è sostanzialmente lo stesso.

Come abbiamo fatto con externalnyc sopra, dobbiamo prima creare la struttura delle directory per i nostri file di configurazione. Su ciascun server, esegui quanto segue, quindi apri il file di configurazione di Tinc per la modifica:

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

Quindi aggiungi alcune righe in fondo a questo file, sostituendo "node_name" con il nome di ogni nodo:

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

Puoi vedere che entrambi i nostri server sono ora configurati per tentare di connettersi a externalnyc. Salva questo file e chiudilo.

Ora dobbiamo creare il file di configurazione degli host. Corri:

 sudo vi /etc/tinc/netname/hosts/node_name

Quindi per internalnyc, aggiungi questa riga:

Subnet = 10.0.0.2/32

E per ams1, aggiungi questa riga:

Subnet = 10.0.0.3/32

L'unica differenza qui è che gli indirizzi differiscono, quindi possiamo distinguere i nostri server. Salva questo file e chiudilo.

Ora, proprio come prima, dobbiamo generare le nostre coppie di chiavi pubblica/privata e creare lo script di avvio dell'interfaccia di rete. Su ogni server, esegui:

 sudo tincd -n netname -K4096

E poi:

 sudo vi /etc/tinc/netname/tinc-up

Adesso. Per ogni server, dobbiamo utilizzare gli indirizzi specificati in precedenza. Se mi stai seguendo con precisione, per internalnyc devi aggiungere:

ifconfig $INTERFACE 10.0.0.2 netmask 255.255.255.0

E per ams1:

ifconfig $INTERFACE 10.0.0.3 netmask 255.255.255.0

Ma, se hai specificato indirizzi diversi sopra, cambiali anche qui. Salva questi file ed esci. Ci siamo quasi.

Dobbiamo solo fare in modo che lo script di arresto dell'interfaccia di rete, proprio come prima:

 sudo vi /etc/tinc/netname/tinc-down

E poi aggiungi questa riga su entrambi i server:

ifconfig $INTERFACE down

E l'ultimo bit di configurazione è rendere eseguibili i nostri nuovi script:

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

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

Distribuzione delle chiavi

Se stai già utilizzando un sistema di gestione della configurazione, sei fortunato. In un mondo ideale, ogni nodo che abbiamo ora creato deve poter parlare direttamente con un altro nodo utilizzando un'interfaccia a chiave pubblica/privata. Le chiavi, come abbiamo visto sopra, sono ora nei file di configurazione degli host per ciascun server. Nella semplice rete che stiamo facendo qui, in realtà solo externalnyc ha bisogno di scambiare chiavi con gli altri nodi.

E quindi, il modo più semplice per farlo è semplicemente copiare ogni chiave pubblica su tutti i membri dei vari nodi. Questo è in realtà abbastanza semplice, fai solo attenzione a cambiare il valore "indirizzo" nel file di configurazione di externalnyc nel proprio indirizzo IP privato quando lo copi. In questo modo, la connessione verrà stabilita sulla rete privata.

Se mi hai seguito e hai chiamato la tua VPN "netname", i file di configurazione degli host sono qui:/etc/tinc/netname/hosts

Scambia chiavi tra externalnyc e internalnyc

Questo è semplice. Su internalnyc, trova il file di configurazione degli host e copialo in externalnyc:

 scp /etc/tinc/netname/hosts/internalnyc [email protected]_private_IP:/tmp

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

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

Ora eseguiamo la procedura opposta. Su externalnyc, copia il file di configurazione degli host in internalnyc:

 scp /etc/tinc/netname/hosts/externalnyc [email protected]_private_IP:/tmp

E poi su internalnyc copia il file in modo che sia nel posto giusto:

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

Ora dobbiamo modificare il file di configurazione degli host di externalnyc su internalnyc in modo che l'indirizzo sia corretto. In questo modo i nodi si collegheranno alla VPN tramite la rete privata. Quindi, su internalnyc, apri il file di configurazione degli host per externalnyc:

 sudo vi /etc/tinc/netname/hosts/externalnyc

E cambia il valore dell'indirizzo nell'indirizzo IP privato di externalnyc, in questo modo:

Address = externalnyc_private_IP

Salva il file ed esci. Ecco queste due chiavi fatte. Ora dobbiamo solo scambiare le chiavi con il nostro nodo rimanente.

Scambia chiavi tra externalnyc e ams1

Il processo qui è abbastanza simile. Usando ams1, copia il file di configurazione degli host in externalnyc:

 scp /etc/tinc/netname/hosts/ams1 [email protected]_public_IP:/tmp

E poi copialo di nuovo nel posto giusto, usando externalnyc:

 cd /etc/tinc/netname/hosts; sudo cp /tmp/ams1 .

Rimanendo su externalnyc, copia il file nell'altro modo, attraverso ams1:

 scp /etc/tinc/netname/hosts/externalnyc [email protected]_public_IP:/tmp

E ancora una volta, su ams1, copia questo file in modo che sia nel posto giusto:

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

E hai finito con lo scambio di chiavi. In teoria, ora hai una VPN crittografata funzionante tramite Tinc. Se hai seguito questo tutorial alla lettera, puoi passare a testare la tua configurazione. Se, tuttavia, hai anche colto l'occasione per aggiungere nodi extra, ora è un buon momento per scambiare tutte le chiavi di cui avrai bisogno.

Ricorda che se stai utilizzando un nodo centrale, come sto facendo qui, non è necessario copiare tutte le chiavi su tutti i server. Tuttavia, se vuoi che i nodi possano parlare direttamente tra loro, dovranno scambiarsi le chiavi. Il processo per farlo è lo stesso che ho descritto sopra:esegui tutte le iterazioni necessarie per ottenere la connettività desiderata.

Test

Ora dovresti essere pronto per il test. Per fare ciò, è una buona idea avviare Tinc in modalità debug, così possiamo rilevare eventuali errori e ottenere qualche informazione in più se qualcosa va storto. Ricorda che una VPN mal configurata può effettivamente essere un rischio per la sicurezza, quindi assicurati che tutto funzioni correttamente prima di iniziare a utilizzare la tua VPN per qualsiasi cosa importante.

Per avviare Tinc in modalità debug, su ogni nodo, a partire da externalnyc, eseguire:

 sudo tincd -n netname -D -d3

Se hai chiamato la tua VPN in modo diverso, ovviamente, cambia la variabile "netname" con il nome appropriato.

Dopo che il demone è stato avviato su ogni nodo, dovrebbe restituire l'output dandoti il ​​nome di ogni nodo mentre si connettono. Se ciò non accade, hai commesso un errore da qualche parte.

Ora possiamo testare la VPN. In una nuova finestra su ams1, esegui il ping di internalnyc usando il suo indirizzo IP. L'abbiamo assegnato a 10.0.0.2 in precedenza, quindi digita:

 ping 10.0.0.2

Si spera che il tuo ping funzioni. Dovresti anche vedere alcuni output di debug nelle altre finestre, che descrivono le connessioni che hai appena effettuato. Ams1 è ora connesso, tramite la tua nuova VPN, a externalnyc e può connettersi a internalnyc attraverso di essa. Premi CTRL-C e il ping si fermerà.

Ora hai una connessione VPN sicura, puoi usarla per qualsiasi altro tipo di comunicazione di rete:connessioni di applicazioni, copia di file, SSH o qualsiasi altra cosa tu voglia.

Se il tuo ping non ha funzionato, ma pensi di aver fatto tutto bene, è possibile che un firewall si sia intromesso. Controlla le impostazioni del firewall e riprova.

Tinc all'avvio

Solo un'ultima cosa. Se ora utilizzerai la tua VPN Tinc per tutte le tue reti, potresti voler impostarla per l'avvio all'avvio. Dovrai farlo su ogni nodo, modificando il file di configurazione nets.boot. Apri il file usando:

 sudo vi /etc/tinc/nets.boot

E poi aggiungi il nome della tua nuova VPN a questo file. Se hai scelto "netname" come me, questo sarà simile al seguente:

# This file contains all names of the networks to be started on system 	startup.
netname

Salva ed esci e il gioco è fatto. Tinc ora funziona e si avvierà all'avvio. Bravo te.

Se devi controllare Tinc, ora puoi eseguire il comando "servizio" per farlo. Su ogni nodo, esegui semplicemente:

 sudo service tinc start

E divertiti. La maggior parte dei controlli di base possono essere ottenuti tramite questo comando.

Conclusione

Ora dovresti avere una connessione VPN sicura in esecuzione tramite Tinc su tutte le tue macchine. Questa VPN può essere utilizzata come base per creare ulteriori funzionalità di rete.

Se desideri aggiungere ulteriori nodi in futuro o combinare Tinc con altre VPN, Tinc ti consentirà di farlo. Il processo per ogni nodo aggiuntivo è lo stesso che ho descritto sopra e dovresti essere in grado di vedere facilmente quali variabili e indirizzi devono essere modificati. Ricorda solo che se vuoi che i nodi siano in grado di connettersi direttamente tra loro, dovrai scambiare le chiavi direttamente tra di loro. In questo modo, Tinc opera come una VPN mesh, che è un po' più sicura del mio approccio. Altrimenti, puoi semplicemente configurare la tua rete come ho fatto io e fare in modo che tutto passi attraverso un nodo centrale.

Ad ogni modo, ora sei libero di giocare. Buona fortuna!

Risorse

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

(2) https://www.howtoforge.com/tutorial/ubuntu-lts-minimal-server/


Ubuntu
  1. Installazione di mod_pagespeed con Apache su Ubuntu/CentOS

  2. Cose da fare dopo aver installato Ubuntu 16.04 LTS

  3. Distribuisci Modsecurity con Nginx su Ubuntu 20.04 LTS

  4. Installazione di Ms Office 2013 su Ubuntu 12.04 Lts?

  5. Non riesco a trovare i pacchetti Vpn Sstp con Ubuntu 16.04 Lts?

Come installare GitLab con Docker su Ubuntu 20.04 LTS

Installazione di Nginx con PHP5 (e PHP-FPM) e supporto MySQL (LEMP) su Ubuntu 12.04 LTS

Monitoraggio Postfix con Mailgraph su Ubuntu 14.04 LTS

Installazione di Ubuntu 18.04 LTS [Desktop e server]

Comando wc:spiegato con 5 esempi in Ubuntu 20.04 LTS

Come installare FortiClient VPN su Ubuntu 20.04 LTS