Vous êtes sur la page 1sur 5

SOLUTIONS PRO LIBRES & OPEN SOURCE

LA SAUVEGARDE DE VOS
ÉQUIPEMENTS RÉSEAU
AVEC RANCID
Ce document est la propriété exclusive de la société INEO-SCLE-SFE pour 1 lecteur

Benoît Benedetti

B
ien que vos équipements réseaux n’hébergent pas de données, vos switches
et pare-feu nécessitent que vous ayez une stratégie de sauvegarde afin de
pouvoir les reconfigurer rapidement. Alors, à moins que vous ayez déjà
adopté une solution de gestion de configuration automatisée et centralisée de ces
équipements, je vous propose de découvrir RANCID pour effectuer leur sauvegarde.

1. INTRODUCTION l’outil Expect [2]. Une fois les confi-


gurations récupérées, grâce à un
RANCID supporte de nombreux équi-
pements : Cisco, HP, Juniper, etc..
RANCID [1], pour Really Awesome système de gestion de versions, Depuis ses débuts, RANCID supporte
New Cisco confIg Differ, est un RANCID va pouvoir détecter s’il y a le système de gestion de versions
logiciel qui va se connecter aux eu changement ou non dans la confi- historique CVS. La version 2.3.2 a vu
équipements pour récupérer leur guration de ces équipements, depuis l’apparition du support de Subversion,
configuration. sa dernière exécution. Si c’est le cas, et la version 3.2 permet depuis d’uti-
RANCID, pour se connecter aux équi- il va committer la nouvelle version et liser Git. C’est ce dernier système
pements et exécuter les commandes vous envoyer un e-mail récapitulatif de gestion de versions que je vous
de récupération de leur configuration des modifications détectées, au for- propose d’utiliser dans la suite pour
sans intervention utilisateur, utilise mat diff unifié. découvrir RANCID.

94 Linux Pratique n°95


sauvegarde réseau

note
compte comme la configuration e-mail. Mais le plus impor-
Un fork de RANCID avec le support Git, le bien
tant est de définir les groupes de sauvegarde et le système
nommé RANCID-Git [3], a vu le jour il y a quelque
de gestion de versions.
temps déjà. Ce fork, bien que proposant quelques
fonctionnalités intéressantes, n’a plus trop d’intérêt, Le système de gestion de versions est à définir via la
est basé sur la version 2 de RANCID, et n’a pas inté- variable RCSSYS. Donnez-lui la valeur git en modifiant
gré les changements de la version 3 du projet source. /etc/rancid/rancid.conf, ligne 58, comme suit :

RCSSYS= git; export RCSSYS

Pour les groupes de sauvegarde, voyez-les comme un


2. INSTALLATION moyen d’organiser vos équipements réseau : un seul
groupe vous sera sûrement nécessaire. Mais si vous avez
La dernière version stable à l’écriture de l’article est la
plusieurs sites à gérer, ou si vous avez une société qui gère
3.4.1, et il nous faut installer RANCID en version 3.2
différents clients, vous créerez autant de groupes que de
minimum pour profiter du support Git. Bien que plusieurs
distributions proposent une version trop ancienne de sites ou clients nécessaires.
RANCID pour notre usage, vous devriez pouvoir la trouver C’est la variable LIST _ OF _ GROUPS qui régit la configu-
sous forme de paquet, et éviter la phase de compilation ration de vos groupes. Elle prend comme valeur une chaîne
manuelle depuis les sources. Par exemple, sous une de caractères composée de noms de groupes, séparés par
Debian Jessie, les dépôts officiels par défaut proposent un espace. À la ligne 91 du fichier /etc/rancid/rancid.
une vieille version 2. Mais vous pourrez l’installer en ver- conf, un exemple, commenté, de LIST _ OF _ GROUPS
sion 3.2 une fois les dépôts Backports [4] activés : définit les groupes sl et joebobisp. Décommentez cette
variable, nous utiliserons ainsi ces deux groupes fictifs dis-
# sudo apt install -t jessie-backports rancid
Ce document est la propriété exclusive de la société INEO-SCLE-SFE pour 1 lecteur

ponibles par défaut à titre d’exemple :


