روتری که بکاپ ندارد، با یک آپدیت ناموفق، یک خرابی حافظه یا یک نفوذ، ساعتها کار دوباره میخواهد. خبر خوب این است که میکروتیک همهٔ ابزار بکاپ خودکار را در خودش دارد و با چند خط اسکریپت میشود کاری کرد که هر شب، بدون دخالت شما، یک نسخهٔ تازه بیرون از روتر نگه داشته شود.
backup یا export؟
میکروتیک دو نوع بکاپ دارد و هر کدام کار خودش را میکند:
/system/backup/save | /export | |
|---|---|---|
| قالب | فایل باینری .backup | متن خوانا .rsc |
| بازگردانی | فقط روی همان دستگاه (MAC آدرسها داخلش است) | روی هر دستگاه، با /import یا کپی دستورها |
| رمز کاربرها | دارد | ندارد؛ رمزهای دیگر هم بدون show-sensitive پنهاناند |
| قابل خواندن و مقایسه | نه | بله؛ مناسب گیت |
نتیجه: هر دو را بگیرید. backup برای برگرداندن سریع همان روتر، و export برای دیدن اینکه چه چیزی عوض شده و ساختن دوبارهٔ کانفیگ روی دستگاه دیگر.
بکاپ شبانه با Scheduler
این اسکریپت هر شب ساعت ۳ یک backup رمزدار و یک export میسازد و فایل شب قبل را بازنویسی میکند (همان نمونهٔ مستندات رسمی، با رمز):
/system/script/add name=nightly-backup source={
/system/backup/save name=nightly password="YOUR-BACKUP-PASS"
/export file=nightly
}
/system/scheduler/add name=nightly-backup start-time=03:00:00 interval=1d \
on-event=nightly-backupبا /system/scheduler/print detail ستون next-run و run-count را ببینید تا مطمئن شوید اجرا میشود. ولی بکاپی که فقط روی خود روتر است، با از دست رفتن روتر از دست میرود؛ قدم بعد، بیرون بردن آن است.
ارسال خودکار به ایمیل
اول سرور SMTP را تنظیم کنید. پورت ۵۸۷ با tls=starttls و پورت ۴۶۵ با tls=yes کار میکند و این دو با هم جابهجا نمیشوند:
/tool/e-mail/set server=smtp.example.ir port=587 tls=starttls \
certificate-verification=yes from=router@example.ir \
user=router@example.ir password="SMTP-PASSWORD"بعد اسکریپتی که export را میسازد و میفرستد، و یک Scheduler روزانه:
/system/script/add name=export-email source={
/export file=export
:delay 2s
/tool/e-mail/send to=noc@example.ir file=export.rsc \
subject="$[/system/identity/get name] export" \
body="$[/system/clock/get date] configuration"
}
/system/scheduler/add name=export-email on-event=export-email \
start-time=03:30:00 interval=1d- اگر از Gmail استفاده میکنید، رمز اصلی حساب کار نمیکند؛ باید تأیید دومرحلهای را روشن کنید و یک App password بسازید.
- این export رمزها را ندارد و همین برای ایمیل بهتر است. اگر show-sensitive اضافه کنید، رمزها با ایمیل جابهجا میشوند.
- وضعیت آخرین ارسال در
/tool/e-mail/print(فیلدlast-status) دیده میشود.
روش حرفهای: جمع کردن همهٔ روترها روی یک سرور با گیت
وقتی دهها روتر دارید، ایمیل جواب نمیدهد. روش بهتر این است که یک سرور لینوکس هر شب با SSH به همهٔ روترها وصل شود، export بگیرد و در یک مخزن گیت ذخیره کند. اینطوری هر تغییر کانفیگ، با تاریخ و دقیقاً خطبهخط، در تاریخچه میماند. (اگر با گیت آشنا نیستید، مقالهٔ گیتهاب و گیتلب را ببینید.)
۱. روی هر روتر یک کاربر مخصوص بکاپ با کمترین دسترسی لازم و ورود فقط با کلید، و محدود به IP سرور بکاپ:
/user/group/add name=backup policy=ssh,read,sensitive
/user/add name=backup group=backup address=192.0.2.50/32 \
password="LONG-RANDOM-PASS"
# upload backup.pub to the router (WinBox Files or SFTP), then:
/user/ssh-keys/import public-key-file=backup.pub user=backupوقتی برای کاربری کلید SSH ثبت شود، ورود SSH با رمز برای آن کاربر بسته میشود.
۲. روی سرور لینوکس کلید را بسازید و اسکریپت را بنویسید:
ssh-keygen -t ed25519 -f ~/.ssh/mikrotik_backup -N ""
# RouterOS 6 only accepts RSA keys: ssh-keygen -t rsa -b 4096 ...
mkdir -p ~/mt-configs && cd ~/mt-configs && git init#!/bin/sh
# ~/mt-configs/pull.sh : one router per line in routers.txt (name address)
cd ~/mt-configs || exit 1
while read -r name addr; do
[ -z "$name" ] && continue
ssh -n -i ~/.ssh/mikrotik_backup -o ConnectTimeout=15 \
backup@"$addr" "/export show-sensitive" \
| grep -v '^# .* by RouterOS' > "$name.rsc.tmp" \
&& [ -s "$name.rsc.tmp" ] && mv "$name.rsc.tmp" "$name.rsc" \
|| { echo "FAILED: $name"; rm -f "$name.rsc.tmp"; }
done < routers.txt
git add -A && git commit -q -m "nightly $(date +%F)" || true- خط
grep -v '^# .* by RouterOS'سطر اول export را که تاریخ و ساعت دارد حذف میکند؛ وگرنه گیت هر شب یک «تغییر» بیمعنی ثبت میکند. - بار اول یک بار دستی با
sshبه هر روتر وصل شوید تا کلید میزبان (host key) آن ثبت شود. - با cron هر شب اجرایش کنید:
30 3 * * * /bin/sh ~/mt-configs/pull.sh - برای دیدن تغییرات دیروز:
git log -p -1 -- core-router.rsc
بکاپی که تست نشده، بکاپ نیست
- هر چند ماه یک بار export یک روتر را روی یک دستگاه یدک یا یک CHR مجازی import کنید و ببینید بالا میآید.
- بازگردانی backup باینری:
/system/backup/load name=nightly password="..."؛ روی همان نسخهٔ RouterOS که بکاپ با آن گرفته شده. - بکاپ روتری که هک شده را برنگردانید؛ ممکن است همان کاربر یا اسکریپت مخرب را هم برگرداند. در مقالهٔ پاکسازی روتر هکشده توضیح دادهایم چرا.
منابع
- MikroTik Manual — Backup manual.mikrotik.com/docs/getting-started/configuration-management/backup
- MikroTik Manual — Configuration export manual.mikrotik.com/docs/getting-started/configuration-management
- MikroTik Manual — Scheduler manual.mikrotik.com/docs/system-information-and-utilities/scheduler
- MikroTik Manual — Email manual.mikrotik.com/docs/system-information-and-utilities/e-mail