Oxidized ist ein Backuptool um von diversen Netzwerkgeräten automatisch die Konfiguration zu sichern.
Aktuell werden mehr als 130 verschiedene Betriebssysteme unterstützt.
Folgende Hardware hab ich bei mir mit Oxidized gesichert:
- MikroTik Router
- Ubiquiti EdgeRouter Lite
- Zyxel GS1900-24 Switch
- HP V1910-24G Switch
- APC AP9630 USV Network Management Card
Oxidized
Für die Installation nutze ich ein Debian 10.
Zuerst müssen ein paar Abhängigkeiten installiert werden.
apt install -y ruby ruby-dev libsqlite3-dev libssl-dev pkg-config make cmake libssh2-1-dev libicu-dev zlib1g-dev g++
Oxidized installieren.
gem install oxidized gem install oxidized-script oxidized-web
Neuen Benutzer oxidized anlegen. (sollte nicht als root ausgeführt werden)
useradd --home-dir /home/oxidized --create-home --user-group --shell /usr/sbin/nologin oxidized
Verzeichnisstruktur erstellen.
mkdir /home/oxidized/backups mkdir -p /home/oxidized/.config/oxidized
Die Konfigurationsdatei /home/oxidized/.config/oxidized/config erstellen.
# globale Variablen resolve_dns: false # wie oft (in Sekunden) werden Daten abgeholt (jede Stunde ist bei mir overkill, zum testen aber ok) interval: 3600 log: /home/oxidized/.config/oxidized/oxidized.log pid: /home/oxidized/.config/oxidized/oxidized.pid use_syslog: true debug: false threads: 30 timeout: 20 retries: 3 prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/ next_adds_job: false # Webinterface auf allen IP Adressen aktivieren rest: 0.0.0.0:8888 # wird für den HP V1910 Switch benötigt vars: comware_cmdline: "512900" # wie wird die Konfiguration von den Geräten geholt input: default: ssh, ftp debug: false ssh: secure: false # wie wird die Konfiguration abgespeichert output: default: file file: directory: /home/oxidized/backups/configs # Datenquelle der Geräteliste source: default: csv csv: file: /home/oxidized/.config/oxidized/router.db delimiter: !ruby/regexp /:/ # welches Feld ist welches in der csv map: name: 0 ip: 1 model: 2 group: 3 username: 4 password: 5 vars_map: enable: 6 # Zuordnung von model zu OS Typ model_map: apc: apc_aos mikrotik: routeros ubiquiti: edgeos zyxel: zynosgs hp: comware # nachdem alle Nodes abgearbeitet wurden, wird jede neue Sicherung auf die Endung mit _Datum kopiert hooks: name_versioning: type: exec events: [nodes_done] cmd: 'find /home/oxidized/backups -type f ! -name "*_*" -execdir cp {} {}_`date +"%Y%m%d_%M"` ";"'
Die Datenquelle /home/oxidized/.config/oxidized/router.db erstellen.
# name:ip:model:group:username:password (der group Name wird automatisch als Verzeichnis erstellt) ub-router-1:192.168.80.202:ubiquiti:router:username:password mt-router-1:192.168.80.1:mikrotik:router:username:password mt-router-2:192.168.80.2:mikrotik:router:username:password mt-router-3:192.168.80.3:mikrotik:router:username:password zy-switch-1:192.168.80.16:zyxel:switch:username:password zy-switch-2:192.168.80.17:zyxel:switch:username:password zy-switch-3:192.168.80.18:zyxel:switch:username:password hp-switch-1:192.168.80.189:hp:switch:username:password apc-usv-1:192.168.80.8:apc:usv:username:password
Zum Abschluß die Berechtigungen nochmals anpassen.
chown -R oxidized:oxidized /home/oxidized/
Startscript /etc/systemd/system/oxidized.service erstellen.
[Unit] Description=Oxidized - Network Device Configuration Backup Tool After=network-online.target multi-user.target Wants=network-online.target [Service] ExecStart=/usr/local/bin/oxidized User=oxidized KillSignal=SIGKILL [Install] WantedBy=multi-user.target
Den neuen Service aktivieren und starten.
systemctl daemon-reload systemctl enable oxidized.service systemctl start oxidized.service
Nach dem Start verucht Oxidized sich die Konfiguration der eingetragenen Geräte zu holen und als Textdatei abzulegen.
root@oxidized:/# tree /home/oxidized/backups/ /home/oxidized/backups/ |-- router | |-- mt-router-1 | |-- mt-router-2 | |-- mt-router-3 | `-- ub-router-1 |-- switch | |-- hp-switch-1 | |-- zy-switch-1 | |-- zy-switch-2 | `-- zy-switch-3 `-- usv `-- apc-usv-1
Oxidized Hooks
Die einzelnen Sicherungen werden bei jedem neuen Durchlauf überschrieben. Es ist also immer nur die aktuelle Sicherung vorhanden.
Um das zu umgehen nutze ich einen exec hook. Nachdem alle Nodes abgefragt wurden, wird ein Befehl ausgeführt.
In meinem Fall sucht find alle Dateien im Verzeichnis backups ohne ein _ im Namen und kopiert diese dann auf die Endung _Datum_StundeMinute.
Somit hab ich jetzt immer alle Sicherungen und nebenbei auch noch eine einfache Versionsverwaltung.
root@oxidized:/# tree /home/oxidized/backups/ /home/oxidized/backups/ |-- router | |-- mt-router-1 | |-- mt-router-1_20191207_1429 | |-- mt-router-1_20191207_1529 | |-- mt-router-1_20191207_1629 | |-- mt-router-2 | |-- mt-router-2_20191207_1429 | |-- mt-router-2_20191207_1529 | |-- mt-router-2_20191207_1629 | |-- mt-router-3 | |-- mt-router-3_20191207_1429 | |-- mt-router-3_20191207_1529 | |-- mt-router-3_20191207_1629 | |-- ub-router-1 | |-- ub-router-1_20191207_1429 | |-- ub-router-1_20191207_1529 | `-- ub-router-1_20191207_1629 |-- switch | |-- zy-switch-1 | |-- zy-switch-1_20191207_1429 | |-- zy-switch-1_20191207_1529 | |-- zy-switch-1_20191207_1629 | |-- zy-switch-2 | |-- zy-switch-2_20191207_1429 | |-- zy-switch-2_20191207_1529 | |-- zy-switch-2_20191207_1629 | |-- zy-switch-3 | |-- zy-switch-3_20191207_1429 | |-- zy-switch-3_20191207_1529 | `-- zy-switch-3_20191207_1629 `-- usv |-- apc-usv-1 |-- apc-usv-1_20191207_1429 |-- apc-usv-1_20191207_1529 `-- apc-usv-1_20191207_1629
Oxidized Webinterface
Schöner Überblick über den Status der einzelnen Geräte und Sicherungen.
Oxidized Fehlersuche
Lässt sich Oxidized nicht starten oder wird ein Gerät nicht ausgelesen, in der config debug auf true setzen und sich die logfiles anschauen!
Nach Änderungen an der Konfiguration immer den oxidized.service neu starten.
Oxidized mit LibreNMS
Monitored man die Geräte mit LibreNMS, lässt sich mit ein paar klicks Oxidized einbinden. (LibreNMS 3rd Party Integration Oxidized)
In LibreNMS oben auf das Zahnrad → Global Settings → External → Oxidized Integration, aktivieren und die API URL eingeben.
Pro Gerät hat man jetzt einen Config Reiter über den man sich die aktuelle Konfiguration anzeigen lassen kann.
Damit das reibungslos funktioniert, müssen die Gerätenamen (hostnamen) in LibreNMS und Oxidized gleich sein!
Hi,
funktioniert Oxidized eigentlich nur mit Input wie oben beschrieben?
Wir haben zwei HP ProCurves – allerdings solche, die nur Login via http und nicht per ssh unterstützen:
1. HP 1810-24G, PL.2.10, eCos-3.0, 1_12_8-customized-h
2. HPE OfficeConnect Switch 1820 24G PoE+ (185W) J9983A, PT.02.09, Linux 3.6.5-45630aff, U-Boot 2012.10-00119-gae4e43bd91 (Aug 31 2018 – 10:12:27)
In LibreNMS werden sie von Oxidized zwar erkannt, aber – da ein Login eben nicht via ssh läuft – gibt es dann die Fehlermeldung “node not found”.
Ich hatte schon versucht bei Input neben ssh und ftp auch http einzutragen, dies führte aber zu einer Fehlermeldung. Des Weiteren wäre da auch die Frage in wiefern dann die Reihenfolge der entsprechenden Links definiert wird.
Mit freundlichen Grüßen
A. Hermann
Ja. Hier siehst du die input config für die ProCurve Switche, kein http.
https://github.com/ytti/oxidized/blob/master/lib/oxidized/model/procurve.rb
Gruß, Michael…
Telnet oder ssh lassen sich in den genannten 1810er bzw. 1820er aktivieren.
Zunächst muss für ssh per crypto key generate ein Schlüsselpaar erzeugt werden, dann kannst Du ip ssh key-size 1024 die Stärke auf 1024bits festlegen und mit ip ssh einschalten.
Danke für die Info.