Un utilisateur rancid, créé à l’installation du paquet, est
LIST _ OF _ GROUPS=sl joebobisp
utilisé pour exécuter RANCID. Sous Debian, les dossiers
de RANCID ne sont malheureusement pas installés avec
les permissions correctes. Permissions qu’il faut corriger
3.2 Initialisation des groupes
comme suit :
Nos groupes définis, il vous suffit de lancer la commande
# sudo chown -R rancid /var/lib/rancid /var/log/
rancid/ rancid-cvs pour les initialiser (et ultérieurement, la com-
mande sera à lancer à nouveau pour tout nouveau groupe
Cet utilisateur va exécuter Git pour versionner les modifi- que vous auriez à ajouter) :
cations de la configuration des équipements. Il faut donc
configurer le client Git de cet utilisateur : # sudo -u rancid /usr/lib/rancid/bin/rancid-cvs

# sudo -u rancid git config --global user.email Pour chaque nouveau groupe, RANCID va générer un
"rancid@exemple.fr" dossier /var/lib/rancid/nom _ du _ groupe pour
# sudo -u rancid git config --global user.name contenir la configuration des équipements réseau propre à
"rancid"
ce groupe :

# sudo ls /var/lib/rancid/joebobisp/ -la


3. CONFIGURATION total 16
drwxr-x--- 4 rancid rancid 4096 mars 13 14:04 .
3.1 Configuration globale drwxr-xr-x 6 rancid root 4096 mars 13 14:04 ..
drwxr-x--- 2 rancid rancid 4096 mars 13 14:04 configs
Il existe plusieurs étapes pour configurer RANCID afin de drwxr-x--- 8 rancid rancid 4096 mars 13 14:04 .git
sauvegarder la configuration de vos équipements réseau. -rw-r----- 1 rancid rancid 0 mars 13 14:04 router.db
La première étape consiste à modifier le fichier de configu- -rw-r----- 1 rancid rancid 0 mars 13 14:04 routers.all
ration globale /etc/rancid/rancid.conf de RANCID. -rw-r----- 1 rancid rancid 0 mars 13 14:04 routers.down
Dans ce fichier, plusieurs éléments sont à prendre en
-rw-r----- 1 rancid rancid 0 mars 13 14:04 routers.up

Linux Pratique n°95 95


SOLUTIONS PRO LIBRES & OPEN SOURCE

Ainsi qu’un dossier /var/lib/rancid/CVS/nom _ du _ 3.4 Authentification


groupe pour contenir le dépôt Git associé :
Il faut ensuite configurer comment RANCID se connecte
# sudo ls /var/lib/rancid/CVS/ et s’authentifie aux équipements réseau, tout ça dans le
total 16
fichier /var/lib/rancid/.cloginrc. Tous les équi-
drwxr-x--- 4 rancid rancid 4096 mars 13 14:04 .
drwxr-xr-x 6 rancid root 4096 mars 13 14:04 .. pements sont à définir dans ce fichier, quel que soit leur
drwxr-x--- 7 rancid rancid 4096 mars 13 14:04 groupe.
joebobisp Revenons à notre exemple. Disons que cisco-01 est
drwxr-x--- 7 rancid rancid 4096 mars 13 14:04 sl
simplement configuré en accès telnet, et pour juniper-01,
un accès ssh est activé. Ce qui nous donne la configuration
/var/lib/rancid/.cloginrc suivante :
3.3 Activer les équipements
add password cisco-01 {pass01} {pass02}
Il faut maintenant activer quels équipements RANCID doit
add method juniper-01 {ssh}
sauvegarder et dans quel groupe. Pour cela, chacun de nos
add user juniper-01 {user}
groupes joebobisp et sl a un fichier router.db, res- add password juniper-01 {pass03}
pectivement /var/lib/rancid/joebobisp/router.db
et /var/lib/rancid/sl/router.db. Petite explication : l’authentification via telnet est le défaut,
donc pour cisco-01, une ligne suffit, de la forme :
Le format de ce fichier est simple :
add password cisco-01 {mot de passe telnet}
nom équipement;type;statut
{mode de passe enable}
RANCID supporte plusieurs types d’équipements : Cisco,
Alors que pour juniper-01, il faut forcer le mode d’authen-
Cisco-NX, HP, Juniper. Le fichier /etc/rancid/rancid.
tification en ssh, et définir l’identifiant utilisateur avec une
Ce document est la propriété exclusive de la société INEO-SCLE-SFE pour 1 lecteur

types.base en contient la liste, ainsi que les commandes


