Catégories
Open-source

Installation complète de GStreamer sous Ubuntu 9.04

La toute fraiche version 9.04 d’Ubuntu est livrée de base avec le framework GStreamer (puisque ce dernier est utilisé par des applications Gnome). Il manque cependant un certain nombre de plugins: encodeur H.264, plugin pour la communication avec FFMpeg…

Voici donc la ligne de commande à saisir pour palier à ce manque et disposer d’une version complète de GStreamer:

sudo apt-get install gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-ugly-multiverse

Vous pouvez vérifier la liste des plugins GStreamer installés sur votre système avec la commande suivante:

# gst-inspect-0.10

Nombre total : 195 greffons, 960 fonctionnalités

Catégories
Web

Mes marques ta-pages de la semaine

Help with RTP & GStreamer

Discussion sur comment (G)streamer en RTP/RTSP et récupérer le flux sous VideoLAN avec un fichier SDP.

Configuration Ordinateur sur mesure Elexence® : 100% à la carte

Construire son prochain ordinateur « sur mesure ».

Pingouins – L.L. de Mars

Des images en CC pour illustrer vos articles sur Linux…

Installation de SVN avec Eclipse – Nouvelles technologies et Web d’entreprise

Petite astuce pour installer SVN avec Eclipse

Découvertes et expérimentation avec D-Bus » UNIX Garden

Artisan Numérique » Prise en main de SubVersion

Introduction et utilisation de SVN

OpenBSD 4.4 changes

Page de release not ou il est dit qu’il est possible de fixer le champs TOS avec PF à partir de la version 4.4 de PF.

[pf4freebsd] pf hack: use scrub rule to set TOS bits – Hendrik Scholz – org.freebsd.freebsd-pf – MarkMail

Piste pour fixer le champs TOS en sortie de règles PF (en utilisant scrub)

PF: The OpenBSD Packet Filter

Documentation sur PF, la brique de filtrage de BSD

blogmarks.net

Catégories
Open-source

Actualité open-source de la semaine #58

L’actualité open-source de la semaine…

La vidéo de la semaine

 

Le vainqueur du concours « We’re Linux »

Tout le monde en parle, sauf moi…

L’actualité du libre et de l’open source en vrac:

  • Songbird (présenté comme le iTunes du libre) se stabilise en version 1.1.2
  • PC-BSD, la distribution « desktop » basée sur FreeBSD passe en version 7.1
  • Google Update passe sous licence open-source
  • Le Full Circle Magazine est un magazine Anglais sur Ubuntu. L’équipe de traduction en Français vient de publier le numéro 23 (disponible ici en PDF). 
  • GNewSense (distribution GNU/Linux 100% libre) déboule en version 2.2

Autres choses ?

Catégories
Open-source Reseau

Compilation de VnStat sous Ubuntu/Debian

Hier, je vous ai parlé de VnStat, un outil pour surveiller le débit de vos interfaces réseaux. J’avais fait mes tests sous FreeBSD qui inclu la dernière version de VnStat (1.10) dans ses packages. Ce n’est pas encore le cas des systèmes Linux qui proposent la version 1.6. Hors cette version ne permet pas l’utilisation de l’utilitaire VnStati pour générer les images.

Voici donc dans ce billet une procédure très simple pour installer la version 1.10 de VnStat sur un système GNU/Linux (Ubuntu ou Debian) et donc disposer de VnStati…

Installation des pré-requis

Pour compiler correctement, Vnstat a besoin de quelques librairies:

sudo apt-get install libgd2-noxpm libgd2-noxpm-dev

Compilation et installation de VnStat

On commence par récupérer la dernière version disponible de VnStat

wget http://humdi.net/vnstat/vnstat-1.10.tar.gz

On décompresse et on compile:

tar zxvf vnstat-1.10.tar.gz
cd vnstat-1.10/
make all

Puis on installe sur notre système:

sudo make install

Et voili…

Catégories
Nagios Open-source Reseau

VNStat surveille votre bande passante

Obsolete
Merci de consulter ce billet plus récent.

VNStat est un petit utilitaire bien sympathique pour surveiller la bande passante utilisée sur les interfaces réseaux de ses machines GNU/Linux ou BSD.

Installation de VNstat

Sous GNU/Linux Ubuntu:

# sudo apt-get install vnstat

Sous FreeBSD:

# pkg_add -r vnstat

Puis ajouter la ligne suivant dans votre crontab (seulement sous FreeBSD):

*/5 * * * * root if [ -x /usr/local/bin/vnstat ] && [ `ls -l /var/db/vnstat/ | wc -l` -ge 1 ]; then /usr/local/bin/vnstat -u; fi

Déclaration des interfaces réseaux à surveiller

Imaginons que la machine à surveiller est un routeur avec deux interfaces réseaux: em0 qui est l’interface coté Internet (c’est à dire l’interface connecté à votre modem/routeur DSL) et em1 qui est l’interface coté LAN (celle connecté à vos machines).

Il faut donc effectuer la déclaration suivante qui va créer automatiquement les fichiers de base de données.

# vnstat -u -i em0 –nick « Internet »
# vnstat -u -i em1 –nick « LAN »

Utilisation de VNStat

Le crontab que nous avons configuré dans la première étape de l’installation est programmé pour se lancer toutes les 5 minutes. Il faut donc attendre un petit moment avant de pouvoir utiliser VNStat.

La première commande permet d’afficher un résumé des statistiques par interface.:

# vnstat
rx      /     tx      /    total    /  estimated
Internet (em0):
yesterday    421.40 MB  /  984.95 MB  /    1.37 GB
today     91.20 MB  /   86.35 MB  /  177.54 MB  /     294 MB

LAN (em1):
yesterday    626.97 MB  /  242.34 MB  /  869.32 MB
today      1.46 GB  /  565.40 MB  /    2.01 GB  /    3.36 GB

Statistiques sur la dernière heure avec l’option -h:

# vnstat -h
Internet (em0)                                                           14:25
^                                                        r
|                                                        r
|                                                        r
|                                                        r
|                                                        r
|                                                        r
|                                                        r
|     r                                                  r     r
|     r                                                  r  r  r
|  r  r  r                  t                 t  t       r  r  rt r  r
-+—————————————————————————>
|  15 16 17 18 19 20 21 22 23 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14

h   rx (kB)    tx (kB)      h   rx (kB)    tx (kB)      h   rx (kB)    tx (kB)
15     117458      17933    23       7006      69069    07       4913      31545
16     205687      21665    00      26175      23108    08      61198      19855
17     112410      14211    01       5373       5281    09     682414      39748
18       4981       6441    02       3734       4623    10     191760      16684
19       5792      42644    03       3822       4842    11     238408      95350
20       4211       4416    04      31824      23303    12     135037      37811
21       5571       6457    05      17429     111179    13      91544      24793
22       5680      32557    06       6706     135740    14      40126       6404

Statistiques journalières avec l’option -d:

# vnstat -d
Internet (em0)  /  daily

day         rx      |     tx      |  total
————————+————-+—————————————-
14.04.    626.97 MB  |  242.34 MB  |  869.32 MB   %%%%%%%:::
15.04.      1.47 GB  |  566.67 MB  |    2.02 GB   %%%%%%%%%%%%%%%%%%:::::::
————————+————-+—————————————-
estimated     2.43 GB  |     937 MB  |    3.35 GB

Statistiques hebdomadaire avec l’option -w:

# vnstat -w
Internet (em0)  /  weekly

rx      |       tx      |    total
—————————-+—————+————–
last 7 days      2.09 GB  |    810.27 MB  |      2.89 GB
current week      2.09 GB  |    810.27 MB  |      2.89 GB
—————————-+—————+————–
estimated      5.67 GB  |      2.14 GB  |      7.82 GB

Statistiques mensuelle avec l’option -m:

# vnstat -m
Internet (em0)  /  monthly

month         rx      |      tx      |   total
————————-+————–+————————————–
Apr ’09       2.09 GB  |   810.27 MB  |     2.89 GB   %%%%%%%%%%%%%%%%::::::
————————-+————–+————————————–
estimated      4.31 GB  |     1.63 GB  |     5.93 GB

D’autres options permette d’avoir une vu en « temps réel » de la consomation de bande passante:

Calcul sur les 5 dernières secondes:

# vnstat -tr
19 packets sampled in 5 seconds
Traffic average for em4

rx           0.14 kB/s              2 packets/s
tx           0.13 kB/s              1 packets/s

Calcul instantané:

# vnstat -l
Monitoring em0…    (press CTRL-C to stop)

rx:       2.36 kB/s    11 p/s            tx:       1.46 kB/s    13 p/s

Le texte c’est bien , mais les graphes c’est mieux

Si vous avez l’âme d’un futur manager, vous êtes en train de vous dire que cet utilitaire n’est pas mal mais qu’une présentation sous forme de graphe ferait un plus bel effet dans mon prochain rapport… Heureusement, les auteurs de VNStat ont pensé à vous et vous proposent VNStati.

L’utilisation est presque la même que pour VNStat. La première commande permet de génèrer (au format PNG) un résumé des statistiques par interface (utiliser l’option -i pour fixer l’interface):

# vnstati -i em0

Statistiques sur la dernière heure avec l’option -h:

# vnstati -h

Statistiques journalières avec l’option -d:

# vnstati -d

Statistiques mensuelle avec l’option -m:

# vnstati -m

Conclusion

Bien que VNStat ne boxe pas dans la même catégorie que des logiciels comme Cacti, je trouve que c’est un bon complément à des outils comme iftop ou ntop (en beaucoup plus léger pour ce dernier). Il existe même un projet parallèle pour intégrer ces rapports dans un site Web à partir d’un front-end PHP (projet vnStat PHP frontend).

Catégories
Open-source

Actualité open-source de la semaine #57

L’actualité open-source de la semaine…

La vidéo de la semaine

Visite d’une salle machine de Google… ouha… !
Tout ce beau monde fonctionne sur une version customisée de Linux !

Tout le monde en parle, sauf moi…

L’actualité du libre et de l’open source en vrac:

Autres choses ?

Catégories
Hardware Open-source Reseau Systeme

GStreamer aime les caméras IP Axis

Si vous lisez régulièrement ce blog, vous savez que je m’intéresse au FrameWork multimédia GStreamer (cliquez ici pour voir la liste des billets sur le sujet). Nous allons poursuivre la découverte de cette superbe trousse à outil multimédia en l’appliquant sur la récupération et l’exploitation de flux vidéo venant de caméras IP. Nous nous focaliserons ici sur les caméras IP AXIS, non pas que j’ai des actions dans cette société mais il faut avouer que leurs caméras sont de très bonne qualité et l’accès aux flux vidéos assez simple.

Avant de nous plonger dans le vif du sujet et si vous souhaitez faire ces tests chez vous, il faut au préhalable installer GStreamer sur votre système.

Ma configuration de test est la suivante:

Lors de la rédaction de ce billet, j’ai utilisé la caméra AXIS 213:

La configuration de cette caméra (cam01) est la suivante:

Format CIF
Compression 50%
Frame rate: 25 images/s

Configuration du PC1:

OS: GNU/Linux Debian 5.0 + Gstreamer 0.10.19-3
Hardware: Pentium Quad core CPU 2.8 Ghz + 4 Go RAM

Configuration du PC2:

OS: GNU/Linux Ubuntu 8.10 + Gstreamer 0.10.21-4
Hardware: Pentium Dual core CPU 3.0 Ghz + 512 Mo RAM

Affichage du flux vidéo

Cette caméra (comme toutes les caméras AXIS) permet la diffusion sur le réseau en utilisant deux formats:

  • MJPEG sur HTTP
  • MPEG-4 sur RTSP

Affichage du flux MJPEG/HTTP

On lance la commande suivante sur la machine PC1:

