Community

Bitte oder Registrieren, um Beiträge und Themen zu erstellen.

oxidized config backup

Um die Konfigurationen von Netzwerkkomponenten zu sichern, habe ich in der Vergangenheit rancid verwendet. Da seit Langem das CVS-Webfrontend in meiner Lieblings-Server-Distro (Ubuntu) nicht mehr zur Verfügung steht, habe ich mir einmal Oxidized angesehen.

Die Installation hinter einem Proxy gestaltet sich etwas unkommod, leider ist das Oxidized-Projekt für meinen Geschmack auch etwas nerdy...

Allerdings konnte ich auf Anhieb und ohne Änderung an Patterndateien Konfigurationen von bis zu 12 Jahre alten bis zu aktuellen Komponenten der folgenden Herstellern sichern:

  • Cisco Switches (Cat2950 bis 3850, IOS 12.1-IOS 15, Telnet /ssh, autoenable)
  • Cisco Router bzw. L3-Switch: 4500-X
  • Cisco ASA (8/9, failover active und standby)
  • Cisco WLAN Controller 2504 (lässt gegenüber rancid sogar die diffs von Temperatur und fan status weg 🙂 )
  • HP Procurve 2650
  • Brocade Fc-Switches

Auf meinem Ubuntu finden sich unter /var/lib/gems/2.3.0/gems/oxidized-0.21.0/lib/oxidized/model/  jede Menge an Herstellern, die unterstützt werden. Testen kann ich leider nur die Komponenten, die bei mir im Einsatz sind :-).

Die Installation

Zunächst habe ich auf einem blanken Ubuntu 16.04 Server die Abhängigkeiten installiert, der Einfachheit halber arbeite ich hier als root:

#apt install ruby ruby-dev libsqlite3-dev libssl-dev pkg-config git cmake build-essential libssh2-1-dev tree

Um die ruby-Pakete herunterzuladen, benötigt die aktuelle shell die http_proxy Variable:

#export http_proxy=http://proxyuser:proxypasswd@proxyserver:proxyport

Download und Installation der Programmpakete:

#gem install oxidized
#gem install oxidized-script oxidized-web

Anlegen des Users und des Home-Verzeichnisses, unter dem die Software läuft:

#useradd -m -d /opt/oxidized oxidized

Wechsel zum neuen User und Erzeugen der Startumgebung:

#su - oxidized
oxidized@host:~$oxidized
oxidized@host:~$oxidized

Das zweite Ausführen des binary erzeugt eine umfangreichere Beispielkonfiguration.

Die Konfiguration

Editier als User oxidized nun die Konfigurationsdatei ~/.config/oxidized/config

Achtung! Beachte die Einrückungen in der Datei - Untereinträge erhalten immer 2 spaces!

---
username: backup
password: mybackuppw
model: junos
interval: 3600
use_syslog: true
log: "/opt/oxidized/.config/oxidized/logs/"
debug: false
threads: 30
timeout: 60
retries: 1
prompt: !ruby/regexp /^([w.@-]+[#>]s?)$/
rest: 0.0.0.0:8888
next_adds_job: false
vars: {}
groups: {}
models: {}
pid: "/opt/oxidized/.config/oxidized/pid"
input:
  default: ssh, telnet
  debug: false
  ssh:
    secure: false
output:
  default: git
  user: oxidized
  email: name@mail.org
  repo: "/opt/oxidized/configrepo"
  git:
    user: Oxidized
    email: o@example.com
    repo: "/opt/oxidized/.config/oxidized/oxidized.git"
hooks:
  push_to_remote:
    type: githubrepo
    events: [post_store]
    remote_repo: urltogitrepo.git
source:
  default: csv
  csv:
    file: "/opt/oxidized/.config/oxidized/router.db"
    delimiter: !ruby/regexp /:/
    map:
      name: 0
      model: 1
    gpg: false
model_map:
  cisco: ios
  juniper: junos
  hp: procurve
  wlc: aireos
  asa: asa
models:
  asa:
    username: admin
    password: mypass
    vars:
      enable: myenablepass

Wenn die Konfiguration passt (zum Test debug: true), dann findest Du unter der URL http://deine-ip:8888 das Webfrontend, auf dem du die Konfigs und deren Historie:

[caption id="attachment_490" align="aligncenter" width="300"]Oxidized Web Oxidized Web[/caption]

Oxidized Export auf gitlab

in der Konfig habe ich noch zwei hooks hinterlegt - einer ist oben bereits angedeutet.

  • push to remote: schiebt die diffs auch auf github/gitlab.
    hooks:
      push_to_remote:
        type: githubrepo
        events: [post_store]
        remote_repo: git@gitlabserver:repo-owner/repo-name.git
        publickey: /opt/oxidized/.ssh/id_rsa.pub
        privatekey: /opt/oxidized/.ssh/id_rsa

     

Nun habe ich nur den ssh-push auf einen gitlabserver getestet, nachdem ich bei dem User, mit dem ich importiere, im Gitlabserver den public-Key des oxidized-users dafür hinterlegt:

[caption id="attachment_492" align="aligncenter" width="300"]GitLab SSH-Keys GitLab SSH-Keys[/caption]

Oxidized Mailversand

Der andere Hook ist der Mailversand bei Fehlern und neuer Konfig. Voraussetzung ist die Speicherung der Konfigs in git!

Aufgrund verschiedener Events kann das Tool auch Mails versenden. Sinnvoll ist eine Mail zum Beispiel, wenn unser Tool eine neue Konfiguration importiert oder auf einen Fehler läuft. Dafür sind ein kleines Shellskript, das in der Konfig referenziert wird und ein Stück Konfig notwendig:

hooks:
...
  email_output:
    type: exec
    events: [post_store, node_fail]
    cmd: '/opt/oxidized/.config/oxidized/oxidized-report-git-commits.sh | mail -s "Oxidized updates for ${OX_NODE_NAME}" du@deinemailadresse.tld'
    async: true
    timeout: 120

Das Shellskript muss für den oxidized-User ausführbar sein!

Dies ist keine vollständige Anleitung zur Installation und zum Betrieb - dafür kann dieses Werkzeug zuviel. Hier sind lediglich einige Features davon beschrieben, die ich im Alltag benötige.

Wenn Du Interesse an einer Alternative zu rancid suchst, dann besuch doch mal das Github-Repo des Projekts.

Für Rückfragen zum Artikel stehe ich Dir gerne zur Verfügung!