Vultr ti offre una straordinaria connettività di rete privata per server che funzionano nella stessa posizione. Ma a volte vuoi che due server in diversi paesi / data center siano in grado di comunicare in modo privato e sicuro. Questo tutorial ti mostrerà come raggiungerlo con l'aiuto di OpenVPN. I sistemi operativi usati qui sono Debian e CentOS, solo per mostrarti due diverse configurazioni. Questo può essere facilmente adattato per Debian -> Debian, Ubuntu -> FreeBSD e così via.
- Macchina 1: Debian, fungerà da server (Posizione: NL)
- Macchina 2: CentOS, fungerà da client (Posizione: FR)
Macchina 1
Avviare sulla macchina 1 installando OpenVPN:
apt-get install openvpn
Quindi, copia la configurazione di esempio e lo strumento per generare le chiavi easy-rsa
, in /etc/openvpn
:
cp -r /usr/share/doc/openvpn/examples/easy-rsa/ /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn
I valori predefiniti per le tue chiavi non sono più esattamente sicuri, per risolvere questo problema /etc/openvpn/easy-rsa/2.0/vars
con il tuo editor di testo preferito e modificare la seguente riga:
export KEY_SIZE=4096
Successivamente, assicurati che i valori siano caricati nella sessione corrente, pulisca eventualmente le chiavi esistenti e generi l'autorità di certificazione:
cd /etc/openvpn/easy-rsa/2.0
source ./vars
./clean-all
./build-ca
Ti verranno richieste informazioni. Semplifica la vita fornendo informazioni sul tuo server, ad esempio, dove si trova e quale sarà / sarà l'FQDN. Ciò è utile per i problemi di debug:
Country Name (2 letter code) [US]:NL
State or Province Name (full name) [CA]:-
Locality Name (eg, city) [SanFrancisco]:Vultr Datacenter NL
Organization Name (eg, company) [Fort-Funston]:-
Organizational Unit Name (eg, section) [changeme]:-
Common Name (eg, your name or your server's hostname) [changeme]:yourserver1.yourdomain.tld
Name [changeme]:-
Email Address [[email protected]]:[email protected]
Un'altra necessità sono i parametri per lo scambio di chiavi Diffie-Hellman. Anche quelli devono essere generati:
./build-dh
Importante : il build-dh
comando è un processo relativamente complesso che può richiedere fino a dieci minuti, a seconda delle risorse del server.
Per migliorare ulteriormente la sicurezza di questa connessione, genereremo un segreto statico che deve essere distribuito tra tutti i client:
mkdir /etc/openvpn/keys
openvpn --genkey --secret /etc/openvpn/keys/ta.key
Ora puoi generare la chiave per il server:
./build-key-server server1
Questo comando richiederà alcune informazioni:
Country Name (2 letter code) [US]:NL
State or Province Name (full name) [CA]:-
Locality Name (eg, city) [SanFrancisco]:Vultr Datacenter NL
Organization Name (eg, company) [Fort-Funston]:-
Organizational Unit Name (eg, section) [changeme]:-
Common Name (eg, your name or your server's hostname) [server1]:yourserver1.yourdomain.tld
Name [changeme]:-
Email Address [[email protected]]:[email protected]
Il passaggio finale consiste nel firmare la richiesta di certificato appena generata con la chiave della CA:
1 out of 1 certificate requests certified, commit? [y/n]y
Copia le chiavi e i certificati necessari in una cartella separata:
cd /etc/openvpn/easy-rsa/2.0/keys
cp dh4096.pem ca.crt server1.crt server1.key /etc/openvpn/keys/
chmod 700 /etc/openvpn/keys
chmod 600 /etc/openvpn/keys/*
Ora per la configurazione, decomprimilo ...
cd /etc/openvpn
gunzip server.conf.gz
... e apri il risultato server.conf
con il tuo editor di testo preferito. La configurazione dovrebbe essere simile a questa:
port 1194
proto udp
dev tun
ca keys/ca.crt
cert keys/server1.crt
key keys/server1.key
dh keys/dh4096.pem
server 10.8.100.0 255.255.255.0
ifconfig-pool-persist ipp.txt
# Uncomment this if you have multiple clients
# and want them to be able to see each other
;client-to-client
keepalive 10 120
tls-auth keys/ta.key 0
tls-cipher DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES128-SHA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA
cipher AES-256-CBC
auth SHA384
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
verb 3
mute 20
Dopo aver riavviato il servizio, dovresti guardare un po 'il tuo registro ...
service openvpn restart && tail -f /var/log/syslog
... per assicurarsi che tutto funzioni. Se non vengono rilevati errori, è possibile generare le chiavi per il secondo server:
cd /etc/openvpn/easy-rsa/2.0
source ./vars
./build-key server2
Ancora una volta, ti verranno richieste informazioni:
Country Name (2 letter code) [US]:FR
State or Province Name (full name) [CA]:-
Locality Name (eg, city) [SanFrancisco]:Vultr Datacenter FR
Organization Name (eg, company) [Fort-Funston]:-
Organizational Unit Name (eg, section) [changeme]:-
Common Name (eg, your name or your server's hostname)
[server2]:yourserver2.yourdomain.tld
Name [changeme]:-
Email Address [[email protected]]:[email protected]
Ora, è necessario trasferire i file necessari sul secondo server, preferibilmente crittografati:
cd /etc/openvpn/easy-rsa/2.0/keys
cp /etc/openvpn/keys/ta.key .
tar -cf vpn.tar ca.crt server2.crt server2.key ta.key
scp vpn.tar yourusername@server2:~/
rm vpn.tar
Macchina 2
È ora di passare alla connessione SSH del secondo server . Il primo passo è installare OpenVPN ...
yum install openvpn
... e per disattivare firewalld
. La sostituzione sarà semplice iptables.
systemctl stop firewalld
systemctl disable firewalld
Decomprimere l'archivio appena spostato sul server e impostare correttamente le autorizzazioni sui file:
cd /etc/openvpn
mkdir keys
chmod 700 keys
cd keys
tar -xf ~/vpn.tar -C .
chmod 600 *
Crea /etc/openvpn/client.conf
con il tuo editor di testo preferito. Dovrebbe sembrare come questo:
client
dev tun
proto udp
remote yourserver yourport
resolv-retry infinite
nobind
user nobody
group openvpn
persist-key
persist-tun
ca keys/ca.crt
cert keys/server2.crt
key keys/.key
ns-cert-type server
tls-auth keys/ta.key 1
tls-cipher DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES128-SHA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA
cipher AES-256-CBC
auth SHA384
remote-cert-tls server
comp-lzo
verb 3
mute 20
L'ultimo passaggio è avviare e abilitare il servizio:
systemctl start [email protected]
systemctl enable [email protected]
Se tutto funziona, non dovresti avere problemi a eseguire il ping del primo server:
PING 10.8.100.1 (10.8.100.1) 56(84) bytes of data.
64 bytes from 10.8.100.1: icmp_seq=1 ttl=64 time=17.8 ms
64 bytes from 10.8.100.1: icmp_seq=2 ttl=64 time=17.9 ms
64 bytes from 10.8.100.1: icmp_seq=3 ttl=64 time=17.8 ms
Ora hai una connessione privata su Internet!
Se è necessario risolvere eventuali errori, provare a controllare i registri con il comando seguente:
journalctl -xn