Catégories
Open-source Planet-libre

Glances 1.7.2 et son interface pour Windows

glances-white-256

Glances est maintenant disponible dans sa version 1.7.2. Au chapitre des nouveautés, une nouvelle interface cliente pour ceux d’entre vous qui ne peuvent pas se passer, par choix ou par contrainte, du système d’exploitation Microsoft Windows.  Cette interface se base sur la librairie ColorConsole et permet dans une console de commande Windows d’avoir un « look and feel » qui se rapproche de la version GNU/Linux.

Voici le résultat dans une console standard sous Windows 7:

glances-1.7.2-windows-cmd

Je vous conseille cependant de télécharger la console Console2 qui comble en partie les manques de la console par défaut (cmd).

glances-1.7.2-windows-console2

Afin de faciliter l’installation sur Windows, Frédéric Aoustin a eu la bonne idée de créer un installeur qui installe Python, les librairies nécessaires ainsi que Glances. L’installeur est disponible ici:

downloadGlances-1.7.2-win32.msi
(32-bit, MD5: dba4f6cc9f47b6806ffaeb665c093270)

Je pense que la plupart des lecteurs de ce blog ne seront jamais arrivés jusqu’ici mais si c’est le cas, ils seront heureux d’apprendre que cette version apporte également les améliorations suivantes:

  • Mise à jour de la documentation
  • Amélioration du packaging pour BSD et OpenSuse
  • Correction de nombreux bugs

Pour les Linuxiens, une mise à jour à partir de Pip est à faire avec la ligne de commande:

sudo pip install --upgrade Glances

A vos commentaires…

Catégories
Developpement Open-source Planet-libre Systeme

Package d’installation pour Glances sous Windows

Grâce au travail de Nicolas Bourges, Glances dispose désormais d’un installeur pour sa version Windows. Vous pouvez donc installer Glances 1.6.1 en version 32 ou 64 bits sans avoir à installer les pré-requis (Python, librairie PsUtil…) puisque tout est « packagé » dans le binaire.

On commence par télécharger le programme d’installation:

download
Télécharger Glances 1.6.1 en version 64 bits
(ou en version 32 bits)

MD5sum

glances-1.6.0-x64.exe                         a347ec5097d6d4d5039c7233872757a8

glances-1.6.0-x86.exe                         13d5be664599f80152f8f1ae47400576

Puis on se laisse guider dans le wizard d’installation qui va mettre, par défaut, le binaire Glances.exe dans le répertoire C:\Program Files\Glances puis créer un raccourci sur votre bureau.

En cliquant sur ce raccourci, Glances va se lancer automatiquement en mode serveur. Pour ajouter d’autres paramètres (comme le mot de passe) il suffit de modifier ce raccourci pour y ajouter les options voulues (par exemple -P <motdepasse>).

Il ne vous reste plus qu’à revenir sur un vrai OS (ndlr: Nicolargo, tu me copieras 100 fois « Je ne trollerai plus. ») puis à lancer la commande:

glances -c <addresse IP machine Windows>

glancesonwin7

Et hop, vous pouvez maintenant surveiller vos machines Windows en une ligne de commande !

Catégories
Open-source Planet-libre Reseau Systeme

Installation et configuration de Munin, le maître des graphes

Munin est un logiciel de supervision permettant de centraliser la gestion des graphes de données RRDTools. Il permet en quelques commandes que nous allons détailler dans ce billet de générer des graphes complexes pour surveiller vous machines et les processus qui tournent dessus.

Voici un exemple de graphe sur les statistiques remontées par un serveur utilisant Varnish:

Introduction

Munin est proposé sous la forme de deux packages complémentaires: munin et munin-node.

Le premier (munin) est à installer sur votre serveur de supervision (appelé maître). Son objectif principal est de récupérer les données venant des machines à surveiller puis de générer des graphes qui seront présentés aux utilisateurs via une interface Web.

Le second  (munin-node) est à installer sur toutes les machines à superviser (appelées noeuds). Son objectif est de collecter les informations systèmes en utilisant des plugins (présent dans le package munin-node et dans munin-plugins-extra).

La communication entre le serveur maître et les machines noeuds utilise, par défaut le protocole TCP/4949 (initialisation de la connexion TCP de la part du serveur maître).

Installation de Munin

Pour la suite de ce billet (et sauf mention spécifique), je partirai sur le principe ou vous utilisez des machines sous Debian/Ubuntu.

Installation de Munin sur le serveur maître

Le serveur maître doit disposer d’un serveur Web (voir ce billet pour installer simplement NGinx sur votre système) configuré avec le répertoire root par défaut: /var/www.

Comme Munin est présent dans les dépôts officiels, il suffit de saisir la commande suivant qui va installer le package maître ainsi que le package esclave histoire de pouvoir superviser son serveur de supervision…:

sudo apt-get install munin munin-node munin-plugins-extra

sudo ln -s /var/cache/munin/www /var/www/munin

sudo /etc/init.d/munin-node restart

En faisant pointer un navigateur Web vers l’URL:

http://votreserveurdesupervision/munin

Vous devriez voir s’afficher les statistiques de votre serveur. Il faut attendre quelques minutes avant de voir les premiers graphes, le temps que les bases de données soient renseignées.

Installation de Munin sur les machines noeuds

Installation des noeuds sous GNU/Linux

Là encore c’est assez simple:

sudo apt-get install munin-node munin-plugins-extra

La configuration de Muni sur les machines noeuds est centralisée dans le fichier /etc/munin/munin-node.conf. Il faut éditer ce fichier pour y configurer l’adresse IP de votre serveur maître à la ligne suivante:

# A list of addresses that are allowed to connect. This must be a

# regular expression, since Net::Server does not understand CIDR-style

# network notation unless the perl module Net::CIDR is installed. You

# may repeat the allow line as many times as you'd like

allow ^192\.168\.1\.200$

Cette configuration (à adapter à votre besoin) va autoriser la machine maître d’adresse IP 192.168.1.200 à se connecter sur cette machine noeud pour y récupérer les données à superviser.

Il faut ensuite relancer le service Munin-node pour faire prendre en compte la nouvelle configuration:

sudo /etc/init.d/munin-node restart

Installation des noeuds sous Windows

Le projet Munin ne fourni pas de « node » pour WIndows, il faut donc se retourner du coté de la communauté pour trouver notre bonheur. En l’occurrence du coté du logiciel Munin-Node-Win32 disponible au téléchargement sur cette page.  Il suffit de lancer l’installer pour que l’installation et le lancement du processus en tache de fond soit effectué (procédure testé sous Windows 7).

Installation des noeuds sous MacOS

Si vous avez à surveiller des machines sous Mac OS X, il va falloir mettre un peu plus les mains dans le cambouis. En effet, il faut obligatoire passer par l’installation des gestionnaires de paquets Fink ou MacPorts. Je vous conseille la lecture du Wiki officiel.