gst-launch gnomevfssrc location=http://cam01/axis-cgi/mjpg/video.cgi?resolution=CIF ! jpegdec ! ffmpegcolorspace ! autovideosink

Un rapide ntop sur notre machine PC1 nous indique que le fux est gourmand en bande passante (de l’ordre de 3.3 Mbps). L’occupation CPU varie entre 20% et 60%. La vidéo est fluide.

Affichage du flux MPEG4/RTSP

On lance la commande suivante sur la machine PC1:

gst-launch-0.10 rtspsrc location=rtsp://cam01:554/mpeg4/media.amp latency=0 ! decodebin ! ffmpegcolorspace ! autovideosink

La bande passante entre la caméra et le PC1 est alors de 1 Mbps en pics (moyenne de 400 Kbps quand il y a peu de mouvement devant la caméra). L’occupation CPU varie entre 5% et 15%. La vidéo est fluide.

Le paramètre latency (qui est par défaut à 3000, soit 3 secondes) permet de réduire la taille du buffer d’entrée. Si vous êtes sur un réseau LAN, vous pouvez sans problème mettre comme valeur 0 (comme je l’ai fait dans mon exemple). Par contre sur des réseaux moins performant (en terme de débit, de perte de paquets…), il vaut mieux conserver un buffer un peu plus élevé.

Encodage du flux vidéo dans un fichier

Nous allons continuer notre test en essayant d’encoder « à la volée » le flux vidéo venant de la caméra IP. Détaillons un peu notre pipeline:

  • récupérer le flux MPEG4/RTSP de la caméra
  • l’afficher sur l’écran
  • réduire le nombre d’images par seconde (fps) à 1
  • encoder le flux en MJPG
  • sauvegarder dans un fichier AVI (output.avi)

La ligne de commande correspondante à lancer sur PC1 est:

gst-launch rtspsrc location=rtsp://cam01:554/mpeg4/media.amp latency=0 ! queue ! decodebin ! ffmpegcolorspace ! tee name=save ! queue ! autovideosink save. ! queue ! videorate ! capsfilter caps= »video/x-raw-yuv,framerate=(fraction)1/1″ ! queue ! jpegenc ! avimux ! filesink location=output.avi .save

Le fichier généré (output.avi) occupe un espace disque d’environ 15 Ko par seconde (soit 54 Mo/heure).

Afin d’optimiser cette taille, il est possible d’utiliser Theora (dans un fichier OGG), un codec vidéo libre et efficace. La commande devient alors:

gst-launch rtspsrc location=rtsp://cam01:554/mpeg4/media.amp latency=0 ! queue ! decodebin ! ffmpegcolorspace ! tee name=save ! queue ! autovideosink save. ! queue ! videorate ! capsfilter caps= »video/x-raw-yuv,framerate=(fraction)1/1″ ! queue ! theoraenc ! oggmux ! filesink location=output.ogg .save

On a alors une taille de fichier de sortie (output/ogg) d’environ 6 Ko par seconde (soit 21 Mo/heure).

Mixer plusieurs vidéos en une

Si vous disposé de plusieurs caméras, il peut être utile de mixer ces différentes sources dans une même image (un peu comme le mode PIN des télévisions).

Je vais dans l’exemple ci-dessous, prendre deux sources (Camera AXIS + Webcam USB) et les mixer:

La pipeline est la suivante:

gst-launch  v4l2src ! queue ! videoscale ! capsfilter caps= »video/x-raw-yuv,width=64,height=48,framerate=(fraction)5/1″ ! ffmpegcolorspace ! videobox border-alpha=0 alpha=1.0 top=-230 left=-278 ! videomixer name=mix ! ffmpegcolorspace ! autovideosink mix. rtspsrc location=rtsp://cam01:554/mpeg4/media.amp latency=0 ! queue ! decodebin ! queue ! videorate ! capsfilter caps= »video/x-raw-yuv,width=352,height=288,framerate=(fraction)25/1″ ! ffmpegcolorspace ! mix.

