Publié le: 2013-02-02

Netdisco

Netdisco est un outil puissant permettant de visualiser votre réseau et les données présentes sur vos routeurs et machines. Il permet notamment de pouvoir retrouver facilement une machine sur votre réseau en tapant son IP ou son adresse MAC et de connaître le port et l’équipement auquel elle est connectée.

Depuis la version 1 il permet d’obtenir les informations concernant l’état POE de vos commutateurs, faire du tri par VLAN afin de savoir où celui-ci se propage. Prerequis

Netdisco requiert les paquets suivants :

apache2
perl
postgresql
libapache2-mod-apreq2
libdbd-pg-perl
graphviz
libnet-snmp-perl
libapache2-mod-perl2
libhtml-mason-perl
libdbd-pg-perl
libgraphviz-perl
libnet-nbname-perl
libgraph-perl
snmp-mibs-downloader

Installation

Pour installer netdisco, installez les paquets suivants :

apt-get install netdisco-backend netdisco-frontend netdisco-mibs-installer

Maintenant on va installer les mibs de netdisco :

netdisco-mibs-download
netdisco-mibs-install

Allez ensuite dans le dossier /etc/netdisco et téléchargez le fichier oui.txt contenant les définitions des constructeurs réseau

cd /etc/netdisco
wget http://www.frostsapphirestudios.com/uploads/oui.txt

Construisez le fichier de données netdisco-topology.txt et le fichier de configuration netdisco.conf

touch /etc/netdisco/netdisco-topology.txt
touch /etc/netdisco/netdisco.conf

Maintenant nous allons configurer le service SNMP pour ne pas utiliser ses propres mibs. Ouvrez le fichier /etc/snmp/snmp.conf et commentez la ligne mibs.

Configuration

Configuration de votre base PostgreSQL

Si ce n’est pas déjà fait, installez PostgreSQL

apt-get install postgresql

Maintenant nous allons créer la base et l’utilisateur netdisco.

Tout d’abord éditez le fichier /etc/postgresql/<votre_version>/main/pg_hba.conf et ajoutez les lignes suivantes

local netdisco netdisco trust host netdisco netdisco 127.0.0.1 255.255.255.255 trust

Maintenant nous allons oeuvrer sur la base postgresql. A contrario de MySQL, postgreSQL utilise un user Linux.

su - postgres
createuser netdisco -P

L’action suivante étant plutôt ambiguë avec les repos, nous allons prendre le paquet officiel netdisco pour la réaliser, il faut désormais remplir la base de données et malheureusement aptitude et Debian ne peuplent pas celle-ci.

wget http://downloads.sourceforge.net/project/netdisco/netdisco/1.0/netdisco-1.0_with_mibs.tar.gz?use_mirror=iweb
tar xvzf netdisco-1.0_with_mibs.tar.gz?use_mirror=iweb
cd netdisco-1.0/sql
./pg --init

Votre base PostgreSQL est prête.

Configuration d’Apache

Nous allons tout d’abord activer les modules nécessaires à netdisco :

a2enmod perl
a2enmod apreq

Maintenant on va appliquer le dossier netdisco à notre apache. Vous pouvez le faire sur un virtualhost en particulier, ce qui serait plus judicieux, mais nous allons l’appliquer de façon générique.

echo "Include /etc/netdisco/netdisco_apache2.conf" > /etc/apache2/conf.d/netdisco.conf
echo "Include /etc/netdisco/netdisco_apache2_dir.conf" >> /etc/apache2/conf.d/netdisco.conf

Maintenant on va configurer postgreSQL pour le module MASON de Netdisco. Ouvrez le fichier /etc/netdisco/netdisco_apache2.conf et éditez les lignes suivantes :

session_data_source    => 'dbi:Pg:dbname=netdisco',
session_user_name      => 'netdisco',
session_password       => '<votre-passe>',

Maintenant on peut redémarrer apache2

service apache2 restart

Configuration du service Netdisco

Votre netdisco est prêt à être utilisé, il ne reste plus qu’à pouvoir interroger les différents serveurs SNMP.

Je vous propose le squelette de configuration suivante :

# ---- General Settings ----
domain          = .domain.com
home            = /usr/lib/netdisco
topofile        = /etc/netdisco/netdisco-topology.txt
timeout         = 90
macsuck_timeout = 90
macsuck_all_vlans = true
arpnip          = true

# -- Database Maintenance and Data Removal --
expire_devices       = 60
expire_nodes         = 90
expire_nodes_archive = 60

# ---- Admin Panel Daemon Settings ----
daemon_bg       = true
daemon_pid      = /var/run/netdisco_daemon.pid
daemon_poll     = 2

# Data Archiving and Logging
compresslogs    = true
compress        = /bin/gzip -f
datadir         = /var/log/netdisco
logextension    = txt

# ---- Web Settings ----
port_info            = false
secure_server        = false
webpath              = /netdisco
websession           = 90

# ---- Database Settings ----
db_Pg           = dbi:Pg:dbname=netdisco;host=localhost
db_Pg_user      = netdisco
db_Pg_pw        = dbpassword
db_Pg_opts      = PrintError => 1, AutoCommit => 1

# ---- SNMP Settings ----
community       = public,public2
community_rw    = private1
# snmptimeout in micro-seconds before retry, 1000000 micro-seconds = 1 second
snmptimeout     = 1000000
snmpretries     = 3
snmpver         = 2
mibhome         = /usr/share/netdisco/mibs
mibdirs         = $mibhome/allied,  $mibhome/asante, $mibhome/cisco,
                  $mibhome/foundry, $mibhome/hp,     $mibhome/nortel,
                  $mibhome/extreme,
                  # Do not remove rfc or net-snmp.
                  $mibhome/rfc,     $mibhome/net-snmp

bulkwalk_off   = true

Configuration du graph netdisco

# ---- Graph Settings ----
edge_color      = wheat

outputdir       = /var/lib/netdisco/html

# If you'd rather use PNG, comment out the above and
# uncomment this.
graph_png       = $outputdir/netmap.png
graph_bg        = black
graph_clusters  = true  # try fdp layout
graph_color     = white
graph_epsilon   = 8
graph_layout    = fdp # try twopi  neato or fdp too
graph_map       = $outputdir/netmap.map
graph_overlap   = scale
graph_nodesep   = 1.5
graph_ranksep   = .3
graph_splines   = false
graph_timeout   = 90
graph_x         = 20
graph_y         = 20

node_fillcolor  = dimgrey
node_font       = lucon
node_fontsize   = 46.0
node_fontcolor  = white
node_problem    = red
node_shape      = box
node_style      = filled

Maintenant nous allons importer la base oui à celle de Netdisco et requérir les premières données:

netdisco -O /etc/netdisco/oui.txt
netdisco -r <coeur de réseau> -C /etc/netdisco/netdisco.conf

Si jamais votre réseau est segmenté, il se peut que certains points soient isolés de votre réseau SNMP. Dans ce cas remplacez l’adresse du cœur de réseau par l’adresse du point central isolé.

Netdisco est presque prêt. On va installer le service et l’activer au démarrage et activer le raffraichissement (dans notre cas toutes les heures)

ln -s /usr/lib/netdisco/netdisco_daemon /etc/init.d
echo "service netdisco_daemon start" >> /etc/rc.local
echo "00 */1  * * *   root    netdisco -C /etc/netdisco/netdisco.conf -r <coeur-de-reseau>" >> /etc/crontab

C’est terminé. Netdisco est prêt. Vous pouvez le lancer.

service netdisco_daemon start