Rancid wird von {www}Terrapin Communications, Inc. entwickelt.

Rancid überwacht Geräte (in Rancid wird alles als Router bezeichnet, weil ursprünglich für Router entwickelt worden) auf Änderungen der Konfuguration, Software und Hardware. Dazu wird per Command Line Interface (CLI), auf die Geräte die Überwacht werden sollen, zugegriffen und die notwendigen Parameter abgefragt. Die so erfassten Daten werden in Textdateien abgelegt und per CVS oder Subversion versioniert.

Auf {www}Github ist Rancid in einer erweiterten Version verfügbar. Diese Version unterstützt auch Git als Versionskontrolle und enthält auch einen Debian Ordner, somit lässt sich direkt ein Debian Paket bauen.

Ich selbst habe Rancid auch ein wenig erweitert. Meine Version findet man auch auf {www}Github.

Meine Erweiterungen:

Für die Installation unter Debian, die aktuelle Version von {www}Github besorgen, Paket bauen und dann installieren.

git clone https://stku@github.com/stku/rancid-git.git
cd rancid-git
dpkg-buildpackage -uc -rfakeroot
cd ..
dpkg -i rancid_<verison>.deb

Als erster Schritt für die Konfiguration wird in /etc/rancid/rancid.conf angepasst.

umask 022   # anpassen wenn auch ander User rancid ausführen sollen 
RCSSYS=git; export RCSSYS # auf git stellen wenn git verwendet werden soll
FILTER_PWDS=NO; export FILTER_PWDS # auf NO setzen wenn Passwörter mit gesichert werden sollen
LIST_OF_GROUPS="lab4"   # Liste der Gruppen die verwendet werden sollen

Rancid meldet erkannte Änderungen oder Störungen bei der Sicherung per Mail. Um festzulegen wer die Mails bekommt, wird dies für jede Gruppe in der /etc/aliases festgelegt.

rancid-admin-lab4: stefan@localhost
rancid-lab4: stefan@localhost

Für die Anmeldung an den Geräten ist die ~/.cloginrc im Home des Users der Rancid ausführen soll. Es kann für jeden Router festgelegt werden wie Rancid sich anmelden soll, ein Stern kann als Wildcard verwendet werden.

add user * <username>
add password * <vty password> <enable password>
add method <hostname> telnet
add method * ssh

Ist ein Router so konfiguriert, dass nach dem Login direkt in den enable Modus gewechselt wird ist folgender zusätzlicher Eintrag nötig.

add autoenable <hostname> 1

Enthält ein Username oder Passwort Sonderzeichen muss dies in {} eingeschlossen werden.

add password <hostname> {pa$$wrod} {pa$$word}

SSH Version 1 erzwingen

add sshcmd <hostname> /usr/lib/rancid/bin/ssh1
add cyphertype <hostname> des

Das Script /usr/lib/rancid/bin/ssh1 dient um den Parameter -1 dem SSH Kommando mitzugeben.

#!/bin/bash
# force ssh v1
/usr/bin/ssh -1 $@

Um nun für jede Gruppe die in der rancid.conf eingetragen wurde die entsprechenden Verzeichnisse anzulegen und die Versionskontrolle zu initialisieren wird der Befehl rancid-cvs verwendet. Auch wenn ein CVS am Ende steht gilt dieser Befehl für alle Versionskontrollen die verwendet werden können.

Die Router die gesichert werden sollen, werden in der router.db unterhalb des Verzeichnisses für die Gruppe eingetragen. Die Router werden in folgendem Format eingetragen.

# hostname:type:state:comment
switch1:cat5:up
router1:cisco:up
router2:cisco:down:der ist aus

Mögliche Typen sind z.B.:

Alle verfügbaren typen sind in der Manpage router.db(5) zu finden.

Um die Sicherung nun z.B. täglich laufen zu lassen wird ein entsprechender Eintrag in Cron vorgenommen.

# rancid
0 1 * * *       rancid  /opt/rancid/bin/rancid-run lab4 > /dev/null 2>&1

Mit dem Befehl rancid-run wird eine Sicherung gestartet. Ohne Optionen werden alle Geräte gesichert. Wird hinter dem Befehl die Gruppe angegeben wird nur diese gesichert.

rancid-run [-r <hostname>] [-m <mail>] <gruppe>

Optional kann durch meine Erweiterung noch die Commit Message erweitert werden, indem vor dem rancid-run die Variable ALT_COMMIT gesetzt wird.

export ALT_COMMIT=TicketID

Mit dem Befehl clogin wird die Anmeldung automatisiert, und kann es auch sehr gut für Massenäderungen verwenden. Die Konfiguration hierfür erfolgt über die ~/.cloginrc.

clogin [-c <commands>] [-x <file>] <hostname>

Beispiel mit der Option -c

$ /usr/lib/rancid/bin/clogin -c 'show version' router1 router2

Beispiel mit der Option -x und xargs.

$ cat routers
router1
router2
$ cat commands  
show version
$ cat routers | xargs /usr/lib/rancid/bin/clogin -x commands

Von Geräte die aus der router.db gelöscht werden, wird auch die Sicherung aus dem Dateisystem gelöscht. In der Versionskontrolle sind die Konfigs ja noch vorhanden. Um einen einfachen Zugriff auf diese zu ermöglichen kann man einen Ordner Archiv anlegen und vor dem Löschen aus der router.db die letze Sicherung dahin verschieben.

mkdir archiv
git mv lab4/configs/router1 archiv
git commit -a

Als Webfrontends können je nach Versionskontrolle z.B. {www}CVSWeb, {www}WEBSVN oder {www}Gitweb