مقدمه

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

Network Architecture


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 را نصب می‌کنیم.

Ubuntu Terminal


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

Ubuntu Terminal


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:

config.yml
---
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 مدیریت کرد.

router.db


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 را تست کنید.

Optional binary recovery backup
/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 را بررسی کنید.

PlatformOxidized modelTransport / collected data
Cisco IOS / IOS-XEiosSSH/Telnet and running configuration
Cisco ASA / NX-OSasa / nxosUse the model matching the OS
Cisco IOS-XR / AireOS / UCS / Viptelaiosxr / aireos / ucs / viptelaUse the model matching the product
MikroTik RouterOSrouterosSSH/Telnet, metadata, history and /export
MikroTik SwOS / SwOS LiteswosHTTP and /backup.swb
Juniper JunOSjunosSSH and JunOS configuration
Juniper ScreenOSscreenosSSH and ScreenOS configuration
Arista EOSeosSSH and EOS configuration
Aruba AOS-CX / AOS-Waoscx / aoswSSH and platform CLI
HPE ProCurve / Comwareprocurve / comwareSSH/Telnet and CLI configuration
Huawei VRPvrpSSH/Telnet and VRP configuration
Dell PowerConnect / OS6 / OS10powerconnect / os6 / os10SSH and platform CLI
Extreme Networks XOSxosSSH and XOS configuration
Fortinet FortiOSfortios / fortigateSSH or supported API model
Palo Alto PAN-OSpanos / panos_apiCLI or API, depending on the model
F5 TMOS / F5OStmos / f5osSSH and platform commands
Ubiquiti EdgeOS / EdgeSwitch / AirOSedgeos / edgeswitch / airosSSH and model-specific commands
VyOS / Cumulus Linux / Linuxvyos / cumulus / linuxgenericSSH and operating-system CLI
pfSense / OPNsense / OpenWrt / OpenBSDpfsense / opnsense / openwrt / openbsdModel-specific CLI or API
TrueNAS / Yamaha / ZTE / Zyxeltruenas / yamaha / zteolt / zynosUse 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 امن‌تر است.

NetBox API check
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 عمومی برنگردانید.

Oxidized HTTP source
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 با سطح دسترسی مناسب ایجاد شود.

Cisco IOS


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 به درستی انجام می‌شود.

Ubuntu Terminal



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.target
sudo systemctl daemon-reload
sudo systemctl enable --now oxidized
systemctl status oxidized --no-pager
journalctl -u oxidized -n 100 --no-pager

Tracking تغییرات 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
Debug Commands



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

Use a supported release, a tested backup, administrative access, a maintenance window when required, and a rollback plan. Validate DNS, time synchronization, firewall rules, storage, and monitoring before implementation.

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.

Official References

Share