Attention de bien fixer les framerates (videorate ou videoscale + capsfilter), car videomixer (le plugin qui s’occupe de faire le mixage vidéo) semble assez sensible sur ce point.

Streaming vers une autre machine

Nous allons maintenant voir comment transcoder le flux vidéo d’une caméra IP pour le diffuser (streamer vers une autre machine).

La description du pipeline du PC1 est la suivante:

  • récupérer le flux MPEG4/RTSP de la caméra
  • réencodage en Theora (à 250 Kbps)
  • diffusion en UDP vers le PC2

puis celle du PC2:

  • récupérer de flux Theora/UDP venant du PC1
  • décodage Theora
  • affichage de la vidéo

et les commandes correspondantes, sur le PC2 (il faut lancer cette commande en premier):

gst-launch -v udpsrc port=1234 ! theoradec ! autovideosink

puis sur le PC1:

gst-launch rtspsrc location=rtsp://cam01:554/mpeg4/media.amp latency=0 ! queue ! decodebin ! ffmpegcolorspace ! queue ! videorate ! capsfilter caps= »video/x-raw-yuv,framerate=(fraction)25/1″ ! queue ! theoraenc bitrate=250 ! queue ! udpsink host=pc2 port=1234

En moyenne, le débit observé entre PC1 et PC2 est de l’ordre de 250 Kbps (conforme donc a ce que l’on a configuré dans le plugin theoraenc), on observe cependant des pics à 250 Kps+30%. La consommation de CPU est de l’ordre de 25% sur PC1 et de 5% sur PC2. La vidéo est recue de manière fluide sur le PC2. Là encore, il ne faut pas oublier de fixer le nombre d’images par seconde avec videorate + capsfilter.

L’avantage avec GStreamer, c’est qu’il intégre une liste de plugins assez impressionnante, il est alors facile de les insérer dans notre pipeline. Par exemple, si l’on souhaite reprendre l’exemple ci-dessus et y ajouter un texte en sur-impression (overlay), il suffit d’utiliser le plugin cairotextoverlay.

La commande sur le PC1 devient alors:

gst-launch-0.10 rtspsrc location=rtsp://cam01:554/mpeg4/media.amp latency=0 ! queue ! decodebin ! ffmpegcolorspace ! queue ! cairotextoverlay text= »Attention Tigrou ! » shaded-background=true ! queue ! videorate ! capsfilter caps= »video/x-raw-yuv,framerate=(fraction)25/1″ ! queue ! theoraenc bitrate=250 ! queue ! udpsink host=pc2 port=1234

et le résultat sur PC2:

Pour conclure

Ce billet nous a permis de mettre le pied dans le monde passionnant du traitement des flux vidéo. Ce n’est qu’une introduction et la seule limite est votre imagination. Je vous rappelle que GStreamer peut être simplement intégré à vos applications grâce aux API disponibles. Si vous avez des questions et remarques sur le sujet, il existe une section spéciale dans le forum !

Catégories
Blog

Est la crise chez Google ADsense ?

Je ne sais pas si c’est pareil chez vous, mais les revenus Google Adsense de mon blog ont chuté de manière assez importante depuis le début de l’année:

eCPM pour 04/2009 (par rapport à 11/2008): 36 %
eCPM pour 03/2009 (par rapport à 11/2008): 41 %
eCPM pour 02/2009 (par rapport à 11/2008): 54 %
eCPM pour 01/2009 (par rapport à 11/2008): 87 %
eCPM pour 12/2008 (par rapport à 11/2008): 104 %
eCPM pour 11/2008 (base): 100 %

Je n’ai pourtant pas changé de design et mes sources de trafic restent les mêmes. Donc si un des spécialistes de la monétisation des sites passe par ici, j’aimerai bien avoir son avis sur la question.

Et vous cela donne quoi ?

Catégories
Open-source

Actualité open-source de la semaine #56

L’actualité open-source de la semaine…

L’image de la semaine

Tout le monde en parle, sauf moi…

L’actualité du libre et de l’open source en vrac:

Autres choses ?

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: