Résumé

T'es prêt? Allez, on y va. Petit topo sur ce qu'on va faire: le but du jeu, c'est de générer une _jolie_ carte de ton réseau (mais pas seulement: tu pourrais aussi faire une carte de tes services, tout ça), mesurant la charge des différents liens et l'état des noeuds, comme ça.
Pour ce faire, nous allons utiliser un certain nombre d'outils:
  • SNMP, pour faire les mesures au niveau des interfaces réseau
  • MRTG, pour générer les statistiques, dans sa version génératrice de .rrd.
  • Weathermap4rrd, pour le traitement des données fournies par MRTG et le rendu de la carte.
  • Cairo, pour un rendu propre et lissé des images.
La version officielle de Weathermap4rrd utilise GD pour faire le rendu, et c'est moins beau™, nous utiliserons donc une version PHP patchée (la version perl propose malheureusement moins de fonctionnalités que son équivalent PHP). Bon, cette fois ci, c'est parti pour de vrai.

Installation et configuration, partie serveur

Toutes les instructions d'installation qui vont suivre ont été écrites pour une Debian Etch i386, mais il ne devrait pas être trop dur de les adapter pour un autre système propre.
Sur le serveur, il vous faudra tout d'abord installer les composants et dépendances disponibles sous forme de paquets: # apt-get install mrtg-rrd php5-cli php5-dev libcairo2 libcairo2-dev On passe ensuite à l'installation des autres composants:
cairo_wrapper: # cd /tmp
# tar zxvf /path/to/sources/cairo_wrapper-0.2.1.tgz
# cd cairo_wrapper-0.2.1
# phpize5
# ./configure
# make
# make install
Il faut ensuite activer l'extension au niveau du php-cli: # echo "extension=cairo_wrapper.so" >> /etc/php5/cli/php.ini weathermap4rrd: # cd /usr/local/share/
tar jxvf /path/to/weathermap/weathermap4rrd-php-1.2final+cairo.tar.bz2
mv weathermap4rrd-php-1.2final+cairo weathermap4rrd
On prépare le dossier où sera générée la carte: # mkdir -p /var/www/map
# cp /path/to/icons/* /var/www/map/
On crée enfin un petit script pour simplifier la mise à jour: $ cat /usr/local/bin/updatemap
#!/bin/bash
/usr/bin/mrtg /etc/mrtg.cfg
php /usr/local/share/weathermap4rrd/w4rrd.php
Il faut maintenant créer une configuration de base pour mrtg et weathermap4rrd: # cat /etc/mrtg.cfg
######################################################################
# Multi Router Traffic Grapher -- Sample Configuration File
######################################################################
# This file is for use with mrtg-2.5.4c

# Global configuration
WorkDir: /var/www/map/rrd
Language: french
LogFormat: rrdtool
WriteExpires: Yes



# cat /etc/weathermap4rrd/weathermap.conf
WIDTH 1000
HEIGHT 600

FONT 2
IPCHECK 1
CHECKTIMEOUT 5
DISPLAYPERCENT 0

KEYPOS 1000 100

TITLE "My network map"
TITLEPOS 80 12
TITLEBACKGROUND 255 255 255
TITLEFOREGROUND 0 0 0

LEGENDPOS 300 0
LEGENDSTYLE line

OUTPUTFILE /var/www/map/weathermap.png
TOSTDOUT 0

# low high red green blue
SCALE 1 10 140 0 255
SCALE 10 25 32 32 255
SCALE 25 40 0 192 255
SCALE 40 55 0 240 0
SCALE 55 70 240 240 0
SCALE 70 85 255 192 0
SCALE 85 100 255 0 0
Le chemin de la configuration pour weathermap4rrd (/etc/weathermap4rrd/weathermap.conf) est hardcodée, il suffit pour le modifier de changer la variable $configfile dans /usr/local/share/weathermap4rrd/config.php (ou de proprifier le code tout sale...).

Ajout d'un client

