RaspberryPi
Configurazione di un server OpenVPN all’interno di Docker su Raspberry Pi

Configurazione di un server OpenVPN all’interno di Docker su Raspberry Pi

In un precedente articolo ho spiegato come installare un server OpenVPN direttamente su Raspberry Pi, in questo articolo invece andrò a descrivere come eseguire la medesima configurazione ma all’interno di un container Docker.

Ovviamente per portare a termine questa guida sarà necessario disporre di un Raspberry Pi con installato l’applicativo Docker (guida all’installazione di Docker disponibile qui).

Detto questo, procediamo con la clonazione della repository all’interno del Raspberry con il seguente comando git.

git clone https://github.com/olivierguerriat/rpi-docker-openvpn.git

Ora spostiamoci all’interno della directory appena clonata:

cd rpi-docker-openvpn/

Creiamo una nuova immagine Docker da questi file. In questo esempio la chiameremo myownvpn:

docker build -t myownvpn .

Successivamente, avremo bisogno di un volume o di una directory per memorizzare le chiavi e i nostri file di configurazione ovpn. Questo è un passaggio molto significativo perché le nostre chiavi verranno salvate in questo percorso. Di conseguenza, consiglio di tenere al sicuro questa directory, evitando di condividerla o di modificare i permessi.

cd ..
mkdir vpn-data && touch vpn-data/vars

Infine, possiamo iniziare con la generazione del file di configurazione OpenVPN:

docker run -v $PWD/vpn-data:/etc/openvpn --rm myownvpn ovpn_genconfig -u udp://IL_TUO_IP_PUBBLICO:3000

Assicuriamoci di sostituire la voce “IL_TUO_IP_PUBBLICO” con il nostro indirizzo IP o nome di dominio. Volendo possiamo cambiare la porta (sarà la stessa che andrà “nattata” dal nostro router al Raspberry Pi). In questo esempio, ho utilizzato il protocollo UDP e la porta 3000.
Una volta eseguito il comando dovremmo ottenere un output simile a questo.

Processing PUSH Config: 'block-outside-dns'
Processing Route Config: '192.168.254.0/24'
Processing PUSH Config: 'dhcp-option DNS 8.8.8.8'
Processing PUSH Config: 'dhcp-option DNS 8.8.4.4'
Successfully generated config
Cleaning up before Exit ...

Ora dobbiamo avviare il nostro PKI. Questo si occuperà della generazione del nostro certificato CA e avremo una chiave privata appartenente alla PKI.
Ci verrà chiesto di attribuire una password per proteggere la chiave privata.
Qui di seguito troviamo il comando da eseguire e subito dopo ho riportato parte dell’output (ho rimosso alcune parti, ma dovrebbe avere un aspetto simile)

docker run -v $PWD/vpn-data:/etc/openvpn --rm -it myownvpn ovpn_initpki

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/pkiGenerating a 2048 bit RSA private key
............................................................................+++
....+++
writing new private key to '/etc/openvpn/pki/private/ca.key.XXXXCFGIEm'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
...
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:FargionConsulting

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/etc/openvpn/pki/ca.crtGenerating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
... # Wait a while

Enter pass phrase for /etc/openvpn/pki/private/ca.key:
Check that the request matches the signature
...
Enter pass phrase for /etc/openvpn/pki/private/ca.key:An updated CRL has been created.
CRL file: /etc/openvpn/pki/crl.pem

Infine, possiamo far partire il server VPN con il seguente comando:

docker run -v $PWD/vpn-data:/etc/openvpn -d -p 3000:1194/udp --cap-add=NET_ADMIN myownvpn

Fino ad ora abbiamo creato e configurato il nostro server OpenVPN, ma non abbiamo ancora creato alcun utente.
Per collegarci a questo server OpenVPN, dobbiamo creare un utente per ogni connessione.
Qui abbiamo la possibilità di creare un utente con o senza password.
Il comando per creare un utente senza password sarà il seguente:

docker run -v $PWD/vpn-data:/etc/openvpn --rm -it myownvpn easyrsa build-client-full user1 nopass

mentre se lo volessimo creare con password sarà:

docker run -v $PWD/vpn-data:/etc/openvpn --rm -it myownvpn easyrsa build-client-full user1

subito dopo aver dato conferma al comando ci verrà chiesta la password da attribuire al client.

In entrambi i casi ci verrà richiesta la password dell’autorità di certificazione CA. L’output del comando dato sarà simile al seguente:

Generating a 2048 bit RSA private key
........................................................+++
..........................................................+++
writing new private key to '/etc/openvpn/pki/private/user1.key.XXXXeoGIJE'
-----
Using configuration from /usr/share/easy-rsa/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/pki/private/ca.key:
...

Ora in quest’ultimo passaggio, genereremo il file di configurazione che dovrà essere utilizzato dall’utente per connettersi al server VPN.
Per generare questo file, possiamo eseguire il seguente comando:

docker run -v $PWD/vpn-data:/etc/openvpn --rm myownvpn ovpn_getclient user1 > user1.ovpn

Possiamo copiare il file user1.ovpn con un client SCP, SFTP o qualsiasi metodo tu voglia. Gli utenti possono connettersi al nostro server con questo file. Nel mio caso sto usando il client Tunnelblick in MacOS.
Di seguito il risultato che ho ottenuto:

Buon divertimento!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *