Catégories
Open-source Reseau

Netperf, mesurer la performance de votre réseau en ligne de commande

Netperf est un logiciel sous licence libre (GPL) permettant de simuler du trafic entre deux points d’un réseau. Edité par la société HP, la dernière version disponible (2.5.0) date de juillet 2011.

Contrairement à des logiciels comme Iperf qui se limite a une mesure de la bande passante et du délais, NetPerf permet, en plus du transfert de données, de simuler des transactions TCP et UDP. Nous allons voir dans ce billet comment installer et utiliser NetPerf pour optimiser notre réseau.

Catégories
Open-source Reseau

Siproxd rapproche SIP et NAT

SIP est le protocole de signalisation pour effectuer des communications de type voix sur IP (VoIP). Lorsque la communication est établie, il passe la main au protocole RTP qui permet le transport de la voix sur le réseau. Dans une architecture réseau incluant des fonctions de translation d’adresse (NAT), les choses se compliquent (voir cet article en anglais). En effet, si plusieurs clients SIP se trouve derrière un routeur NAT, ce dernier ne va pas savoir établir les sessions entrantes (comment savoir vers quel client SIP faut il envoyer les flux).Vous pouvez lire ce billet qui détaille cette problématique.

On se retrouve devant plusieurs solutions techniques:

  • utilisation d’un tunnel IP entre le routeur NAT et le serveur SIP
  • utilisation de redirection statique (par client) au niveau du routeur NAT en utilisant des numéros de ports SIP et RTP différents
  • utilisation d’un proxy SIP au niveau du routeur NAT

C’est cette troisième solution que nous allons mettre en place dans ce billet en utilisant le proxy SIP libre siproxd sur votre routeur NAT GNU/Linux.

Installation de Sipproxd

Actuellement disponible en version 0.7.2, vous pouvez soit compiler les sources, soit installer depuis les dépôts de votre distribution GNU/Linux. Par exemple sous Ubuntu:

[shell]

sudo aptitude install siproxd

[/shell]

Il faut ensuite modifier le fichier /etc/default/siproxd et remplacer le 0 par 1.

Configuration de Sipproxd

Le fichier de configuration unique /etc/siproxd.conf est très bien commenté. Dans un cas standard ou le routeur NAT GNU/Linux a deux interfaces (eth0 pour l’interface coté LAN et eth1 pour l’interface NATé), il suffit juste de modifier la configuration en changeant les deux lignes suivantes:

[shell]

if_inbound = eth0

if_outbound = eth1

[/shell]

Lancement de Sipproxd

Sous Unbuntu,c’est assez simple:

[shell]

/etc/init.d/sipproxd start

[/shell]

Configuration des clients SIP

Il ne reste plus qu’a configurer vos clients SIP dans la section « Proxy SIP » et de mettre l’adresse IP de votre routeur NAT (coté LAN donc l’adresse de eth0 dans notre cas).

Catégories
Open-source Reseau Web

Cracker un réseau Wifi sous GNU/Linux

Article supprimé le 31 janvier 2015 à la demande de la gendarmerie nationale.

Catégories
Gstreamer Open-source Reseau Video

Streaming vidéo SD avec Gstreamer

Nous allons dans ce billet essayer d’optimiser le streaming d’un flux SD sur un réseau local (LAN de 100 Mbps) en utilisant le framework GStreamer.

Environnement des tests

Deux PC Ubuntu connectés sur un même switch (100 Mbps full-duplex).

  • PC serveur: Intel(R) Core(TM)2 Duo CPU P8400 @ 2.26GHz / 2 Go RAM
  • PC client: Intel(R) Core(TM)2 Duo CPU E6750 @ 2.66GHz / 1 Go RAM

GStreamer version 0.10.25.

Vidéo source: Big Buck Bunny 480p

Tests avec le codec X.264

Ligne de commande sur la machine générant le streaming (serveur):

serveur> gst-launch -v \ filesrc location= »../Vidéos/big_buck_bunny_480p_stereo.ogg » \ ! queue ! decodebin \ ! queue ! videoscale method=1 ! video/x-raw-yuv,width=854,height=480 \ ! queue ! videorate ! video/x-raw-yuv,framerate=\(fraction\)24/1 \ ! queue ! x264enc byte-stream=true bitrate=2000 bframes=4 ref=4 me=hex subme=4 weightb=true threads=0 \ ! queue ! rtph264pay \ ! queue ! udpsink port=5000 host=192.168.29.150 sync=false async=false

Ligne de commande sur la machine recevant le streaming (client):

client> gst-launch -v udpsrc caps= »application/x-rtp, media=\(string\)video, clock-rate=\(int\)90000, encoding-name=\(string\)H264, payload=\(int\)96″ port=5000 \
! queue ! rtph264depay \
! queue ! ffdec_h264 ! xvimagesink