Configuration des plugins sur les machines noeuds

Nous allons voir dans cette sections comment configurer ce que l’on souhaite superviser sur les machines noeuds. Munin utilise le fichier  /etc/munin/plugin-conf.d/munin-node (ainsi que tous les fichiers se trouvant dans le même répertoire) pour configurer les paramètres des plugins (bien souvent de simples script Perl).

Le répertoire /etc/munin/plugins/ contient la liste des plugins utilisables par la machine noeud et le répertoire /usr/share/munin/plugins/ l’ensemble des plugins. En y regardant de plus prêt, le répertoire  /etc/munin/plugins/ fait des liens symboliques vers le répertoire /usr/share/munin/plugins/.

Pour voir la liste des plugins disponibles sur le noeud, on peut utiliser:

# sudo munin-node-configure

Exemple de l’ajout des plugins NGinx (permettant de surveiller un serveur Web NGinx) sur un noeud:

Pour faire prendre en compte un nouveau plugin sur un noeud (node) il faut faire un lien symbolique entre le fichier en question dans ce répertoire et /etc/munin/plugins/. Par exemple pour accéder aux stats de mon serveur NGinx:

sudo ln -s /usr/share/munin/plugins/nginx_status /etc/munin/plugins/nginx_status

sudo ln -s /usr/share/munin/plugins/nginx_request /etc/munin/plugins/nginx_request

Il est quelquefois necessaire d’installer des dependances pour que le plugin fonctionne.

Pour voir les dépendances nécessaire il suffit de saisir la commande:

sudo munin-node-configure --suggest | grep nginx

nginx_request | yes | no [LWP::UserAgent not found]

nginx_status | yes | no [LWP::UserAgent not found]

Il faut donc installer la librairie perl contenant le module LWP qui est présente dans le package libwww-perl sur Debian/Ubuntu:

sudo apt-get install libwww-perl

Cela a l’air OK:

sudo munin-node-configure --suggest

nginx_request | yes | yes

nginx_status | yes | yes

On peut faire prendre en compte la configuration par Munin-node:

sudo /etc/init.d/munin-node restart

Configuration du maître pour prendre en compte les machines noeuds

Une fois toutes vos machines noeuds configurés (voir le chapitre précédant), il faut maintenant modifier la configuration du serveur maître pour les prendre en compte. Là encore, fidèle à la philosophie Unix, la configuration est centralisé dans le fichier /etc/munin/munin.conf.

En plus des répertoires systèmes en début de fichier:

# The next three variables specifies where the location of the RRD

# databases, the HTML output, logs and the lock/pid files. They all

# must be writable by the user running munin-cron. They are all

# defaulted to the values you see here.

#

dbdir /var/lib/munin

htmldir /var/cache/munin/www/

logdir /var/log/munin

rundir /var/run/munin

Il faut configurer la liste des noeuds de la manière suivante:

# A simple host tree for mondomaine.com

[maitre.mondomaine.com]

address 127.0.0.1

[noeud1.mondomaine.com]

address noeud1.mondomaine.com

[noeud2.mondomaine.com]

address noeud2.mondomaine

Reste à relancer le serveur Munin pour prendre en compte la configuration:

su - munin --shell=/bin/bash

/usr/share/munin/munin-update

exit

En faisant pointer un navigateur Web vers l’URL:

http://votreserveurdesupervision/munin

Puis par exemple les graphes sur l’occupation mémoire:

Pour voir une démonstration en ligne des capacités de Munin, vous pouvez consulter ce serveur maître qui est en accès libre.

Plus de plugins ?

Un des gros avantage de Munin est le fait de pouvoir simplement écrire de nouveaux plugins en utilisant votre langage favori (nous reviendrons bientôt sur ce sujet dans un prochain billet).  Pas mal d’exemples sont proposés  dans le dépôt GitHub suivant (vous devriez trouver votre bonheur).
Catégories
Developpement Open-source Planet-libre

Kit du développeur libre sous Windows

Devant le nombre important de commentaires intéressants sur le billet de ma trousse à outils libres sous Windows, il était impensable d’en rester là. Manifestement beaucoup de libristes travaillent (ou sont forcés de travailler) sous un système d’exploitation de Microsoft. Nous allons donc reprendre dans ce billet les logiciels libres (et seulement libre) permettant de développer dans ce milieu hostile. Comme toujours, les commentaires seront là pour partager d’autres pépites !

Les compilateurs / langages

C: Cygwin fait la passerelle entre le monde Windows et GNU/Linux. Ils apportent un certain nombre d’outils et de librairies permettant notamment de compiler vos programmes en C. On peut également citer MinGW, un fork plus léger de Cygwin, offrant un environnement de développement minimal (GCC).

Python: Pas de problème ici, Windows dispose de la dernière version du langage Python. A télécharger ici pour Python 2 et pour Python 3.

Perl: On présente plus le langage Perl. Vous pouvez télécharger la dernière version sous Windows à partir du site officiel. Je vous conseille la version Strawberry Perl.

NodeJS: C’est le framework implémentant, coté serveur, la version 8 du moteur Javascript de Google (j’en parle dans certains de mes billets). On peut télécharger la version de développement qui propose un binaire Windows ici.

Les consoles / terminaux

En tant qu’utilisateur GNU, le plus gros choc quand j’ai dans les mains une machine Windows est la qualité déplorable du terminal par défaut (le fameux cmd.exe). Non seulement c’est une hérésie complète au niveau de l’ergonomie mais en plus c’est le seul logiciel qui n’évolue pas d’une version à l’autre de Windows. Voici donc quelques alternatives obligatoires…

Console2: Avec ce logiciel libre on retrouve enfin une vrai console sous Windows. A vous les copier/coller, les agrandissements de fenêtres, les tabs…

Attention, ce n’est qu’une interface graphique permettant de saisir des commandes. Si vous ne disposez pas d’un client SSH, il vous sera impossible d’accéder avec ce protocole à vos machines sous Windows. Personnellement, pour résoudre ce besoin j’ai installé Plink (la couche SSH de Putty) puis j’ai automatisé le lancement de la commande suivante:

[cc]doskey ssh= »C:\Program Files\PuTTY\plink.exe » $*[/cc]

PuTTY: Pour ceux qui utilisent la console uniquement comme un terminal SSH/Telnet, PuTTY reste un très bon choix. Il est léger, transportable facilement sur une clé USB (il nécessite seulement un exécutable). A noter qu’il existe une extension à PuTTY nommé PuTTY Connection Manager et qui propose la gestion des tabs et autres améliorations (non libre !). Il existe également un fork de PuTTY nommé KiTTY qui semble proposer toutes ces fonctions mais je ne l’ai pas testé.

