
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.
Hallo,
ich habe Probleme mit Oxidized auf einem neuen Ubuntu 24.04.2 LTS Server und bräuchte eure Hilfe bei der Fehlersuche.
Ziel: Konfiguration eines ArubaOS-CX Switches (10.0.6.160) mittels Oxidized sichern.
Meine Umgebung:
Betriebssystem: Ubuntu Server 24.04.2 LTS (neu installiert).
Oxidized-Version: 0.33.0 (installiert via sudo gem install oxidized).
Konfiguration:
Oxidized läuft als systemd-Dienst unter dem dedizierten Benutzer oxidized.
Konfigurationsdateien (config, router.db) liegen in /opt/oxidized/.config/oxidized/ (und wurden testweise auch nach /root/.config/oxidized/ kopiert, da sudo verwendet wird).
router.db enthält den Switch: HOTSWm6000-8-1:10.0.6.160:aoscx:aruba_cx_switches.
config ist mit den korrekten admin-Zugangsdaten (username: admin, password: admin) konfiguriert.
Was ich bereits getan habe (und erfolgreich war):
Systemvorbereitung: Ubuntu 24.04.2 LTS neu installiert, apt update/upgrade durchgeführt.
Abhängigkeiten: ruby, ruby-dev, build-essential, libssl-dev, zlib1g-dev, cmake, pkg-config wurden erfolgreich installiert.
Oxidized-Installation: sudo gem install oxidized lief nach der Installation aller Abhängigkeiten fehlerfrei durch.
Benutzer & Berechtigungen: Dedizierter Systembenutzer oxidized erstellt, alle relevanten Ordner (/opt/oxidized/, /.config/oxidized/) gehören oxidized:oxidized und haben die notwendigen Berechtigungen (u.a. 755 oder 777 testweise).
SSH-Verbindung: Die SSH-Verbindung zum Switch funktioniert manuell vom Server aus mit den konfigurierten Zugangsdaten.
Oxidized-Service: Der systemd-Dienst für Oxidized startet fehlerfrei (Active: active (running)).
Das Problem (widersprüchliches Verhalten):
Obwohl die Verbindung und das Abrufen der Konfiguration erfolgreich sind, werden die Backups nicht gespeichert.
Log-Meldungen (wenn debug: true oder journalctl):
Oxidized meldet stets:
Oxidized::SSH ran for HOTSWm6000-8-1 successfully
Und unmittelbar danach:
Config fetched for HOTSWm6000-8-1 at YYYY-MM-DD HH:MM:SS UTC
Wenn
output: file konfiguriert ist, erscheint sogar die Meldung: INFO — : Configuration updated for aruba_cx_switches/HOTSWm6000-8-1
Tatsächliches Ergebnis:
Beim Konfigurieren von output: file (z.B. directory: /opt/oxidized/backups_plain/ oder directory: /tmp/oxidized_test_backups/):
Die angegebenen Ordner bleiben leer (ls -l zeigt total 0).
Es erscheinen keine Dateien, obwohl Oxidized im Log “Configuration updated” meldet.
Beim Konfigurieren von output: git (wie ursprünglich gewünscht):
sudo git –git-dir=/opt/oxidized/configs.git log –all zeigt immer fatal: your current branch ‘master’ does not have any commits yet.
Es werden keine Commits erstellt, obwohl das Konfigurations-Fetch im Log erfolgreich ist.
Zusammenfassung:
Oxidized stellt eine erfolgreiche Verbindung her, ruft die Konfiguration ab und meldet sogar, dass diese “aktualisiert” bzw. “gespeichert” wurde. Die Dateien erscheinen jedoch weder im konfigurierten File-Output-Verzeichnis noch als Commits im Git-Repository. Dies deutet auf einen internen Fehler bei der Übergabe der Daten an das Output-Modul oder bei der tatsächlichen Speicherung hin, möglicherweise ein Kompatibilitätsproblem mit Oxidized v0.33.0 in dieser spezifischen Ubuntu-Umgebung.
Gibt es bekannte Probleme mit Oxidized v0.33.0, die ein solches Verhalten verursachen könnten, insbesondere in Bezug auf das “file”- oder “git”-Output-Modul, obwohl der Fetch-Vorgang erfolgreich ist? Was könnte der Grund für diese Diskrepanz zwischen Log-Meldungen und tatsächlicher Dateispeicherung sein?
Vielen Dank für eure Hilfe!