مقدمه
Oxidized یک ابزار متنباز برای Backup خودکار Configuration تجهیزات شبکه است که برای دریافت، ذخیره و بررسی تغییرات کانفیگ تجهیزات شبکه طراحی شده است.
این راهنما نصب Oxidized روی Ubuntu 24.04، اتصال به Git برای Version Control، Backup تجهیزات Cisco و اتصال به NetBox API برای دریافت خودکار تجهیزات را پوشش میدهد.
فهرست مطالب
مشکلات Backup سنتی تجهیزات شبکه
- Backup دستی با Copy/Paste باعث خطای انسانی میشود.
- مشخص نیست آخرین تغییر Configuration چه زمانی انجام شده است.
- در زمان خرابی Router یا Switch ممکن است آخرین نسخه سالم موجود نباشد.
- برای تعداد زیاد تجهیزات، Backup دستی قابل مدیریت نیست.
- تغییرات حساس مانند ACL، VLAN، Routing و Firewall Rule بدون اطلاع باقی میمانند.
- هیچ Version History برای مقایسه تغییرات وجود ندارد.
زیرساخت شبکه نیاز به Backup خودکار همراه با Version Tracking دارد.
Oxidized چیست؟
Oxidized یک Network Configuration Backup System است که با استفاده از پروتکلهایی مانند SSH و Telnet به تجهیزات شبکه متصل شده و Configuration آنها را دریافت میکند.
- پشتیبانی از Cisco IOS / IOS-XE
- پشتیبانی از MikroTik RouterOS
- پشتیبانی از HPE، Juniper، Arista و Vendorهای دیگر
- ذخیره Configuration با Git
- نمایش Diff بین تغییرات
- امکان اتصال به NetBox و Automation
معماری Oxidized
Cisco Router / Switch
|
| SSH
|
v
Oxidized Server
|
|
v
Git Repository
|
|
v
Configuration History
منابع موردنیاز سرور Oxidized
Oxidized نسبت به ابزارهای مانیتورینگ منابع بسیار کمی مصرف میکند. منابع موردنیاز بیشتر به تعداد تجهیزات، تعداد Backup در روز و حجم Configurationها بستگی دارد.
| Environment | CPU | RAM | Storage | Usage |
|---|---|---|---|---|
| Lab | 1 vCPU | 2 GB | 20 GB SSD | Testing |
| Small Production | 2 vCPU | 4 GB | 50 GB SSD | Up to 100 Devices |
| Enterprise | 4 vCPU | 8 GB | 100 GB SSD | Hundreds of Devices |
- Ubuntu Server 22.04 / 24.04 Recommended
- SSH access to network devices
- Git installed for configuration versioning
- DNS resolution between Oxidized and devices
نصب Oxidized روی Ubuntu 24.04
ابتدا سیستم عامل را Update کرده و Packageهای موردنیاز Ruby و Git را نصب میکنیم.
sudo add-apt-repository universe
sudo apt update
sudo apt install -y \
ruby ruby-dev ruby-bundler build-essential \
libsqlite3-dev libssl-dev pkg-config cmake libssh2-1-dev \
libicu-dev zlib1g-dev g++ libyaml-dev libzstd-dev git
بررسی نسخه Ruby:
ruby -v
gem -v
git --version
نصب Package های Oxidized
sudo gem install oxidized
sudo gem install oxidized-web
sudo gem install oxidized-script
برای اجرای سرویس بهتر است یک User اختصاصی ایجاد شود.
sudo useradd -m -s /bin/bash oxidized
sudo passwd oxidized
sudo su - oxidized
تنظیمات اصلی Oxidized
بعد از اولین اجرا، فایل Configuration در مسیر زیر ساخته میشود:
~/.config/oxidized/config
نمونه Configuration برای Cisco:
---
username: oxidized
password: CHANGE_ME
model: ios
interval: 3600
timeout: 20
timelimit: 300
retries: 3
input:
default: ssh
ssh:
secure: true
output:
default: git
git:
user: oxidized
email: oxidized@example.com
repo: /var/lib/oxidized/configs
source:
default: csv
csv:
file: /etc/oxidized/router.db
delimiter: !ruby/regexp /:/
map:
name: 0
model: 1
group: 2
groups:
cisco:
username: oxidized
password: CHANGE_ME
mikrotik:
username: oxidized
vars:
ssh_keys: ~/.ssh/oxidized_routeros
swos:
username: admin
password: CHANGE_ME
vars:
remove_secret: true
output_store_mode: on_significant
log: true
debug: false
threads: 10
اضافه کردن تجهیزات شبکه
لیست تجهیزات را میتوان با فایل CSV مدیریت کرد.
core-sw01:ios:cisco
dist-sw01:ios:cisco
mt-core:routeros:mikrotik
mt-edge:routeros:mikrotik
swos-access:swos:swos
فرمت CSV در این Configuration به شکل name:model:group است. Credentialها باید در config.yml یا Adapter امن Source قرار بگیرند و نباید داخل router.db نوشته شوند.
- name: نام ثابت تجهیز که برای نام فایل Backup و مسیر Git استفاده میشود
- model: نام دقیق Model در Oxidized مانند ios، routeros یا junos
- group: گروهی که Credential و Variableهای اختصاصی Platform را تأمین میکند
Backup از MikroTik RouterOS
مدل رسمی RouterOS از SSH یا Telnet استفاده میکند و اطلاعات سیستم، نسخهٔ Packageها، تاریخچهٔ سیستم و خروجی Configuration را دریافت میکند. در RouterOS 7، اگر remove_secret فعال نباشد، بهصورت پیشفرض از /export show-sensitive استفاده میشود.
- برای تجهیزات MikroTik RouterOS از مدل routeros و برای تجهیزات MikroTik SwOS یا SwOS Lite از مدل swos استفاده کنید.
- Backup مدل RouterOS یک Export متنی است و با فایل Binary حاصل از /system backup save تفاوت دارد.
- با remove_secret: true، Secretها مخفی میشوند. اگر Export حاوی Secret برای بازیابی لازم است، آن را جداگانه و بهصورت رمزنگاریشده نگهداری کنید.
در RouterOS نسخهٔ 7.12 و بالاتر، یک کاربر فقطخواندنی بسازید و بهجای رمز مشترک از کلید ED25519 استفاده کنید:
ssh-keygen -t ed25519 -f ~/.ssh/oxidized_routeros
scp ~/.ssh/oxidized_routeros.pub admin@MIKROTIK_IP:/flash/id_ed25519.pub/user add name=oxidized group=read disabled=no
/user ssh-keys import public-key-file=id_ed25519.pub user=oxidizedورودیهای router.db این راهنما بهصورت زیر هستند:
mt-core:routeros:mikrotik
mt-edge:routeros:mikrotik
swos-access:swos:swosمدل routeros دستور /export را اجرا میکند و فایل Binary Backup میکروتیک نمیسازد. اگر فایل Binary برای Recovery لازم دارید، اجرای /system backup save را جداگانه زمانبندی کنید، آن را مانند یک Secret محافظت کنید و فرایند Restore را تست کنید.
/system backup save name=oxidized-recovery password="USE_A_UNIQUE_SECRET"Backup Binary به فرایند Recovery خود RouterOS وابسته است و جایگزین History متنی و قابل Review نیست. این فایل را جداگانه و در محل رمزنگاریشده با دسترسی محدود نگه دارید و Export متنی Oxidized را برای Diff و Audit در Git ذخیره کنید.
SwOS با RouterOS متفاوت است؛ برای آن از Model به نام swos، Credentialهای HTTP و Port وب تجهیز استفاده کنید. Oxidized Backup سوئیچ را از Endpoint وب SwOS دریافت میکند؛ بنابراین تجهیز SwOS را در گروه routeros قرار ندهید.
پلتفرمها و Modelهای پشتیبانیشده
Oxidized بر پایهٔ Model کار میکند. نام Model در router.db تعیین میکند چه دستورها و Parserی برای هر تجهیز استفاده شود. پشتیبانی و رفتار Modelها ممکن است بین Releaseها تغییر کند؛ پیش از Production فهرست رسمی Supported OS Types و Model Notes را بررسی کنید.
| Platform | Oxidized model | Transport / collected data |
|---|---|---|
| Cisco IOS / IOS-XE | ios | SSH/Telnet and running configuration |
| Cisco ASA / NX-OS | asa / nxos | Use the model matching the OS |
| Cisco IOS-XR / AireOS / UCS / Viptela | iosxr / aireos / ucs / viptela | Use the model matching the product |
| MikroTik RouterOS | routeros | SSH/Telnet, metadata, history and /export |
| MikroTik SwOS / SwOS Lite | swos | HTTP and /backup.swb |
| Juniper JunOS | junos | SSH and JunOS configuration |
| Juniper ScreenOS | screenos | SSH and ScreenOS configuration |
| Arista EOS | eos | SSH and EOS configuration |
| Aruba AOS-CX / AOS-W | aoscx / aosw | SSH and platform CLI |
| HPE ProCurve / Comware | procurve / comware | SSH/Telnet and CLI configuration |
| Huawei VRP | vrp | SSH/Telnet and VRP configuration |
| Dell PowerConnect / OS6 / OS10 | powerconnect / os6 / os10 | SSH and platform CLI |
| Extreme Networks XOS | xos | SSH and XOS configuration |
| Fortinet FortiOS | fortios / fortigate | SSH or supported API model |
| Palo Alto PAN-OS | panos / panos_api | CLI or API, depending on the model |
| F5 TMOS / F5OS | tmos / f5os | SSH and platform commands |
| Ubiquiti EdgeOS / EdgeSwitch / AirOS | edgeos / edgeswitch / airos | SSH and model-specific commands |
| VyOS / Cumulus Linux / Linux | vyos / cumulus / linuxgeneric | SSH and operating-system CLI |
| pfSense / OPNsense / OpenWrt / OpenBSD | pfsense / opnsense / openwrt / openbsd | Model-specific CLI or API |
| TrueNAS / Yamaha / ZTE / Zyxel | truenas / yamaha / zteolt / zynos | Use the exact model for the product family |
- وجود یک Model در فهرست بهمعنای پشتیبانی یکسان از همهٔ Firmwareها و Revisionهای سختافزاری نیست.
- پیش از افزودن Nodeهای بیشتر، یک تجهیز واقعی را تست کنید، خروجی ذخیرهشده را بررسی کنید و مطمئن شوید Secretها افشا نشدهاند.
اتصال Inventory به NetBox
NetBox میتواند منبع Inventory تجهیزات باشد، اما پاسخ API باید فیلدهای موردنیاز Oxidized یعنی name، model، username، password و در صورت نیاز group یا enable را ارائه کند. Source نوع HTTP در Oxidized از یک Object برای هر تجهیز و Pagination پشتیبانی میکند؛ معمولاً ساختن یک Adapter کوچک از اتصال مستقیم به Endpoint بدون Filter امنتر است.
curl --fail --silent \
-H "Authorization: Token $NETBOX_TOKEN" \
"https://netbox.example.com/api/dcim/devices/?status=active"Adapter باید فقط تجهیزات Active و قابل دسترس را برگرداند و Device Type یا Custom Field در NetBox را به Modelهایی مانند ios، routeros یا junos نگاشت کند. Credentialهای NetBox را به Browser، Log یا Endpoint عمومی برنگردانید.
source:
default: http
http:
url: https://inventory.example.com/oxidized/nodes
scheme: https
user: oxidized-source
pass: CHANGE_ME
read_timeout: 120
map:
name: name
model: model
username: username
password: password
vars_map:
enable: enable
pagination: true
pagination_key_name: nextتنظیم Cisco برای Backup
روی تجهیزات Cisco باید دسترسی SSH و User با سطح دسترسی مناسب ایجاد شود.
conf t
username oxidized privilege 15 secret StrongPassword
ip domain-name company.local
crypto key generate rsa modulus 2048
ip ssh version 2
line vty 0 4
transport input ssh
login local
end
write memory
- Privilege 15 برای دریافت کامل Configuration لازم است.
- SSH به Telnet ترجیح داده شود.
- Password مشترک بین همه تجهیزات استفاده نشود.
تست و اعتبارسنجی Backup
بعد از نصب و تنظیم Oxidized باید بررسی کنیم که ارتباط SSH، دریافت Configuration و ذخیره در Git به درستی انجام میشود.
sudo -u oxidized oxidized
در صورت موفقیت باید Log مشابه زیر مشاهده شود:
INFO -- : Configuration completed successfully
INFO -- : Running Oxidized
INFO -- : node core-sw01 completed
بررسی فایل Backup:
ls -la /var/lib/oxidized/configs
cat /var/lib/oxidized/configs/core-sw01
اجرای Oxidized با systemd
Oxidized را با کاربر اختصاصی oxidized اجرا کنید و Configuration و Repository آن را خارج از Web Root نگه دارید. پیش از ساخت Unit، مسیر اجرایی را با command -v oxidized بررسی کنید.
command -v oxidized
sudo install -d -o oxidized -g oxidized /var/lib/oxidized/configs
sudo nano /etc/systemd/system/oxidized.service[Unit]
Description=Oxidized network configuration backup
After=network-online.target
Wants=network-online.target
[Service]
User=oxidized
Group=oxidized
ExecStart=/usr/local/bin/oxidized
Restart=on-failure
RestartSec=10
PrivateTmp=true
NoNewPrivileges=true
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now oxidized
systemctl status oxidized --no-pager
journalctl -u oxidized -n 100 --no-pagerTracking تغییرات Configuration
یکی از مهمترین قابلیتهای Oxidized امکان مشاهده تغییرات Configuration با Git است.
cd /var/lib/oxidized/configs
git log
git diff HEAD~1 HEAD
مثال تغییر:
- interface GigabitEthernet1/0/10 shutdown
+ interface GigabitEthernet1/0/10 no shutdown
بهترین روشهای امنیتی
- برای اتصال به تجهیزات فقط SSH استفاده کنید.
- Telnet را در تجهیزات شبکه غیرفعال کنید.
- User مخصوص Oxidized ایجاد کنید و از Account شخصی استفاده نکنید.
- Passwordها را داخل Repository ذخیره نکنید.
- دسترسی API NetBox را محدود کنید.
- Backup Repository را روی Storage امن نگهداری کنید.
- برای Git Repository دسترسی Read/Write را محدود کنید.
مشکلات رایج Backup Cisco
| Problem | Cause | Solution |
|---|---|---|
| SSH Connection Failed | SSH disabled or RSA key missing | Enable SSH and generate RSA key |
| Permission Denied | Insufficient privilege level | Use privilege 15 user |
| Incomplete Configuration | Wrong Cisco model definition | Change Oxidized model |
| Timeout | Slow device response | Increase timeout value |
| Password Change Required | Credentials expired | Update Oxidized credentials |
عیبیابی
| Error | Check | Solution |
|---|---|---|
| No configuration backup | Oxidized logs | Check SSH connectivity |
| Git commit failed | Repository permission | Fix owner of git directory |
| NetBox devices not imported | API Token | Check Token permission |
| SSH timeout | Network ACL / Firewall | Allow TCP 22 |
journalctl -u oxidized -f
systemctl status oxidized
ssh oxidized@DEVICE-IP
پرسشهای متداول
آیا Oxidized جایگزین Backup Server است؟
خیر. Oxidized فقط برای Backup Configuration تجهیزات شبکه استفاده میشود و جایگزین Backup دیتابیس، VM یا File Backup نیست.
آیا Oxidized از Cisco IOS-XE پشتیبانی میکند؟
بله. مدل Cisco IOS برای اکثر تجهیزات Cisco IOS و IOS-XE استفاده میشود.
چرا Git برای Oxidized مهم است؟
Git باعث میشود تمام تغییرات Configuration به صورت Version ذخیره شود و امکان مشاهده Diff وجود داشته باشد.
آیا میتوان Oxidized را به NetBox متصل کرد؟
بله. با استفاده از NetBox API میتوان لیست تجهیزات را به صورت خودکار دریافت کرد.
آیا Model میکروتیک Backup Binary میسازد؟
خیر. Model به نام routeros یک Export متنی و Metadata ذخیره میکند. اگر فایل Binary برای Recovery لازم است، /system backup save را جداگانه زمانبندی و فایل را مانند Secret محافظت کنید.
چرا Backup خودکار Cisco مهم است؟
زیرا در شبکههای Enterprise تغییرات زیادی روی Switch و Router انجام میشود و بدون Version History امکان تشخیص تغییرات و بازگردانی سریع وجود ندارد.
Is this safe for production?
Use a tested backup, a rollback plan, least privilege, and a controlled validation window.
How do I troubleshoot a timeout?
Check DNS, routing, firewall rules, listening ports, TLS, and service logs from both endpoints.
نتیجهگیری
Oxidized یک راهکار سبک، امن و قدرتمند برای مدیریت Backup Configuration تجهیزات شبکه است. ترکیب Oxidized با Git و NetBox یک معماری استاندارد برای مستندسازی، Automation و مدیریت تغییرات شبکه ایجاد میکند.
منابع رسمی
Prerequisites
Best Practices
- Version-control configuration and review changes.
- Use least privilege and explicit allow-lists.
- Automate repeatable checks and monitor the expected state.
- Test upgrades and restores before production rollout.