LibreNMS && Oxidized 備份網管設備設定檔 - Ubuntu
BUBU 之前有看到節省哥分享此服務,曾經試架設過一次,但是後來失敗,最近有看到這類的文章出現,因此再次架設此套件,目前架設已成功可以正常運行。
這套網通設備可以讓管理人員不用這樣子定期去執行備份,可以這個套件定期將每個台網通設備可以進行備份,這一套還有另外一個優點就是可以與之前版本進行做比對,當設備有問題的時候可以立刻還原到上一版去。
2026.07.11 系統採用 Ubuntu 系統來做建議
運行環境
環境都是在 「Proxmox VE 」 虛擬系統上架設,都是以 「 LXC 」模式為主,除非有特殊狀況會告知使用 「 VM 」 模式
- 系統環境: Ubuntu 22.04
安裝過程
安裝官方套件
- Ubuntu 要先啟用以下套件
apt install software-properties-common -y && add-apt-repository universe
- 安裝必要套件
apt install -y ruby ruby-dev libsqlite3-dev libssl-dev pkg-config cmake libssh2-1-dev libicu-dev zlib1g-dev g++ libyaml-dev libzstd-dev
- 安裝服務套件
gem install oxidized
gem install oxidized-script oxidized-web
- 設定服務使用者及密碼
adduser oxidized
- 切換使用者
su - oxidized
- 執行
oxidized服務指令,系統會在該目錄產出一個隱藏目錄是.config
oxidized
- 確認是否有正常產出該目錄
ls -la
LibreNMS && Oxidized 設定
- oxidized 設定檔
vim home/oxidized/.config/oxidized/config修改前
---
username: username
password: password
model: junos
resolve_dns: true
interval: 3600
use_syslog: false
debug: false
threads: 30
timeout: 20
retries: 3
prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/
rest: 127.0.0.1:8888
next_adds_job: false
vars: {}
groups: {}
models: {}
pid: "/root/.config/oxidized/pid"
crash:
directory: "/root/.config/oxidized/crashes"
hostnames: false
stats:
history_size: 10
input:
default: ssh, telnet
debug: false
ssh:
secure: false
ftp:
passive: true
utf8_encoded: true
output:
default: file
source:
default: csv
csv:
file: "/root/.config/oxidized/router.db"
delimiter: !ruby/regexp /:/
map:
name: 0
model: 1
gpg: false
model_map:
juniper: junos
cisco: ios
修改後
---
# ===== 全域預設帳密(最低優先,fail-safe)=====
# [CHANGE] 官方認證優先序:全域 < model < group < group內model < node。
# 任何 group / model 有設定都會覆寫此處。
# 資安建議:頂層填一組「絕對登入不成功」的假帳密,
# 這樣萬一某設備漏設帳密,會明確失敗而非誤用共用帳密登入。
username: nologin
password: invalid_placeholder
# ===== 全域預設 model(fallback)=====
# [CHANGE] 請確認 LibreNMS 每台設備都有正確回傳 os,否則未帶出 model 者會 fallback 成 junos。
model: junos
resolve_dns: false
interval: 3600 # 單位為秒;設為 0 則啟動與之後皆不抓取
use_syslog: false
debug: false
threads: 30 # 建議約略等於或略低於實際設備數
timeout: 20 # 單一操作等待上限(秒)
timelimit: 300 # 整個抓取工作絕對時間上限(秒),一定會被強制執行
retries: 3
prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/
# ===== oxidized-web:RESTful API 與網頁介面 =====
# [CHANGE] 原 rest: 語法已 deprecated,改用 extensions.oxidized-web。需 oxidized-web >= 0.16.0。
extensions:
oxidized-web:
load: true
listen: 0.0.0.0
port: 8888
next_adds_job: false
vars: {}
# ===== 依 model 設定帳密(同機型共用帳密時使用)=====
# [CHANGE] 適用「不分站點,同一機型共用同一組帳密」的情境。
# 若某機型登入只需密碼,username 可設為 nil。
models:
fortios:
username: fortiadmin
password: forti_pass
# vars:
# output_store_mode: on_significant # 之後搭配 significant_changes 啟用,消除 Fortinet 假異動
ios:
username: ciscoadmin
password: cisco_pass
junos:
username: junosadmin
password: junos_pass
routeros:
username: admin
password: mikrotik_pass
unifi:
username: ubnt
password: ubnt_pass
dlink:
username: dlinkadmin
password: dlink_pass
# ===== 依 group 設定帳密(同站點/群組共用帳密時使用)=====
# [CHANGE] 適用「同一站點內共用帳密」的情境。group 優先權高於 model,會覆寫上面 models 的設定。
# 前提:LibreNMS source map 有帶出 group 欄位(下方 source 已設)。
# 若無 per-group 需求,可整個註解掉,只靠 models 區塊。
groups:
site_a:
username: site_a_admin
password: site_a_pass
site_b:
username: site_b_admin
password: site_b_pass
# ===== group + model 交叉(最細緻,multi-site 多機型)=====
# [CHANGE] 適用「同群組內、不同機型要不同帳密」的情境,優先權最高(僅次於單一 node)。
# 範例:site_c 站點內 fortios 與 ios 各用不同帳密。
site_c:
models:
fortios:
username: fortiadmin
password: forti_pass_site_c
ios:
username: ciscoadmin
password: cisco_pass_site_c
pid: "/home/oxidized/.config/oxidized/pid"
crash:
directory: "/home/oxidized/.config/oxidized/crashes"
hostnames: false
# ===== 輸入設定 =====
input:
default: ssh, telnet # 資安建議:無 telnet 必要設備時改為 `default: ssh`
debug: false
ssh:
secure: false
ftp:
passive: true
utf8_encoded: true
# ===== 輸出到 git(保留 git,LibreNMS diff 比對依賴 commit 歷史)=====
output:
default: git
git:
user: "your name"
email: [email protected]
repo: "/home/oxidized/.config/oxidized/oxidized.git"
# ===== 來源:與 LibreNMS 連線 =====
# [CHANGE] 不帶 username/password 欄位,帳密完全由本 config 的 models/groups 決定。
# 務必保留 group,分層認證與 group 帳密都依賴它。
source:
default: http
debug: false
http:
url: https://librenms/api/v0/oxidized
map:
name: hostname
model: os
group: group
headers:
X-Auth-Token: '01582bf94c03104ecb7953dsadsadwed'
# ===== model 名稱對應 =====
model_map:
juniper: junos
cisco: ios
fortigate: fortios
mikrotik: routeros
unifi: unifi
dlink: dlink
- 修改 LibreNMS 設定檔
# Oxidized configuration
$config['oxidized']['enabled'] = TRUE;
$config['oxidized']['url'] = 'http://oxidized 位置:8888';
$config['oxidized']['features']['versioning'] = true;
$config['oxidized']['group_support'] = false;
$config['oxidized']['default_group'] = 'false';
$config['oxidized']['reload_nodes'] = true;
#$config['oxidized']['maps']['group']['os'][] = array('match' => 'pfsense', 'group' => 'pfsense');
$config['oxidized']['ignore_os'] = array('ping', 'linux', 'generic');
- 確認 oxidized 是否能正常連線到 librenms API 服務
curl -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/oxidized
設定 oxidized 服務檔
- 設定檔位置
vim /etc/systemd/system/oxidized.service
# Put this file in /etc/systemd/system.
#
# To set OXIDIZED_HOME instead of the default,
# ~oxidized/.config/oxidized, uncomment (and modify as required) the
# "Environment" variable below so systemd sets the correct
# environment.
[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
#Environment="OXIDIZED_HOME=/etc/oxidized"
Restart=on-failure
RestartSec=300s
[Install]
WantedBy=multi-user.target
- 啟動服務
sudo systemctl daemon-reload && sudo systemctl enable --now oxidized.service
- 確認服務執行狀態
sudo systemctl status oxidized.service
- 再去 LibreNMS 上確認是否可以看到該網通設備的設定檔
- 也可以去 Oxidized 頁面查看
http://oxidized 位置:8888
補充說明
BUBU 因公司上有設備的帳密是不一樣,因此需要在設定檔裡做另外處理,提供兩種方式。
- 在 oxidized 設定檔上做設定
source:
default: http
debug: false
http:
url: https://librenms/api/v0/oxidized
map:
name: hostname
model: os
group: group
# 新增加以下兩個參數
username: username
password: password
headers:
# 這個由 LibreNMS 上的 API 介面產出來金鑰
X-Auth-Token: '01582bf94c03104ecb7953dsadsadwed'
- 在 LibreNMS 上做設定
$config['oxidized']['maps']['group']['os'][] = array('match' => 'fortios', 'group' => 'fortios');
$config['oxidized']['maps']['username']['os'][] = array('match' => 'fortios', 'username' => 'admin');
$config['oxidized']['maps']['password']['os'][] = array('match' => 'fortios', 'password' => 'PW_A');
- 查到的範例
$config['oxidized']['ignore_os'] = array('linux','windows');
$config['oxidized']['ignore_types'] = array('server','power');
$config['oxidized']['maps']['group']['os'][] = array('match' => 'ios', 'group' => 'Cisco');
$config['oxidized']['maps']['group']['os'][] = array('match' => 'iosxe', 'group' => 'Cisco');
$config['oxidized']['maps']['group']['os'][] = array('match' => 'nxos', 'group' => 'Nexus');
$config['oxidized']['maps']['group']['os'][] = array('match' => 'procurve', 'group' => 'Aruba');
$config['oxidized']['maps']['group']['os'][] = array('match' => 'arista_eos', 'group' => 'Arista');
$config['oxidized']['maps']['username']['os'][] = array('match' => 'procurve', 'username' => 'admin');
$config['oxidized']['maps']['password']['os'][] = array('match' => 'procurve', 'password' => 'PW_A');
$config['oxidized']['maps']['username']['os'][] = array('match' => 'arista_eos', 'username' => 'admin');
$config['oxidized']['maps']['password']['os'][] = array('match' => 'arista_eos', 'password' => 'PW_B');
$config['oxidized']['maps']['username']['os'][] = array('regex' => '/ios|nxos|iosxe/', 'username' => 'oxidized');
$config['oxidized']['maps']['password']['os'][] = array('regex' => '/ios|nxos|iosxe/', 'password' => 'PW_Z');
- 在 oxidized 設定檔上面
vim /home/oxidized/.config/oxidized/config最後面新增加
models:
fortios:
username: admin
password: PW_A
參考相關網頁
備註
BUBU 最近在公司發現到在 LibreNMS 上面無法正常查看網通設備的設定檔,那也找到一些相關的資訊直都沒有找到正確答案,後來跟社群裡節省哥請教後查看 Log 檔後,原因是出在 php 的記憶體預設只有 128M 那調整到 512M 就可以正常顯示了。
- 調整 php.ini 檔
vim /etc/php/8.0/fpm/php.ini
# 調整前
; 記憶體用量上限
memory_limit = 128M
# 調整後
; 記憶體用量上限
memory_limit = 512M
參考相關網頁
- oxidized 官方 github
- Oxidized Getting Started
- LibreNMS 文檔 Oxidized intro
- Pre-Built LibreNMS OVF with Oxidized + Ryslog + 1 Min Polling
- Oxidized – Part 1
- Oxidized – Part 2
- Oxidized Gitlab Storage Backend
- LibreNMS Oxidized-影片
- How to Install & Integrate Oxidized Into LibreNMS | librenms oxidized- 影片
- How to Install & Integrate Oxidized Into LibreNMS
- 网络设备配置备份-Oxidized
- Oxidized随笔:安装篇
- 构建企业级网络设备自动备份平台 -- Oxidized (一)
- 构建企业级网络设备自动备份系统 -- Oxidized (二)
- Oxidized:一款開源強大但不便捷的網絡設備備份軟體

