<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le blog de NicoLargo &#187; Réseau</title>
	<atom:link href="http://blog.nicolargo.com/category/network/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.nicolargo.com</link>
	<description>"Tribulations d'un blogger dans le monde des logiciels libres et du Web..."</description>
	<lastBuildDate>Sat, 04 Jul 2009 16:08:30 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>NConf, une interface Web pour Nagios</title>
		<link>http://blog.nicolargo.com/2009/06/nconf-une-interface-web-pour-nagios.html</link>
		<comments>http://blog.nicolargo.com/2009/06/nconf-une-interface-web-pour-nagios.html#comments</comments>
		<pubDate>Tue, 16 Jun 2009 09:17:04 +0000</pubDate>
		<dc:creator>NicoLargo</dc:creator>
				<category><![CDATA[Open-source]]></category>
		<category><![CDATA[Réseau]]></category>
		<category><![CDATA[Système]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nconf]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.nicolargo.com/2009/06/nconf-une-interface-web-pour-nagios.html</guid>
		<description><![CDATA[Utilisateurs de Nagios, votre rêve va bientôt se réaliser ! Une équipe Suisse travaille sur le saint Graal de la supervision système et réseau. En effet leur projet NConf vient répondre à un besoin récurrent des utilisateurs de Nagios: l'impossibilité d'administrer son serveur via une interface Web.
Nous allons dans ce billet tester la version 1.2.5 [...]]]></description>
			<content:encoded><![CDATA[<p><img style="max-width: 800px; float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/350px-Nc-logo-large.png" width="154" height="77" />Utilisateurs de Nagios, votre rêve va bientôt se réaliser ! Une équipe Suisse travaille sur le saint Graal de la supervision système et réseau. En effet leur projet NConf vient répondre à un besoin récurrent des utilisateurs de Nagios: l'impossibilité d'administrer son serveur via une interface Web.</p>
<p>Nous allons dans ce billet tester la version 1.2.5 de NConf sur un serveur Nagios 3.1. Je pars sur l'hypothèse ou le serveur Nagios a été installé en suivant mes deux premiers tutos (<a href="http://blog.nicolargo.com/2009/01/le-serveur-de-supervision-libre-part-1.html">1</a> et <a href="http://blog.nicolargo.com/2009/01/le-serveur-de-supervision-libre-part-2.html">2</a>).</p>
<p><span id="more-2031"></span><br />
<h1>Installation de NConf</h1>
<p>On commence par récupérer la dernière version disponible de NConf (la 1.2.5 au moment de l'écriture de ce billet).<br />
<blockquote>wget http://puzzle.dl.sourceforge.net/sourceforge/nconf/nconf-1.2.5-0.tgz</p></blockquote>
<p>On décompresse l'archive:<br />
<blockquote>tar zxvf nconf-1.2.5-0.tgz</p></blockquote>
<p>Puis on copie le répertoire nconf à la racine de son serveur Web et on change les droits:<br />
<blockquote>sudo mv nconf /usr/local<br />sudo chown -R www-data:www-data /usr/local/nconf</p></blockquote>
<p>Notes: les sous-répertoires suivants doivent avoir les droits en écriture pour l'utilisateur www-data:<br /> ./config <br />&nbsp;./output <br />&nbsp;./static_cfg <br />&nbsp;./temp</p>
<h1>Création de la base de donnée</h1>
<p>La prochaine étape consiste à créer une base de données dédiée ) NConf. Pour créer un base de donnée nommée nconf avec les droits pour l'utilisateur nconfuser (mot de passe: nconfpassword), il faut saisir les commandes suivantes sur son serveur MySQL:<br />
<blockquote># mysqladmin --user=root -p create nconf</p>
<p># mysql --user=root -p mysql</p>
<p>mysql&gt; GRANT ALL ON nconf.* TO nconfuser@localhost IDENTIFIED BY 'nconfpassword';</p>
<p>mysql&gt; flush privileges;</p></blockquote>
<h1>Configuration du serveur Web</h1>
<p>Pour rendre accessible le répertoire /usr/local/nconf à partir de votre serveur Web, il faut ajouter le fichier de configuration /etc/apache2/conf.d/nconf.conf dans votre configuration Apache:<br />
<blockquote>Alias /nconf /usr/local/nconf/<br />&lt;Directory "/usr/local/nconf"&gt;<br />&nbsp;&nbsp;&nbsp; Options Indexes<br />&nbsp;&nbsp;&nbsp; AllowOverride AuthConfig Options<br />&nbsp;&nbsp;&nbsp; Order allow,deny<br />&nbsp;&nbsp;&nbsp; Allow from all<br />&lt;/Directory&gt;</p></blockquote>
<p>Puis relancer Apache:<br />
<blockquote>apache2ctl restart</p></blockquote>
<p>
<h1>Configuration de NConf</h1>
<p>La fin de l'installation se fait via une interface Web. Il faut donc saisir l'URL suivante dans un navigateur:</p>
<div align="center"><b>http://adressedevotreserveur/nconf/INSTALL.php</b></div>
<p>Ce qui devrait afficher:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_001.png" /></div>
<p>On clique sur le bouton <b>Next</b>.</p>
<p>On doit saisir les paramètres de la base de donnée préalablement créées:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_002.png" width="576" height="274" /></div>
<p>On clique sur le bouton <b>Next</b>.</p>
<p>Le test de la BD doit être OK:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_003.png" /></div>
<p>On clique sur le bouton <b>Next</b>.</p>
<p>On fixe les répertoires de Nconf et de Nagios (/usr/local/nagios/bin). <b>Attention</b> dans le champs NAGIOS BIN, il faut saisir le chemin complet vers le binaire de Nagios (/usr/local/nagios/bin/nagios) et pas seulement le répertoire comme je l'ai fait dans un premier temps dans cette capture d'écran...</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_004.png" width="572" height="260" /></div>
<p>On clique sur le bouton <b>Next</b>.</p>
<p>On fixe un mot de passe (adminpassword) pour l'accès à NConf:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_005.png" width="577" height="247" /></div>
<p>On clique sur le bouton <b>Next</b>.</p>
<p>Le programme d'installation va vérifier la configuration (tout doit être OK):</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_006.png" width="578" height="532" /></div>
<p>On clique sur le bouton <b>Finish</b>.</p>
<p>On efface les fichier suivant:<br />
<blockquote>sudo rm -r /usr/local/nconf/INSTALL /usr/local/nconf/INSTALL.php /usr/local/nconf/UPDATE /usr/local/nconf/UPDATE.php</p></blockquote>
<h1>Mise en place de la synchronisation avec Nagios</h1>
<p>Comme NConf peut être hébergé sur une machine différente du serveur Nagios, l'importation de la configuration NCOnf vers Nagios doit se faire à la main ou par un script shell. Je préfére bien entendu cette deuxième méthode. </p>
<p>Avant tout, il faut vérifier que le répertoire Nagios à les bon droits en lecture et écriture pour être modifié par l'utilisateur www-data (utilisateur avec lequel le serveur Apache est lancé). Le plus simple est d'ajouter www-data au groupe nagiosgrp:<br />
<blockquote># vigr<br />nagiosgrp:x:1002:nagios,www-data</p></blockquote>
<p>puis de mettre les bons droits au répertoire etc:<br />
<blockquote>chown -R nagios:<b>nagiosgrp</b> /usr/local/nagios/etc<br />chmod 770 /usr/local/nagios/etc</p></blockquote>
<p>J'ai ensuite modifié le script ADD-ONS/deploy-local.sh de la manière suivante:<br />
<blockquote><small>#!/bin/bash</small><br /><small>OUTPUT_DIR="/usr/local/nconf/output/"</small><br /><small>NAGIOS_DIR="/usr/local/nagios/etc/"</small><br /><small>TEMP_DIR=${NAGIOS_DIR}"import/"</small><br /><small>CONF_ARCHIVE="NagiosConfig.tgz"</small><br /><small>if [ ! -e ${TEMP_DIR} ] ; then</small><br /><small>mkdir -p ${TEMP_DIR}</small><br /><small>fi</small><br /><small>if [ ${OUTPUT_DIR}${CONF_ARCHIVE} -nt ${TEMP_DIR}${CONF_ARCHIVE} ] ; then</small><br /><small>cp -p ${OUTPUT_DIR}${CONF_ARCHIVE} ${TEMP_DIR}${CONF_ARCHIVE}</small><br /><small>tar -xf ${TEMP_DIR}${CONF_ARCHIVE} -C ${NAGIOS_DIR}</small><br /><small>/etc/init.d/nagios reload</small><br /><small>fi</small><br /><small>exit</small></p></blockquote>
<p>Il ne reste plus qu'a l'éxecuter de manière automatique (par exemple toutes les 5 minutes) via un crontab root:<br />
<blockquote># crontab -e<br />*/5 * * * * /bin/bash /usr/local/nconf/ADD-ONS/deploy_local.sh 2&gt;&amp;1 &gt; /dev/null</p></blockquote>
<p>
<h1>Utilisation de NConf</h1>
<p>La première chose à faire est de se connecter à l'interface Web et de s'authentifier (admin/adminpassword). La page suivante devrait s'afficher:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/NConf_1245079025114.png" width="574" height="413" /></div>
<p>On va tester notre nouvelle interface en ajoutant un nouvel host dans Nagios. Pour cela on clique sur le menu "Hosts Add" de NConf:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_009.png" width="572" height="578" /></div>
<p>On clique ensuite sur <b>Submit</b>.</p>
<p>On peut alors choisir les services à superviser (il est bien sûr possible d'ajouter des services via NConf):</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_007.png" width="563" height="233" /></div>
<p>On clique ensuite sur <b>Submit</b>.</p>
<p>Une dernière page s'affiche avec le résumé:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_008.png" /></div>
<p>On clique sur <b>Finish</b>.</p>
<p>NConf vient ainsi d'ajouter ce nouvel host dans sa base de donnée. En cliquant maintenant sur le lien "<b>Generate Nagios config</b>", on va générer les fichiers de configuration de Nagios dans un NagiosConfig.tgz se trouvant dans le répertoire&nbsp; /usr/local/nconf/output. </p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_010.png" /></div>
<p>Il ne reste plus qu'a attendre le prochain lancement du script deploy-local.sh (dans les 5 minutes via crontab) pour que le host apparaisse dans Nagios:</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_011.png" width="553" height="96" /></div>
<p>
<h1>Conclusion</h1>
<p>Bien qu'en développement, NConf est très prometteur et comble le vide laissé par Nagios pour l'administration via une interface Web. L'idéal serait maintenant d'intégrer cette interface dans celle de Nagios (le hack ne doit pas être très difficile à faire) afin de ne pas avoir deux interfaces (NConf et Nagios).</p>
<p>A vous de tester maintenant...</p>
<p></p>

                            <div id="aspdf">
                                <a href="http://blog.nicolargo.com/wp-content/plugins/as-pdf/generate.php?post=2031">
                                    <span> </span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://blog.nicolargo.com/2009/06/nconf-une-interface-web-pour-nagios.html/feed</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Offre de support professionnel pour Nagios</title>
		<link>http://blog.nicolargo.com/2009/06/offre-de-support-professionnel-pour-nagios.html</link>
		<comments>http://blog.nicolargo.com/2009/06/offre-de-support-professionnel-pour-nagios.html#comments</comments>
		<pubDate>Fri, 12 Jun 2009 07:44:11 +0000</pubDate>
		<dc:creator>NicoLargo</dc:creator>
				<category><![CDATA[Open-source]]></category>
		<category><![CDATA[Réseau]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[professionnel]]></category>
		<category><![CDATA[support]]></category>

		<guid isPermaLink="false">http://blog.nicolargo.com/2009/06/offre-de-support-professionnel-pour-nagios.html</guid>
		<description><![CDATA[Nagios, l'outil de supervision open-source, connait un succès très important dans les entreprises (il n'y a qu'à voir le nombre de commentaires de stagiaires bossant sur le sujet dans mes tutos...). De nombreuses sociétés de service en informatique propose un support sur ce logiciel. C'est dans ce contexte que la société Nagios vient de lancer [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.nicolargo.com/nagios-tutoriels-et-documentations">Nagios</a>, l'outil de supervision open-source, connait un succès très important dans les entreprises (il n'y a qu'à voir le nombre de commentaires de stagiaires bossant sur le sujet dans <a href="http://blog.nicolargo.com/2009/01/le-serveur-de-supervision-libre-part-2.html">mes tutos</a>...). De nombreuses sociétés de service en informatique propose un support sur ce logiciel. C'est dans ce contexte que la société Nagios vient de lancer <a href="http://support.nagios.com">un portail</a> pour le support de son logiciel.</p>
<div style="text-align: center;"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/06/screenshot_013.png" alt="" width="579" height="330" /></div>
<p>Ce support comprend l'accès à des équipes d'experts dédiés disponible un peu partout sur la planète (pas de problème de décalage horaire), un accès à un gestionnaire de tickets pour saisir et suivre vos appels. Une base de connaissance <span style="text-decoration: underline;">publique</span> (documentation, FAQ) est <a href="http://support.nagios.com/knowledge-base">également disponible</a>.</p>
<p><a href="http://www.nagios.com/services/support">Le prix annuel</a> pour l'accès à ce support commence à  $2495 (soit environ <span style="text-decoration: underline;">1766</span> Euros). Comme quoi il est possible d'associer business et open-source...</p>

                            <div id="aspdf">
                                <a href="http://blog.nicolargo.com/wp-content/plugins/as-pdf/generate.php?post=2011">
                                    <span> </span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://blog.nicolargo.com/2009/06/offre-de-support-professionnel-pour-nagios.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tunnel HTTP pour faire du SSH depuis le bureau</title>
		<link>http://blog.nicolargo.com/2009/05/tunnel-http-pour-faire-du-ssh-depuis-le-bureau.html</link>
		<comments>http://blog.nicolargo.com/2009/05/tunnel-http-pour-faire-du-ssh-depuis-le-bureau.html#comments</comments>
		<pubDate>Wed, 20 May 2009 13:19:20 +0000</pubDate>
		<dc:creator>NicoLargo</dc:creator>
				<category><![CDATA[Open-source]]></category>
		<category><![CDATA[Réseau]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[tunnel]]></category>

		<guid isPermaLink="false">http://blog.nicolargo.com/2009/05/tunnel-http-pour-faire-du-ssh-depuis-le-bureau.html</guid>
		<description><![CDATA[
Vous êtes coincé à votre bureau, derrière un beau Firewall qui bloque, mis à part le HTTP, tous les autres protocoles. Au même moment, le site Web hébergé sur votre serveur perso plante... Dans ce cas, il faut attendre le soir, rentrer chez vous pour enfin pouvoir se connecter en SSH sur votre serveur et [...]]]></description>
			<content:encoded><![CDATA[<div align="center"><a href="http://www.flickr.com/photos/innoxiuss/2824204305/"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/05/lock.png" /></a></div>
<p>Vous êtes coincé à votre bureau, derrière un beau Firewall qui bloque, mis à part le HTTP, tous les autres protocoles. Au même moment, le site Web hébergé sur votre serveur perso plante... Dans ce cas, il faut attendre le soir, rentrer chez vous pour enfin pouvoir se connecter en SSH sur votre serveur et résoudre le problème.</p>
<p>Il existe cependant une astuce qui moyennant un brin de préparation va vous permettre de faire passer le SSH à travers ce vilain Firewall...<br />
<h1>Principe</h1>
<p>La théorie est la suivante: nous allons créer un tunnel HTTP entre le PC du bureau et le PC de la maison. C'est possible car le tunnel est basé sur un protocole autorisé par le Firewall de votre entreprise (HTTP dans notre cas mais vous pouvez utiliser n'importe quel protocole TCP). Ensuite, il faudra rediriger sur votre PC de bureau le protocole SSH vers le tunnel HTTP. Une fois que les paquets SSH sont récupérés sur le PC maison, il n'a qu'a les envoyer vers votre serveur.</p>
<div align="center"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/05/sshtunnelhttp.jpg" width="575" height="310" />&nbsp; &nbsp; </div>
<p>
<h1>Préparation de la configuration maison</h1>
<p>On commence par installer le logiciel HTTPtunnel sur notre PC maison (exemple d'installation sous Ubuntu):<br />
<blockquote>sudo apt-get install httptunnel</p></blockquote>
<p>Ensuite on lance la commande suivante:<br />
<blockquote>sudo hts --forward-port <i>A.B.C.D</i>:22 80</p></blockquote>
<p>Cette commande va écouter sur le port TCP/80 (comme c'est un port &lt; 1024 on doit lancer cette commande en root, d'ou l'utilisation de sudo) et rediriger le trafic vers le serveur (d'adresse ip A.B.C.D dans mon exemple) et sur le port SSH (TCP/22).</p>
<p>Ensuite il faut penser à configurer votre *box pour:
<ul>
<li>autoriser les flux HTTP (TCP/80) entrant à destination de l'adresse publique de la *box votre maison (règle de Firewall)</li>
<li>rediriger les flux HTTP (TCP/80) à destination de l'adresse publique de la *box votre maison vers l'adresse privé de votre PC maison (règle de NAT/PAT)</li>
</ul>
<h1>Configuration du PC bureau</h1>
<p>Si vous avez la chance de travailler sur un OS de type GNU/Linux à votre bureau, la prcédure est alors relative simple.</p>
<p>On commence par installer HTTPtunnel sur notre PC bureau (exemple d'installation sous Ubuntu):<br />
<blockquote>sudo apt-get install httptunnel</p></blockquote>
<p>Ensuite on lance la commande suivante:<br />
<blockquote>htc --forward-port 2222 E.F.G.H:80 </p></blockquote>
<p>Cette commande va écouter sur le port TCP/2222 (comme c'est un port &gt;<br />1024, il n'est pas nécessaire de lancer cette commande en root)<br />et rediriger le trafic vers le PC maison (d'adresse ip E.F.G.H dans mon<br />exemple) et sur le port HTTP (TCP/80).</p>
<p>Si votre entreprise oblige les flux Web à transiter par un proxy HTTP (d'adresse S.Q.U.I avec une authentification USER/PASSWORD), il faudra ajouter les paramètres suivants à la ligne de commande:<br />
<blockquote>htc <b>-P S.Q.U.I --proxy-authorization USER:PASSWORD</b> --forward-port 2222 E.F.G.H:80 </p></blockquote>
<p>Dans le cas ou votre PC de bureau est sous Windows (snif), il va falloir passer par une configuration du client <a href="http://www.putty.org/">Putty</a> par exemple <a href="http://marc.terrier.free.fr/docputty/Chapter3.html#using-port-forwarding">en suivant cette procédure</a>.<br />
<h1>Lancement du client SSH</h1>
<p>Il suffit de lancer la commande suivante à partir de votre PC de bureau:<br />
<blockquote>ssh localhost -p 2222</p></blockquote>
<p>Vous serez alors connecté sur votre serveur ! <img src='http://blog.nicolargo.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

                            <div id="aspdf">
                                <a href="http://blog.nicolargo.com/wp-content/plugins/as-pdf/generate.php?post=1950">
                                    <span> </span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://blog.nicolargo.com/2009/05/tunnel-http-pour-faire-du-ssh-depuis-le-bureau.html/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Compilation de VnStat sous Ubuntu/Debian</title>
		<link>http://blog.nicolargo.com/2009/04/compilation-de-vnstat-sous-ubuntudebian.html</link>
		<comments>http://blog.nicolargo.com/2009/04/compilation-de-vnstat-sous-ubuntudebian.html#comments</comments>
		<pubDate>Thu, 16 Apr 2009 13:02:33 +0000</pubDate>
		<dc:creator>NicoLargo</dc:creator>
				<category><![CDATA[Open-source]]></category>
		<category><![CDATA[Réseau]]></category>
		<category><![CDATA[vnstat]]></category>
		<category><![CDATA[vnstati]]></category>

		<guid isPermaLink="false">http://blog.nicolargo.com/2009/04/compilation-de-vnstat-sous-ubuntudebian.html</guid>
		<description><![CDATA[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.7) 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 [...]]]></description>
			<content:encoded><![CDATA[<p>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.7) 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 <b>VnStati</b> pour générer les images.</p>
<p>Voici donc dans ce billet une procédure très simple pour installer la version 1.7 de VnStat sur un système GNU/Linux (Ubuntu ou Debian) et donc disposer de VnStati...<br />
<h1>Installation des pré-requis</h1>
<p>Pour compiler correctement, Vnstat a besoin de quelques librairies:<br />
<blockquote>sudo apt-get install libgd2-noxpm libgd2-noxpm-dev</p></blockquote>
<h1>Compilation et installation de VnStat</h1>
<p>On commence par récupérer la dernière version disponible de VnStat<br />
<blockquote>wget http://humdi.net/vnstat/vnstat-1.7.tar.gz</p></blockquote>
<p>On décompresse et on compile:<br />
<blockquote>tar zxvf vnstat-1.7.tar.gz<br />cd vnstat-1.7/<br />make all</p></blockquote>
<p>Puis on installe sur notre système:<br />
<blockquote>sudo make install</p></blockquote>
<p>Et voili...</p>

                            <div id="aspdf">
                                <a href="http://blog.nicolargo.com/wp-content/plugins/as-pdf/generate.php?post=1868">
                                    <span> </span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://blog.nicolargo.com/2009/04/compilation-de-vnstat-sous-ubuntudebian.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>VNStat surveille votre bande passante</title>
		<link>http://blog.nicolargo.com/2009/04/vnstat-surveille-votre-bande-passante.html</link>
		<comments>http://blog.nicolargo.com/2009/04/vnstat-surveille-votre-bande-passante.html#comments</comments>
		<pubDate>Wed, 15 Apr 2009 12:50:28 +0000</pubDate>
		<dc:creator>NicoLargo</dc:creator>
				<category><![CDATA[Open-source]]></category>
		<category><![CDATA[Réseau]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[bande-passante]]></category>
		<category><![CDATA[supervision]]></category>

		<guid isPermaLink="false">http://blog.nicolargo.com/2009/04/vnstat-surveille-votre-bande-passante.html</guid>
		<description><![CDATA[
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
Puis ajouter la ligne suivant dans votre crontab:
 */5 * * * * root if [ -x /usr/bin/vnstat ] &#38;&#38; [ `ls -l /var/lib/vnstat/ [...]]]></description>
			<content:encoded><![CDATA[<div align="center"><a href="http://www.flickr.com/photos/exalthim/1594948378/"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/04/capture-200904154849.jpg" width="548" height="173" /></a></div>
<p><a href="http://humdi.net/vnstat/">VNStat</a> 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. <br />
<h1>Installation de VNstat</h1>
<p><u>Sous GNU/Linux Ubuntu:</u><br />
<blockquote># sudo apt-get install vnstat</p></blockquote>
<p>Puis ajouter la ligne suivant dans votre crontab:<br />
<blockquote> */5 * * * * root if [ -x /usr/bin/vnstat ] &amp;&amp; [ `ls -l /var/lib/vnstat/ | wc -l` -ge 1 ]; then /usr/bin/vnstat -u; fi</p></blockquote>
<p><u>Sous FreeBSD:</u><br />
<blockquote># pkg_add -r vnstat</p></blockquote>
<p>Puis ajouter la ligne suivant dans votre crontab:<br />
<blockquote>*/5 *	* * *	root	if [ -x /usr/local/bin/vnstat ] &amp;&amp; [ `ls -l /var/db/vnstat/ | wc -l` -ge 1 ]; then /usr/local/bin/vnstat -u; fi</p></blockquote>
<h1>Déclaration des interfaces réseaux à surveiller</h1>
<p>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).</p>
<p>Il faut donc effectuer la déclaration suivante qui va créer automatiquement les fichiers de base de données.<br />
<blockquote># vnstat -u -i em0 --nick "Internet"<br /># vnstat -u -i em1 --nick "LAN"</p></blockquote>
<h1>Utilisation de VNStat</h1>
<p>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.</p>
<p>La première commande permet d'afficher un résumé des statistiques par interface.:<br />
<blockquote># vnstat<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp; tx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp; total&nbsp;&nbsp;&nbsp; /&nbsp; estimated<br />Internet (em0):<br />&nbsp;&nbsp;&nbsp;&nbsp; yesterday&nbsp;&nbsp;&nbsp; 421.40 MB&nbsp; /&nbsp; 984.95 MB&nbsp; /&nbsp;&nbsp;&nbsp; 1.37 GB<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; today&nbsp;&nbsp;&nbsp;&nbsp; 91.20 MB&nbsp; /&nbsp;&nbsp; 86.35 MB&nbsp; /&nbsp; 177.54 MB&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp; 294 MB</p>
<p>LAN (em1):<br />&nbsp;&nbsp;&nbsp;&nbsp; yesterday&nbsp;&nbsp;&nbsp; 626.97 MB&nbsp; /&nbsp; 242.34 MB&nbsp; /&nbsp; 869.32 MB<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; today&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.46 GB&nbsp; /&nbsp; 565.40 MB&nbsp; /&nbsp;&nbsp;&nbsp; 2.01 GB&nbsp; /&nbsp;&nbsp;&nbsp; 3.36 GB</p></blockquote>
<p>Statistiques sur la dernière heure avec l'option -h:<br />
<blockquote># vnstat -h<br />&nbsp;Internet (em0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14:25 <br />&nbsp; ^&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r&nbsp;&nbsp;&nbsp;&nbsp; r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r&nbsp; r&nbsp; r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; |&nbsp; r&nbsp; r&nbsp; r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t&nbsp; t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r&nbsp; r&nbsp; rt r&nbsp; r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;-+---------------------------------------------------------------------------&gt; <br />&nbsp; |&nbsp; 15 16 17 18 19 20 21 22 23 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;h&nbsp;&nbsp; rx (kB)&nbsp;&nbsp;&nbsp; tx (kB)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; h&nbsp;&nbsp; rx (kB)&nbsp;&nbsp;&nbsp; tx (kB)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; h&nbsp;&nbsp; rx (kB)&nbsp;&nbsp;&nbsp; tx (kB) <br />15&nbsp;&nbsp;&nbsp;&nbsp; 117458&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 17933&nbsp;&nbsp;&nbsp; 23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 69069&nbsp;&nbsp;&nbsp; 07&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4913&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 31545<br />16&nbsp;&nbsp;&nbsp;&nbsp; 205687&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 21665&nbsp;&nbsp;&nbsp; 00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26175&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 23108&nbsp;&nbsp;&nbsp; 08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 61198&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 19855<br />17&nbsp;&nbsp;&nbsp;&nbsp; 112410&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14211&nbsp;&nbsp;&nbsp; 01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5373&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5281&nbsp;&nbsp;&nbsp; 09&nbsp;&nbsp;&nbsp;&nbsp; 682414&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 39748<br />18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4981&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6441&nbsp;&nbsp;&nbsp; 02&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3734&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4623&nbsp;&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp;&nbsp; 191760&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16684<br />19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5792&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 42644&nbsp;&nbsp;&nbsp; 03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3822&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4842&nbsp;&nbsp;&nbsp; 11&nbsp;&nbsp;&nbsp;&nbsp; 238408&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 95350<br />20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4211&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4416&nbsp;&nbsp;&nbsp; 04&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 31824&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 23303&nbsp;&nbsp;&nbsp; 12&nbsp;&nbsp;&nbsp;&nbsp; 135037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 37811<br />21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5571&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6457&nbsp;&nbsp;&nbsp; 05&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 17429&nbsp;&nbsp;&nbsp;&nbsp; 111179&nbsp;&nbsp;&nbsp; 13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 91544&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 24793<br />22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5680&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32557&nbsp;&nbsp;&nbsp; 06&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6706&nbsp;&nbsp;&nbsp;&nbsp; 135740&nbsp;&nbsp;&nbsp; 14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 40126&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6404</p></blockquote>
<p>Statistiques journalières avec l'option -d:<br />
<blockquote># vnstat -d<br />&nbsp;Internet (em0)&nbsp; /&nbsp; daily</p>
<p>&nbsp;&nbsp;&nbsp; day&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; tx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; total<br />------------------------+-------------+----------------------------------------<br />&nbsp;&nbsp; 14.04.&nbsp;&nbsp;&nbsp; 626.97 MB&nbsp; |&nbsp; 242.34 MB&nbsp; |&nbsp; 869.32 MB&nbsp;&nbsp; %%%%%%%:::<br />&nbsp;&nbsp; 15.04.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.47 GB&nbsp; |&nbsp; 566.67 MB&nbsp; |&nbsp;&nbsp;&nbsp; 2.02 GB&nbsp;&nbsp; %%%%%%%%%%%%%%%%%%:::::::<br />------------------------+-------------+----------------------------------------<br />&nbsp;estimated&nbsp;&nbsp;&nbsp;&nbsp; 2.43 GB&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 937 MB&nbsp; |&nbsp;&nbsp;&nbsp; 3.35 GB</p>
</blockquote>
<p>Statistiques hebdomadaire avec l'option -w:<br />
<blockquote># vnstat -w<br />&nbsp;&nbsp;&nbsp; Internet (em0)&nbsp; /&nbsp; weekly</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; total<br />&nbsp;&nbsp;&nbsp; ----------------------------+---------------+--------------<br />&nbsp;&nbsp;&nbsp; &nbsp; last 7 days&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.09 GB&nbsp; |&nbsp;&nbsp;&nbsp; 810.27 MB&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.89 GB<br />&nbsp;&nbsp;&nbsp; &nbsp;current week&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.09 GB&nbsp; |&nbsp;&nbsp;&nbsp; 810.27 MB&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.89 GB<br />&nbsp;&nbsp;&nbsp; ----------------------------+---------------+--------------<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; estimated&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.67 GB&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.14 GB&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.82 GB</p></blockquote>
<p>Statistiques mensuelle avec l'option -m:<br />
<blockquote># vnstat -m<br />Internet (em0)&nbsp; /&nbsp; monthly</p>
<p>&nbsp;&nbsp; month&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; total<br />-------------------------+--------------+--------------------------------------<br />&nbsp; Apr '09&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.09 GB&nbsp; |&nbsp;&nbsp; 810.27 MB&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 2.89 GB&nbsp;&nbsp; %%%%%%%%%%%%%%%%::::::<br />-------------------------+--------------+--------------------------------------<br />&nbsp;estimated&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.31 GB&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 1.63 GB&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 5.93 GB</p>
</blockquote>
<p>D'autres options permette d'avoir une vu en "temps réel" de la consomation de bande passante:<br />&nbsp;<br />Calcul sur les 5 dernières secondes:<br />
<blockquote># vnstat -tr<br />19 packets sampled in 5 seconds&nbsp;&nbsp;&nbsp; <br />Traffic average for em4</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.14 kB/s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 packets/s<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.13 kB/s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 packets/s</p></blockquote>
<p>Calcul instantané:<br />
<blockquote># vnstat -l<br />Monitoring em0...&nbsp;&nbsp;&nbsp; (press CTRL-C to stop)</p>
<p>&nbsp;&nbsp; rx:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.36 kB/s&nbsp;&nbsp;&nbsp; 11 p/s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tx:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.46 kB/s&nbsp;&nbsp;&nbsp; 13 p/s</p></blockquote>
<h1>Le texte c'est bien , mais les graphes c'est mieux</h1>
<p>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 VNStat<b>i</b>.</p>
<p>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):<br />
<blockquote># vnstati -i em0</p>
<p><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/04/vnstati.png" /></p></blockquote>
<p>Statistiques sur la dernière heure avec l'option -h:<br />
<blockquote># vnstat -h</p>
<p><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/04/vnstatih.png" /></p></blockquote>
<p>Statistiques journalières avec l'option -d:<br />
<blockquote># vnstat -d</p>
<p><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/04/vnstatid.png" /></p></blockquote>
<p>Statistiques mensuelle avec l'option -m:<br />
<blockquote># vnstat -m</p>
<p><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/04/vnstatim.png" /></p></blockquote>
<h1>Conclusion</h1>
<p>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 (<a href="http://www.sqweek.com/sqweek/index.php?p=1">projet vnStat PHP frontend</a>).</p>
<p></p>

                            <div id="aspdf">
                                <a href="http://blog.nicolargo.com/wp-content/plugins/as-pdf/generate.php?post=1867">
                                    <span> </span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://blog.nicolargo.com/2009/04/vnstat-surveille-votre-bande-passante.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>GStreamer aime les caméras IP Axis</title>
		<link>http://blog.nicolargo.com/2009/04/gstreamer-aime-les-cameras-ip-axis.html</link>
		<comments>http://blog.nicolargo.com/2009/04/gstreamer-aime-les-cameras-ip-axis.html#comments</comments>
		<pubDate>Tue, 07 Apr 2009 13:54:34 +0000</pubDate>
		<dc:creator>NicoLargo</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Open-source]]></category>
		<category><![CDATA[Réseau]]></category>
		<category><![CDATA[Système]]></category>
		<category><![CDATA[axis]]></category>
		<category><![CDATA[gstreamer]]></category>
		<category><![CDATA[ipcam]]></category>
		<category><![CDATA[webcam]]></category>

		<guid isPermaLink="false">http://blog.nicolargo.com/2009/04/gstreamer-aime-les-cameras-ip-axis.html</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>Si vous <a href="http://blog.nicolargo.com/abonnez-vous">lisez régulièrement ce blog</a>, vous savez que je m'intéresse au FrameWork multimédia GStreamer (<a href="http://blog.nicolargo.com/tag/gstreamer">cliquez ici</a> 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 <a href="http://www.amazon.fr/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.fr%2Fs%3Fie%3DUTF8%26x%3D0%26ref%255F%3Dnb%255Fss%255Fw%26y%3D0%26field-keywords%3Daxis%26url%3Dsearch-alias%253Delectronics&amp;tag=leblogdenico-21&amp;linkCode=ur2&amp;camp=1642&amp;creative=19458">les caméras IP AXIS</a><img style="border: medium none  ! important; margin: 0px ! important; display: none;" src="https://www.assoc-amazon.fr/e/ir?t=leblogdenico-21&amp;l=ur2&amp;o=8" border="0" alt="" width="1" height="1" />, 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.</p>
<p>Avant de nous plonger dans le vif du sujet et si vous souhaitez faire ces tests chez vous, il faut au préhalable <a href="http://blog.nicolargo.com/2009/01/introduction-a-gstreamer-le-framework-multimedia.html">installer GStreamer</a> sur votre système.</p>
<p>Ma configuration de test est la suivante:</p>
<div style="text-align: center;"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/04/axisgstreamer1.png" alt="" /></div>
<p>Lors de la rédaction de ce billet, j'ai utilisé la caméra <span style="text-decoration: underline;">AXIS 213</span>:</p>
<div><a href="http://www.amazon.fr/gp/product/B0007R8KE4?ie=UTF8&amp;tag=leblogdenico-21&amp;linkCode=as2&amp;camp=1642&amp;creative=19458&amp;creativeASIN=B0007R8KE4"></a></p>
<div>La configuration de cette caméra (cam01) est la suivante:<br />
<span style="text-decoration: underline;"><br />
</span><em><small>Format CIF<br />
Compression 50%<br />
Frame rate: 25 images/s<br />
</small><br />
</em><span style="text-decoration: underline;">Configuration du PC1:</span></p>
<p><small>OS: GNU/Linux Debian 5.0 + Gstreamer 0.10.19-3<br />
Hardware: Pentium Quad core CPU 2.8 Ghz + 4 Go RAM<br />
</small><span style="text-decoration: underline;"><br />
Configuration du PC2:</span></p>
<p><small>OS: GNU/Linux Ubuntu 8.10 + Gstreamer 0.10.21-4<br />
Hardware: Pentium Dual core CPU 3.0 Ghz + 512 Mo RAM</small></div>
</div>
<p style="text-align: center;"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/04/axis2131.png" alt="" width="166" height="197" /></p>
<h1>Affichage du flux vidéo</h1>
<p>Cette caméra (comme toutes les caméras AXIS) permet la diffusion sur le réseau en utilisant deux formats:</p>
<ul>
<li>MJPEG sur HTTP</li>
<li>MPEG-4 sur RTSP</li>
</ul>
<h2>Affichage du flux MJPEG/HTTP</h2>
<p>On lance la commande suivante sur la machine PC1:</p>
<blockquote><p>gst-launch gnomevfssrc location=http://cam01/axis-cgi/mjpg/video.cgi?resolution=CIF ! jpegdec ! ffmpegcolorspace ! autovideosink</p></blockquote>
<p>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.</p>
<h2>Affichage du flux MPEG4/RTSP</h2>
<p>On lance la commande suivante sur la machine PC1:</p>
<blockquote><p>gst-launch-0.10 rtspsrc location=rtsp://cam01:554/mpeg4/media.amp latency=0 ! decodebin ! ffmpegcolorspace ! autovideosink</p></blockquote>
<p>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.</p>
<p>Le paramètre <strong>latency</strong> (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é.</p>
<h1>Encodage du flux vidéo dans un fichier</h1>
<p>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:</p>
<ul>
<li>récupérer le flux MPEG4/RTSP de la caméra</li>
<li>l'afficher sur l'écran</li>
<li>réduire le nombre d'images par seconde (fps) à 1</li>
<li>encoder le flux en MJPG</li>
<li>sauvegarder dans un fichier AVI (output.avi)</li>
</ul>
<p>La ligne de commande correspondante à lancer sur PC1 est:</p>
<blockquote><p>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</p></blockquote>
<p>Le fichier généré (output.avi) occupe un espace disque d'environ 15 Ko par seconde (soit 54 Mo/heure).</p>
<p>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:</p>
<blockquote><p>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</p></blockquote>
<p>On a alors une taille de fichier de sortie (output/ogg) d'environ 6 Ko par seconde (soit 21 Mo/heure).</p>
<h1>Mixer plusieurs vidéos en une</h1>
<p>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).</p>
<p>Je vais dans l'exemple ci-dessous, prendre deux sources (Camera AXIS + Webcam USB) et les mixer:</p>
<div style="text-align: center;"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/04/018-capture.jpg" alt="" /></div>
<p>La pipeline est la suivante:</p>
<blockquote><p>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.</p></blockquote>
<p>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.</p>
<h1>Streaming vers une autre machine</h1>
<p>Nous allons maintenant voir comment transcoder le flux vidéo d'une caméra IP pour le diffuser (streamer vers une autre machine).</p>
<p>La description du pipeline du PC1 est la suivante:</p>
<ul>
<li>récupérer le flux MPEG4/RTSP de la caméra</li>
<li>réencodage en Theora (à 250 Kbps)</li>
<li>diffusion en UDP vers le PC2</li>
</ul>
<p>puis celle du PC2:</p>
<ul>
<li>récupérer de flux Theora/UDP venant du PC1</li>
<li>décodage Theora</li>
<li>affichage de la vidéo</li>
</ul>
<p>et les commandes correspondantes, sur le PC2 (il faut lancer cette commande en premier):</p>
<blockquote><p>gst-launch -v udpsrc port=1234 ! theoradec ! autovideosink</p></blockquote>
<p>puis sur le PC1:</p>
<blockquote><p>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</p></blockquote>
<p>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.</p>
<p>L'avantage avec GStreamer, c'est qu'il intégre <a href="http://gstreamer.freedesktop.org/documentation/plugins.html">une liste de plugins assez impressionnante</a>, 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 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-cairotextoverlay.html">cairotextoverlay</a>.</p>
<p>La commande sur le PC1 devient alors:</p>
<blockquote><p>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</p></blockquote>
<p>et le résultat sur PC2:</p>
<div style="text-align: center;"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/04/textoverlay.jpg" alt="" /></div>
<h1>Pour conclure</h1>
<p>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 <a href="http://gstreamer.freedesktop.org/bindings/">aux API disponibles</a>. Si vous avez des questions et remarques sur le sujet, il existe une <a href="http://forum.nicolargo.com/viewforum.php?id=22">section spéciale</a> dans le forum !</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=9f02d01c-f395-89bb-b2a9-31e53996b943" alt="" /></div>

                            <div id="aspdf">
                                <a href="http://blog.nicolargo.com/wp-content/plugins/as-pdf/generate.php?post=1849">
                                    <span> </span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://blog.nicolargo.com/2009/04/gstreamer-aime-les-cameras-ip-axis.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Installation d&#039;un serveur VPN sous FreeBSD</title>
		<link>http://blog.nicolargo.com/2009/04/installation-dun-serveur-vpn-sous-freebsd.html</link>
		<comments>http://blog.nicolargo.com/2009/04/installation-dun-serveur-vpn-sous-freebsd.html#comments</comments>
		<pubDate>Thu, 02 Apr 2009 14:28:01 +0000</pubDate>
		<dc:creator>NicoLargo</dc:creator>
				<category><![CDATA[Open-source]]></category>
		<category><![CDATA[Réseau]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[mac-os-x]]></category>
		<category><![CDATA[openvpn]]></category>
		<category><![CDATA[routé]]></category>
		<category><![CDATA[routed]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[vpn]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://blog.nicolargo.com/2009/04/installation-dun-serveur-vpn-sous-freebsd.html</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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 <a href="http://openvpn.net/">OpenVPN</a> (licence GPL v2).</p>
<div style="text-align: center;"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/04/openvpn.png" alt="" /></div>
<h1>Installation du système FreeBSD</h1>
<p>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 <a href="ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/7.1/">7.x-RELEASE-i386-bootonly</a>).</p>
<p>Avant de commencer l'installation d'OpenVPN, il est préférable de s'assurer que notre système d'exploitation est à jour <a href="http://blog.nicolargo.com/2009/04/mise-a-jour-de-freebsd-avec-freebsd-update.html">en suivant cette procédure</a>.</p>
<h1>Installation de OpenVPN</h1>
<p>On commence par installer le port OpenVPN avec la commande suivante:</p>
<blockquote><p># pkg_add -r openvpn</p></blockquote>
<p>On automatise le lancement en ajoutant la ligne suivante au fichier /etc/rc.conf:</p>
<blockquote><p>openvpn_enable="YES"</p></blockquote>
<h1>Configuration du serveur OpenVPN</h1>
<p>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:</p>
<blockquote><p># vi openssl.cnf<br />
dir = /etc/ssl/CA<br />
default_days = 3650 # Valable 10 ans...<br />
default_bits  = 2048 # Clès de 2048 bits<br />
countryName_default = FR<br />
stateOrProvinceName_default = PACA<br />
localityName_default = Valbonne<br />
0.organizationName_default = MaBoite<br />
commonName_default = mondomaine.com<br />
emailAddress_default = contact@mondomaine.com</p>
<p># mkdir /etc/ssl/CA</p>
<p># cd /etc/ssl/CA<br />
# mkdir certs<br />
# mkdir crls<br />
# mkdir newcerts<br />
# mkdir private<br />
# touch index.txt<br />
# echo 01 &gt; serial<br />
# echo 01 &gt; crlnumber<br />
# openssl req -nodes -new -x509 -keyout private/cakey.pem -out cacert.pem -days 3650<br />
<em>&gt; Laisser les options par défaut</em></p></blockquote>
<p>A ce stade, on doit avoir notre clés créé dans le fichier private/cakey.pem:</p>
<blockquote><p># ls /etc/ssl/CA/private<br />
cakey.pem</p></blockquote>
<p>On génère ensuite le fichier de révocation:</p>
<blockquote><p># cd /etc/ssl/CA<br />
# openssl ca -gencrl -out crls/crl.pem<br />
# chown root:nobody crls/crl.pem</p></blockquote>
<p>On passe maintenant à la génération de notre certificat pour notre serveur VPN:</p>
<blockquote><p># cd /etc/ssl/CA/certs<br />
# openssl req -nodes -new \<br />
-keyout vpn.mondomaine.com.key \<br />
-out vpn.mondomaine.com.csr<br />
<em>&gt; Laisser les options par défaut puis entrer un mot de passe</em><br />
<em># chmod 600 </em>/etc/ssl/CA/certs/vpn.mondomaine.com.key</p></blockquote>
<p>Puis on le signe:</p>
<blockquote><p># openssl ca -out al-vpn1.alcasat.net.crt<br />
\-in al-vpn1.alcasat.net.csr<br />
\-policy policy_anything</p></blockquote>
<p>Enfin on génère les paramètres <a href="http://fr.wikipedia.org/wiki/%C3%89change_de_cl%C3%A9s_Diffie-Hellman">Diffie-Hellman</a> pour l'échange des clés:</p>
<blockquote><p># openssl dhparam -out dh2048.pem 2048</p></blockquote>
<p>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.</p>
<blockquote><p># mkdir /usr/local/etc/openvpn/<br />
# cp /usr/local/share/doc/openvpn/sample-config-files/server.conf \<br />
/usr/local/etc/openvpn/openvpn.conf</p></blockquote>
<p>Puis éditer le fichier /usr/local/etc/openvpn/openvpn.conf en adaptant la configuration à votre réseau.</p>
<p>Voici ma configuration:</p>
<div style="text-align: center;"><img style="max-width: 800px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/04/openvpn-exemple.png" alt="" width="573" height="162" /></div>
<p>et le fichier .conf correspondant:</p>
<blockquote><p>port 1194<br />
proto udp<br />
dev tun</p>
<p>ca /etc/ssl/CA/cacert.pem<br />
cert /etc/ssl/CA/certs/al-vpn1.alcasat.net.crt<br />
key /etc/ssl/CA/certs/al-vpn1.alcasat.net.key<br />
crl-verify /etc/ssl/CA/crls/crl.pem<br />
dh /etc/ssl/CA/certs/dh2048.pem</p>
<p>server 192.168.40.0 255.255.255.0</p>
<p>ifconfig-pool-persist ipp.txt<br />
push "route 192.168.1.0 255.255.255.0"</p>
<p>keepalive 10 120</p>
<p>cipher BF-CBC<br />
comp-lzo</p>
<p>user nobody<br />
group nobody</p>
<p>persist-key<br />
persist-tun</p>
<p>status openvpn-status.log<br />
verb 6<br />
mute 20</p></blockquote>
<h1>Lancement du serveur OpenVPN</h1>
<p>On utilise le script système:</p>
<blockquote><p># /usr/local/etc/rc.d/openvpn start</p></blockquote>
<p>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:</p>
<blockquote><p># /usr/local/etc/rc.d/openvpn status<br />
openvpn is running as pid 2212.</p>
<p># ifconfig tun0<br />
tun0: flags=8051&lt;UP,POINTOPOINT,RUNNING,MULTICAST&gt; metric 0 mtu 1500<br />
inet 192.168.40.1 --&gt; 192.168.40.2 netmask 0xffffffff<br />
Opened by PID 2207</p></blockquote>
<p>Pour relancer le serveur (en cas de changement de configuration):</p>
<blockquote><p># /usr/local/etc/rc.d/openvpn restart</p></blockquote>
<p>Pour arrêter le serveur:</p>
<blockquote><p># /usr/local/etc/rc.d/openvpn stop</p></blockquote>
<p>La consultation des logs peut être faire via la commande:</p>
<blockquote><p># tail -f /var/log/messages | grep openvpn</p></blockquote>
<h1>Configuration de votre réseau</h1>
<p>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):</p>
<blockquote><p># route add -net 192.168.40.0/24 @IP-SERVEUR-VPN</p></blockquote>
<h1>Configuration d'un client Linux</h1>
<p><span style="text-decoration: underline;">A partir du serveur VPN</span>, on génére les clés pour le nouveau client:</p>
<blockquote><p># cd /etc/ssl/CA/certs<br />
# openssl req -nodes -new -keyout vpn-nicolargo.key -out vpn-nicolargo.csr<br />
<small></small><small>Generating a 2048 bit RSA private key</small><br />
<small></small><small>...............................................+++</small><br />
<small></small><small>...................+++</small><br />
<small></small><small>writing new private key to 'vpn-nicolargo.key'</small><br />
<small></small><small>-----</small><br />
<small></small><small>You are about to be asked to enter information that will be incorporated</small><br />
<small></small><small>into your certificate request.</small><br />
<small></small><small>What you are about to enter is what is called a Distinguished Name or a DN.</small><br />
<small></small><small>There are quite a few fields but you can leave some blank</small><br />
<small></small><small>For some fields there will be a default value,</small><br />
<small></small><small>If you enter '.', the field will be left blank.</small><br />
<small></small><small>-----</small><br />
<small></small><small>Country Name (2 letter code) [FR]:</small><br />
<small></small><small>State or Province Name (full name) [PACA]:</small><br />
<small></small><small>Locality Name (eg, city) [Valbonne]:</small><br />
<small></small><small>Organization Name (eg, company) [MaBoite]:</small><br />
<small></small><small>Organizational Unit Name (eg, section) []:</small><br />
<small></small><small>Common Name (eg, YOUR name) [mondomaine.com]:<strong>vpn-nicolargo.mondomaine.com</strong></small><br />
<small></small><small>Email Address [contact@mondomaine.com]:<strong>monadresse@mondomaine.com</strong></small></p>
<p><small></small><small>Please enter the following 'extra' attributes</small><br />
<small></small><small>to be sent with your certificate request</small><br />
<small></small><small>A challenge password []:<strong>monpassword</strong></small><br />
<small></small><small>An optional company name []:</small></p></blockquote>
<p>Il faut changer le fichier /etc/ssl/CA/serial (incrémenter la valeur de 1).</p>
<blockquote><p># echo 02 &gt; /etc/ssl/CA/serial</p></blockquote>
<p>Puis signer le certificat:</p>
<blockquote><p># openssl ca -out vpn-nicolargo.crt \<br />
-in vpn-nicolargo.csr -policy policy_anything</p></blockquote>
<p><span style="text-decoration: underline;">Sur la machine cliente</span>, 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).</p>
<p>On doit se retrouver avec nos 4 fichiers:</p>
<blockquote><p># ls /etc/ssl/certs/*<br />
/etc/ssl/certs/cacert.pem<br />
/etc/ssl/certs/vpn-nicolargo.crt<br />
/etc/ssl/certs/vpn-nicolargo.csr<br />
/etc/ssl/certs/vpn-nicolargo.key</p></blockquote>
<p>On protége nos fichiers:</p>
<blockquote><p># groupdadd nobody<br />
# chown root:nobody /etc/ssl/certs/cacert.pem<br />
# chown root:nobody /etc/ssl/certs/vpn-nicolargo.*<br />
# chmod 600 /etc/ssl/certs/vpn-nicolargo.key</p></blockquote>
<p>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):</p>
<blockquote><p># sudo vi /etc/openvpn/client.conf<br />
client<br />
dev tun<br />
proto udp<br />
remote al-vpn1.alcasat.net 1194<br />
nobind<br />
user nobody<br />
group nobody<br />
persist-key<br />
persist-tun<br />
ca /etc/ssl/certs/cacert.pem<br />
cert /etc/ssl/certs/vpn-hennionn.crt<br />
key /etc/ssl/certs/vpn-hennionn.key<br />
cipher BF-CBC<br />
comp-lzo<br />
verb 6<br />
mute 20</p></blockquote>
<h1>Lancement du client OpenVPN Linux</h1>
<p>Pour monter le VPN entre notre client et le serveur, on utilise le script système (sous GNU/Linux Ubuntu):</p>
<blockquote><p># sudo /etc/init.d/openvpn start client<br />
* Starting VPN 'client' [OK]</p></blockquote>
<p>L'arrêt se fera tout aussi simplement:</p>
<blockquote><p># sudo /etc/init.d/openvpn stop client</p>
<p>* Stopping VPN 'client' [OK]</p></blockquote>
<p>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:</p>
<blockquote><p>AUTOSTART="none"</p></blockquote>
<h1>Pour conclure...</h1>
<p>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.</p>
<p>Des clients OpenVPN avec interface graphique sont également disponibles sous <a href="http://openvpn.se/download.html">Windows</a> et <a href="http://blog.lmartin.fr/dc2/index.php/post/2008/02/16/Installation-et-lancement-autiomatique-dOpenVPN-sous-Leopard">Mac OS X</a>.</p>
<p><small>Quelques sources utiles à la rédaction de ce billet:<br />
</small></p>
<ul>
<li><small><a href="http://openvpn.net/index.php/documentation/howto.html#install">Le How-To du site officiel (en)</a></small></li>
<li><small><a href="http://www.freebsddiary.org/openvpn-routed.php">OpenVPN - Creating a routed VPN - FreeBSD Diary (en)</a></small></li>
<li><small><a href="http://www.section6.net/wiki/index.php/Setting_up_OpenVPN_in_FreeBSD">Setting up routed OpenVPN in FreeBSD - Wiki Section6 (en)</a></small></li>
<li><small><a href="http://www.section6.net/wiki/index.php/Basics_of_using_OpenSSL">Basic of using OpenSSL - Wiki Section 6 (en)</a><br />
</small></li>
</ul>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=13a93a03-4593-8d6c-862d-4037409c187e" alt="" /></div>

                            <div id="aspdf">
                                <a href="http://blog.nicolargo.com/wp-content/plugins/as-pdf/generate.php?post=1832">
                                    <span> </span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://blog.nicolargo.com/2009/04/installation-dun-serveur-vpn-sous-freebsd.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Installation serveur NAT-PMP sous FreeBSD</title>
		<link>http://blog.nicolargo.com/2009/03/installation-serveur-nat-pmp-sous-freebsd.html</link>
		<comments>http://blog.nicolargo.com/2009/03/installation-serveur-nat-pmp-sous-freebsd.html#comments</comments>
		<pubDate>Tue, 24 Mar 2009 09:33:13 +0000</pubDate>
		<dc:creator>NicoLargo</dc:creator>
				<category><![CDATA[Open-source]]></category>
		<category><![CDATA[Réseau]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[bsd]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[miniupnp]]></category>
		<category><![CDATA[nat-pmp]]></category>
		<category><![CDATA[upnp]]></category>

		<guid isPermaLink="false">http://blog.nicolargo.com/2009/03/installation-serveur-nat-pmp-sous-freebsd.html</guid>
		<description><![CDATA[MiniUPnP est une implémentation libre du protocole NAT-PMP. Développé par Apple, ce successeur de UPnP IGD permet de configurer automatique et à la demande des applications des règles de NAT sur votre routeur d'accès. Free vient d'ajouter cette fonction sur le firmware des Freebox.
Nous allons voir dans ce billet comment fonctionne ce protocole et comment [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://miniupnp.free.fr">MiniUPnP</a> est une implémentation libre du protocole NAT-PMP. Développé par Apple, ce successeur de UPnP IGD permet de configurer automatique et à la demande des applications des règles de NAT sur votre routeur d'accès. Free <a href="http://www.macgeneration.com/news/voir/134293/freebox-du-mieux-pour-back-to-my-mac">vient d'ajouter cette fonction</a> sur le firmware des Freebox.</p>
<p>Nous allons voir dans ce billet comment fonctionne ce protocole et comment transformer votre <a href="http://blog.nicolargo.com/2008/08/de-ipfw-a-pf.html">routeur/firewall PF FreeBSD</a> en un daemon NAT-PMP.</p>
<h1>C'est quoi NAT-PMP ?</h1>
<p>NAT-PMP est un protocole basée sur le protocole <a href="http://developer.apple.com/networking/bonjour/specs.html">Bonjour</a>. Ce dernier utilise des trames UDP sur le port 5351 qui sont envoyé vers l'adresse de la passerelle par défaut de votre réseau.</p>
<p>Il permettant à une application de:
<ul>
<li>récupérer son adresse IP publique (comment le PC va être vu sur Internet)</li>
<li>ajouter une règle de NAT PF (ou IPFW) sur le routeur </li>
</ul>
<p>Si l'adresse publique de la passerelle par défaut change, une alerte au format multicast (adresse 224.0.0.1 sur le port 5351) sera envoyée sur le réseau. Elle contiendra en donnée la nouvelle adresse.<br />
<h1>Installation du daemon sur FreeBSD</h1>
<p>Le daemon en question s'appelle minipnpd et est présent dans les ports de FreeBSD (/usr/ports/net/miniupnpd).</p>
<p>L'installation est classique:<br />
<blockquote>portinstall net/miniupnpd</p></blockquote>
<p>Il faut également ajouter les règles suivantes dans votre fichier de configuration PF (/etc/pf.conf par défaut):<br />
<blockquote># NAT section<br /># UPnPd rdr anchor<br />rdr-anchor "miniupnpd"</p>
<p># Rules section<br /># uPnPd rule anchor<br />anchor "miniupnpd"</p></blockquote>
<p>puis relancer les règles PF:<br />
<blockquote>pfctl -f /etc/pf.conf</p></blockquote>
<p>et enfin ajouter la ligne suivante dans votre fichier /etc/rc.conf:<br />
<blockquote>miniupnpd_enable="YES"</p></blockquote>
<p>La configuration doit se faire par un fichier /usr/local/etc/miniupnpd.conf. Vous pouvez utiliser le template suivant (à adapter à votre réseau):<br />
<blockquote># WAN network interface<br />ext_ifname=em0<br /># if the WAN interface has several IP addresses, you<br /># can specify the one to use below<br />#ext_ip=</p>
<p># there can be multiple listening ips for receiving SSDP traffic.<br /># the 1st IP is also used for UPnP Soap traffic.<br />listening_ip=192.168.0.254<br />port=5555</p>
<p># bitrates reported by daemon in bits per second<br />bitrate_up=131072<br />bitrate_down=524288</p>
<p># default presentation url is http address on port 80<br />#presentation_url=</p>
<p># report system uptime instead of daemon uptime<br />system_uptime=yes</p>
<p># notify interval in seconds default is 30 seconds.<br />#notify_interval=240</p>
<p># log packets in pf<br />#packet_log=no</p>
<p># uuid : generated by the install a new one can be created with<br /># uuidgen<br />uuid=%%UUID%%</p>
<p># UPnP permission rules<br /># (allow|deny) (external port range) ip/mask (internal port range)<br /># A port range is &lt;min port&gt;-&lt;max port&gt; or &lt;port&gt; if there is only<br /># one port in the range.<br /># ip/mask format must be nn.nn.nn.nn/nn<br />allow 1024-65535 192.168.0.0/24 1024-65535<br />deny 0-65535 0.0.0.0/0 0-65535</p></blockquote>
<p>Pour lancer le daemon, il faut lancer la commande suivante:<br />
<blockquote>/usr/local/etc/rc.d/miniupnpd start</p></blockquote>
<h1>Pour tester<br /></h1>
<p>Le plus simple est d'utiliser une des applications compatibles UPnP (voir <a href="http://en.wikipedia.org/wiki/NAT_Port_Mapping_Protocol">liste</a> dans le Wiki) ou bien d'utiliser le client en ligne de commande <a href="http://miniupnp.free.fr/files/">miniupnpc</a> (compilable sous Linux, BSD, Mac OS X et Windows...).<br />
<h1>Conclusion</h1>
<p>Bien sûr ce daemon peut présenter un trou de sécurité assez important (possibilité d'ajouter des règles sur votre Firewall), il faut donc prendre toutes les précautions nécessaires sur les réseaux sensibles (notamment au niveau de la configuration de la section UPnP permission rules).</p>
<p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=74355c07-373b-4104-aac6-8ff0cf83ef90" /></div>

                            <div id="aspdf">
                                <a href="http://blog.nicolargo.com/wp-content/plugins/as-pdf/generate.php?post=1807">
                                    <span> </span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://blog.nicolargo.com/2009/03/installation-serveur-nat-pmp-sous-freebsd.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SJitter version 0.18</title>
		<link>http://blog.nicolargo.com/2009/03/sjitter-version-018.html</link>
		<comments>http://blog.nicolargo.com/2009/03/sjitter-version-018.html#comments</comments>
		<pubDate>Mon, 23 Mar 2009 14:06:59 +0000</pubDate>
		<dc:creator>NicoLargo</dc:creator>
				<category><![CDATA[Open-source]]></category>
		<category><![CDATA[Réseau]]></category>
		<category><![CDATA[bande-passante]]></category>
		<category><![CDATA[délai]]></category>
		<category><![CDATA[gigue]]></category>
		<category><![CDATA[sjitter]]></category>

		<guid isPermaLink="false">http://blog.nicolargo.com/2009/03/sjitter-version-018.html</guid>
		<description><![CDATA[Grâce à la contribution de Thierry Legras, voici une nouvelle version de SJitter, mon outil en ligne de commande permettant de tester un réseau, notamment au niveau débit, délai et gigue. SJitter est disponible sous Linux, BSD, Mac OS X et Windows (via cygwin).
Cette nouvelle version apporte un meilleur control au niveau du tag permettant [...]]]></description>
			<content:encoded><![CDATA[<p><img style="max-width: 800px; float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://www.nicolargo.com/dev/sjitter/sjitter.png" height="86" width="96" />Grâce à la contribution de Thierry Legras, voici une nouvelle version de SJitter, mon outil en ligne de commande permettant de tester un réseau, notamment au niveau débit, délai et gigue. SJitter est disponible sous Linux, BSD, Mac OS X et Windows (via cygwin).</p>
<p>Cette nouvelle version apporte un meilleur control au niveau du tag permettant de faire les tests en IPv6 et surtout la possibilité (via l'option "-s") de fixer le champs ToS des paquets IPv4 (très utile pour tester votre configuration QoS).</p>
<p>La page officielle de SJitter est <a href="http://www.nicolargo.com/dev/sjitter/">ici</a>, la forge <a href="http://sourceforge.net/projects/sjitter/">là</a>.</p>
<p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=bc4fefe2-9c30-490d-a0c8-1aac29f4395e" /></div>

                            <div id="aspdf">
                                <a href="http://blog.nicolargo.com/wp-content/plugins/as-pdf/generate.php?post=1806">
                                    <span> </span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://blog.nicolargo.com/2009/03/sjitter-version-018.html/feed</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Simuler un lien WAN sous Linux</title>
		<link>http://blog.nicolargo.com/2009/03/simuler-un-lien-wan-sous-linux.html</link>
		<comments>http://blog.nicolargo.com/2009/03/simuler-un-lien-wan-sous-linux.html#comments</comments>
		<pubDate>Tue, 17 Mar 2009 14:52:09 +0000</pubDate>
		<dc:creator>NicoLargo</dc:creator>
				<category><![CDATA[Open-source]]></category>
		<category><![CDATA[Réseau]]></category>
		<category><![CDATA[iproute]]></category>
		<category><![CDATA[liaison]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[netem]]></category>
		<category><![CDATA[simul]]></category>
		<category><![CDATA[simulation]]></category>
		<category><![CDATA[tc]]></category>
		<category><![CDATA[wan]]></category>

		<guid isPermaLink="false">http://blog.nicolargo.com/?p=1788</guid>
		<description><![CDATA[Il peut être utile, dans le cadre de tests applicatifs, de simuler sur votre réseau local (LAN), les caractéristiques d'une liaison distante (WAN). En effet, vos applications peuvent très bien fonctionner sur un réseau LAN et devenir inexploitable sur des liaisons WAN.
Nous allons utiliser le module Net:Netem des noyaux Linux 2.6 pour simuler les caractéristiques [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/_rq/2959253587/"><img style="max-width: 800px; float: right; margin-top: 10px; margin-bottom: 10px; margin-left: 10px;" src="http://blog.nicolargo.com/wp-content/uploads/2009/03/2959253587-188ebcc284-t.jpg" alt="" /></a>Il peut être utile, dans le cadre de tests applicatifs, de simuler sur votre réseau local (LAN), les caractéristiques d'une liaison distante (WAN). En effet, vos applications peuvent très bien fonctionner sur un réseau LAN et devenir inexploitable sur des liaisons WAN.</p>
<p>Nous allons utiliser <a href="http://www.linuxfoundation.org/en/Net:Netem">le module Net:Netem</a> des noyaux Linux 2.6 pour simuler les caractéristiques suivantes:</p>
<ul>
<li>Bande passante</li>
<li>Délai de transit</li>
<li>Perte de paquet</li>
<li>Duplication de paquet</li>
<li>Re-arrangement de paquet</li>
</ul>
<p>La configuration de ce module se fait via la commande en ligne <a href="http://linux.die.net/man/8/tc">tc</a>.</p>
<h1>Simuler un délai de transit constant</h1>
<p>Le délai est le temps de transit réseau d'un paquet IP. Il dépend de pas mal de paramètres (traversé des équipements, taille des buffers et distance physique entre les deux points du réseau). Nous allons utiliser la commande <em>delay</em> qui va simuler un délai de transit de X ms sur tout les paquets IP <strong>sortant</strong> de l'interface réseau. On va utiliser la commande "ping" pour vérifier que tout fonctionne comme prévu.</p>
<p>Test du réseau avant la commande tc:</p>
<blockquote><p>$ ping 192.168.29.1<br />
PING 192.168.29.1 (192.168.29.1) 56(84) bytes of data.<br />
64 bytes from 192.168.29.1: icmp_seq=1 ttl=64 time=<strong>0.290</strong> ms<br />
64 bytes from 192.168.29.1: icmp_seq=2 ttl=64 time=<strong>0.204</strong> ms</p></blockquote>
<p>On simule un délai de <strong>40</strong> ms sur tout les paquets sortant (soit environ le délais sur une liaison ADSL):</p>
<blockquote><p>sudo tc qdisc add dev eth0 root netem delay <strong>40</strong>ms</p></blockquote>
<p>Test du réseau après la commande tc:</p>
<blockquote><p>$ ping 192.168.29.1<br />
PING 192.168.29.1 (192.168.29.1) 56(84) bytes of data.<br />
64 bytes from 192.168.29.1: icmp_seq=1 ttl=64 time=<strong>40</strong> ms<br />
64 bytes from 192.168.29.1: icmp_seq=2 ttl=64 time=<strong>40</strong> ms</p></blockquote>
<p>Pour revenir à la configuration initiale (sans simulateur), on utilise la commande suivante:</p>
<blockquote><p>sudo tc qdisc del dev eth0 root</p></blockquote>
<p>On vérifie que l'on retombe bien sur les caractéristiques normale du réseau:</p>
<blockquote><p>$ ping 192.168.29.1<br />
PING 192.168.29.1 (192.168.29.1) 56(84) bytes of data.<br />
64 bytes from 192.168.29.1: icmp_seq=1 ttl=64 time=<strong>0.218</strong> ms<br />
64 bytes from 192.168.29.1: icmp_seq=2 ttl=64 time=<strong>0.209</strong> ms</p></blockquote>
<h1>Simuler un délai de transit "normal"</h1>
<p>Sur un réseau WAN, le délai de transit n'est jamais constant à travers le temps (surtout pour des liaisons de type Internet). Nous allons donc modifier la commande précédente pour intégrer une variation de délai (gigue de +/- 10ms) sur les paquets <strong>sortant</strong>:</p>
<blockquote><p>sudo tc qdisc add dev eth0 root netem delay <strong>40ms 10ms distribution normal</strong></p></blockquote>
<p>On obtient les caractéristiques suivantes:</p>
<blockquote><p>$ ping 192.168.29.1PING 192.168.29.1 (192.168.29.1) 56(84) bytes of data.<br />
64 bytes from 192.168.29.1: icmp_seq=1 ttl=64 time=<strong>36.9</strong> ms<br />
64 bytes from 192.168.29.1: icmp_seq=2 ttl=64 time=<strong>50.5</strong> ms<br />
64 bytes from 192.168.29.1: icmp_seq=3 ttl=64 time=<strong>33.1</strong> ms<br />
64 bytes from 192.168.29.1: icmp_seq=4 ttl=64 time=<strong>43.1</strong> ms<br />
64 bytes from 192.168.29.1: icmp_seq=5 ttl=64 time=<strong>32.5</strong> ms<br />
64 bytes from 192.168.29.1: icmp_seq=6 ttl=64 time=<strong>23.6</strong> ms<br />
...</p></blockquote>
<p>Pour revenir à la configuration initiale (sans simulateur), on utilise la commande suivante:</p>
<blockquote><p>sudo tc qdisc del dev eth0 root</p></blockquote>
<h1>Simuler une bande passante limite</h1>
<p>Cette fonction ne fait <a href="http://lartc.org/howto/lartc.qdisc.classful.html">pas partie de Netem</a> mais utilise tout de même la commande tc pour se configurer.</p>
<p>Avant de commencer nous allons tester la capacité de notre réseau LAN avec <a href="http://blog.nicolargo.com/2007/03/tester-la-performance-de-votre-reseau-avec-iperf.html">la commande IPerf</a> (à lancer en mode serveur UDP sur votre machine cible, 192.168.29.1 dans mon cas):</p>
<blockquote><p>$ iperf -c 192.168.29.1 -u -b 10M<br />
------------------------------------------------------------<br />
Client connecting to 192.168.29.1, UDP port 5001<br />
Sending 1470 byte datagrams<br />
UDP buffer size:   110 KByte (default)<br />
------------------------------------------------------------<br />
[  3] local 192.168.29.222 port 47532 connected with 192.168.29.1 port 5001<br />
[ ID] Interval       Transfer     Bandwidth<br />
[  3]  0.0-10.0 sec  11.9 MBytes  10.0 Mbits/sec<br />
[  3] Sent 8505 datagrams<br />
[  3] Server Report:<br />
[ ID] Interval       Transfer     Bandwidth       Jitter   Lost/Total Datagrams<br />
[  3]  0.0-10.0 sec  11.9 MBytes  <strong>10.0 Mbits/sec</strong> 0.008 ms    0/ 8505 (0%)</p></blockquote>
<p>On a donc bien un débit de 10 Mbps.</p>
<p>On commence par créer la racine de l'arbre des classes (avec une simulation de délai "normal" de 40ms):</p>
<blockquote><p>sudo tc qdisc add dev eth0 root handle 1:0 netem delay<strong> 40ms 10ms distribution normal</strong></p></blockquote>
<p>Puis on y ajoute un "tuyau" limitant le trafic sortant à 512 Kbps:</p>
<blockquote><p>sudo tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate <strong>512kbit</strong> buffer 3200 limit 6000</p></blockquote>
<p>On re-teste notre réseau:</p>
<blockquote><p>$ iperf -c 192.168.29.1 -u -b 10M<br />
------------------------------------------------------------<br />
Client connecting to 192.168.29.1, UDP port 5001<br />
Sending 1470 byte datagrams<br />
UDP buffer size:   110 KByte (default)<br />
------------------------------------------------------------<br />
[  3] local 192.168.29.222 port 57589 connected with 192.168.29.1 port 5001<br />
[ ID] Interval       Transfer     Bandwidth<br />
[  3]  0.0-10.0 sec  11.9 MBytes  10.0 Mbits/sec<br />
[  3] Sent 8505 datagrams<br />
[  3] Server Report:<br />
[ ID] Interval       Transfer     Bandwidth       Jitter   Lost/Total Datagrams<br />
[  3]  0.0-10.3 sec    609 KBytes    <strong>486 Kbits/sec</strong> 14.351 ms 8081/ 8505 (95%)</p></blockquote>
<p>On arrive bien à limiter le débit réseau sortant à 500 Kbps (un peu moins pour mon test).</p>
<p>Pour revenir à la configuration initiale (sans simulateur), on utilise la commande suivante:</p>
<blockquote><p>sudo tc qdisc del dev eth0 root</p></blockquote>
<h1>Simuler une perte de paquets</h1>
<p>La perte de paquets (ou "packet loss" dans la langue de Shakespeare) peut être simulé par Netem par la commande <em>loss</em>. Dans l'exemple suivant, nous allons simuler un lien WAN avec une perte de 0.1% des paquets sortant (soit 1 paquet perdu sur 1000 envoyé) avec un corrélation de 25% sur la probabilité que 2 paquets soit perdu de suite.</p>
<blockquote><p>sudo tc qdisc add dev eth0 root netem loss <strong>0.1</strong>% 25%</p></blockquote>
<p>Pour revenir à la configuration initiale (sans simulateur), on utilise la commande suivante:</p>
<blockquote><p>sudo tc qdisc del dev eth0 root</p></blockquote>
<h1>Simuler d'autres paramètres réseau</h1>
<p>Il est également possible de simuler la duplication de paquets (commande <em>duplicate</em>), la corruption de paquets (commande <em>corrupt</em>) et le re-arrangement des paquets (commande <em>gap</em>).</p>
<h1>Simuler également les paquets entrants</h1>
<p>Imaginons que l'on veuille simuler une liaison de type ADSL, cette liaison est asymétrique en terme de débit. Il faut donc pouvoir simuler de manière différente le débit entrant (DOWNLOAD) du débit sortant (UPLOAD). Pour cela, il faut passer par la déclaration d'une interface réseau virtuelle (<a href="http://www.linuxfoundation.org/en/Net:IFB">ifb</a>) dans laquelle nous allons re-router les paquets entrants. Nous appliquerons nos paramètres réseau de simulation sur cette nouvelle interface.</p>
<p>Commençons par créer cette interface virtuelle:</p>
<blockquote><p># modprobe ifb<br />
# ip link set dev ifb0 up<br />
# tc qdisc add dev eth0 ingress<br />
# tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0</p></blockquote>
<p>Puis appliquons un délai de 40ms comme vu dans le chapitre précédant:</p>
<blockquote><p># tc qdisc add dev ifb0 root netem delay <strong>40ms 10ms distribution normal</strong></p></blockquote>
<h1>Un exemple complet: simulation d'une liaison ADSL</h1>
<p>Voici un script Shell (bash) permettant de mettre en place une simulation de type liaison ADSL sur votre réseau local:</p>
<blockquote><p>#!/bin/bash<br />
#<br />
# limitbw.sh<br />
# Nicolargo - 2009<br />
#</p>
<p># Nom de l'interface ou l'on doit faire la simulation<br />
IF=eth0</p>
<p># Liaison sortante (UPLOAD)</p>
<p># Debit sortant<br />
BWU=768kbit<br />
# Délai de transit sortant<br />
DELAYU=20ms<br />
# % de paquets perdus sortant<br />
LOSSU=0.01%</p>
<p># Liaison entrante (DOWNLOAD)</p>
<p># Debit entrant<br />
BWD=2mbit<br />
# Délai de transit entrant<br />
DELAYD=20ms<br />
# % de paquets perdus entrant<br />
LOSSD=0.01%</p>
<p>start() {</p>
<p># Liaison entrante</p>
<p>modprobe ifb<br />
ip link set dev ifb0 up<br />
tc qdisc add dev $IF ingress<br />
tc filter add dev $IF parent ffff: \<br />
protocol ip u32 match u32 0 0 flowid 1:1 \<br />
action mirred egress redirect dev ifb0</p>
<p style="text-align: left;">tc qdisc add dev ifb0 root handle 1:0 \<br />
netem delay $DELAYD 10ms distribution normal \<br />
loss $LOSSD 25%<br />
tc qdisc add dev ifb0 parent 1:1 handle 10: \<br />
tbf rate $BWD buffer 3200 limit 6000</p>
<p># Liaison sortante</p>
<p>tc qdisc add dev $IF root handle 2:0 \<br />
netem delay $DELAYU 10ms distribution normal \<br />
loss $LOSSU 25%<br />
tc qdisc add dev $IF parent 2:1 handle 10: \<br />
tbf rate $BWU buffer 3200 limit 6000</p>
<p>}</p>
<p>stop() {</p>
<p>tc qdisc del dev ifb0 root</p>
<p>tc qdisc del dev $IF root</p>
<p># ip link set dev ifb0 down</p>
<p>}</p>
<p>restart() {</p>
<p>stop<br />
sleep 1<br />
start</p>
<p>}</p>
<p>show() {</p>
<p>echo "Liaison entrante"</p>
<p>tc -s qdisc ls dev ifb0</p>
<p>echo "Liaison sortante"</p>
<p>tc -s qdisc ls dev $IF</p>
<p>}</p>
<p>case "$1" in</p>
<p>start)</p>
<p>echo -n "Starting WAN simul: "<br />
start<br />
echo "done"<br />
;;</p>
<p>stop)</p>
<p>echo -n "Stopping WAN simul: "<br />
stop<br />
echo "done"<br />
;;</p>
<p>restart)</p>
<p>echo -n "Restarting WAN simul: "<br />
restart<br />
echo "done"<br />
;;</p>
<p>show)</p>
<p>echo "WAN simul status for $IF:"<br />
show<br />
echo ""<br />
;;</p>
<p>*)</p>
<p>echo "Usage: $0 {start|stop|restart|show}"<br />
;;</p>
<p>esac</p>
<p>exit 0</p>
</blockquote>
<p>Bonne simulation <img src='http://blog.nicolargo.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

                            <div id="aspdf">
                                <a href="http://blog.nicolargo.com/wp-content/plugins/as-pdf/generate.php?post=1788">
                                    <span> </span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://blog.nicolargo.com/2009/03/simuler-un-lien-wan-sous-linux.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
