Vultr vous offre une connectivité réseau privée impressionnante pour les serveurs fonctionnant au même endroit. Mais parfois, vous voulez que deux serveurs dans des pays / centres de données différents puissent communiquer de manière privée et sécurisée. Ce tutoriel vous montrera comment y parvenir avec l'aide d'OpenVPN. Les systèmes d'exploitation utilisés ici sont Debian et CentOS, juste pour vous montrer deux configurations différentes. Cela peut être facilement adapté pour Debian -> Debian, Ubuntu -> FreeBSD et ainsi de suite.
- Machine 1: Debian, servira de serveur (Emplacement: NL)
- Machine 2: CentOS, agira en tant que client (Emplacement: FR)
Machine 1
Démarrez sur la machine 1 en installant OpenVPN:
apt-get install openvpn
Ensuite, copiez l'exemple de configuration et l'outil de génération de clés easy-rsa
, dans /etc/openvpn
:
cp -r /usr/share/doc/openvpn/examples/easy-rsa/ /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn
Les valeurs par défaut de vos clés ne sont plus exactement sûres, pour résoudre ce problème /etc/openvpn/easy-rsa/2.0/vars
avec votre éditeur de texte préféré et modifier la ligne suivante:
export KEY_SIZE=4096
Ensuite, assurez-vous que les valeurs sont chargées dans votre session en cours, nettoyez éventuellement les clés existantes et générez votre autorité de certification:
cd /etc/openvpn/easy-rsa/2.0
source ./vars
./clean-all
./build-ca
Vous serez invité à fournir des informations. Facilitez-vous la vie en fournissant des informations sur votre serveur, par exemple, où il se trouve et ce que le FQDN est / sera. Ceci est utile lorsque vous devez déboguer des problèmes:
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 [mail@host.domain]:youraddress@yourdomain.tld
Une autre nécessité concerne les paramètres de l'échange de clés Diffie-Hellman. Celles-ci doivent également être générées:
./build-dh
Important : La build-dh
commande est un processus relativement complexe qui peut prendre jusqu'à dix minutes, selon les ressources de votre serveur.
Pour améliorer encore la sécurité de cette connexion, nous allons générer un secret statique qui doit être distribué à tous les clients:
mkdir /etc/openvpn/keys
openvpn --genkey --secret /etc/openvpn/keys/ta.key
Maintenant, vous pouvez générer la clé du serveur:
./build-key-server server1
Cette commande vous demandera des informations:
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 [mail@host.domain]:youraddress@yourdomain.tld
La dernière étape consiste à signer la demande de certificat qui vient d'être générée avec la clé de l'autorité de certification:
1 out of 1 certificate requests certified, commit? [y/n]y
Copiez les clés et certificats nécessaires dans un dossier séparé:
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/*
Maintenant pour la configuration, décompressez-la ...
cd /etc/openvpn
gunzip server.conf.gz
... et ouvrez le résultat server.conf
avec votre éditeur de texte préféré. La configuration devrait ressembler à ceci:
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
Après avoir redémarré le service, vous devriez regarder un peu votre journal ...
service openvpn restart && tail -f /var/log/syslog
... pour vous assurer que tout fonctionne. Si aucune erreur n'est détectée, vous pouvez générer les clés de votre deuxième serveur:
cd /etc/openvpn/easy-rsa/2.0
source ./vars
./build-key server2
Encore une fois, vous serez invité à fournir des informations:
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 [mail@host.domain]:youraddress@yourdomain.tld
Maintenant, vous devez transférer les fichiers nécessaires sur votre deuxième serveur, de préférence cryptés:
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
Machine 2
Il est temps de passer à la connexion SSH de votre deuxième serveur . La première étape consiste à installer OpenVPN ...
yum install openvpn
... et pour désactiver firewalld
. Le remplacement sera de simples iptables.
systemctl stop firewalld
systemctl disable firewalld
Décompressez l'archive que vous venez de déplacer sur le serveur et définissez correctement les autorisations sur les fichiers:
cd /etc/openvpn
mkdir keys
chmod 700 keys
cd keys
tar -xf ~/vpn.tar -C .
chmod 600 *
Créez /etc/openvpn/client.conf
avec votre éditeur de texte préféré. Ça devrait ressembler à ça:
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
La dernière étape consiste à démarrer et activer le service:
systemctl start openvpn@client.service
systemctl enable openvpn@client.service
Si tout fonctionne, vous ne devriez avoir aucun problème à envoyer une requête ping au premier serveur:
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
Vous avez maintenant une connexion privée sur Internet!
Si vous devez résoudre les erreurs, essayez de vérifier les journaux avec la commande suivante:
journalctl -xn