community italiana di domotica personale
 
Collegare Raspberry Pi a una VPN con OpenVPN Client, Raspberry Pi OS e Docker

Collegare Raspberry Pi a una VPN con OpenVPN Client, Raspberry Pi OS e Docker

SCOPI DELLA GUIDA:
  • Utilizzare OpenVPN Client (con Docker su sistema operativo Raspberry Pi OS) per collegare Raspberry Pi a una VPN remota basata su OpenVPN Server
  • Livello di difficoltà: medio
CONCETTI AFFRONTATI:
  • Configurazione software
COMPONENTI SOFTWARE UTILIZZATE:
PREREQUISITI:
DISPOSITIVI FISICI UTILIZZATI:
GUIDA maggiormente indicatA per:

Raspbian - Linux

NOTE E DISCLAIMER
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata ed realizzata SOLO da personale qualificato;
  • qualsiasi modifica non prevista attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno infatti puro scopo didattico) e fa decadere garanzia, omologazioni e certificazioni di qualità; dei dispositivi interessati;
  • tutte le tecniche descritte si intendono applicate a software e firmware aggiornati alle ultime versioni disponibili;
  • questa pagina è materialmente scritta e manutenuta da più individui: non ci si aspetti né si pretenda un supporto personale. In presenza di difficoltà, chiedere supporto alla community sul nostro forum o sulla nostra chat.
Revisione guida: 1.1

OpenVPN su Raspberry Pi OS con Docker

Abstract

Negli ultimi anni c’è stato un proliferare di servizi VPN a pagamento, i quali consentono da dentro la propria rete domestica (o comunque un qualsiasi host connesso a Internet) di navigare in modo anonimo attraverso tale servizio. In sostanza ci si collega (sempre con la filosofia del tunnelling) alla rete del provider VPN e da lì si naviga anonimizzati verso Internet (per questioni di estrema privacy o altro).

A prescindere dall’anonimizzazione di cui sopra, le motivazioni per collegarsi tramite VPN a una rete target possono essere le più disparate. Si immagini quindi la connessione VPN come un generico “tunnel” che ci consenta ci collegarci, tramite client, sulla rete dell’host che ospita la controparte server, quale che sia – magari lavorativa, oppure di un proprio sito remoto, magari una seconda casa o altro.

Esempi di VPN “target” possono essere:


Il tema VPN è vastissimo (leggi approfondimento) e non è pensabile trattarlo in dettaglio; la presente guida si concentra sulla possibilità di far sì che un proprio Raspberry Pi dotato di sistema operativo Raspberry Pi OS possa collegarsi con una VPN remota basata su OpenVPN, un server/client gratuito Open Source.

Utilizzeremo, allo scopo, una versione di OpenVPN client concepita per Docker; spiegheremo quindi passo passo come realizzare questa connessione verso la rete target, ovviamente basata su OpenVPN server.

Si parte

Assunti

Come anticipato, assumeremo che la VPN alla quale andremo a collegare il nostro Raspberry sia basata su OpenVPN.
Ciò che ci servirà è:

  • il file (con estensione .ovpn) contenente le chiavi dell’utente configurato lato server OpenVPN;
  • la password relativa all’utente configurato lato server OpenVPN.

Questa informazioni, quindi, si reperiscono lato server.

Si assume altresì che il Raspberry Pi sia configurato (inclusa la possibilità di collegarvisi tramite SSH), collegato alla rete locale e, attraverso essa, a Internet.

Credenziali d’accesso

Innanzitutto è necessario configurare Raspberry in modo da accogliere le informazioni che poi OpenVPN Client utilizzerà per collegarsi a OpenVPN server, ovvero alla nostra VPN target.

Collegarsi dunque via SSH al proprio Raspberry ed eseguire i seguenti comandi:

mkdir openvpn
cd openvpn

Entrati all’interno della cartella, creare il file della password relativo all’utente che utilizzeremo per collegarci alla VPN target (da non confondersi con l’utente con cui ci si collega a Raspberry Pi, per dire). Se l’utente si chiamasse openvpn-client, il file contenente la password si chiamerebbe openvpn-client.pwd:

sudo nano openvpn-client.pwd

all’interno dell’editor che si aprirà, scrivere semplicemente la password e uscire salvando (CTRL-X, Y, invio).


Sempre rimanendo all’interno della cartella in cui ci troviamo, creare il file .ovpn sempre relativo all’utente che utilizzeremo per collegarci alla VPN target. Se l’utente si chiamasse openvpn-client, il file contenente la password si chiamerebbe openvpn-client.ovpn.