ligne add user, avant de pouvoir définir le mot de passe
supportées.
de connexion.
Pour le statut, vous activerez un équipement à sauvegarder
Une fois vos équipements définis, il vous faut restreindre
avec la valeur up, et le mettrez en maintenance avec down.
les permissions du fichier, RANCID refusera de s’exécuter
sinon :
note
# sudo chown rancid /var/lib/rancid/.cloginrc
Si vous supprimez la ligne correspondant à un # sudo chmod go-rwx /var/lib/rancid/.cloginrc
équipement, toutes ses sauvegardes seront sup-
primées. Privilégiez l’utilisation de down, ça vous Avant de continuer, pour tester la bonne configuration du
laissera plus de latitude au cas où vous devriez fichier .cloginrc, vous pouvez exécuter directement
faire machine arrière. les scripts utilisés par RANCID pour se connecter aux
équipements lors de la phase de sauvegarde. Ces scripts
se trouvent dans le dossier /usr/lib/rancid/bin/,
Disons que nous avons deux équipements à sauvegarder avec un nom finissant par login, un pour chaque type
chacun dans un groupe différent : cisco-01, équipement d’équipement. Par exemple, pour cisco-01, on utilise le
de type Cisco, et juniper-01, équipement de type Juniper. script clogin :
Pour activer cisco-01 dans le groupe joebobisp, on
# sudo -u rancid /usr/lib/rancid/bin/clogin cisco-01
ajoute la ligne suivante au fichier /var/lib/rancid/
joebobisp/router.db : Pour juniper-01, on utilise jlogin:

cisco-01;cisco;up # sudo -u rancid /usr/lib/rancid/bin/jlogin


juniper-01
Le fichier /var/lib/rancid/sl/router.db suivant acti-
vera juniper-01 dans le groupe sl : Dans les deux cas, si la connexion a réussi, vous devez
arriver sur le prompt de configuration de vos équipements,
juniper-01;juniper;up
et pouvoir en sortir comme d’habitude avec un exit.

96 Linux Pratique n°95


sauvegarde réseau

4. UTILISATION +++ b/configs/juniper-01


@@ -0,0 +1,3536 @@
4.1 Exécution +#RANCID-CONTENT-TYPE: juniper
...
Pour exécuter la sauvegarde des équipements configurés,
Parallèlement, vous avez dû recevoir un e-mail envoyé
il faut lancer la commande rancid-run :
par RANCID avec comme contenu, au format diff unifié,
# sudo -u rancid /usr/lib/rancid/bin/rancid-run les modifications sauvegardées. Ici, c’était notre première
exécution, donc l’e-mail contient toute la configuration de
Une fois l’exécution de la commande terminée, consultez
chaque équipement. À l’avenir, un commit sera seulement
les logs de RANCID pour vérifier que tout s’est bien passé.
ajouté au dépôt, ainsi qu’un e-mail envoyé, si et seulement
Les logs sont dans le dossier /var/log/rancid , avec un
si RANCID détecte des modifications depuis les dernières
fichier par groupe, fichier dont le nom est de la forme nom-
configurations sauvegardées.
du-groupe.horodatage-de-la-sauvegarde :
# sudo ls /var/log/rancid/
joebobisp.20160313.144825 4.3 Cron
sl.20160313.144803
Vous n’allez pas exécuter RANCID manuellement à chaque
En cas de problème avec un groupe, vous pouvez exécuter modification d’un équipement : l’intérêt de RANCID en
la commande en lui passant le nom du groupe en para- deviendrait nul, surtout pour détecter les modifications non
mètre, pour accélérer l’exécution en la limitant à ce groupe désirées.
lors de vos débogages : Pour pallier à cela, le paquet RANCID a été installé avec
# sudo -u rancid /usr/lib/rancid/bin/rancid-run sl une tâche CRON, dans le fichier /etc/cron.d/rancid .
Ce document est la propriété exclusive de la société INEO-SCLE-SFE pour 1 lecteur

Par défaut, les commandes sont commentées, décommen-


tez-les comme suit :
4.2 Résultats # run config differ hourly
1 * * * * rancid /usr/bin/rancid-run
Si tout s’est bien passé, RANCID a pu se connecter à vos
# clean out config differ logs
équipements, et un fichier correspondant à la configuration
50 23 * * * rancid find /var/log/rancid -type
de chacun des équipements à sauvegarder a été créé dans f -mtime +2 -exec rm {} \;
le dossier configs de chaque groupe :
La première ligne exécute la commande de sauvegarde
# sudo ls /var/lib/rancid/joebobisp/configs vue dans la section précédente. La deuxième procède à un
cisco-01
nettoyage des fichiers de logs créés, âgés de plus de deux
# sudo ls /var/lib/rancid/sl/configs
juniper-01 jours.

Ce sont ces différents fichiers qui sont versionnés dans les