Sur chaque client, il va nous falloir un port (par exemple un démon ssh) sur lequel ouvrir une connexion tcp pour tester l'état de la machine (un test par ping est également possible, mais le délai d'expiration est beaucoup plus grand, d'autant plus que les tests tcp se font en parallèle pour un maximum d'efficacité), et un démon SNMP. Ce démon sera snmpd pour les Debian based (probablement pour les autres Linux aussi), bsnmpd pour FreeBSD...
Commençons par la configuration sur le client (toujours une Debian based): # apt-get install snmpd Il faut ensuite modifier le fichier /etc/default/snmpd et enlever le 127.0.0.1 de la variable SNMPDOPTS, pour binder le démon sur toutes les interfaces et pas seulement sur localhost, puis modifier /etc/snmp/snmpd.conf.
Il faut y commenter la ligne com2sec paranoid... et ajouter une ligne com2sec readonly plageip public comme ceci: # sec.name source community
#com2sec paranoid default public
com2sec readonly 10.8.0.0/24 public
#com2sec readonly default public
#com2sec readwrite default private
La plage ip (ici 10.8.0.0/24) correspond aux ip depuis lesquelles les connexions au démon seront acceptées, il suffit par exemple de mettre l'ip du serveur qui génère la carte.
Ne pas oublier de modifier l'emplacement et le contact dans la configuration: syslocation Amiens, France
syscontact Guillaume Seguin <guillaume@segu.in>
On peut ensuite passer à la configuration sur le serveur.
On commence par ajouter une entrée dans le fichier de configuration de mrtg, /etc/mrtg.cfg: Target[10.8.0.4]: /10.8.0.4:public@10.8.0.4:
SetEnv[10.8.0.4]: MRTG_INT_IP="10.8.0.4" MRTG_INT_DESCR="tun0"
MaxBytes[10.8.0.4]: 1250000
Title[10.8.0.4]: Traffic Analysis
PageTop[10.8.0.4]: <h1>Traffic Analysis</h1>
Remplacer 10.8.0.4 par l'ip du client, et tun0 par le nom de l'interface réseau au niveau du client.
On ajoute ensuite un noeud et un lien (nous nommerons ce noeud "clientA", et le noeud avec lequel il interagit "clientB" (qui aura préalablement été ajouté), qui n'est pas forcément le serveur, tout dépend de l'inteface réseau qui est mesurée) à la carte (/etc/weathermap4rrd/weathermap.conf): NODE clientA
POSITION 640 523
ICON /var/www/map/network-workgroup.png
ICONPOS 624 530
LABEL clientA
IP 10.8.0.4
CHECK tcp 22

LINK clientA_clientB
NODES clientA clientB
TARGET /var/www/map/rrd/10.8.0.4.rrd
INPOS 1
OUTPOS 2
UNIT bytes
BANDWIDTH 2800 240
DISPLAYVALUE 1
ARROW normal
La configuration est assez explicite, se référer à la documentation de weathermap4rrd pour plus de détails. Seul petit tip: 2800 et 240 sont les débits maximums en download/upload exprimés en kilobits par seconde.
Il ne reste plus qu'à essayer la nouvelle configuration: # updatemap Des erreurs telles que "2008-01-04 23:45:53: WARNING: Could not match host:'public@10.8.0.4:' ref:'Ip' key:'10.8.0.4'" indiquent soient que le client est hors ligne, soit qu'il y a un problème de configuration du snmpd, qui peut être testé en "walkant" le client: # snmpwalk -v 1 -OS -c public 10.8.0.4 | head

Finalisation de l'installation

Une fois que tout marche au poil, il ne reste plus qu'à rendre la mise à jour de la carte automatique, par exemple toutes les 5 minutes (c'est de toute façon le temps minimal entre deux mises à jour mrtg.
Un petit # crontab -e Pour rajouter une petite ligne */5 * * * * /usr/local/bin/updatemap > /dev/null Et c'est fini!

Options supplémentaires pour weathermap4rrd

Notre version patchée de weathermap4rrd propose deux trois options supplémentaires:
  • CHECKTIMEOUT secondes
    Exemple: CHECKTIMEOUT 10
    Fonction: définit le délai d'expiration pour les tests TCP, en secondes.
  • DISPLAYPERCENT 1/0
    Exemple: DISPLAYPERCENT 0
    Fonction: définit si la charge des liens (en pourcentage) sera affichée sur la carte.
  • TOSTDOUT 1/0
    Exemple: TOSTDOUT 0
    Fonction: définit si l'image sera affichée lors d'un appel au script w4rrd.php (utile pour proposer un affichage en direct de la carte).

Liens, et tout