Linux 到群晖 NAS:基于 Cloudflare 隧道与 Rclone 的自动化异地容灾备份方案

Linux 到群晖 NAS:基于 Cloudflare 隧道与 Rclone 的自动化异地容灾备份方案

🛡️ IP-Sentinel 中枢司令部:暗网级异地容灾系统 SOP 手册 (v1.0)

📑 架构概述 (Architecture Overview)

本系统采用 “本地快照打包 + Cloudflare Zero Trust 加密隧道 + 群晖 WebDAV 接收 + Rclone 状态同步” 架构。 实现主控服务器每日凌晨 3:00 自动打包核心数据,静默穿透公网,精准投递至群晖 NAS。全链路零端口暴露,自动执行 7 天快照滚动销毁与 30 天日志轮转压缩。


🛠️ 第一阶段:接收端基建整备 (群晖 NAS & CF 隧道)

1. NAS 共享军械库建立与权限下放 (极其关键)

  • 创建目录:登录群晖 DSM,在 控制面板 -> 共享文件夹 中新建名为 ipSentinel 的文件夹。
  • 权限赋予:右键 ipSentinel -> 编辑 -> 权限,确保执行备份的账号(如 admin_nas)拥有 可读写 (Read/Write) 权限。
  • 安装套件:在群晖“套件中心”安装并启动 WebDAV Server
  • 开启端口:打开 WebDAV Server,勾选“启用 HTTP”(默认端口 5005)。
  • 应用授权:在群晖 控制面板 -> 应用程序权限 (或用户群组-应用程序) 中,确保该备份账号被勾选允许使用 WebDAV Server

2. Cloudflare 零信任加密隧道贯通

  • 登录 Cloudflare Zero Trust 面板。
  • 进入 Access -> Tunnels,配置群晖所在的隧道。
  • 添加 Public Hostname
    • Subdomain: backup (自定义)
    • Domain: yourdomain.com (您的域名)
    • Service Type: HTTP
    • URL: 内网IP:5005 (例如 192.168.1.100:5005)

🚀 第二阶段:主控端引擎换装 (Linux 司令部)

1. 部署 Rclone 核心同步引擎

在 Linux 主控机终端执行一键安装:

Bash

Bash
curl https://rclone.org/install.sh | sudo bash

2. 交互式对接 WebDAV 隧道

执行 rclone config,按以下参数完成配置:

  • n (新建 remote)
  • name: nas_backup (必须与后续脚本中的变量一致)
  • Storage: 选择 webdav
  • url: https://backup.yourdomain.com (填入您在 CF 配置的完整域名)
  • vendor: 选择 Other
  • user: 输入群晖账号 (如 admin_nas)
  • password: 选择 y,然后输入群晖密码
  • bearer_token: 回车跳过
  • 一路回车至结束,按 q 退出。

3. 雷达校准测试 (防空放炮验证)

执行探测命令,验证隧道连通性及 NAS 权限:

Bash

Bash
rclone lsd nas_backup:

✅ 成功标志:输出列表中必须包含 ipSentinel 文件夹。 (排障:如果报 403 或看不到目标文件夹,必须返回第一阶段复查群晖共享文件夹的“读写权限”及 WebDAV 的“应用权限”。)


⚙️ 第三阶段:容灾核心脚本注入

1. 创建并写入主控脚本

Bash

Bash
mkdir -p /opt/backup_scripts
nano /opt/backup_scripts/disaster_recovery.sh

将以下终极版战术代码完整粘贴进去:

Bash

Bash
#!/bin/bash
# ==========================================================
# 脚本名称: disaster_recovery.sh (IP-Sentinel 异地容灾系统 - 隧道版)
# 核心功能: 每日快照打包、7天滚动销毁、Rclone HTTPS 加密投递
# ==========================================================

# --- [1. 战区配置参数] ---
SOURCE_DIR="/opt/ip_sentinel_master"  
LOCAL_BACKUP_DIR="/opt/backup_archives"  
# Rclone 配置文件中的命名
RCLONE_REMOTE="nas_backup"
# 群晖上已授权可读写的实际共享文件夹名称
NAS_TARGET_DIR="/ipSentinel"  

# ----------------------------------------------------------

DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$LOCAL_BACKUP_DIR"

echo "[$(date '+%Y-%m-%d %H:%M:%S')] 🚀 隧道版异地容灾程序启动..."

# 1. 安全快照打包
ARCHIVE_NAME="master_snapshot_${DATE}.tar.gz"
echo "📦 正在生成当日司令部数据快照: $ARCHIVE_NAME"
tar -czf "${LOCAL_BACKUP_DIR}/${ARCHIVE_NAME}" -C $(dirname "$SOURCE_DIR") $(basename "$SOURCE_DIR") > /dev/null 2>&1

# 2. 本地滚动销毁 (严格保留 7 天)
echo "🧹 正在肃清本地 7 天前的历史快照..."
find "$LOCAL_BACKUP_DIR" -name "master_snapshot_*.tar.gz" -type f -mtime +7 -exec rm -f {} \;

# 3. Rclone 隧道镜像投递 (Sync 同步模式)
echo "📡 正在通过 Cloudflare 加密隧道投递至群晖阵列..."
rclone sync "${LOCAL_BACKUP_DIR}/" "${RCLONE_REMOTE}:${NAS_TARGET_DIR}/" > /dev/null 2>&1

if [ $? -eq 0 ]; then
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] ✅ 容灾快照已安全穿透 CF 隧道,着陆于群晖 NAS!"
else
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] ❌ 隧道传输受阻,请检查 Rclone 配置或 CF 隧道状态!"
fi

2. 解除系统保险 (赋予执行权)

Bash

Bash
chmod +x /opt/backup_scripts/disaster_recovery.sh

⏰ 第四阶段:自动化巡航与自净系统部署

1. 强制注入系统级定时任务 (Cron)

一键挂载至系统,每天凌晨 03:00 准时起飞:

Bash

Bash
(crontab -l 2>/dev/null; echo "0 3 * * * /bin/bash /opt/backup_scripts/disaster_recovery.sh >> /var/log/sentinel_backup.log 2>&1") | crontab -

2. 挂载日志轮转自洁系统 (Logrotate)

防止日志无限膨胀,严格控制为 30 天生命周期,自动压缩:

Bash

Bash
cat > /etc/logrotate.d/sentinel_backup << 'EOF'
/var/log/sentinel_backup.log {
    daily
    rotate 30
    missingok
    notifempty
    copytruncate
    compress
    delaycompress
}
EOF

🚑 第五阶段:战备恢复协议 (Disaster Recovery Protocol)

当司令部遭遇物理毁灭或数据清空时,请立即启动此协议进行“满血复活”:

  1. 提取火种:登录群晖 NAS,进入 ipSentinel 文件夹,下载最新的一份 master_snapshot_XXXXXXXX.tar.gz 压缩包。
  2. 转移阵地:将压缩包通过 SSH 或 SFTP 上传至新 Linux 司令部的 /opt/ 目录下。
  3. 浴火重生:在新服务器终端执行解压指令:Bashtar -xzf /opt/master_snapshot_XXXXXXXX_XXXXXX.tar.gz -C /opt/
  4. 全线唤醒:解压完毕后,原有的 /opt/ip_sentinel_master 目录将原样恢复(包括所有的密钥、配置、数据库),重新启动主控进程,全球所有探针节点将自动无缝接管回援!

[SOP 归档完毕 – IP-Sentinel 容灾基建组]

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注