dépôts Git respectifs de chaque groupe : 5. TRUCS ET ASTUCES
# sudo -su rancid 5.1 Pousser vers un dépôt distant
# cd /var/lib/rancid/joebobisp/
# git show RANCID utilise un dépôt local pour travailler par défaut.
commit 480658b672bf735c944f30f4e6991519229c30fe Il existe bien une option pour utiliser un dépôt distant,
Author: rancid <rancid@exemple.fr> mais pas sûr que celle-ci fonctionne avec Git. De
Date: Sun Mar 13 18:54:39 2016 +0100
plus, imaginons que pour la société joebobisp, nous
updates souhaitions que RANCID travaille avec le dépôt Git local
par défaut, puis qu’automatiquement une synchronisation
diff --git a/configs/juniper-01 b/configs/juniper-01 de ce dépôt soit faite vers le serveur Git distant sur les
index e69de29..f47886e 100644 serveurs de joebobisp. RANCID ne propose pas ce cas
--- a/configs/juniper-01 de figure.

Linux Pratique n°95 97


SOLUTIONS PRO LIBRES & OPEN SOURCE

Mais nous pourrions utiliser la fonctionnalité des hooks de Vous pouvez alors exécuter une commande sur des
Git, pour exécuter un script et pousser vers le serveur Git équipements de manière automatisée en la passant en
distant de joebobisp automatiquement à chaque fois que paramètre du drapeau -c. Ainsi, la commande suivante
RANCID fait un commit en local. va se connecter sur juniper-01, exécuter la commande
Pour cela, on commence par se placer dans le dépôt Git show version detail, puis se déconnecter :
local du groupe joebobisp, et on ajoute le dépôt distant à # sudo -u rancid /usr/lib/rancid/bin/jlogin -c
l’aide de la commande remote de Git : "show version detail" juniper-01
# sudo -su rancid Vous pouvez aussi placer ces commandes dans un
# cd /var/lib/rancid/joebobisp/
fichier, et l’exécuter avec le drapeau -x. Ainsi, la
# git remote add backup git@joebobisp.com:backup.git
commande précédente peut tout simplement être
Vous pouvez tester ce dépôt distant avec : placée dans le fichier /usr/local/bin/version.
rancid suivant :
# git push -u backup master
show version detail
Notez que la commande précédente de poussée vers le
dépôt distante doit être non-interactive, car vous ne serez Puis l’exécuter avec :
pas devant votre clavier lors de son exécution : à vous de
rajouter un mécanisme à l’utilisateur rancid comme une # sudo -u rancid /usr/lib/rancid/bin/jlogin -x
/usr/local/bin/version.rancid juniper-01
authentification par clé ssh pour automatiser la connexion
au dépôt distant. Il ne reste plus qu’à créer vos propres fichiers de
On peut ensuite passer à la création du script de post- commande, et boucler sur vos équipements réseau pour
commit pour notre dépôt joebobisp. Créez donc le fichier des opérations de modifications de configuration en
Ce document est la propriété exclusive de la société INEO-SCLE-SFE pour 1 lecteur

de post-commit /var/lib/rancid/joebobisp/.git/ masse.


hooks/post-commit suivant :
#!/bin/sh
CONCLUSION
git push backup
RANCID est certes un peu daté : certains de ses
Donnez ensuite les droits d’exécution à ce script : utilisateurs se sont tournés vers le plus récent Oxidized
# chmod u+x /var/lib/rancid/joebobisp/.git/hooks/ [5]. Mais c’est une valeur sûre et son rythme de
post-commit développement est régulier. Grâce à une équipe à
l’écoute de ses utilisateurs, comme lors de l’intégration
Voilà : la prochaine fois que RANCID détectera un chan-
du support Git, et plusieurs nouvelles versions mineures
gement de configuration d’un équipement du groupe joe-
qui sortent tous les ans. ▌
bobisp, il créera un commit dans le dépôt local. Puis Git se
chargera automatiquement de pousser ce nouveau commit
vers le dépôt distant.
Références
5.2 Scripts de login [1] http://www.shrubbery.net/rancid/

Les scripts de login /usr/lib/rancid/bin/*login [2] http://www.nist.gov/el/msid/expect.cfm


sont basés sur Expect, un outil d’automatisation pour
travailler avec des applications interactives comme telnet, [3] https://dotwaffle.github.io/rancid-git/
ssh, etc..
[4] http://backports.debian.org/
En réutilisant ces scripts, vous pouvez profiter de Expect
et de toute la surcouche propre aux équipements réseau [5] https://github.com/ytti/oxidized
développée par RANCID.

98 Linux Pratique n°95