Appunti testati su Ubuntu 16.04 e validi fino a Ubuntu 18.04.
Non fornisco supporto su questa discussione.
Questa discussione ha il solo scopo di suggerire all'utente "inesperto" una strada molto veloce per l'installazione e configurazione del servizio OpenVPN.
Questo è solo un modo! Altre scelte potrebbero essere fatte sulla base delle proprie necessità.
Per qualsiasi: correzione, osservazione, suggerimento o altro, inerente questa discussione, cortesemente, mandatemi un messaggio in privato.
Happy Linux
Note:
- dove non esplicitamente detto, tutti i comandi devono essere eseguiti come root (*) oppure anteponendo il comando sudo
- eseguendo i comandi, dove vi vengono poste delle domande, accettate la scelta di default, ossia premete il tasto [INVIO] oppure il tasto [y]
(*) Molto comodamente, è possibile aprire una shell di root utilizzando il comando
Codice: Seleziona tutto
sudo -s
Codice: Seleziona tutto
apt-get install openvpn easy-rsa
Codice: Seleziona tutto
make-cadir /etc/openvpn/easy-rsa
Codice: Seleziona tutto
cd /etc/openvpn/easy-rsa
Codice: Seleziona tutto
source ./vars
Codice: Seleziona tutto
./clean-all
Codice: Seleziona tutto
./build-ca
Se dovesse apparire il messagio di errore: "The correct version should have a comment that says: easy-rsa version 2.x" dare il seguente comando
e ripetereCodice: Seleziona tutto
ln -s openssl-1.0.0.cnf openssl.cnf
Codice: Seleziona tutto
./build-ca
Codice: Seleziona tutto
./build-dh
Codice: Seleziona tutto
openvpn --genkey --secret /etc/openvpn/easy-rsa/keys/ta.key
Codice: Seleziona tutto
./build-key-server PINCOPALLINO_server
Codice: Seleziona tutto
./build-key PINCOPALLINO_client_01
Nella directory /etc/openvpn creare il file server.confoppure, in alternativa al comando precedente,
se si desidera che ad ogni connessione dal PC CLIENT verso il PC SERVER venga richiesta una anche password aggiuntiva ai certificati della VPN.Codice: Seleziona tutto
./build-key-pass PINCOPALLINO_client_01
Codice: Seleziona tutto
cd /etc/openvpn
touch /etc/openvpn/server.conf
Codice: Seleziona tutto
port 1194
; proto tcp
proto udp
dev tun
# Console di management
; management 127.0.0.1 1195
# Ottimizzazioni per le performance del protocollo TCP
; sndbuf 0
; rcvbuf 0
; push "sndbuf 393216"
; push "rcvbuf 393216"
# Ottimizzazioni per le performance del protocollo UDP
sndbuf 393216
rcvbuf 393216
push "sndbuf 393216"
push "rcvbuf 393216"
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/PINCOPALLINO_server.crt
key /etc/openvpn/easy-rsa/keys/PINCOPALLINO_server.key
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0
topology subnet
server 10.0.0.0 255.255.255.0
; max-clients 100
client-to-client
duplicate-cn
# Se si vuole usare la direttiva client-config-dir commentare la direttiva duplicate-cn
; client-config-dir /etc/openvpn/ccd
# In caso di topology subnet, il file /etc/openvpn/ccd/CLIENT_COMMON_NAME deve essere scritto con la seguente sintassi
# ifconfig-push 10.0.0.### 255.255.255.0
keepalive 10 120
cipher AES-128-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status /etc/openvpn/openvpn-status.log
log /etc/openvpn/openvpn.log
verb 3
# Le seguenti direttive possono essere impartite indifferentemente sia sulla configurazione del server sia sulla configurazione del client
# Personalmente ritengo che abilitarle / disabilitarle sulla configurazione del client sia una soluzione più flessibile
# Per redirigere il default gateway del client verso il server OpenVPN
; push "redirect-gateway def1"
# Per raggiungere tutta la LAN cui appartiene il server OpenVPN attraverso la VPN
; push "route 192.168.0.0 255.255.255.0"
# Affinche' le seguenti direttive funzionino su Linux, sulla configurazione del client decommentare le direttive per l'abilitazione dello scripting
; push "dhcp-option DNS 192.168.0.1"
; push "dhcp-option DNS 208.67.222.222"
; push "dhcp-option DNS 208.67.220.220"
Codice: Seleziona tutto
chown root:root /etc/openvpn/server.conf
chmod 600 /etc/openvpn/server.conf
Con riferimento allo schema di rete riportato più sotto:
- il servizio OpenVPN viene installato su un PC SERVER che ha indirizzo IP (di esempio) 192.168.0.100, inserito in una LAN di range 192.168.0.0 / 24 e il cui gateway ha indirizzo IP 192.168.0.1.
- il servizio OpenVPN attiverà automaticamente un'interfaccia di rete virtuale tun0 che avrà indirizzo IP (di esempio) 10.0.0.1.
- il PC CLIENT "remoto" ha indirizzo IP (di esempio) 172.16.0.200 , è inserito in una LAN di range 172.16.0.0 / 24 e il relativo gateway ha indirizzo IP 172.16.0.254.
- la VPN che si è implementata è di tipo routed. Ciò significa la scheda di rete fisica eth0 del PC SERVER, la scheda di rete virtuale tun0 del PC SERVER e la scheda di rete fisica eth0 del PC CLIENT "remoto" devono appartenere a tre subnet diverse. Nella nostra configurazione rispettivamente 192.168.0.0 / 24 , 10.0.0.0 / 24 e 172.16.0.0 / 24
- il file di configurazione proposto per il server contiene già delle direttive commentate (righe che iniziano con il carattere ; ) che possono essere velocemente sbloccate per attivare delle funzionalità "più avanzate".
Una volta che il PC SERVER si è riavviato, verificare che il servizio OpenVPN si sia attivato correttamente utilizzando i comandi
Codice: Seleziona tutto
systemctl status openvpn.service
(output atteso)
● openvpn.service - OpenVPN service
Loaded: loaded (/lib/systemd/system/openvpn.service; enabled; vendor preset: enabled)
Active: active (exited) since Sat 2018-01-06 16:36:22 CET; 40min ago
Process: 2438 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 2438 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/openvpn.service
Jan 06 16:36:22 alexa systemd[1]: Starting OpenVPN service...
Jan 06 16:36:22 alexa systemd[1]: Started OpenVPN service.
Codice: Seleziona tutto
netstat -tulnp | grep openvpn
(output atteso)
udp 0 0 0.0.0.0:1194 0.0.0.0:* 2449/openvpn
Codice: Seleziona tutto
ifconfig
(output atteso)
...
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.0.0.1 netmask 255.255.255.0 destination 10.0.0.1
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Codice: Seleziona tutto
route -n
(output atteso)
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Codice: Seleziona tutto
systemctl [start|status|stop|restart|reload|reload-or-restart] openvpn.service
Nota:
ovviamente i nomi PINCOPALLINO_server e PINCOPALLINO_client_01 possono essere modificati a piacere. Basta farlo dappertutto in modo congruente.
Il mio suggerimento però è quello di adottare la forma HOSTNAME_server e HOSTNAME_client_01 dove HOSTNAME è il nome che abbiamo attribuito al server, ossia quello che viene fuori dal comando
Codice: Seleziona tutto
hostname