Installiamo un Server VPN per gestire i ripetitori sulle postazioni

di | 25/06/2019

Dopo un po’ di tempo dalla prima guida pubblicata è venuta l’esigenza di “rivedere” i passaggi per installare un Server VPN sull’attuale distribuzione Linux Debian 9 con la finalità di gestire agevolmente i ponti ripetitori situati in postazioni remote dove spesso la connettività 4G o l’impossibilità di aprire le porte (NAT) sul router non agevolano la gestione dei sistemi, anche per un semplice cambio di configurazione o aggiornamento. L’attuazione di quanto riportato nel presente articolo prevede una buona conoscenza del sistema operativo Linux, della gestione del firewall qualora si volesse mettere in sicurezza il server (non viene qui menzionata questa attività) e sul networking/protocolli di rete nonchè sapere come utilizzare una vpn lato client (che sarà nel nostro caso probabilmente un raspberry). Partiamo da un server in cloud configurato con la distribuzione Debian Stretch 9, generalmente presente tra i template pronti nello startup di un VPS, e con le credenziali/accesso di root. Alcuni passaggi relativi ad una personalizzazione dei certificati e aumento della sicurezza sulla chiave di cifratura sono volutamente omessi poichè per lo scopo prefissato, squisitamente hobbistico/radioamatoriale, quanto proposto di default è sufficiente.

Installiamo OpenVpn sul Server
# apt install openvpn easy-rsa
e si crea la directory con apposito script, si entra e all'interno si crea un link al file di configurazione
# make-cadir /etc/openvpn/certs
# ln -s openssl-1.0.0.cnf openssl.cnf
adesso carichiamo le variabili e "puliamo" le chiavi
# source ./vars
# ./clean-all
ed infine generiamo il certificato. Le risposte "di default" , in genere, vanno bene.
# ./build-ca
Si crea una chiave e quanto necessario per il server
# ./build-key-server server
# openssl dhparam -out dh2048.pem 2048
# openvpn --genkey --secret ta.key
Generiamo la configurazione base per il server (server.conf)
# gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
e copiamo i file ca.crt server.crt e server.key oltre che ta.key nella cartella del server.conf
(prelevandoli da /etc/openvpn/certs/keys/) ed editiamo il file per le nostre necessità.
Vediamo le parti interessate, porta e protocollo:

i percorsi del certificato e della chiave (nella stessa directory del file di configurazione)

Possiamo lasciare i valori di default per la nuova rete VPN (il server sarà 10.8.0.1)

ed infine diamo la possibilità di far comunicare i client tra loro, fondamentale nel nostro caso se voglio dal PC di casa (un client) arrivare ad un sistema in postazione (altro client)

Abilitiamo la ta.key (valore 0 sul server) e la crittografia

l'opzione ifconfig-pool-persist ipp.txt deve essere attiva per far si che venga sempre assegnato lo stesso IP al client.
Dopo aver salvato il file ci occupiamo di attivare il servizio e renderlo operativo in fase di avvio del server
# systemctl start openvpn
# systemctl start openvpn@server
# systemctl status openvpn*.service
# systemctl enable openvpn
# systemctl enable openvpn@server
Lato server non vi sono altri passaggi se non la creazione delle singole chiavi/certificati
che andranno inseriti sui client. Procedere con
# cd /etc/openvpn/certs
# source ./vars
# ./build-key nomefileclient01
# ./build-key nomefileclient02 (proseguire così per n client...)
Client (es. raspberry): installare openvpn con
# apt install openvpn
Nella relativa directory /etc/openvpn andranno inseriti i file generati
nomefileclient01.crt nomefileclient01.key ta.key e ca.key
oltre al file di configurazione client.conf che conterrà
client
remote IP_DEL_SERVER_VPN 1194
dev tun
proto udp
ca ca.crt
cert nomefileclient01.crt
key nomefileclient01.key
tls-auth ta.key 1
cipher AES-256-CBC
Per attivare il servizio eseguire:
# systemctl start openvpn
# systemctl enable openvpn

Dovremmo quindi trovare nelle interfaccie di rete del client (ifconfig) la nuova “scheda” con l’IP relativo alla VPN. Diversamente verificare nel file di log del sistema l’errore generato. Se diamo il comando ping 10.8.0.1 dovremo avere la risposta del server e se abbiamo più client attivi sarà possibile collegarsi ad essi attraverso l’IP privato a ciascuno assegnato dal server.

Buon prove, David IK5XMK