MobaXterm:  C’est un package tout en un (dans un unique exécutable) intégrant à la fois un serveur X, un terminal et une version intégrée de Cygwin. C’est la solution idéale (bien qu’un peu lourde) si vous avez besoin de travailler sous Windows comme vous le feriez (à peu près) sous GNU/Linux.  A noter qu’il existe un certain nombre de plugins permettant d’adapter votre MobbaXterm à vos besoins (GCC, Perl, Emacs…).

Les éditeurs

Vu le nombre de solutions que l’on peut trouver sur le marché des éditeurs de texte, le choix est plus une affaire de goût que de qualité. Voici donc une petite sélection hétéroclite d’éditeurs libres.

Notepad++: Concurrent direct de PSPad, qui est un freeware non libre, dans la catégorie des éditeurs de texte « grand public » (noter les guillemets). Notepad++ offre tout ce que l’on peut attendre d’un éditeur orienté développement en 2011.

Vim: A l’opposé de Notepadd++ en ce qui concerne l’UE (« user experience »), Gvim, le portage de Vim sous Windows, permettra à nos chers barbus condamnés au bagne en travaillant sous Windows à ne pas tomber dans une déprime complète et irrémédiable. Dans la même mouvance, on peut également utiliser la version Windows d’Emacs, à télécharger ici.

Winmerge: Même si ce logiciel n’est pas un éditeur à part entière, il a largement sa place dans ce kit. Il permet de comparer visuellement deux fichiers et de lancer des actions pour les synchroniser. Un must have qui a le bon goût d’être libre…

Eclipse: Difficile de faire une billet parlant de développement, de logiciel libre et de Windows sans évoquer Eclipe… Certains le touve usine à gaze, d’autres indispensable pour un « gros » développement. La vérité est surement entre les deux.

Les gestionnaires de versions

Je n’aborderai ici que la partie cliente des gestionnaires de versions tant il me semble aberrant  de vouloir héberger un serveur sur une machine Windows… On va les prendre un par un (enfin les plus connus):

CVS (oui oui il y en a encore qui utilise CVS…): TortoiseCVS intègre parfaitement CVS dans gestionnaire de fichier de Windows.

SVN: TortoiseSVN est a SVN ce que TortoiseCVS est à CVS…

Git: Si vous voulez rester dans le même style d’interface pour votre gestionnaire sous GIT, je vous conseille d’utiliser TortoiseGIT. Si le changement ne vous gène pas, il y a GitExtensions qui pour moi est la solution idéale sous Windows.

Mercurial: Je dois avouer que je n’utilise pas Mercurial. J’ai trouvé (mais donc pas testé) le pendant de Tortoise pour HG, j’ai nommé… TortoiseHG (que c’est original).

Conclusion

La liste de logiciels que nous venons d’évoquer n’est bien sûr pas exhaustive et ciblée sur mes besoins. N’hésitez pas à partager votre expérience de « développeur libre sous Windows » (sic) avec nous !

Catégories
Open-source Planet-libre Systeme

Trousse à outils libres sous Windows

Depuis début septembre, j’ai changé de poste. Je bosse maintenant dans un service qui utilise massivement les systèmes d’exploitation Windows. Même si des projets sont en cours pour migrer nos chers développements sous GNU/Linux, c’est plutôt un projet à long terme et je dois donc m’adapter en travaillant une bonne partie de mon temps sous un poste sous Windows XP (ou XP même pas 7even). Afin de survivre dans ce monde hostile, j’ai récupéré et installé sur mon poste quelques logiciels libres me permettant de travailler à peu près correctement.

J’essayerai de faire évoluer cette liste en fonction de mes découvertes et je l’espère des votre (les commentaires sont fait pour cela) !

Capture écran

Shutter fait parti des logiciels que le « monde Windows » regrette de ne pas avoir de son coté. GetGreenShot est une alternative libre sous l’OS de Microsoft qui comble la faiblesse des fonctions par défaut (c’est quand même mieux qu’un « Print Screen » et copier/coller dans Paint :)).

Lien vers le site de téléchargement officiel de GetGreenShot.

Navigateur Web

Chromium est le navigateur open-source maintenu par Google et qui sert de base au bien connu Google Chrome. Le fait d’utiliser Chromium à la fois sous GNU/Linux, Windows et Mac OS me permet de partager tous les plugins, bookmarks et configurations.

Lien vers un site de téléchargement de Chromium.

Console SSH

Pour administrer les serveurs (GNU/Linux ou BSD bien entendu, aller pas me mettre des Windows 2008 serveurs) il est nécessaire de disposer d’une console SSH. Comme cette fonction n’existe pas sous Windows (et vu la qualité du terminal cmd.exe il est préférable que Microsoft s’abstienne d’en développer un), il faut se retourner vers le logiciel libre PuTTY qui offre un terminal SSH et telnet de bonne qualité.

Lien vers le site de téléchargement officiel de PuTTY.

Lecteur multimédia

Pas la peine de vous faire l’affront de vous présenter VLC, le seul, l’unique, le meilleur lecteur multimédia (audio, vidéo) disponible sous Windows. On ne dira jamais assez merci à l’équipe de Videolan pour leur travail sur ce logiciel.

Lien vers le site de téléchargement officiel de VLC.

Editeur de texte

Si il y a bien un logiciel de base de Windows qui n’est pas très évolué, c’est bien l’éditeur de texte par défaut (Notepad). Heureusement pour nous, le monde libre vient à notre rescousse avec NotePad++. Ce logiciel apporte toutes les fonctions que l’on peut attendre d’un éditeur de texte en 2011. Je m’en sers même pour faire des petits développements.

Lien vers le site de téléchargement officiel de Notepad++.

Client CVS, SVN et GIT

Pour continuer dans la programmation, TortoiseSVN (ou CVS) permet d’intégrer directement la gestion en configuration dans le gestionnaire de fichier de Windows. A noter également qu’un portage pour GIT est en cours de développement: TortoiseGIT (je ne l’ai pas encore essayé).

Liens vers les téléchargements de TortoiseSVN et TortoiseGIT.

Conclusion

Si toi aussi tu es obligé de travailler sous Windows XP|7|8 et que tu utilises pour survivre des pépites libres, alors partage ton expérience dans les commentaires ci-dessous !

Catégories
Gstreamer Open-source Planet-libre Video

Streaming live MPEG-4 entre Windows et Linux avec GStreamer

Nous allons dans ce billet aborder un sujet plutôt inhabituel pour ce blog: Windows 🙂 !

Le but étant de récupérer un flux vidéo live (venant par exemple d’une caméra) à partir  d’une machine sous Windaube (Xp, Se7en ou autres trucs dans le genre) vers une autre machine (Linux mais aussi Mac ou Windows). Pour cela, nous allons utiliser le framework open-source GStreamer qui va permettre d’unifier tout ce beau monde.

Avant de commencer

Pour illustrer cet article nous allons faire un streaming live depuis une machine Windows Xp vers une machine GNU/Linux Fedora 14 connecté sur le même réseau LAN.

