VPN Tinc · 13 min read · Dec 21, 2025

Installare un 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, principalmente perché offrono maggiore sicurezza e privacy senza la necessità di configurare hardware costoso e complesso. Offrono anche diversi altri vantaggi, tra cui costi di rete e supporto ridotti.

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

Tinc è una di queste soluzioni (1). Un demone VPN open-source, è ora disponibile per una vasta gamma di piattaforme e ha diversi vantaggi rispetto a client VPN simili. Offre crittografia sicura e affidabile, compressione opzionale ed è facilmente espandibile man mano che la tua rete cresce. Il routing automatico a maglia completa significa che il traffico VPN viene 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é il VPN Tinc appare al codice di rete a livello IP come un normale dispositivo di rete, dopo aver configurato un VPN Tinc non è necessario adattare il software esistente. Questo rende il VPN Tinc intrinsecamente scalabile.

L’unico piccolo problema con Tinc è che alcune persone lo hanno trovato un po’ complicato da configurare. Se ti sembra di essere in questa situazione, non temere: oggi ti guiderò attraverso un modo (più o meno) senza problemi per far funzionare un VPN Tinc sui tuoi server.

Requisiti

Per seguire completamente questo tutorial, avrai bisogno di almeno tre server Ubuntu 16.04 e accesso root su ciascuna macchina. Se non hai questo o non sei sicuro di cosa significhi, questo tutorial non fa per te: dovresti prima controllare come configurare un server utilizzando 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 la maggior parte delle persone sceglierebbe, ma sii consapevole che potresti dover adattare alcuni dei nomi delle variabili per adattarli alla tua configurazione.

Se vuoi seguire questo tutorial esattamente, dovrai prima configurare due VPS nello stesso datacenter e poi creare un terzo VPS in un secondo datacenter. I miei datacenter 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 connetteranno a questo server, il che significa che deve rimanere connesso e disponibile per garantire che la rete funzioni correttamente. Se desideri eventualmente aggiungere server extra alla tua configurazione, dovranno essere configurati nello 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 Internet pubblico.

Obiettivo

Ciò 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 insieme i due server NYC2. Tutti e tre i server possono connettersi tramite la VPN, anche se la rete privata non è accessibile ad AMS1.

Per fare ciò, segui questi passaggi:

Installare 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 nel modo standard tramite apt:

sudo apt-get install tinc

E questo è tutto! La tua macchina scaricherà ora Tinc, oltre a qualsiasi prerequisito di cui hai bisogno. Ora dobbiamo dare un’occhiata alla configurazione.

Configurazione

Configurare Tinc potrebbe essere un po’ diverso rispetto ad altre VPN a cui sei abituato. Utilizza un “netname” per distinguere una VPN dall’altra. Questo diventa molto utile quando hai più VPN in esecuzione tramite Tinc, ma è un po’ controintuitivo all’inizio. Poiché questa è la nostra prima rete Tinc, manteniamola semplice e chiamiamo la nostra VPN “netname”.

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

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

Coppie di chiavi pubbliche e private: queste sono per la crittografia e l’autenticazione.

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

Configuriamo ora ciascuno dei nostri server a turno. Per prima cosa, externalnyc.

Configurare externalnyc

OK, ora passiamo ai dettagli. Su externalnyc, inizia creando la struttura della directory di configurazione per la VPN netname. Esegui:

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

Ora apri tinc.conf nel tuo editor di testo preferito:

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 ciò 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 altri server utilizzeranno per connettersi a externalnyc. L’indirizzo indica ad altri nodi come e dove connettersi a questo server, e l’indirizzo della subnet è la subnet su cui questo demone opererà. Ancora una volta, salva le modifiche a questo file e chiudilo.

Ora dobbiamo generare la coppia di chiavi pubbliche/private per questo host. Questo è abbastanza semplice, 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 aprirlo di nuovo per vedere che questo è stato fatto, se vuoi.

Ora, dobbiamo creare tinc-up, un piccolo script che verrà eseguito quando la nostra VPN viene avviata. 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 la VPN netname viene avviata, questo script verrà eseguito. Creerà un’interfaccia di rete da utilizzare dalla nostra VPN, e su questa VPN externalnyc avrà un IP di 10.0.0.1.

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

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

E poi aggiungi:

#!/bin/sh
ifconfig $INTERFACE down

E ancora salva e chiudi. Ora abbiamo i nostri script, ma affinché funzionino devono essere contrassegnati come eseguibili. Questo è abbastanza semplice, utilizzando la riga di comando:

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

Salva e chiudi, e hai finito di configurare questo server. Prossimo, internalnyc e ams1.

Configurare internalnyc e ams1

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

Come abbiamo fatto con externalnyc sopra, dobbiamo prima creare la struttura della directory per i nostri file di configurazione. Su ciascun server, esegui quanto segue, quindi apri il file di configurazione 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 ciascun 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. Esegui:

 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, così possiamo distinguere i nostri server. Salva questo file e chiudilo.

Ora, proprio come prima, dobbiamo generare le nostre coppie di chiavi pubbliche/private e creare lo script di avvio dell’interfaccia di rete. Su ciascun server, esegui:

 sudo tincd -n netname -K4096

