Personal VPN

VPN

Grazie alla campagna pubblicitaria di una nota azienda che rivende il suo servizio di VPN, tutti ormai sanno cosa sia, per i pochissimi che potrebbero non saperlo vi rimando ad un articolo della wikipedia.

Ora che sappicato tutti di cosa stiamo parlando, vi racconto come ho realizzato la mia VPN a basso costo e un paio di scenari di utilizzo.

Hardware

Per realizzare questo progetto, ma non solo come vedremo successivamente, io mi appoggio ad un Raspberry Pi 0 2w.

Questa versione della famosa singleboard ha una potenza adeguata per realizzare l'intero progetto.

Questa versione del Raspberry Pi ha una connessione wifi, per migliorare le prestazioni e dargli una connessione cablata, io ho aggiunto un dongle micro-usb to ethernet.

Questo dongle é assolutamente opzionale.

Software

Come software per realizzare una VPN ce ne sono tanti, uno dei piú famosi per realizzare una VPN é WireGuard®, tendenzialmente semplice da installare e configurare per un uso classico.

Per le miei esigenze e pigrizia che ho nella configurazione ho optato per Tailscale.

Che aggiungere un nodo alla rete risulta facile per non dire banale e permtette di far comunicare anche nodi di altre reti alla tua rete o solo alcune parti di essa.

Ma andiamo con ordine, per prima cosa va creata una rete e per fare questo basta creare un account sul portale Tailscale, consiglio di usare un account Google se lo possedete, questo renderá il tutto piú veloce.

Dal portale vi vengono offerti i link veloci per scaricare le app per i vari sistemi (per linux un comando da eseguire sul terminale) e autenticandovi con Google la rete é pronta.

curl -fsSL https://tailscale.com/install.sh | sh

Per quanto riguarda l'installazione sul Raspberry pi, dobbiamo eseguire il comando sul terminale, al cui termine si dovrá avviare il servizio.

sudo tailscale up

Seguite le istruzioni per l'autenticazione e....

Configuriamo

Arrivati a questo punto serve capire due cose del servizio.

Tutti i nodi si vedono con gli indirizzi assegnati dal servizio.

Per fare in modo che tutte le richieste http vengano fatte uscire da un unico nodo, bisogna far si che questo nodo sia marchiato come exit-node.

Mentre se tutti i nodi della rete sono all'interno di una rete lan e da fuori volete accedere alla rete lan, dobbiamo far si che un nodo della rete lan sia anche quello che permette il routing.

Ora faccendo in modo che entrambe le cose siano configurate sul nodo del Raspberry Pi basta avviare il servizio con il comando, con la classe della rete, nel seguente caso sto attivando il routing nella rete 192.168.1.X

Ma stavo per dimenticarmi che prima andate a riavviare il servizio, dobbiamo eseguire tre comandi in terminale per abilitare ip forwarding

echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf

e poi avviamo il servizio con i flag giusti

sudo tailscale up --advertise-routes=192.168.1.0/24 --accept-routes --advertise-exit-node

Fin tutto ok, ma non basta, bisogna andare nel pannello di controllo e tra le opzioni del nodo che identifica il vostro raspberry pi sotto Edit route settings... attivate il routing e Exit node.

Quindi ora dal vostro dispositivo potete attivare Tailscale e nelle opzioni potete attivare sia l'exit node e selezionare quale, magari ne avete piu di uno, e ovviamente il routing.

Ora tutte le vostre richieste http usciranno dal nodo.

Casi d'uso

Bhe qui ce ne sono almeno un paio che io utilizzo spesso.

  1. Lavoro, per lavoro ho un homeserver dove mantengo attivi una paio dio vm per lo sviluppo, con questo sistema non mi é complicato accedere a questi servizi ovunque mi trovo.
  2. Sicurezza, nello stesso modo delle piúblasonate VPN faccio sempre passare il mio traffico no da dove sono, evitanto i problemi delle reti pubbliche. Sia da mobile che altro.

Condividere

Come detto prima Tailscale puoi far usare un nodo o una sottorete ad un amico.

Quindi se settate tutto, potete far usare per esenpio un exit node da un amico/parente, facendo comparire nelle opzioni del loro device appunto il vostro exit node.

Perché questa funzionalitá la trovo fondamentale?

Anche qui due ragioni a mio veder fondamentali:

  1. Condividere le VM di sviluppo con eventuali collaboratori
  2. Dare temporaneamente l'accesso all'exit node a chi ti é vicino ma vive in un paese non molto . . . libero?

Con questa riflessione chiudo.

Pubblicato