On commence donc par installer GStreamer sur la machine Windows en récupérant et installant la dernière version à partir du site WinBuilds. Je parts sur le principe ou votre Gstreamer est installé dans le répertoire C:\Program Files\OSSBuild\GStreamer\v0.10.6 (si ce n’est pas le cas, il suffit d’adapter le script .BAT, variable GSTPATH, en conséquence).

Ensuite on installe Gstreamer sur son PC GNU/Linux (procédure ici pour Fedora et là pour Ubuntu).

Ok, on a donc le framework GStreamer installé sur les deux machines que nous allons utilisé pour faire nos tests.

Streaming depuis Windows

On commence par éditer un fichier texte (Notepad est ton ami) que l’on va nommer client.bat contenant:

REM

REM Streaming from WebCam + MPEG4-ISO encoding + RTP + UDP

REM

 

set GSTPATH= »C:\Program Files\OSSBuild\GStreamer\v0.10.6″

set CAPS= »video/x-raw-yuv,width=(int)640,height=(int)480,framerate=(fraction)10/1″

set STREAMTO= »192.168.0.10″

set STREAMPORT=5000

 

%GSTPATH%\bin\gst-launch.exe -tv –gst-plugin-path=%GSTPATH%\lib ^

gstrtpbin name=rtpbin latency=0 buffer-mode=0 ^

autovideosrc ! ffmpegcolorspace ^

! queue ! videoscale method=1 ! videorate ! %CAPS% ^

! timeoverlay ^

! queue ! ffenc_mpeg4 pass=0 bitrate=256000 rc-buffer-aggressivity=99 trellis=0 ^

! tee name= »display » ^

! rtpmp4vpay send-config=true ^

! rtpbin.send_rtp_sink_0 ^

rtpbin.send_rtp_src_0 ! udpsink port=%STREAMPORT% host=%STREAMTO% ^

display. ^

! queue ! decodebin ! ffmpegcolorspace ! autovideosink

 

pause

Il faut adapter les deux lignes set à votre configuration sachant que STREAMTO doit être associé à l’adresse IP de votre machine cible (la machine Fedora 14 dans mon cas) et que la résolution de votre Webcam doit être compatible avec les valeur de CAPS.

On exécute ensuite le fichier .bat (une fenêtre CMD va s’ouvrir et afficher les éventuels message d’erreurs).

La ligne de commande qui va s’occuper de l’encodage MPEG-4 est la suivante:

ffenc_mpeg4 pass=0 bitrate=256000 rc-buffer-aggressivity=99 trellis=0

Le paramètre bitrate (256 Kbps) va fixer le débit cible du streaming. Cette valeur est bien sur à adapter selon la résolution et la fréquence (fps) de votre source vidéo.

L’encapsultation dans une trame RTP est faite grâce à la commande:

rtpmp4vpay send-config=true

L’option send-config (=true)  permet à Gstreamer d’envoyer régulièrement sur le réseau (trame RTP) des informations sur les caractéristiques du stream au lieu de les envoyer seulement au début de la session.

Réception du stream depuis GNU/Linux

C’est (un peu) plus simple, on va créer un shell script server.sh:

#!/bin/sh

 

CAPS= »application/x-rtp,media=\(string\)video,clock-rate=\(int\)90000,encoding-name=\(string\)MP4V-ES,payload=\(int\)96″

PORT=5000

 

gst-launch -tv gstrtpbin name=rtpbin latency=0 buffer-mode=0 \

udpsrc caps=$CAPS port=$PORT do-timestamp=true \

! rtpbin.recv_rtp_sink_0 \

rtpbin. ! rtpmp4vdepay ! ffdec_mpeg4 ! autovideosink

Une fois le script édité, il faut le rendre exécutable:

chmod a+x server.sh

Puis executer le script pour recevoir le stream venant du PC Window

./server.sh

Et si on veut ajouter du son ?

Il suffit d’adapter les pipelines ! A tittre d’exemple, vous pouvez consulter les scripts suivants:

J’ai également essayé d’utiliser le codec X.264 (x264enc + x264dec) succés pour l’instant (qualité très mauvaise).

Catégories
Open-source Planet-libre Reseau Web

Installation d’un serveur OpenVPN sous Debian/Ubuntu

Dernière mise à jour de ce billet: Le 20 octobre 2013.

Sur la longue route menant à la protection de la vie privée sur Internet, on entend de plus en plus parler des réseaux privés virtuels (VPN pour les geek). Cette technique permet la création d’une liaison chiffrée entre votre machine et un serveur hébergé sur Internet (par exemple chez un fournisseur d’accès se trouvant en France ou à l’étranger). Tous vos accès à Internet seront alors vus à partir de l’adresse IP de ce serveur VPN et non plus par celle de votre machine.

Avec la généralisation des systèmes de surveillance mis en place pour les lois de type Hadopi&Co, les offres de VPN payantes ont tendances à fleurir en ce moment sur le marché.

Nous allons dans ce billet voir comment installer et configurer son propre serveur VPN sous Ubuntu basée sur OpenVPN, une solution libre et compatible avec des clients multi-OS.

Toute petite introduction à OpenVPN

OpenVPN n’est pas un VPN IPSec. C’est un VPN SSL se basant sur la création d’un tunnel IP (UDP ou TCP au choix) authentifié et chiffré avec la bibliothèque OpenSSL.

Quelques avantages des tunnels VPN SSL:

  • Facilité pour passer les réseaux NATés (pas de configuration à faire)
  • Logiciel clients disponibles sur GNU/Linux, BSD, Windows et Mac OS X.

Installation du serveur OpenVPN

Nous allons détailler l’installation du serveur OpenVPN sur une distribution Ubuntu Server LTS 10.04 (mais la procédure doit être la même sur Debian like).

On commence par installer OpenVPN à partir des dépôts officiels:

sudo aptitude install openvpn

On copie ensuite les fichiers de configurations:

sudo mkdir /etc/openvpn/easy-rsa/

sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/

sudo chown -R $USER /etc/openvpn/easy-rsa/

Configuration du serveur OpenVPN

A l’aide des scripts installés dans le répertoire /etc/openvpn/easy-rsa/ nous allons configurer OpenVPN pour utiliser une authentification par clés et certificats.

On commence par éditer le fichier /etc/openvpn/easy-rsa/vars:

export KEY_COUNTRY= »FR »

export KEY_PROVINCE= »06″

export KEY_CITY= »Nissa »

export KEY_ORG= »nicolargo.com »

export KEY_EMAIL= »dtc@hadopi.fr »

Ensuite on lance la séquence suivante qui va générer les clés (.key) et les certificats (.crt):

cd /etc/openvpn/easy-rsa/

source vars

./clean-all

./build-dh

./pkitool –initca

./pkitool –server server

