Dernière mise à jour : 03/06/2017 à 18h34
Table des matières
Présentation
Ce tutoriel a été réalisé par le biais d'un POC comprenant deux machines virtuelles sous mageia 6
Le serveur nommé "serveurmga", connecté sur un réseau local avec l'adresse ip : 192.168.1.15
Une machine cliente nommée "clientmga" connectée au même réseau local avec l'adresse ip : 192.168.1.1.16
Clientmga établira une connexion réseau en 10.8.0.0/24 sur le serveur vpn serveurmga. Ce dernier sera configuré pour être une passerelle vers internet et proposera par défaut les DNS d'opendns.
Dans un premier temps, on désactivera le pare-feu des différentes machines via le Mageia Control Center
Installation et configuration du serveur
Code BASH :
urpmi openvpn
Copie du répertoire easy-rsa
Code BASH :
cp -r /usr/share/openvpn/easy-rsa/ /etc/openvpn/easy-rsa
On édite le fichier /etc/openvpn/easy-rsa/vars
Code BASH :
cd /etc/openvpn/easy-rsa nano vars
On modifie /etc/openvpn/easy-rsa/vars
Code TEXT :
export EASY_RSA="`pwd`"
Pour avoir
Code TEXT :
export EASY_RSA="/etc/openvpn/easy-rsa"
On modifie /etc/openvpn/easy-rsa/vars
Code BASH :
export KEY_SIZE=1024
Pour avoir
Code BASH :
export KEY_SIZE=2048
Génération des certificats de l'autorité de certification : ca.crt et ca.key
Code BASH :
cd /etc/openvpn/easy-rsa
Code BASH :
[root@localhost easy-rsa]# source ./vars NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
Code BASH :
[root@localhost easy-rsa]# ./clean-all
Code BASH :
root@localhost easy-rsa]# ./build-ca
Code BASH :
Generating a 2048 bit RSA private key ....................+++ ................+++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [US]:FR State or Province Name (full name) [CA]:FRANCE Locality Name (eg, city) [SanFrancisco]:Bordeaux Organization Name (eg, company) [Fort-Funston]:vouf.fr Organizational Unit Name (eg, section) [changeme]: Common Name (eg, your name or your server's hostname) [changeme]:serveurmga Name [changeme]:vouf Email Address [mail@host.domain]:
Génération des clés serveurs : : serveurmga.csr, serveurmga.key, serveurmga.crt
Code BASH :
[root@localhost easy-rsa]# ./build-key-server serveurmga
Code BASH :
Generating a 2048 bit RSA private key .......................................+++ ................................................................+++ writing new private key to 'serveurmga.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [US]:FR State or Province Name (full name) [CA]:FRANCE Locality Name (eg, city) [SanFrancisco]:Bordeaux Organization Name (eg, company) [Fort-Funston]:vouf.fr Organizational Unit Name (eg, section) [changeme]: Common Name (eg, your name or your server's hostname) [serveurmga]:serveurmga Name [changeme]:vouf Email Address [mail@host.domain]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: On ne saisi pas de mot de passe An optional company name []: Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'FR' stateOrProvinceName :PRINTABLE:'FRANCE' localityName :PRINTABLE:'Bordeaux' organizationName :PRINTABLE:'vouf.fr' organizationalUnitName:PRINTABLE:'changeme' commonName :PRINTABLE:'serveurmga' name :PRINTABLE:'vouf' emailAddress :IA5STRING:'mail@host.domain' Certificate is to be certified until Jun 1 13:06:57 2027 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
Fichier de configuration du serveur openvpn
serveurmga.crt
-rw-r--r-- 1 root root 1074 juin 3 15:06 serveurmga.csr
-rw------- 1 root root 1704 juin 3 15:06 serveurmga.key
Fichier de configuration du serveur /etc/openvpn/server.conf
Code TEXT :
local 192.168.1.15 # adresse IP locale de votre serveur dev tun # type de VPN, tun (tunnel IP) ou tap (tunnel Ethernet/bridge) proto udp # protocole à utiliser : tcp ou udp, généralement udp port 1194 # le port par défaut pour OpenVPN, à ajuster au besoin ca /etc/openvpn/easy-rsa/keys/ca.crt # clé publique de l’autorité de certification cert /etc/openvpn/easy-rsa/keys/serveurmga.crt # Clé publique du serveur key /etc/openvpn/easy-rsa/keys/serveurmga.key # Clé privée du serveur dh /etc/openvpn/easy-rsa/keys/dh2048.pem # si vous êtes restés sur du 2024 bits server 10.8.0.0 255.255.255.0 #le réseau au sein duquel vous allez attribuer des IP. Les clients auront une ip en 10.8.0x push "redirect-gateway def1 bypass-dhcp" # Permet au serveur de se comporter comme une passerelle. #push "dhcp-option DNS 10.8.0.1" # votre serveur DNS primaire (votre routeur, souvent) push "dhcp-option DNS 208.67.222.222" # votre serveur DNS primaire OpenDNS push "dhcp-option DNS 208.67.220.220" # votre serveur DNS primaire OpenDNS # vous pouvez aussi utiliser le DNS Google 8.8.8.8 ou OpenDNS 208.67.222.222 # pour le reste, a priori pas de raisons d'y toucher à moins de savoir ce que vous faites ! client-to-client duplicate-cn keepalive 10 120 tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0 cipher AES-128-CBC comp-lzo user nobody group nogroup persist-key persist-tun status /var/log/openvpn-status.log 20 log /var/log/openvpn.log verb 3
Code BASH :
nano /etc/sysctl.conf
Ajouter à la fin du fichier /etc/sysctl.conf
Code TEXT :
net.ipv4.ip_forward = 1
Commande à jouer à chaque redémarrage du serveur. Voir comment l’exécuter automatiquement à chaque reboot.
Code BASH :
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o enp0s3 -j MASQUERADE
[style=notice] Attention au nom de la carte. Ici il s'agit de la carte ethernet enp0s3. Cela peut varier en fonction du matériel[!style]
Code BASH :
[root@localhost keys]# ifconfig -a enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.15 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 2a01:cb19:1a2:5200:a00:27ff:fe00:b346 prefixlen 64 scopeid 0x0<global> inet6 fe80::a00:27ff:fe00:b346 prefixlen 64 scopeid 0x20<link> ether 08:00:27:00:b3:46 txqueuelen 1000 (Ethernet) RX packets 194036 bytes 138807516 (132.3 MiB) RX errors 0 dropped 2 overruns 0 frame 0 TX packets 191523 bytes 135687027 (129.4 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1 (Boucle locale) RX packets 34 bytes 4214 (4.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 34 bytes 4214 (4.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500 inet 10.8.0.1 netmask 255.255.255.255 destination 10.8.0.2 inet6 fe80::3a19:dbb5:604e:afb8 prefixlen 64 scopeid 0x20<link> unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC) RX packets 79307 bytes 22061882 (21.0 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 110498 bytes 105230363 (100.3 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Création du service openvpn pour démarrer le serveur
Code BASH :
[root@localhost etc]# systemctl enable openvpn@server.service
Résultat de la commande pour créer le service openvpn via systemctl
Code BASH :
Created symlink /etc/systemd/system/openvpn.target.wants/openvpn@server.service → /usr/lib/systemd/system/openvpn@.service.
Démarrage du serveur openvpn
Code BASH :
systemctl start openvpn@server.service
Création des certificats des clients et du fichier
Code BASH :
[root@localhost easy-rsa]# ./build-key-pass clientmga
[sound]
Code BASH :
Generating a 2048 bit RSA private key .........................+++ .......+++ writing new private key to 'clientmga.key' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [US]:FR State or Province Name (full name) [CA]:FRANCE Locality Name (eg, city) [SanFrancisco]:Bordeaux Organization Name (eg, company) [Fort-Funston]:vouf.fr Organizational Unit Name (eg, section) [changeme]: Common Name (eg, your name or your server's hostname) [clientmga]: Name [changeme]:vouf Email Address [mail@host.domain]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'FR' stateOrProvinceName :PRINTABLE:'FRANCE' localityName :PRINTABLE:'Bordeaux' organizationName :PRINTABLE:'vouf.fr' organizationalUnitName:PRINTABLE:'changeme' commonName :PRINTABLE:'clientmga' name :PRINTABLE:'vouf' emailAddress :IA5STRING:'mail@host.domain' Certificate is to be certified until Jun 1 13:10:54 2027 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
Code BASH :
cd keys
Code BASH :
[root@localhost keys]# openssl rsa -in clientmga.key -des3 -out clientmga.3des.key
Code BASH :
Enter pass phrase for clientmga.key:
writing RSA key
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
Code BASH :
[root@localhost keys]# cd /etc/openvpn/easy-rsa
Code BASH :
[root@localhost easy-rsa]# ./build-dh
Code BASH :
Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time ................................................................................................................+............................................................................................................................ ....................+........+...............................................................+.............+................................................................................................................................. ........................+....................................................+............................................................+..................................................+........+...................................... ................................................................................................................................................................................................................................+............ .....+...............................................................................+........................................................+.............................................................................................. ...............................................................+..........................................+..............................................................+................................................................... ....................................................................................................................+....................................................+..............++*++*
Code BASH :
openvpn --genkey --secret keys/ta.key
Fichier de configuration du client
Code BASH :
cd /etc/openvpn/easy-rsa/keys nano Default.txt
Code TEXT :
client dev tun proto udp # Protocol udp remote serveurmga 1194 # on peut mettre l'ip du serveur vpn, ou le nom de domaine. On retrouve le port 1194 resolv-retry infinite nobind persist-key persist-tun mute-replay-warnings ns-cert-type server key-direction 1 cipher AES-128-CBC comp-lzo verb 1 mute 20
Télécharger MakeOpenVPN.sh et le copier sous /etc/openvpn/easy-rsa/keys
Code BASH :
[root@localhost keys]# bash MakeOpenVPN.sh
Code BASH :
Entrez le nom d'un client existant :
clientmga
Clé publique trouvée : clientmga
Clé privée trouvée : clientmga.3des.key
Clé publique CA trouvée : ca.crt
Clé privée tls-auth trouvée : ta.key
Terminé ! clientmga.ovpn généré avec succès.
Mis à jour par Vouf le 03/06/2017
Sources d'information qui ont permis de produire ce tutorial
[Tuto] Monter son VPN perso avec OpenVPN
Fil de discussion sur le forum MLO