Résultat:
Visuel: vidéo saccadé (environ 2 img/sec)
Bande passante mesurée: entre 2 et 3 Mbps
Resource serveur: %CPU=135 / %MEM=5
Resource client: %CPU=10 / %MEM=2

On ajoute un buffer juste avant le depay et le décodage (au niveau du client):

client> gst-launch -v udpsrc caps= »application/x-rtp, media=\(string\)video, clock-rate=\(int\)90000, encoding-name=\(string\)H264, payload=\(int\)96″ port=5000 \
! queue ! gstrtpjitterbuffer latency=3000 \
! queue ! rtph264depay \
! queue ! ffdec_h264 ! xvimagesink

Résultat:
Visuel: vidéo beaucoup plus fluide mais variation de la gigue (accéleration de la video par moment). On a par contre un décalage de 3 secondes, donc inutilisable pour des flux lives.
Bande passante mesurée: entre 2 et 3 Mbps
Resource serveur: %CPU=140 / %MEM=6
Resource client: %CPU=14 / %MEM=2

On modifie ensuite les paramètres d’encodage X.264 (au niveau du serveur):

serveur> gst-launch -v –gst-debug-level=2 \
filesrc location= »../Vidéos/big_buck_bunny_480p_stereo.ogg » \
! queue ! decodebin \
! queue ! videoscale method=1 ! video/x-raw-yuv,width=720,height=480 \
! queue ! videorate ! video/x-raw-yuv,framerate=\(fraction\)24/1 \
! queue ! x264enc vbv-buf-capacity=3000 byte-stream=true bitrate=900 subme=4 ref=2 bframes=1 b-pyramid=true weightb=true \
! queue ! rtph264pay \
! queue ! udpsink port=5000 host=192.168.29.150 sync=false async=false

Résultat:
Visuel: Presque plus de sacade ni de variation de gigue. On a par contre un décalage de 3 secondes, donc inutilisable pour des flux lives.
Bande passante mesurée: entre 2 et 3 Mbps
Resource serveur: %CPU=120 / %MEM=4
Resource client: %CPU=10 / %MEM=2

Catégories
Open-source Reseau Web

Simuler des connexions HTTP/FTP simultanées

Curl-Loader est un logiciel libre, écrit en langage C (le meilleur langage pour développer des applications réseaux), permettant de simuler sur votre serveur WEB ou FTP un grand nombre de connexions simultanées. Nous allons dans ce billet voir comment installer, configurer et tester ce logiciel dans un environnement GNU/Linux (Ubuntu 9.10 dans mon cas).

Installation de Curl-Loader

Comme il n’est pas encore (des volontaires ?) disponible dans les dêpots officiels, il va falloir compiler Curl-Loader à la main. Avant d’aller plus loin, on installe des pré-requis système:

[shell]

sudo aptitude install build-essential openssl libssl-dev

[/shell]

On commence par récupérer la dernière version disponible (0.51 au moment de l’écriture de ce billet):

[shell]

wget http://downloads.sourceforge.net/project/curl-loader/curl-loader/curl-loader-0.51/curl-loader-0.51.tar.gz?use_mirror=sunet

[/shell]

On décompresse et compile le tout:

[shell]

tar zxvf curl-loader-0.51.tar.gz

cd curl-loader-0.51

make optimize=1

[/shell]

On finalise l’installation avec:

[shell]

sudo make install

[/shell]

Configuration de Curl-Loader

Tout est centralisé dans un fichier de configuration. Quelques exemples de fichiers de conf sont fournis avec les sources dans le répertoire ./conf-exemples/.

Le plus simple est de partir du fichier ./conf-exemples/bulk.conf:

[shell]

cp ./conf-exemples/bulk.conf ~/curlloader.conf

cd ~

[/shell]

On édite le fichier pour l’adapter à son besoin (documentation exhaustive disponible sur le site officiel) :

[shell]

vi curlloader.conf

[/shell]

[shell]

########### GENERAL SECTION ################################

BATCH_NAME= bulk

CLIENTS_NUM_MAX=200

CLIENTS_RAMPUP_INC=5

INTERFACE=eth0

NETMASK=24

IP_ADDR_MIN= 192.168.29.148

IP_ADDR_MAX= 192.168.29.148

IP_SHARED_NUM=1

CYCLES_NUM= 100

URLS_NUM= 1

########### URL SECTION ####################################

URL=http://www.monserveurweb.com/

URL_SHORT_NAME="MonServeurWeb"

REQUEST_TYPE=GET

TIMER_URL_COMPLETION = 5000

TIMER_AFTER_URL_SLEEP = 500

[/shell]

Utilisation de Curl-Loader