sudo openvpn –genkey –secret keys/ta.key

On copie ensuite les clés et les certificats utiles pour le serveur dans le répertoire /etc/openvpn/:

sudo cp keys/ca.crt keys/ta.key keys/server.crt keys/server.key keys/dh1024.pem /etc/openvpn/

Puis on génère un répertoire /etc/openvpn/jail dans lequel le processus OpenVPN sera chrooté (afin de limiter les dégâts en cas de faille dans OpenVPN) puis un autre répertoire (/etc/openvpn/clientconf) qui contiendra la configuration des clients:

sudo mkdir /etc/openvpn/jail

sudo mkdir /etc/openvpn/clientconf

Enfin on créé le fichier de configuration /etc/openvpn/server.conf:

# Serveur TCP/443

mode server

proto tcp

port 443

dev tun

# Cles et certificats

ca ca.crt

cert server.crt

key server.key

dh dh1024.pem

tls-auth ta.key 1

key-direction 0

cipher AES-256-CBC

# Reseau

server 10.8.0.0 255.255.255.0

push « redirect-gateway def1 bypass-dhcp »

push « dhcp-option DNS 208.67.222.222 »

push « dhcp-option DNS 208.67.220.220 »

keepalive 10 120

# Securite

user nobody

group nogroup

chroot /etc/openvpn/jail

persist-key

persist-tun

comp-lzo

# Log

verb 3

mute 20

status openvpn-status.log

; log-append /var/log/openvpn.log

Ce fichier permet de créer un serveur VPN SSL routé basée sur le protocole TCP et utilisant le port HTTPS (443) enfin de maximiser sont accessibilité depuis des réseaux sécurisés par des Firewalls. Les clients obtiendrons une nouvelle adresse IP dans le range 10.8.0.0/24.

On teste la configuration en saisissant la commande suivante:

cd /etc/openvpn

sudo openvpn server.conf

On doit obtenir les messages suivants:

Si le serveur démarre correctement, on peut terminer la configuration sur serveur OpenVPN en décommentant la dernière ligne du fichier /etc/openvpn/server.conf :

log-append /var/log/openvpn.log

On lance le serveur avec la commande:

sudo /etc/init.d/openvpn start

A ce stade les machines clientes vont pouvoir se connecter au serveur VPN. Par contre impossible d’aller plus loin que ce dernier car l’adresse 10.8.0.x ne sera par routée en dehors de votre serveur. Il faut donc configurer le serveur pour qu’il joue le rôle de routeur entre l’interface VPN (tun0) et l’interface physique (eth0) et de NATeur entre les adresses en 10.8.0.x et son adresse IP réelle.

Configuration du routage:

sudo sh -c ‘echo 1 > /proc/sys/net/ipv4/ip_forward’

Pour rendre ce paramètrage de routage permanant (même après un reboot), il faut ajouter la ligne suivante au fichier /etc/sysctl.conf:

net.ipv4.ip_forward = 1

Puis configuration d’IpTables (si utilisé sur votre serveur) :

# règles obligatoires pour ouvrir déverrouiller l’accès :

sudo iptables -I FORWARD -i tun0 -j ACCEPT

sudo iptables -I FORWARD -o tun0 -j ACCEPT

sudo iptables -I OUTPUT -o tun0 -j ACCEPT

# autres règles : Translation d’adresses

sudo iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

sudo iptables -t nat -A POSTROUTING -s 10.8.0.2/24 -o eth0 -j MASQUERADE

Pour rendre cette règle de NAT persistante après un reboot de votre serveur, il faut commencer par créer un script de chargement de règles de Firewall (ou utiliser  un script existant):

sudo sh -c « iptables-save > /etc/iptables.rules »

Puis éditer votre fichier /etc/network/interfaces pour y ajouter la ligne suivante après la définition de votre interface réseau principale (« iface eth0 inet… » par exemple):

pre-up iptables-restore < /etc/iptables.rules

Le serveur est maintenant prêt à accueillir les clients. Nous allons donc voir dans le chapitre suivant comment déclaration un client sur le serveur.

Création d’un compte client OpenVPN

Imaginons que l’on veuille créer une clés pour le client « pcportablenicolargo » (c’est un exemple :)), alors il suffit de saisir les commandes suivantes sur le serveur:

cd /etc/openvpn/easy-rsa

source vars

./build-key pcportablenicolargo

Note: si vous souhaitez protéger l’accès à vos clés par un mot de passe (c’est à dire qu’un mot de passe sera demandé à la monté du tunnel VPN), il faut utiliser la commande ./build-key-pass en lieu et place de ./buil-key.

Le script ./build-key va générer 3 fichiers dans le répertoire /etc/openvpn/easy-rsa/keys:

  • pcportablenicolargo.crt: Certificat pour le client
  • pcportablenicolargo.csr: Certificat à garder sur le serveur
  • pcportablenicolargo.key: Clés pour le client

On copie les fichiers nécessaires un sous répertoire du répertoire /etc/openvpn/clientconf/ préalablement créé:

sudo mkdir /etc/openvpn/clientconf/pcportablenicolargo/

sudo cp /etc/openvpn/ca.crt /etc/openvpn/ta.key keys/pcportablenicolargo.crt keys/pcportablenicolargo.key /etc/openvpn/clientconf/pcportablenicolargo/

On va ensuite dans le répertoire /etc/openvpn/clientconf/pcportablenicolargo/:

cd /etc/openvpn/clientconf/pcportablenicolargo/

Puis on créé le fichier client.conf (il faut remplacer A.B.C.D par l’adresse publique de votre serveur VPN que vous pouvez obtenir avec la commande « wget -qO- ifconfig.me/ip »):

# Client

client

dev tun

proto tcp-client

remote A.B.C.D 443

resolv-retry infinite

cipher AES-256-CBC

; client-config-dir ccd

# Cles

ca ca.crt

cert pcportablenicolargo.crt

key pcportablenicolargo.key

tls-auth ta.key 1

key-direction 1

# Securite

nobind

persist-key

persist-tun

comp-lzo

verb 3

Pour assurer la compatibilité avec le client Windows OpenVPN, on fait une copie du fichier client.conf vers client.ovpn:

sudo cp client.conf client.ovpn

On devrait ainsi avoir les fichiers suivants dans le répertoire /etc/openvpn/clientconf/pcportablenicolargo/:

  • ca.crt: Certificat du serveur
  • client.conf: Fichier de configuration du client OpenVPN (Linux, BSD, MacOS X)
  • client.ovpn: Fichier de configuration du client OpenVPN (Windows)
  • hennionn.crt: Certificat du client
  • hennionn.key: Clés du client
  • ta.key: Clés pour l’authentification

Il ne reste plus qu’à mettre ces fichiers dans une archive ZIP et de la transmettre sur le PC client:

sudo zip pcportablenicolargo.zip *.*

Update

