Rancid wird von
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
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
Github.
Meine Erweiterungen:
- show snmp engineID für Cisco IOS und NX-OS. Die SNMP Engine ID wird für SNMP Traps v3 mit authPriv (Authentifizierung und Daten verschlüsselt). Mit Rancid können so alle Engine ID's erfasst werden.
- show snmp mib ifmib ifindex für Cisco IOS. Ermittelt die Indexnummer aller Interfaces. Wird z.B. für die Auswertung von Netflow Daten oder auch für das Abfragen der Interfaces per SNMP benötigt.
- show crypto pki certificates für Cisco IOS, zu Ermittlung des Ablaufdatum von Zertifikaten auf dem Router. Kann so dann z.B. per Nagios/Icinga überwacht werden.
- Speicheradresse bei show contorllers ausgeblendet, da sonst unnötige Änderungen versioniert werden.
- show running-config mit show running-config vdc-all für Cisco Nexus ersetzt, um die Konfiguration aller VDC's auf einmal sichern zu können.
- Verwendung von vollen Pfaden für Rancid par Kommando, um Konflikte mit anderen par Kommandos zu vermeiden.
- Erweiterung der Commit Message über Umgebugsvariable, für Steuerung aus anderen Scripten.
Für die Installation unter Debian, die aktuelle Version von
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
rancid-admin-<group>- Fehler bei der Sicherungrancid-<group>- Änderungen an den Konfigurationen von Routern
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.:
- cisco - Cisco IOS
- cat5 - Cisco CatOS Switche
- cisco-nx - Cisco Nexus
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>
- -r - gibt einen einzelnen Router an der gesichert werden soll
- -m - alternative Mail Adresse
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>
-c <commands>- Befehl der auf jedem Router ausgeführt werden soll-x <file>- Datei Mit Befehlen die ausgeführt werden sollen
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.
CVSWeb,
WEBSVN oder
Gitweb