E poi:

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

Ora. Per ciascun server, dobbiamo utilizzare gli indirizzi che abbiamo specificato in precedenza. Se mi stai seguendo precisamente, 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 e chiudi. Ci siamo quasi.

Dobbiamo solo creare 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’ultima parte della configurazione è rendere i nostri nuovi script eseguibili:

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

Salva e chiudi. Uff. Se tutto è andato bene, tutti e tre i server sono ora configurati. Ora per implementare la 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 essere in grado di comunicare direttamente con un altro nodo utilizzando un’interfaccia di 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 creando qui, in realtà solo externalnyc deve scambiare chiavi con gli altri nodi.

E quindi, il modo più semplice per farlo è semplicemente copiare ciascuna chiave pubblica a tutti i membri dei vari nodi. Questo è in realtà abbastanza facile, basta fare attenzione a cambiare il valore “address” nel file di configurazione di externalnyc con il suo stesso indirizzo IP privato quando lo copi. In questo modo, la connessione sarà stabilita attraverso la 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

Scambiare Chiavi Tra externalnyc e internalnyc

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

 scp /etc/tinc/netname/hosts/internalnyc user@externalnyc_private_IP:/tmp

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

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

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

 scp /etc/tinc/netname/hosts/externalnyc user@internalnyc_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. Questo è affinché i nodi si connettano 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 con l’indirizzo IP privato di externalnyc, in questo modo:

Address = externalnyc_private_IP

Salva il file e chiudi. Queste due chiavi sono fatte. Ora dobbiamo solo scambiare chiavi con il nostro unico nodo rimanente.

Scambiare Chiavi Tra externalnyc e ams1

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

 scp /etc/tinc/netname/hosts/ams1 user@externalnyc_public_IP:/tmp

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

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

Rimanendo su externalnyc, copia il file dall’altra parte, verso ams1:

 scp /etc/tinc/netname/hosts/externalnyc user@ams1_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 delle chiavi. In teoria, ora hai una VPN funzionante e crittografata tramite Tinc. Se hai seguito questo tutorial alla lettera, puoi passare a testare la tua configurazione. Se, tuttavia, hai anche colto l’opportunità di 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 a tutti i server. Tuttavia, se desideri che i nodi possano comunicare direttamente tra loro, dovranno scambiarsi le chiavi. Il processo per farlo è lo stesso di quanto descritto sopra: fai semplicemente quante più iterazioni hai bisogno per ottenere la connettività desiderata.

Testare

Ora dovresti essere pronto per testare. Per fare ciò, è una buona idea avviare Tinc in modalità debug, così possiamo catturare eventuali errori e ottenere ulteriori informazioni se qualcosa va storto. Ricorda che una VPN mal configurata può effettivamente rappresentare 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 ciascun nodo, partendo da externalnyc, esegui:

 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 si avvia su ciascun nodo, dovrebbe restituire un output che ti dà il nome di ciascun nodo man mano che 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 utilizzando il suo indirizzo IP. Gli abbiamo assegnato 10.0.0.2 in precedenza, quindi digita:

 ping 10.0.0.2

Speriamo 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, attraverso la tua nuova VPN, a externalnyc e può connettersi a internalnyc tramite essa. Premi CTRL-C e il ping si fermerà.

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

Se il tuo ping non ha funzionato, ma pensi di aver fatto tutto correttamente, potrebbe essere che un firewall si sia messo di mezzo. Controlla le impostazioni del tuo firewall e riprova.

Tinc all’Avvio

Solo un’ultima cosa. Se ora intendi utilizzare la tua VPN Tinc per tutta la tua rete, potresti voler impostarla per avviarsi all’accensione. Dovrai farlo su ciascun nodo, modificando il file di configurazione nets.boot. Apri il file utilizzando:

 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 apparirà come segue:

# Questo file contiene tutti i nomi delle reti da avviare all'avvio del sistema.
netname

Salva e chiudi, e hai finito. Tinc ora funziona e si avvierà all’accensione. Ben fatto.

Se hai bisogno di controllare Tinc, ora puoi eseguire il comando “service” per farlo. Su ciascun nodo, esegui semplicemente:

 sudo service tinc start

E gioca un po’. La maggior parte del controllo di base può essere ottenuta 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 costruire ulteriori funzionalità di rete.

Se desideri aggiungere ulteriori nodi in futuro o combinare Tinc con altre VPN, Tinc ti permetterà di farlo. Il processo per ciascun nodo extra è lo stesso di quanto descritto sopra e dovresti essere in grado di vedere facilmente quali variabili e indirizzi devono essere cambiati. Ricorda solo che se desideri che i nodi possano connettersi direttamente tra loro, dovranno scambiarsi le chiavi direttamente. In questo modo, Tinc opera come una VPN a maglia, che è un po’ più sicura del mio approccio. Altrimenti, puoi semplicemente configurare la tua rete come ho fatto io e far passare tutto attraverso un nodo centrale.

In ogni caso, ora sei libero di sperimentare. Buona fortuna!

Risorse

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

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

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.