Pour les plus fainéants, j’ai créé un script (dépôt source sous GitHub) permettant d’automatiser les étapes décrites dans ce paragraphe et donc de permettre simplement la déclaration d’un nouveau client VPN sur votre serveur:

/Update

Attribuer une adresse IP statique à un client VPN

Ce qui est expliqué dans ce chapitre est optionnel.

Pour des raisons de sécurité (par exemple l’application de filtre IP), il est parfois nécessaire d’affecter une adresse IP statique à un client VPN. Pour cela, il faut créer un répertoire qui va contenir les configurations statiques:

sudo mkdir /etc/openvpn/ccd

sudo ln -s /etc/openvpn/ccd /etc/openvpn/jail/ccd

Ensuite on édite à l’intérieur de ce répertoire un fichier correspondant au CNAME (X509) de l’utilisateur dont on veut rendre la configuration statique (par exemple pcportablenicolargo):

sudo vi /etc/openvpn/ccd/pcportablenicolargo

ifconfig-push 10.8.0.18 10.8.0.17

La syntaxe est la suivante: ifconfig-push @IPCLIENTTUNNELVPN @IPSERVEURTUNNELVPN.

Ainsi quand le client pcportablenicolargo se connectera au serveur VPN il obtiendra une adresse en 10.8.0.18. Le bout du tunnel VPN (coté serveur) sera lui en 10.8.0.17.

Note: A chaque modification de ce répertoire il faut en faire une copie vers le chroot (jail, à adapter à votre configuration):