Attention à ne lancer Curl_Loader que vers un serveur qui vous appartient.
Dans le cas contraire, cela peut être considéré comme une attaque par dénie de service !

Il ne reste plus qu’a lancer Curl-Loader avec ce fichier de configuration:

[shell]

sudo curl-loader -f ~/curlloader.conf

[/shell]

Que va faire l’exécution de Curl-Loader avec notre fichier de configuration ?

On commence un cycle en envoyant sur le réseau 5 (CLIENTS_RAMPUP_INC) requêtes simultanées vers le serveur Web d’URL http://www.monserveurweb.com/(URL), puis 1 seconde plus tard, 5 requêtes de plus et ainsi de suite jusqu’à 200 (CLIENTS_NUM_MAX) requêtes simultanées. A la fin de ce cycle, on continu jusqu’à attendre le 100em cycle (CYCLES_NUM).

A la fin du test on a les informations suivantes qui s’affichent:

[shell]

Test total duration was 54 seconds and CAPS average 231:

H/F Req:24665,1xx:0,2xx:12332,3xx:12333,4xx:0,5xx:0,Err:0,T-Err:1,D:1ms,D-2xx:3ms,Ti:1343807B/s,To:56181B/s

H/F/S Req:0,1xx:0,2xx:0,3xx:0,4xx:0,5xx:0,Err:0,T-Err:0,D:0ms,D-2xx:0ms,Ti:0B/s,To:0B/s

Exited. For details look in the files:

– bulk.log for errors and traces;

– bulk.txt for loading statistics;

– bulk.ctx for virtual client based statistics.

– bulk.ops for operational statistics.

[/shell]

Pour la le lecture des rapports, voici un petit mémento:

  • CAPS=call attempts per seconds;
  • run-time in seconds;
  • requests num;
  • 1xx success num;
  • 2xx success num;
  • 3xx redirects num;
  • client 4xx errors num;
  • server 5xx errors num;
  • other errors num, like resolving, tcp-connect, server closing or empty responses number (Err);
  • url completion time expiration errors (T-Err);
  • average application server Delay (msec), estimated as the time between HTTP request and HTTP response without taking into the account network latency (RTT) (D);
  • average application server Delay for 2xx (success) HTTP-responses, as above, but only for 2xx responses. The motivation for that is that 3xx redirections and 5xx server errors/rejects may not necessarily provide a true indication of a testing server working functionality (D-2xx);
  • throughput in, batch average, Bytes/sec (T-In);
  • throughput out, batch average, Bytes/sec (T-Out);
Catégories
Open-source Reseau

MRTG, un tutoriel simple et rapide

Si vous suivez ce blog, vous devez sûrement connaitre Cacti, l’outil permettant de générer des graphes visualisation via une interface HTML/PHP. La solution, bien que simple à mettre en oeuvre nécessite quelques manipulations. Nous allons voir dans ce billet une autre solution beaucoup moins lourde et simple à mettre en oeuvre: MRTG. Nous nous limiterons à la génération de graphes représentant la bande passante des interfaces réseau mais l’on peut bien sûr « grapher » toutes les mesures récupérables via SNMP. La machine qui hébergera notre MRTG est sous Unbuntu 9.10 (mais la procédure est globalement la mêmes sur les autres distribution GNU/Linux).

Catégories
Open-source Reseau

Ntop et la supervision réseau via Netflow/IPFix

NTop est un outil libre (licence GPL) de supervision réseau permettant d’afficher en temps réel les informations collectées dans une interface Web. Pour effectuer cette collecte, NTop se base sur la librairie libpcap (du projet TCPDump) pour capturer les flux transitant sur les interfaces réseau de la machine ou est installé le logiciel. Les dernières versions de NTop permettent également de collecter des informations venant de machines distantes grâce aux protocoles SNMP et Netflow/IPfix. C’est sur ce dernier point que nous allons nous focaliser dans ce billet.

Catégories
Open-source Reseau

10 logiciels libres pour analyser son réseau

Nous allons dans ce billet étudier quelques outils réseaux open-source qui peuvent être utiles pour analyser un trafic sur un réseau IP (la liste est loin d’être exhaustive mais il est difficile de l’être vu le sujet). Cette analyse peut avoir pour but de caractériser un flux et notamment son débit, les délais de transit/gigue et les éventuelles corruptions de paquets.

Catégories
Open-source Reseau

Installation d’une sonde NetFlow sous FreeBSD

Nous allons dans ce billet voir comment installer une sonde Netflow (protocole propriétaire de Cisco) sur une machine FreeBSD. On pourra ensuite collecter les mesures des flux réseaux transitant par notre machine BSD et les remonter à un collecteur avant analyse. Pour en savoir plus sur le protocole Netflow, je vous conseille la lecture de ce billet.

