Updated Feb 2026

เทคนิคสำรองข้อมูล MikroTik

Script + Open Source Tools สำรองข้อมูล RouterOS แบบอัตโนมัติ

คู่มือฉบับสมบูรณ์! เรียนรู้การใช้ Python, Bash, Ansible และ GitHub Projects เพื่อสำรองข้อมูล MikroTik แบบมืออาชีพ

MikroTik
Python
Bash
Ansible
GitHub

1. บทนำ

การสำรองข้อมูล (Backup) ของ MikroTik RouterOS เป็นสิ่งสำคัญมากสำหรับผู้ดูแลระบบเครือข่าย ไม่ว่าจะเป็นองค์กรขนาดเล็กหรือใหญ่ การสูญเสียการตั้งค่าของ Router อาจส่งผลให้ระบบเครือข่ายทั้งหมดหยุดทำงาน ทำให้เกิดความเสียหายอย่างมหาศาล

บทความนี้จะพาคุณเรียนรู้เทคนิคการสำรองข้อมูล MikroTik อย่างครบถ้วน ตั้งแต่คำสั่งพื้นฐานไปจนถึงการใช้ Open Source Tools และ Scripting เพื่อทำให้กระบวนการ Backup เป็นอัตโนมัติ

ภาพรวมระบบ Backup

Router 1 192.168.88.1 Core Router Router 2 192.168.88.2 Edge Router Backup Server Ubuntu Linux Python Bash Local Storage /backups/mikrotik Git Repository Version Control Cloud Storage AWS S3 / FTP SSH/SCP MikroTik Backup Architecture - Centralized Automated Backup System

สิ่งที่คุณจะได้เรียนรู้

คำสั่ง Backup พื้นฐานของ RouterOS
สร้าง Script Backup ด้วย Python
ใช้ Bash Script สำหรับ Backup อัตโนมัติ
Open Source Tools 7 ตัวที่แนะนำ
Best Practices ด้าน Security
การแก้ไขปัญหาที่พบบ่อย

2. Built-in Backup Commands

RouterOS มีคำสั่ง Backup ในตัวอยู่แล้ว 2 ประเภทหลัก คือ /system backup (Binary Backup) และ /export (Configuration Export)

2.1 Binary Backup (/system backup)

Binary Backup สร้างไฟล์สำรองข้อมูลแบบสมบูรณ์ สามารถกู้คืนได้บนอุปกรณ์เครื่องเดียวกันเท่านั้น และควรใช้ RouterOS เวอร์ชันเดียวกัน

RouterOS - Binary Backup Commands
# สร้าง 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 ระหว่างเวอร์ชันหรืออุปกรณ์

RouterOS - Export Commands
# 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 อัตโนมัติ

mikrotik_backup.py
#!/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

mikrotik-backup.sh
#!/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 อัตโนมัติ

RouterOS Auto Backup Script
# 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

mikrotik-backup.yml
---
- 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 สำหรับหลายอุปกรณ์

SSH/SCP YAML Config Export
pip install rosbak

rosdump

Go-based Tool

Backup ไปยัง Git Repository โดยตรง รองรับ Docker Deployment

Git Integration Docker Daemon Mode
github.com/ecadlabs/rosdump

routeros-scripts

RouterOS Scripts Collection

ชุด Script สำเร็จรูปสำหรับ RouterOS 7.15+ รองรับ Cloud, Email, FTP Backup

Cloud Backup Telegram Email
github.com/eworm-de/routeros-scripts

mikrotik-ssh-backup

Python SSH Backup

ใช้ SSH Key Authentication เท่านั้น รองรับ YAML Config หลาย Router

SSH Key Only YAML Timestamp
github.com/ondras12345/mikrotik-ssh-backup

Oxidized

Network Config Management

ระบบจัดการ Configuration ของ Network Device หลายยี่ห้อ รองรับ MikroTik

Multi-Vendor Web UI Git Backend
github.com/ytti/oxidized

Auto Backup & Update

RouterOS Script

Backup อัตโนมัติ + อัปเดต RouterOS พร้อม Email Notification

Auto Update Email Firmware
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

RouterOS - Create 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

Solutions
# เพิ่ม 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!"

Solutions
# ลบ 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 ได้

Solutions
# ตรวจสอบ 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 ที่แนะนำ

Small Network
  • • Bash Script + Cron
  • • Local Storage
  • • Email Notification
Medium Network
  • • Python Script
  • • Git Repository
  • • Telegram Notification
Enterprise
  • • Oxidized / rosdump
  • • Git + Multi-Region
  • • Monitoring Integration

ลิงก์ที่เป็นประโยชน์