مقدمه

وجود فایل config به‌تنهایی قابلیت بازیابی شبکه را اثبات نمی‌کند. Oxidized باید تغییر را ثبت، عدم موفقیت جمع‌آوری را هشدار و restore انتخابی را روی مدل واقعی آزمون کند.

مثال عملی

تیم ۱۲۰ switch و router را هر ساعت poll می‌کند؛ آخرین backup موفق هر node مستقل از سلامت process پایش می‌شود.

پیش‌نیازها

Ubuntu Server 24.04 LTS، Bash 5، systemd؛ package patch را پیش از تغییر با dpkg-query ثبت کنید. Oxidized 0.37.0 با Ruby 3.2 روی Ubuntu 24.04 از RubyGems نصب و نسخه اصلی با --version تثبیت می‌شود؛ dependencyها برای Production در artifact سازمانی ثبت شوند؛ مدل هر device با firmware خودش تست شود.

سخت‌افزار و ظرفیت: پیشنهاد ۲ vCPU، ۴ GiB RAM و دیسک متناسب history؛ تعداد thread با latency تجهیزات و load AAA تعیین شود.

نرم‌افزار و دسترسی: Ruby/Bundler و build dependency؛ حساب سرویس بدون login، credential read-only از vault، TCP/22 فقط به management دستگاه‌ها.

Architecture / Design

Device SSH → model parser → normalized config → bare Git → encrypted off-host copy. secret removal ممکن است recovery را ناقص کند؛ credential و binary backup مستقل نیاز دارند.

Installation / Configuration

نمونه lab روی VM تازه است. مسیر executable با command -v بررسی شود؛ بسته gem مصوب را نصب و نسخه واقعی در manifest ثبت کنید.

sudo apt-get update
sudo apt-get install -y ruby ruby-dev ruby-bundler build-essential libsqlite3-dev libssl-dev pkg-config cmake libssh2-1-dev libicu-dev zlib1g-dev libyaml-dev git
sudo gem install oxidized --version 0.37.0 --no-document
gem list oxidized
command -v oxidized
sudo useradd --system --create-home --home-dir /var/lib/oxidized --shell /usr/sbin/nologin oxidized
sudo install -d -o oxidized -g oxidized -m 700 /var/lib/oxidized/.config/oxidized

پیش از تکرار در Production، نسخه خروجی gem را در deployment pin و artifact آن را نگهداری کنید. config کامل در /var/lib/oxidized/.config/oxidized/config با mode 600 قرار گیرد؛ credential placeholder با secret vault جایگزین شود.

---
username: oxidized
password: REPLACE_WITH_DEVICE_READ_SECRET
model: ios
interval: 3600
timeout: 20
retries: 2
threads: 5
input:
  default: ssh
  ssh:
    secure: true
output:
  default: git
  git:
    user: Oxidized
    email: oxidized@example.com
    repo: /var/lib/oxidized/configs.git
source:
  default: csv
  csv:
    file: /var/lib/oxidized/.config/oxidized/router.db
    delimiter: !ruby/regexp /:/
    map:
      name: 0
      model: 1
vars:
  remove_secret: true

router.db نمونه یک‌خطی: core-sw01.corp.example.com:ios . DNS و SSH host key آن را از مسیر معتبر تأیید کنید؛ flag secure و روش strict verification را با SSH input همان نسخه آزمون منفی کنید. credential read-only باید commands مورد نیاز model را مجاز کند؛ privilege 15 پیش‌فرض ندهید.

sudo -u oxidized env HOME=/var/lib/oxidized /usr/local/bin/oxidized

این foreground test است؛ مسیر binary را با خروجی واقعی جایگزین کنید. پس از یک poll موفق آن را متوقف و unit زیر با همین مسیر واقعی نصب کنید.

[Unit]
Description=Network configuration collection
After=network-online.target
Wants=network-online.target
[Service]
User=oxidized
Group=oxidized
Environment=HOME=/var/lib/oxidized
ExecStart=/usr/local/bin/oxidized
Restart=on-failure
RestartSec=10
UMask=0077
NoNewPrivileges=true
PrivateTmp=true
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now oxidized
sudo -u oxidized git --git-dir=/var/lib/oxidized/configs.git log -1 --oneline
sudo -u oxidized git --git-dir=/var/lib/oxidized/configs.git ls-tree --name-only HEAD

Git output معمولاً bare است؛ cat مسیر فایل داخل repo روش خواندن config نیست. git show HEAD:نام-node بعد از ls-tree محتوای نسخه را نمایش می‌دهد. log موفق باید با node واقعاً جمع‌آوری‌شده تطبیق داشته باشد.

Security Hardening

UI/REST اختیاری روی public IP expose نشود؛ reverse proxy با auth لازم است. Git history می‌تواند secret حذف‌شده قدیمی را نگه دارد؛ encrypted و محدود باشد. read-only model برای RouterOS export یا SwOS باید جدا ارزیابی شود؛ credential گروه‌های مختلف مشترک نباشد.

Monitoring

per-node last successful fetch، duration و failure count پایش شوند. تغییر حساس ACL/routing برای review به ticket وارد شود؛ نه اجرای خودکار. stale بیشتر از دو interval آستانه نمونه است؛ systemd active کافی نیست.

Troubleshooting

node failed: DNS/SSH/AAA و model firmware. bare repo فایل working tree ندارد؛ از git show استفاده کنید. Permission denied روی repo: مالک service و UMask. host key changed: fingerprint از console تطبیق داده شود؛ verification خاموش نشود. خروجی ناقص: command authorization و model parser بررسی شود.

Backup / Recovery

repo، config، node inventory و credential reference به off-host backup رمزنگاری‌شده منتقل شوند. برای restore، commit شناخته‌شده استخراج و روی دستگاه spare همان مدل/نسخه diff و syntax review شود؛ تغییر interface/IP می‌تواند management را قطع کند. Git export شامل private key، license یا binary state کامل نیست؛ backup بومی vendor جدا لازم است.

Best Practices

Restore drill روی مدل واقعی، نگهداری dependency manifest و منع privilege عمومی از شروط بهره‌برداری‌اند. NetBox API خام به قالب source Oxidized تبدیل لازم دارد؛ schema آن‌ها یکسان نیست.

نسخه‌های قدیمی و Compatibility

SwOS/RouterOS/IOS modelها و transport متفاوت دارند. نسخه 0.37.0 baseline این راهنماست؛ dependencyهای transitively resolved نیز باید در artifact/lockfile سازمان تثبیت شوند.

پرسش‌های متداول

چرا فایل config با cat در Git repo پیدا نمی‌شود؟

Git output می‌تواند bare باشد؛ git ls-tree و git show برای خواندن object استفاده شوند.

آیا export برای بازیابی کامل دستگاه کافی است؟

خیر؛ secret، certificate، license و binary state ممکن است جدا نیاز باشند.

منابع رسمی

تاریخ بررسی منابع: 2026-09-30. اعتبارسنجی عملی روی محیط هدف باید پیش از انتشار تغییر زیرساخت انجام شود.

Share