Nous allons utiliser la sonde libre fProbe qui a le bon goût d’être disponible dans les dépôts de FreeBSD.

Installation de fProbe

On installe le logiciel fProbe (version 1.1 au moment de l’écriture de ce billet):

[shell]
pkg_add -r fprobe
[/shell]

Utilisation de fProbe

Imaginons que votre routeur sous FreeBSD est 2 interfaces réseaux (ce qui est un minimum pour un routeur…): em0 et em1. em0 est votre interface coté LAN et em1 celle coté WAN. Pour capturer les flux transitant sur l’interface WEN et remonté via le protocole NetFlow (sur le port UDP/9991) les mesures vers une machine collecteur ayant pour adresse IP 192.168.0.100, il faut saisir la ligne de commande suivante:

[shell]
fprobe -i em1 -f ip 192.168.0.100:9991
[/shell]

Il est ensuite facile de récupérer les mesures sur la machine 192.168.0.100 en installant NFDump ou en utilisant NTop et son plugin NetFlow.

Vous pouvez bien évidemment lancer autant de sonde fprobe que nécessaire (par exemple si votre routeur dispose de plusieurs interfaces à surveiller).

Il est également possible d’envoyer les mesures Netflow à plusieurs collecteurs. Pour celà il faut ajouter les couples adresse IP/port UDP à la ligne de commande. Dans ce cas, il faut modifier le script de démarrage de la manière suivante:

[shell]
vi /usr/local/etc/rc.d/fprobe

#!/bin/sh

#

# $FreeBSD: ports/net-mgmt/fprobe/files/fprobe.sh.in,v 1.1 2006/11/24 07:23:24 clsung Exp $

#

# PROVIDE: fprobe

# REQUIRE: NETWORKING

# KEYWORD: shutdown

# Add the following lines to /etc/rc.conf to enable fprobe:

#

#fprobe_enable="YES"

#

# See fprobe(8) for fprobe_flags

#

. "/etc/rc.subr"

name="fprobe"

rcvar=`set_rcvar`

command="/usr/local/sbin/fprobe"

command_args1="-i em0 -f ip 192.168.0.100:9990"

command_args1="-i em4 -f ip 192.168.0.100:9994"

pidfile="/var/run/$name.pid"

load_rc_config "$name"

: ${fprobe_enable="NO"}

start_cmd="echo \"Starting ${name}."\; ${command} ${command_args1}; ${command} ${command_args2}"

run_rc_command "$1"

[/shell]

Quand vous avez validé votre chaine de mesure (sonde / collecteur), vous pouvez automatiser le lancement de la sonde en modifiant le fichier /usr/local/etc/rc.d/fprobe pour l’adapter à vos besoins et ajouter la ligne suivante au fichier /etc/rc.conf:

[shell]

fprobe_enable="YES"

[/shell]

Catégories
Developpement Nagios Open-source Reseau Systeme

Script d’installation automatique de Nagios

Il y a plusieurs méthodes pour installer Nagios, le système de supervision libre, sur un nouveau serveur. La plus simple est d’utiliser les dépôts officiels de votre distribution GNU/Linux, avec le désavantage de ne pas avoir les dernières versions disponibles. La seconde est de suivre pas à pas mon tutoriel (PART 1 et 2) qui permet de faire une compilation depuis les sources.

Je vous propose dans ce billet une troisième voie, qui mixe la simplicité de la première méthode et la finesse de la seconde.

J’ai développé un petit script (sous licence GPL) permettant d’automatiser l’installation d’un serveur Nagios complet sur une distribution GNU/Linux Ubuntu (j’ai validé le script sur Ubuntu Desktop et Ubuntu Server). Libre à vous de modifier ce script pour l’adapter à vos besoins. Si des âmes charitables veulent modifier le script pour l’adapter à d’autres distribution GNU/Linux ou BSD, je suis preneur pour les mettre en téléchargement sur mon SVN.

Récupération du script

On lance la commande suivante pour télécharger le script sur son serveur et le rendre exécutable:

wget --no-check-certificate https://raw.github.com/nicolargo/nagiosautoinstall/master/nagiosautoinstall-ubuntu.sh
chmod a+x nagiosautoinstall-ubuntu.sh

PS: vous pouvez télécharger le script directement sur GitHub.

Lancement du script

Il suffit ensuite de lancer le script et de répondre aux questions posées par le système (en root ou précédé de la commande sudo):

./nagiosautoinstall-ubuntu.sh

Informations sur l’installation

Dans la version 0.8 du script la configuration finale est la suivante:

Nagios Core version      4.0.0
Nagios Plugins version   1.5
Utilisateur système:     nagios
Groupe système:          nagios
Utilisateur pour l'interface Web (http://localhost/nagios/): nagiosadmin