Table des matières

, , , , , , , , , ,

Ajouter un nouveau client à notre serveur OpenVPN

Pour faire suite a l'article (qui n'existe pas encore ;-) )sur le serveur, voici comment ajouter un nouveau client.

Prérequis :

Coté client il existe 2 manières de faire :
  • Utiliser une configuration globale système (avec connexion automatique au VPN au démarrage) ce que nous allons faire
  • Utiliser une configuration plus orientée poste nomade avec une connexion VPN à la demande via network-manager

Nous allons nous intéresser au premier cas

Nous allons configurer une connexion VPN automatique sans mot de passe avec notre réseau. Ne faites pas ceci sur une machine susceptible de se faire voler ou d'être perdue. Sur ce type de machine il faudra préférer :
  • une clef avec passphrase
  • une connexion manuelle

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

Prérequis

Poste client

Générer le certificat

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.

Configuration du client

# 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
Ceci est une configuration standard :
  • on définit le mode client, l'adresse/port/protocole du serveur (ici vpn.mondomaine.com en udp sur le port 1194 : vous devriez vouloir changer au moins le nom du serveur)
  • le mode de l'interface réseau utilisé : j'ai choisi tun. On peut aussi noter que j'aime bien nommer cette interface avec un nom explicite : “vpn-chezoam”
  • Il faut bien sur adapter les noms “nouveauClient.crt” et “nouveauClient.key” des directives cert et key à votre client
  • Enfin j'active la compression lzo (qui doit aussi être activée coté serveur)
  • Et un peu de verbosité parce que ça ne fait pas de mal

C'en est fini de la configuration coté client : il ne reste plus qu'à configurer notre serveur pour ce nouveau client.

Configuration du serveur

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
Noter ici que l'on utilise le nom du client “nouveauClient” et donc qu'il ne faut pas mettre d'extension à ce fichier, mais le nommer en accord avec votre nom de client

Finalisation

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

Un peu plus loin

Utiliser le ccd pour passer moins de paramètres a certains clients

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

Relancer des services apres la connexion du client openvpn

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:

Il va sans dire qu'il ne faut pas donner les droits de modifier ce script a n'importe qui étant donné qu'il sera lancé en root ;-)

Références