cp /etc/openvpn/ccd/* /etc/openvpn/jail/ccd

On dé-commente la ligne suivante au niveau de la configuration du serveur (/etc/openvpn/server.conf):

client-config-dir ccd

Puis on relance le serveur:

sudo /etc/init.d/openvpn restart

Configuration d’un client OpenVPN sous Ubuntu

Les opérations suivantes sont à faire sur le PC client que l’on veut connecter au serveur VPN.

On part sur le principe ou le fichier pcportablenicolargo.zip a été téléchargé et dézippé dans le répertoire /etc/openvpn/pcportablenicolargo.

Gnome permet de configurer de manière graphique le client OpenVPN. Pour celà il faut ajouter les packages suivants sur sa distribution (Ubuntu Desktop 10.10 dans mon exemple):

sudo aptitude install openvpn resolvconf network-manager-openvpn-gnome

Il faut redémarrer la machine pour finaliser l’installation.

Déclaration du VPN sous Ubuntu

Ensuite on clique gauche sur l’icone réseau du Tableau de bord > Connexions VPN > Configurer le VPN.

On clique sur le bouton Importer.

On va dans le répertoire /etc/openvpn/pcportablenicolargo et on sélectionne le fichier client.conf.

La fenêtre suivante devrait s’afficher:

Il ne reste plus qu’à cliquer sur Appliquer.

Utilisation du VPN sous Ubuntu

Rien de très compliqué :). Si vous avez nommé votre déclaration de VPN Client alors, il suffit de cliquer gauche sur l’icone réseau du Tableau de bord > Connexions VPN > Client.

L’icône réseau du tableau de bord devrait se voir modifier (apparition d’un petit cadenas).

Pour ce déconnecter du VPN: Tableau de bord > Connexions VPN > Déconnecter le VPN.

Si vous avez une erreur lors de la connexion, vous pouvez essayer la méthode fournie par ce lecteur dans ce commentaire.

Configuration d’un client OpenVPN sous Windows

Update

Après quelques tests sous Windows XP, le client que je préconise ci dessous n’est vraiment pas concluant (impossible de se connecter au serveur une fois sur deux, pas de log…).

Je conseille donc l’utilisation d’une solution libre “OpenVPN  Windows” (à télécharger sur le site http://openvpn.net/index.php/open-source/downloads.html).

Une fois installé, il suffit de décompresser l’archive pcportablenicolargo.zip dans le répertoire C:\Programs Files\Openvpn\conf\ et de se connecter à partir du bouton qui se trouve dans la barre des taches.

/Update

On part sur le principe ou le fichier pcportablenicolargo.zip a été téléchargé et dézippé dans le répertoire c:\vpn\pcportablenicolargo.

On va utiliser le client OpenVPN pour Windows nommé « OpenVPN Acccess Server Windows client » téléchargeable sur le site suivant (il nécessite l’installation préalable du framework .NET 3.5 SP1, téléchargeable sur le même site).

Déclaration du VPN sous Windows

Une fois le logiciel téléchargé puis installé. Il suffit de cliquer sur le nouvel icône dans la barre des taches. La fenêtre suivante devrait apparaître. Il faut alors cliquer sur le bouton + pour ajouter une nouvelle connexion VPN.

Ensuite on sélectionne l’option d’importation locale (1) et on clique sur Import (2):

On sélectionne ensuite le fichier client.ovpn qui se trouve dans c:\vpn\pcportablenicolargo\:

On sauvegarde la configuration:

La nouvelle connexion VPN devrait apparaître dans la fenêtre principale:

Utilisation du VPN sous Windows

Il suffit de cliquer sur le nouvel icône dans la barre des taches.  Il faut alors cliquer sur le bouton correspondant à votre connexion VPN définie dans le paragraphe précédant.

Une fois la connexion établie, on a le message suivant:

Pour se déconnecter du VPN, il suffit de cliquer sur le bouton… « Disconnect » (bravo):

Surveiller les connexions VPN

Dans la configuration fournie en exemple, le processus OpenVPN server va écrire toute les minutes un état des clients connectés au serveur dans le fichier /etc/openvpn/openvpn-status.log.

On a, par exemple, les informations suivantes:

OpenVPN CLIENT LIST
Updated,Fri Jan 21 15:48:06 2011
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
client1,27.12.245.248:10086,306367,620864,Fri Jan 21 13:58:25 2011
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
10.8.0.10,client1,27.12.245.248:10086,Fri Jan 21 15:47:14 2011
GLOBAL STATS
Max bcast/mcast queue length,0
END

Sources:

Catégories
Open-source Web

Spideroak, un sérieux concurrent à Dropbox

Spideroak est un service en ligne de sauvegarde, synchronisation et partage de données. La fonction qui m’intéresse particulièrement est de pouvoir synchroniser des répertoires entres plusieurs machines.

Spideroak fonctionne sur le principe suivant: on commence par installer le client Spideroak sur une machine (GNU/Linux, Mac OS X ou Windows). Au premier lancement, le client va créer un compte utilisateur auquel sera associé une clé de chiffrement permettant de s’assurer que vous serez le seul à pouvoir accéder à vos données (même la société Spideroak…). Il va ensuite vous demander le nom de votre machine (je vous conseille de choisir un nom facile à reconnaitre, surtout si vous avez plusieurs machines) et la liste des répertoires à sauvegarder. On se retrouve donc avec, sur le serveur,  une association « Nom de machine / Répertoire de données ». A partir du moment ou le client est installé sur au moins deux machines, on peut passer à l’étape de la configuration de la synchronisation.  Il suffit de choisir une source (« Nom de machine 1 / Répertoire de données X ») et une destination (« Nom de machine 2 / Répertoire de données Y »). A partir de ce moment là, toute modification (ajout, modification, suppression) d’un fichier dans le répertoire local Y de la machine 2 sera répercutée sur le répertoire X de la machine 1 (et vice et versa).

On voit ici la flexibilité de Spideroak par rapport à Dropbox. En effet, Dropbox ne permet que de synchroniser un seul répertoire (appelé Dropbox par défaut). Tandis qu’avec Spideroak, il est possible de synchroniser autant de répertoire que nécessaire, Par exemple, un répertoire « Documents » d’un PC sous Linux avec un répertoire « Mes Documents » d’un pauvre PC sous Windows. Dans le même ordre d’idée il est possible de sélectionner les répertoires à synchroniser sur un PC donnée: il n’est par exemple pas indispensable de stocker sa collection de photos sur son PC du boulot mais il peut être utile de l’avoir sur son PC portable perso…

Voici pour mieux comprendre un petit screencast ou je partage un répertoire « test » entre mes PC Desktop et Laptop:

Source du screencast au format H.264 (720p).
D’autres screencast proposées par Spideroak.

Tout comme avec DropBox, il est également possible d’accéder en lecture à ses données à partir d’un simple navigateur Web ou à partir d’une application iPhone.

Spideroak propose gratuitement 2 Go de stockage (comme Dropbox), par contre l’offre payante est plus compétitive car on a 100 Go pour $10 par mois (ou $100 à l’année). Il faut ensuite compter $10 par tranche de 100 Go supplémentaire.

La société Spideroak ne distribue pas son client sous licence libre (ce qui est bien dommage mais il y a des chances que cela change dans le futur). Par contre elle met a disposition, sous licence GPLv3, une liste de logiciels développés autour de ce projet.

Cliquer ici pour installer et tester Spideroak sur votre machine.

J’attends vos retours !

Catégories
Reseau Web

Partager ses fichiers entre Linux, Mac, Windows, iPhone et Android

Je vais vous parler d’un service en ligne que beaucoup d’entre vous doivent connaitre et utiliser: Dropbox. Il permet de maintenir synchroniser un répertoire de votre disque dur entre plusieurs ordinateurs et ceci quelques soient leurs systèmes d’exploitations: GNU/Linux, Mac OS X, IPhone/Ipad, Android ou Windows (et bientôt Blackberry).

J’ai réalisé que c’était une des premières applications que j’installais sur mes nouvelles machines (le logiciel est intégré dans mon script de post installation Ubuntu). Après seulement 1 an d’utilisation, Dropbox est devenu avec Gmail et Google Reader un service en ligne dont j’aurai le plus grand mal de me séparer…

Installation de Dropbox

C’est simple, il faut d’abord créer gratuitement un compte qui vous donne droit à un espace de stockage de 2 Go (qu’il est ensuite possible d’augmenter moyenant finance, là est leur business model).  Ensuite lors de l’installation du logiciel Dropbox sur votre ordinateur, ce compte (login et password) vous sera demandé ainsi que le répertoire (que l’on appellera « la dropbox ») de votre disque dur à synchroniser (par défaut~/Dropbox).

Comment marche Dropbox ?

A partir de ce moment, tous les fichiers/répertoires de « la dropbox » seront synchronisés sur un serveur en ligne. On a donc dans un premier temps une simple fonction de sauvegarde de vos données (ce qui n’est déjà pas si mal).C’est en installant le logiciel Dropbox sur une deuxième machine que l’on bénéficie de la puissance de ce service.

En effet, toutes les données seront synchronisées par rapport au serveur. On se retrouve donc avec la même « dropbox » sur les deux machines. Il n’y a pas de limite au nombre de machines que l’on peut synchroniser.

Il est également possible de consulter et d’ajouter des fichier de votre Dropbox en ligne (via un simple navigateur Web).

Les +/- de Dropbox

Les + :

  • Grande simplicité d’installation
  • Utilisation transparente (on y pense plus et on a les données sur toutes ses machines…)
  • Espace de stockage de 2 Go gratuit sur le serveur
  • La fonction « Sync LAN » (active par défaut) permet de faire la synchronisation directement entre vos machines si elles sont connectées au même réseau local.
  • Possibilité de partager un répertoire avec d’autres personnes.

Les :

  • Le logiciel Dropbox n’est pas distribué sous licence « libre »
  • Vos données sont stockées sur un serveur, donc attention aux données sensibles/personnelles (rien ne vous empêche de chiffrer ces données).
  • L’offre payante est un chère à mon goût (environ 100€/an pour 50 Go, 200€/an pour 100 Go)
  • Pas d’assurance que le service de base restera gratuit… mais on a le même problème avec GMail ou Ubuntu One…

Pour vous inscrire et tester Dropbox, suivre ce lien !

Catégories
Open-source Reseau

Installation d’un serveur VPN sous FreeBSD

Le but de ce billet est de détailler l’installation d’un serveur VPN routé de type SSL sur un système FreeBSD 7. Nous utiliserons pour cela le logiciel libre OpenVPN (licence GPL v2).

Installation du système FreeBSD

Robustesse et qualité de sa pile IP font du système FreeBSD un bon « hôte » pour notre serveur VPN. Afin de ne pas surcharger le serveur avec des logiciels inutiles, j’ai choisi l’installation minimale (développeur, comprenant les « ports ») à partir du réseau (ISO 7.x-RELEASE-i386-bootonly).

Avant de commencer l’installation d’OpenVPN, il est préférable de s’assurer que notre système d’exploitation est à jour en suivant cette procédure.

Installation de OpenVPN

On commence par installer le port OpenVPN avec la commande suivante:

pkg_add -r openvpn

On automatise le lancement en ajoutant la ligne suivante au fichier /etc/rc.conf:

openvpn_enable= »YES »

Configuration du serveur OpenVPN

OpenVPN permet la création de tunnel VPN de type SSL. Il faut donc que votre serveur puisse gérer des clès de chiffrement. Les étapes à suivre sont les suivantes:

vi openssl.cnf

dir = /etc/ssl/CA
default_days = 3650 # Valable 10 ans…
default_bits  = 2048 # Clès de 2048 bits
countryName_default = FR
stateOrProvinceName_default = PACA
localityName_default = Valbonne
0.organizationName_default = MaBoite
commonName_default = mondomaine.com
emailAddress_default = contact@mondomaine.com

mkdir /etc/ssl/CA

cd /etc/ssl/CA
mkdir certs
mkdir crls
mkdir newcerts
mkdir private

touch index.txt
echo 01 > serial
echo 01 > crlnumber

openssl req -nodes -new -x509 -keyout private/cakey.pem -out cacert.pem -days 3650
> Laisser les options par défaut

A ce stade, on doit avoir notre clés créé dans le fichier private/cakey.pem:

ls /etc/ssl/CA/private
cakey.pem

On génère ensuite le fichier de révocation:

cd /etc/ssl/CA
openssl ca -gencrl -out crls/crl.pem
chown root:nobody crls/crl.pem

On passe maintenant à la génération de notre certificat pour notre serveur VPN:

cd /etc/ssl/CA/certs
openssl req -nodes -new \
-keyout vpn.mondomaine.com.key \
-out vpn.mondomaine.com.csr
> Laisser les options par défaut puis entrer un mot de passe
chmod 600 /etc/ssl/CA/certs/vpn.mondomaine.com.key

Puis on le signe:

openssl ca -out al-vpn1.alcasat.net.crt
\-in al-vpn1.alcasat.net.csr
\-policy policy_anything

Enfin on génère les paramètres Diffie-Hellman pour l’échange des clés:

openssl dhparam -out dh2048.pem 2048

Pour configurer OpenVPN, nous allons nous baser sur une configuration d’exemple fournie par OpenVPN dans le fichier /usr/local/share/doc/openvpn/sample-config-files/server.conf.

mkdir /usr/local/etc/openvpn/
cp /usr/local/share/doc/openvpn/sample-config-files/server.conf \
/usr/local/etc/openvpn/openvpn.conf

Puis éditer le fichier /usr/local/etc/openvpn/openvpn.conf en adaptant la configuration à votre réseau.

Voici ma configuration:

et le fichier .conf correspondant:

port 1194
proto udp
dev tun

ca /etc/ssl/CA/cacert.pem
cert /etc/ssl/CA/certs/al-vpn1.alcasat.net.crt
key /etc/ssl/CA/certs/al-vpn1.alcasat.net.key
crl-verify /etc/ssl/CA/crls/crl.pem
dh /etc/ssl/CA/certs/dh2048.pem

server 192.168.40.0 255.255.255.0

ifconfig-pool-persist ipp.txt
push « route 192.168.1.0 255.255.255.0 »

keepalive 10 120

cipher BF-CBC
comp-lzo

user nobody
group nobody

persist-key
persist-tun

status openvpn-status.log
verb 6
mute 20

Lancement du serveur OpenVPN

On utilise le script système:

/usr/local/etc/rc.d/openvpn start

Pour vérifier que le tunnel VPN est prêt à accueillir des clients, on peut vérifier que le preocess openvpn est bien lancé et que l’interface tun0 est bien présente:

/usr/local/etc/rc.d/openvpn status
openvpn is running as pid 2212.

ifconfig tun0
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
inet 192.168.40.1 –> 192.168.40.2 netmask 0xffffffff
Opened by PID 2207

Pour relancer le serveur (en cas de changement de configuration):

/usr/local/etc/rc.d/openvpn restart

Pour arrêter le serveur:

/usr/local/etc/rc.d/openvpn stop

La consultation des logs peut être faire via la commande:

tail -f /var/log/messages | grep openvpn

Configuration de votre réseau

Si votre réseau hébergeant le serveur VPN comporte des routeurs il faut leur ajouter la route suivante (exemple donnée pour un ajout de route sur un routeur FreeBSD):

route add -net 192.168.40.0/24 @IP-SERVEUR-VPN

Configuration d’un client Linux

A partir du serveur VPN, on génére les clés pour le nouveau client:

cd /etc/ssl/CA/certs

openssl req -nodes -new -keyout vpn-nicolargo.key -out vpn-nicolargo.csr
Generating a 2048 bit RSA private key
………………………………………..+++
……………….+++
writing new private key to ‘vpn-nicolargo.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) [FR]:
State or Province Name (full name) [PACA]:
Locality Name (eg, city) [Valbonne]:
Organization Name (eg, company) [MaBoite]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) [mondomaine.com]:vpn-nicolargo.mondomaine.com
Email Address [contact@mondomaine.com]:monadresse@mondomaine.com

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:monpassword
An optional company name []:

Il faut changer le fichier /etc/ssl/CA/serial (incrémenter la valeur de 1).

echo 02 > /etc/ssl/CA/serial

Puis signer le certificat:

openssl ca -out vpn-nicolargo.crt \
-in vpn-nicolargo.csr -policy policy_anything

Sur la machine cliente, on copie les 3 fichiers ainsi que la clés serveur cacert.pem dans le répertoire /etc/ssl/certs (à créer si il n’existe pas).

On doit se retrouver avec nos 4 fichiers:

ls /etc/ssl/certs/*
/etc/ssl/certs/cacert.pem
/etc/ssl/certs/vpn-nicolargo.crt
/etc/ssl/certs/vpn-nicolargo.csr
/etc/ssl/certs/vpn-nicolargo.key

On protége nos fichiers:

groupdadd nobody
chown root:nobody /etc/ssl/CA/cacert.pem
chown root:nobody /etc/ssl/CA/certs/vpn-nicolargo.*
chmod 600 /etc/ssl/CA/certs/vpn-nicolargo.key

Après installation d’OpenVPN sur votre machine cliente, on le configure en créant le fichier client.conf dans le répertoire /etc/openvpn/ (sous GNU/Linux Ubuntu):

sudo vi /etc/openvpn/client.conf

client
dev tun
proto udp
remote al-vpn1.alcasat.net 1194
nobind
user nobody
group nobody
persist-key
persist-tun
ca /etc/ssl/certs/cacert.pem
cert /etc/ssl/certs/vpn-hennionn.crt
key /etc/ssl/certs/vpn-hennionn.key
cipher BF-CBC
comp-lzo
verb 6
mute 20

Lancement du client OpenVPN Linux

Pour monter le VPN entre notre client et le serveur, on utilise le script système (sous GNU/Linux Ubuntu):

# sudo /etc/init.d/openvpn start client
* Starting VPN ‘client’ [OK]

L’arrêt se fera tout aussi simplement:

# sudo /etc/init.d/openvpn stop client

* Stopping VPN ‘client’ [OK]

Par défaut, au démarrage de la machine, OpenVPN va lancer tout les tunnels VPN dont il trouve une configuration dans le répertoire /etc/openvpn/. Si vous souhaitez désactiver cette fonction et monter vous même le VPN à la main, il faut éditer le fichier /etc/default/openvpn (sous GNU/Linux Ubuntu) et décommenter la ligne suivante:

AUTOSTART= »none »

Pour conclure…

Il est possible de configurer d’autres clients en suivant la même procédure, le tunnel VPN étant routé, il peut accueillir plusieurs utilisateurs en même temps.

Des clients OpenVPN avec interface graphique sont également disponibles sous Windows et Mac OS X.

Quelques sources utiles à la rédaction de ce billet: