1. บทนำ
การสำรองข้อมูล (Backup) ของ MikroTik RouterOS เป็นสิ่งสำคัญมากสำหรับผู้ดูแลระบบเครือข่าย ไม่ว่าจะเป็นองค์กรขนาดเล็กหรือใหญ่ การสูญเสียการตั้งค่าของ Router อาจส่งผลให้ระบบเครือข่ายทั้งหมดหยุดทำงาน ทำให้เกิดความเสียหายอย่างมหาศาล
บทความนี้จะพาคุณเรียนรู้เทคนิคการสำรองข้อมูล MikroTik อย่างครบถ้วน ตั้งแต่คำสั่งพื้นฐานไปจนถึงการใช้ Open Source Tools และ Scripting เพื่อทำให้กระบวนการ Backup เป็นอัตโนมัติ
ภาพรวมระบบ Backup
สิ่งที่คุณจะได้เรียนรู้
2. Built-in Backup Commands
RouterOS มีคำสั่ง Backup ในตัวอยู่แล้ว 2 ประเภทหลัก คือ /system backup (Binary Backup) และ /export (Configuration Export)
2.1 Binary Backup (/system backup)
Binary Backup สร้างไฟล์สำรองข้อมูลแบบสมบูรณ์ สามารถกู้คืนได้บนอุปกรณ์เครื่องเดียวกันเท่านั้น และควรใช้ RouterOS เวอร์ชันเดียวกัน
# สร้าง Binary Backup พร้อมรหัสผ่าน (แนะนำ)
/system backup save name=mybackup password=YourStrongPassword
# สร้าง Binary Backup ไม่มีรหัสผ่าน
/system backup save name=mybackup dont-encrypt=yes
# กู้คืนจาก Binary Backup
/system backup load name=mybackup password=YourStrongPassword
# ดูไฟล์ Backup ทั้งหมด
/file print where type=backup
| Property | Description |
|---|---|
| name | ชื่อไฟล์ (default: [identity]-[date]-[time].backup) |
| password | รหัสผ่านสำหรับเข้ารหัส (ตั้งแต่ v6.43) |
| encryption | Algorithm: aes-sha256 (default) หรือ rc4 (legacy) |
2.2 Configuration Export (/export)
Export สร้างไฟล์ Configuration ในรูปแบบ Text (RSC) ที่อ่านได้ เหมาะสำหรับการย้าย Configuration ระหว่างเวอร์ชันหรืออุปกรณ์
# Export แบบ Compact (แนะนำ ตั้งแต่ RouterOS 5.x+)
/export compact file=myconfig
# Export แบบ Verbose (แสดงค่า default ทั้งหมด)
/export verbose file=myconfig
# Export โดยซ่อนข้อมูล sensitive (password, secrets)
/export hide-sensitive file=myconfig
# Export เฉพาะส่วน เช่น Firewall
/ip firewall filter export file=firewall-rules
ข้อควรระวัง
- • Binary Backup มี MAC Address อยู่ด้วย - กู้คืนได้บนเครื่องเดียวกันเท่านั้น
- • ควรกู้คืนบน RouterOS เวอร์ชันเดียวกันเท่านั้น
- • ไฟล์ Backup มีข้อมูล sensitive - ต้องเก็บรหัสผ่านอย่างปลอดภัย
- • Binary Backup ไม่รวม The Dude หรือ User Manager
3. Backup Scripts
3.1 Python Backup Script (แนะนำ)
Python Script ที่รองรับหลายอุปกรณ์ มี SSH Key Authentication และจัดการ Retention Policy อัตโนมัติ
#!/usr/bin/env python3
"""
MikroTik RouterOS Backup Script
Requires: pip install paramiko scp
"""
import paramiko
from scp import SCPClient
from datetime import datetime
import os
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
class MikrotikBackup:
def __init__(self, host, username, password=None, key_file=None, port=22):
self.host = host
self.username = username
self.password = password
self.key_file = key_file
self.port = port
self.client = None
def connect(self):
"""Establish SSH connection to MikroTik device"""
self.client = paramiko.SSHClient()
self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
if self.key_file:
private_key = paramiko.RSAKey.from_private_key_file(self.key_file)
self.client.connect(
hostname=self.host,
port=self.port,
username=self.username,
pkey=private_key,
timeout=30
)
else:
self.client.connect(
hostname=self.host,
port=self.port,
username=self.username,
password=self.password,
timeout=30
)
logger.info(f"Connected to {self.host}")
def disconnect(self):
"""Close SSH connection"""
if self.client:
self.client.close()
def create_backup(self, backup_password=None):
"""Create binary backup and export configuration"""
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
identity = self._run_command("/system identity get name").strip()
backup_name = f"{identity}_{timestamp}"
# Create binary backup
if backup_password:
cmd = f'/system backup save name="{backup_name}" password="{backup_password}"'
else:
cmd = f'/system backup save name="{backup_name}"'
self._run_command(cmd)
# Create config export
self._run_command(f'/export compact file="{backup_name}_config"')
import time
time.sleep(5) # Wait for files
return backup_name
def download_backup(self, backup_name, local_dir="./backups"):
"""Download backup files via SCP"""
os.makedirs(local_dir, exist_ok=True)
with SCPClient(self.client.get_transport()) as scp:
scp.get(f"{backup_name}.backup", local_dir)
scp.get(f"{backup_name}_config.rsc", local_dir)
logger.info(f"Downloaded backup to {local_dir}")
def _run_command(self, command):
stdin, stdout, stderr = self.client.exec_command(command, timeout=60)
return stdout.read().decode('utf-8')
# Usage
if __name__ == "__main__":
backup = MikrotikBackup(
host="192.168.88.1",
username="admin",
password="yourpassword"
)
backup.connect()
backup_name = backup.create_backup(backup_password="SecurePassword123")
backup.download_backup(backup_name, "/backups/mikrotik")
backup.disconnect()
Tip: ใช้ SSH Key แทน Password
แนะนำให้ใช้ SSH Key Authentication แทน Password เพื่อความปลอดภัยที่สูงขึ้น
โดยสร้าง Key ด้วย ssh-keygen -t rsa -b 4096
และนำ Public Key ไป Import ใน MikroTik
3.2 Bash Script (Simple & Fast)
Bash Script สำหรับ Backup หลาย Router พร้อมกัน ใช้ SSH Config และ Key Authentication
#!/bin/bash
#
# MikroTik RouterOS Backup Script
# Requires: SSH access with key authentication
#
# Configuration
ROUTERS=("192.168.88.1" "192.168.88.2" "192.168.88.3")
SSH_USER="admin"
SSH_PORT="22"
BACKUP_DIR="/backups/mikrotik"
BACKUP_PASSWORD="YourSecurePassword"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
# Create backup directory
mkdir -p "$BACKUP_DIR"
for ROUTER in "${ROUTERS[@]}"; do
echo "========================================="
echo "Processing router: $ROUTER"
echo "========================================="
ROUTER_BACKUP_DIR="$BACKUP_DIR/$ROUTER"
mkdir -p "$ROUTER_BACKUP_DIR"
BACKUP_NAME="${ROUTER}_${TIMESTAMP}"
# Create backups via SSH
ssh -p $SSH_PORT $SSH_USER@$ROUTER "/system backup save name=$BACKUP_NAME password=$BACKUP_PASSWORD"
ssh -p $SSH_PORT $SSH_USER@$ROUTER "/export compact file=${BACKUP_NAME}_config"
sleep 5 # Wait for file creation
# Download files
scp -P $SSH_PORT $SSH_USER@$ROUTER:${BACKUP_NAME}.backup "$ROUTER_BACKUP_DIR/"
scp -P $SSH_PORT $SSH_USER@$ROUTER:${BACKUP_NAME}_config.rsc "$ROUTER_BACKUP_DIR/"
# Cleanup remote files
ssh -p $SSH_PORT $SSH_USER@$ROUTER "/file remove ${BACKUP_NAME}.backup"
ssh -p $SSH_PORT $SSH_USER@$ROUTER "/file remove ${BACKUP_NAME}_config.rsc"
echo "Backup completed: $BACKUP_NAME"
echo ""
done
# Cleanup old backups (keep last 30 days)
find "$BACKUP_DIR" -name "*.backup" -mtime +30 -delete
find "$BACKUP_DIR" -name "*.rsc" -mtime +30 -delete
echo "All backups completed!"
3.3 RouterOS Native Script (Email/FTP)
Script ที่รันบน MikroTik โดยตรง ส่ง Backup ผ่าน Email หรือ FTP อัตโนมัติ
# Configure email settings first
/tool e-mail set address=smtp.yourprovider.com port=587 \
from=mikrotik@yourdomain.com user=youruser password=yourpassword \
tls=starttls
# Create backup script
/system script add name="auto-backup" source={
:local date [/system clock get date]
:local time [/system clock get time]
:local identity [/system identity get name]
:local backupfile ("backup-" . $identity . "-" . $date)
# Create binary backup
/system backup save name=$backupfile password="YourPassword"
# Create export file
/export compact file=($backupfile . "-export")
# Wait for files
:delay 5s
# Send backup via email
/tool e-mail send to="admin@yourdomain.com" \
subject=("Backup: " . $identity . " " . $date) \
body=("Backup created on " . $date . " at " . $time) \
file=($backupfile . ".backup," . $backupfile . "-export.rsc")
:log info "Backup sent via email"
}
# Schedule daily backup at 3:00 AM
/system scheduler add name="daily-backup" \
start-time=03:00:00 interval=1d \
on-event="/system script run auto-backup"
3.4 Ansible Playbook
Ansible Playbook สำหรับ Backup หลาย Router พร้อม Version Control
---
- name: Backup MikroTik RouterOS Configurations
hosts: mikrotik_routers
gather_facts: no
vars:
backup_dir: /backups/mikrotik
backup_password: "{{ vault_backup_password }}"
tasks:
- name: Create backup directory
file:
path: "{{ backup_dir }}/{{ inventory_hostname }}"
state: directory
mode: '0750'
delegate_to: localhost
- name: Create binary backup
community.routeros.command:
commands:
- "/system backup save name=ansible_backup password={{ backup_password }}"
register: backup_result
- name: Create configuration export
community.routeros.command:
commands:
- "/export compact file=ansible_backup_config hide-sensitive"
- name: Wait for backup creation
pause:
seconds: 10
- name: Fetch backup files
ansible.builtin.fetch:
src: "{{ item }}"
dest: "{{ backup_dir }}/{{ inventory_hostname }}/"
flat: yes
loop:
- ansible_backup.backup
- ansible_backup_config.rsc
- name: Cleanup remote backup files
community.routeros.command:
commands:
- "/file remove ansible_backup.backup"
- "/file remove ansible_backup_config.rsc"
ignore_errors: yes
4. Open Source Tools
นอกจาก Script ที่เขียนเองแล้ว ยังมี Open Source Tools หลายตัวที่ช่วยให้การ Backup MikroTik เป็นเรื่องง่าย ด้านล่างนี้คือ Tools ที่แนะนำจาก GitHub
rosbak
Python CLI Tool
เครื่องมือ Backup แบบ Command Line รองรับ YAML Config สำหรับหลายอุปกรณ์
pip install rosbak
rosdump
Go-based Tool
Backup ไปยัง Git Repository โดยตรง รองรับ Docker Deployment
github.com/ecadlabs/rosdump
routeros-scripts
RouterOS Scripts Collection
ชุด Script สำเร็จรูปสำหรับ RouterOS 7.15+ รองรับ Cloud, Email, FTP Backup
github.com/eworm-de/routeros-scripts
mikrotik-ssh-backup
Python SSH Backup
ใช้ SSH Key Authentication เท่านั้น รองรับ YAML Config หลาย Router
github.com/ondras12345/mikrotik-ssh-backup
Oxidized
Network Config Management
ระบบจัดการ Configuration ของ Network Device หลายยี่ห้อ รองรับ MikroTik
github.com/ytti/oxidized
Auto Backup & Update
RouterOS Script
Backup อัตโนมัติ + อัปเดต RouterOS พร้อม Email Notification
github.com/beeyev/Mikrotik-RouterOS-automatic-backup-and-update
เปรียบเทียบ Tools
| Tool | Language | Best For | Git Support |
|---|---|---|---|
| rosbak | Python | CLI Backup | ❌ |
| rosdump | Go | Git Integration | ✅ |
| routeros-scripts | RouterOS | Native Scripts | ❌ |
| Oxidized | Ruby | Multi-Vendor | ✅ |
5. Best Practices
Security Best Practices
-
ใช้ SSH Key Authentication
สร้าง Key ด้วย ssh-keygen และ Import เข้า MikroTik
-
สร้าง Dedicated Backup User
แยก User สำหรับ Backup ไม่ใช้ admin
-
เข้ารหัส Backup Files
ใช้ password สำหรับ Binary Backup เสมอ
-
จำกัด SSH Access
ใช้ Firewall Rule จำกัด IP ที่เข้าถึงได้
Operational Best Practices
-
3-2-1 Backup Rule
3 copies, 2 storage types, 1 offsite
-
ทดสอบ Restore สม่ำเสมอ
อย่างน้อย 3 เดือนครั้ง
-
Retention Policy
Daily: 7 days, Weekly: 4 weeks, Monthly: 12 months
-
Naming Convention
[hostname]_[date]_[type].[ext]
สร้าง Dedicated Backup User
# สร้าง Group สำหรับ Backup User (RouterOS v7)
/user group add name=backup policy=ssh,read,ftp,sensitive
# สร้าง Backup User
/user add name=backupuser group=backup password=ComplexPassword123!
# Import SSH Public Key (แนะนำ)
/user ssh-keys import public-key-file=id_rsa.pub user=backupuser
# จำกัด SSH Access ด้วย Firewall
/ip firewall address-list add list=backup-servers address=192.168.1.100
/ip firewall filter add chain=input protocol=tcp dst-port=22 \
src-address-list=backup-servers action=accept comment="Allow SSH from backup server"
6. แก้ไขปัญหาที่พบบ่อย
SSH Connection Timeout
Connection hangs หรือได้รับ "Connection timed out" error
# เพิ่ม SSH Timeout
ssh -o ConnectTimeout=60 -o ServerAliveInterval=30 admin@router
# ตรวจสอบ Firewall Rules
/ip firewall filter print chain=input
# ตรวจสอบ SSH Service
/ip service print where name=ssh
SSH Host Key Verification Failed
เจอข้อความ "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!"
# ลบ Key เก่า
ssh-keygen -R 192.168.88.1
# หรือปิด Strict Checking (น้อยกว่าปลอดภัย)
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null admin@router
Permission Denied on Download
ไม่สามารถ Download ไฟล์ Backup ได้
# ตรวจสอบ User Permissions
/user print
/user group print
# เพิ่ม Policy ที่จำเป็น
/user group set backup policy=ssh,read,ftp,sensitive
# หรือใช้ SFTP แทน SCP
sftp admin@router:backup.backup ./local/
Cross-Version Restore Issues
Backup จาก v6 กู้คืนบน v7 ไม่ได้ หรือมี Configuration Errors
Solution
- • ใช้
/exportแทน Binary Backup สำหรับ Migration - • ตรวจสอบ Configuration ก่อน Restore
- • ทดสอบบน RouterOS เวอร์ชันเดียวกันก่อน
7. สรุป
การสำรองข้อมูล MikroTik RouterOS เป็นสิ่งจำเป็นสำหรับผู้ดูแลระบบเครือข่ายทุกคน ด้วยเครื่องมือและเทคนิคที่กล่าวมา คุณสามารถสร้างระบบ Backup ที่เชื่อถือได้และปลอดภัย
Stack ที่แนะนำ
- • Bash Script + Cron
- • Local Storage
- • Email Notification
- • Python Script
- • Git Repository
- • Telegram Notification
- • Oxidized / rosdump
- • Git + Multi-Region
- • Monitoring Integration