sudo nano openvpn-client.ovpn

Apertosi il client, copia-incollare il seguente testo:

pull-filter ignore "route-gateway"
askpass /vpn/NOME_UTENTE.pwd
ping-restart 10

avendo cura di personalizzare il nome dell’utente (se fosse openvpn-client, la seconda stringa diventerebbe askpass /vpn/openvpn-client.pwd).

Andare poi a capo e copia-incollare il contenuto del file .ovpn che si dovrebbe, come spiegato negli assunti, avere a disposizione. Attenzione che il contenuto del file .ovpn sia copiato per intero.
Uscire salvando (CTRL-X, Y, invio).

vetrina indomus

Installare Docker

Installare Docker su Raspberry Pi dotato di sistema operativo Raspberry Pi OS è piuttosto semplice, esiste una procedura completamente automatica e una manuale. Entrambe le procedure sono illustrate in dettaglio in questa breve guida.

Se si ha già provveduto all’installazione di Docker, va da sé che questo passaggio possa essere saltato.

ATTENZIONE: affinché i comandi a seguire funzionino, è necessario aver aggiunto Docker al gruppo sudoers, come spiegato in guida.

Installare OpenVPN Client su Docker

Una volta dotati di un proprio FQDN è dunque il momento di installare (o meglio, “istanziarvi sopra”) OpenVPN Client.
Istanziamo dunque OpenVPN Client su Docker tramite il comando specifico al quale passeremo i seguenti argomenti:

  • nome del container: openvpn;
  • immagine del container: dperson/openvpn-client (è una delle tante disponibili: abbiamo scelto questa perché funziona bene);
  • la directory “vpn” nella quale sono presenti le credenziali di cui sopra.

Eseguire quindi il comando:

docker run -it -d --cap-add=NET_ADMIN --name openvpn -v /home/pi/openvpn:/vpn --restart always dperson/openvpn-client

Al termine, verifichiamo che tutto sia andato per il verso giusto:

docker logs openvpn

in fondo al log dovremmo trovare qualcosa come:

1980-01-01 00:00:00 Initialization Sequence Completed

il che confermerà il funzionamento del tutto.

In pratica, il log ci sta dicendo che Raspberry si è effettivamente collegato alla nostra VPN target utilizzando le credenziali configurate su Raspberry in precedenza. 

Se invece si ottiene un errore del tipo:

1980-01-01 00:00:00 Exiting due to fatal errors

allora c’è qualcosa che non va. Solitamente la riga precedente all’errore indica il motivo (e quindi concentrarsi su tale motivo, correggerlo e riavviare il container col comando di cui sopra.


Congratulazioni: OpenVPN Client è ora operativo.

Configurazione Docker Compose

Per coloro che utilizzino, per la gestione dei container, l’utile tool Docker Compose, la configurazione è la seguente:

  openvpn:
    image: dperson/openvpn-client
    container_name: openvpn
    cap_add:
    - net_admin
    network_mode: host
    volumes:
    - /home/pi/openvpn:/vpn
    restart: always

Una volta salvato il file docker-compose.yaml, eseguire il comando:

docker compose up -d openvpn

il quale provvederà a istanziare il container.

N.b. In caso il comando “docker compose” dovesse dare errore, verificare di non aver installata la versione applicativa di Docker Compose anzichè la versione plug-in alla quale il comando sopra fa riferimento. In tal caso, adeguare il comando da “docker compose” a “docker-compose” (col trattino in mezzo).

Uso

A questo punto l’uso che se ne fa è personale: come detto, le casistiche sono le più disparate. Ovviamente, avendo usato il parametro “restart: always“, il container Docker si avvierà sempre e in automatico: laddove ci si voglia collegare alla VPN in modo manuale, di consiglia il parametro configurato con “restart: unless-stopped“, amministrando l’avvio/spegnimento del container con:

docker container start openvpn

docker container stop openvpn

in base alle esigenze.

Una volta che il container sarà in esecuzione, la connessione verrà stabilita e il nostro host locale si collegherà sulla rete del server remoto OpenVPN.

Collegarsi da remoto a Home Assistant via reti provider che usino NAT (per esempio reti mobili, Fastweb, Sky Wi-Fi ecc.)

Dicci la tua o poni la tua domanda nei commenti qui sotto!

Questa pagina è redatta, manutenuta e aggiornata dallo staff di inDomus, un gruppo di persone molto diverse tra loro che trovi, per domande e supporto, sul forum e sulla chat del sito. Se ti sei perso, a tua disposizione c'è la mappa.
Telegram News Channel