Pour faire suite a l'article (qui n'existe pas encore )sur le serveur, voici comment ajouter un nouveau client.
Prérequis :
Nous allons nous intéresser au premier cas
Et bien sur si le pire arrivait, notifier au plus vite votre administrateur système (ca tombe bien ca devrait être vous ;) ) et révoquer dans les plus brefs délais les certificats perdus/volés
# apt-get install openvpn
Nous allons supposer ici que vous utilisez easy-rsa pour la gestion de votre PKI OpenVPN, ce qui est souvent le cas par défaut. Sinon vous devriez savoir adapter la suite.
# cd /etc/openvpn/easy-rsa # source ./vars
# ./pkitool nouveauClient
ce qui devrait vous afficher quelque chose de similaire à :
# ./pkitool nouveauClient Generating a 1024 bit RSA private key .....................++++++ ....................................++++++ writing new private key to 'nouveauClient.key' ----- Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'FR' stateOrProvinceName :PRINTABLE:'MaProvince' localityName :PRINTABLE:'MaVille' organizationName :T61STRING:'Chez_oam' commonName :PRINTABLE:'nouveauClient' emailAddress :IA5STRING:'root@mondomaine.com' Certificate is to be certified until Jan 11 10:29:19 2025 GMT (3650 days) Write out database with 1 new entries Data Base Updated
# ls /etc/openvpn/easy-rsa/keys/nouveauClient.* /etc/openvpn/easy-rsa/keys/nouveauClient.crt /etc/openvpn/easy-rsa/keys/nouveauClient.csr /etc/openvpn/easy-rsa/keys/nouveauClient.key
# grep "^ca" /etc/openvpn/server.conf
qui devrait vous donner quelque chose comme :
# grep "^ca" /etc/openvpn/server.conf ca keys/ca.crt
# ls /etc/openvpn/ nouveauClient.crt nouveauClient.key ca.crt update-resolv-conf
# cat << EOF > /etc/openvpn/client.conf client remote vpn.mondomaine.com 1194 proto udp nobind persist-key persist-tun dev-type tun dev vpn-chezoam user nobody group nogroup ca ca.crt cert nouveauClient.crt key nouveauClient.key comp-lzo verb 4 EOF
C'en est fini de la configuration coté client : il ne reste plus qu'à configurer notre serveur pour ce nouveau client.
Le serveur utilise un “client configuration directory” (aka ccd). Il faut donc ajouter un nouveau fichier dans ce répertoire pour notre nouveau client.
C'est le moment d'assigner une IP à notre nouveau client avec la directive ifconfig-push Chaque paire d'adresse de ifconfig-push représente les adresses virtuelles du client et du serveur. Elles doivent être prises dans des sous réseaux /30 pour être compatibles avec les clients windows (et plus spécifiquement le driver TAP windows).
Si la phrase ci dessus est du chinois, sachez juste qu'il faut prendre les couples d'adresses dans les couples suivants :
[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18] [ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38] [ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58] [ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78] [ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98] [101,102] [105,106] [109,110] [113,114] [117,118] [121,122] [125,126] [129,130] [133,134] [137,138] [141,142] [145,146] [149,150] [153,154] [157,158] [161,162] [165,166] [169,170] [173,174] [177,178] [181,182] [185,186] [189,190] [193,194] [197,198] [201,202] [205,206] [209,210] [213,214] [217,218] [221,222] [225,226] [229,230] [233,234] [237,238] [241,242] [245,246] [249,250] [253,254]
Je vais donc choisir [13,14] (qui sont bien sur libres sur le réseau OpenVPN auquel je veux associer ce nouveauClient : 192.168.3.0/24) :
# cat << EOF > /etc/openvpn/ccd/nouveauClient ifconfig-push 192.168.3.13 192.168.3.14 EOF
Tout devrait maintenant être en place pour nous permettre de tenter une connexion. Pour ce faire, sur votre client :
# service openvpn restart
Vous pouvez vérifier les logs coté client et serveur (dans /var/log/syslog) pour découvrir pourquoi si jamais la connexion échoue
On peut utiliser le fichier ccd de chaque client pour lui ajouter des paramètres donnés par le serveur, mais on peut aussi dire au serveur de ne lui en donner que quelques-uns. Par exemple si sur un des clients vous ne voulez pas qu'il ait la route vers un sous réseau interne définie dans la conf générale de votre serveur.
Il faut pour cela utiliser push-reset dans le fichier ccd qui flush ce qui va être envoyé du serveur vers ce client spécifique. Cete directive fait néanmoins un peu trop le ménage et il faut donc lui redonner la route vers le sous réseau du serveur openvpn lui meme (ici 192.168.3.0/24), comme par exemple dans l'exemple suivant :
$ cat ccd/monClient push-reset push "route 192.168.3.0 255.255.255.0" ifconfig-push 192.168.3.201 192.168.3.202
Il peut être utile de (re)lancer un script et/ou des services une fois le client connecté, par exemple un service qui doit se binder sur l'ip VPN (monitoring nagios, munin, backup, ….)
Pour se faire:
# cat << EOF >> /etc/openvpn/client.conf # on ajoute un script de restart pour nrpe et munin-node script-security 2 # run /etc/openvpn/up.sh when the connection is set up up /etc/openvpn/up.sh EOF
# cat << EOF > /etc/openvpn/up.sh #!/bin/bash # # restart services so they can bind to VPN ip address # service munin-node restart service nagios-nrpe-server restart EOF
# chmod +x /etc/openvpn/up.sh
# service openvpn restart