Tự xây dựng hệ thống Backup Offsite: Cách tôi tạo kho lưu trữ 4TB bảo mật với Raspberry Pi và WireGuard

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

Bảo vệ dữ liệu trước những rủi ro thực tế

Hầu hết chúng ta bắt đầu hành trình HomeLab với một máy chủ đơn lẻ hoặc một thiết bị NAS đặt dưới bàn làm việc. Chúng ta thiết lập RAID, chạy sao lưu (backup) cục bộ vào ổ cứng ngoài và yên tâm đi ngủ. Tuy nhiên, RAID không phải là một giải pháp sao lưu (backup). Nếu một đường ống nước bị vỡ, bếp bị hỏa hoạn, hoặc kẻ trộm dọn sạch văn phòng của bạn, việc dự phòng cục bộ sẽ trở nên vô nghĩa. Để sống sót qua một thảm họa vật lý tại hiện trường, bạn cần để dữ liệu của mình ở một nơi khác.

Tôi muốn một giải pháp tiết kiệm điện (tiêu thụ dưới 10W), được mã hóa hoàn toàn và không tốn 20 USD mỗi tháng cho các nhà cung cấp đám mây để lưu trữ vài terabyte dữ liệu. Thay vào đó, tôi đã xây dựng một nút sao lưu chuyên dụng bằng Raspberry Pi 4 và ổ cứng ngoài 4TB. Tôi đặt nó tại nhà một người bạn và kết nối với nhà mình thông qua đường hầm WireGuard bảo mật. Thiết lập này đã hoạt động bền bỉ trong hơn 14 tháng qua.

Kiến trúc hệ thống

Dưới đây là cái nhìn tổng quan về hệ thống:

  • Site A (Nguồn): HomeLab chính của bạn. Đây có thể là một nút Proxmox hoặc một thiết bị Synology NAS chạy trình khách sao lưu.
  • Site B (Đích): Một chiếc Raspberry Pi kèm ổ cứng HDD ngoài đặt tại một địa chỉ vật lý khác.
  • Kết nối: Một đường hầm VPN WireGuard tạo ra liên kết “nội bộ” riêng tư giữa hai địa điểm, ngay cả khi cả hai đều nằm sau NAT nghiêm ngặt.
  • Phần mềm: Chúng ta sử dụng restic. Nó xử lý việc mã hóa và khử trùng lặp (deduplication) để bạn chỉ phải gửi các khối dữ liệu đã thay đổi.

Quy trình làm việc rất đơn giản. Site A khởi tạo kết nối đến Site B thông qua WireGuard. Khi đường hầm đã thiết lập, Site A sẽ chạy lệnh restic. Dữ liệu được mã hóa ngay trên phần cứng cục bộ của bạn và sau đó được truyền qua đường hầm để lưu trữ an toàn tại Site B.

Hướng dẫn triển khai chi tiết

Hãy bắt đầu cấu hình. Bạn sẽ cần hai chiếc Raspberry Pi chạy hệ điều hành Raspberry Pi OS (khuyên dùng bản 64-bit).

1. Thiết lập đường hầm WireGuard

WireGuard gọn nhẹ, nhanh chóng và dễ kiểm tra hơn nhiều so với OpenVPN. Nó cho phép Site A “nhìn thấy” Site B như một địa chỉ IP nội bộ.

Đầu tiên, cài đặt các công cụ WireGuard trên cả hai thiết bị:

sudo apt update && sudo apt install wireguard -y

Trên Site B (Đích), tạo khóa và mở tệp cấu hình:

wg genkey | tee privatekey | wg pubkey > publickey
sudo nano /etc/wireguard/wg0.conf

Dán cấu hình này vào, đảm bảo thay thế bằng các khóa thực tế của bạn:

[Interface]
PrivateKey = <Site_B_Private_Key>
Address = 10.0.0.1/24
ListenPort = 51820

[Peer]
PublicKey = <Site_A_Public_Key>
AllowedIPs = 10.0.0.2/32

Trên Site A (Nguồn), tạo cấu hình tương ứng trỏ đến IP tĩnh hoặc địa chỉ DDNS của Site B:

[Interface]
PrivateKey = <Site_A_Private_Key>
Address = 10.0.0.2/24

[Peer]
PublicKey = <Site_B_Public_Key>
Endpoint = your-ddns-hostname.com:51820
AllowedIPs = 10.0.0.1/32
PersistentKeepalive = 25

Mẹo nhỏ: Bạn phải mở (forward) cổng UDP 51820 trên router tại Site B đến IP nội bộ của Raspberry Pi.

2. Chuẩn bị kho lưu trữ

Định dạng ổ cứng ngoài của bạn thành ext4 để đạt độ tin cậy cao nhất trên Linux. Gắn (mount) nó thông qua /etc/fstab để đảm bảo nó tự động kết nối lại sau khi mất điện.

# Thiết lập điểm gắn kết chuyên dụng
sudo mkdir -p /mnt/backup_vault
sudo chown -R pi:pi /mnt/backup_vault

3. Khởi tạo Restic

Restic là một công cụ tuyệt vời vì nó là một tệp thực thi duy nhất xử lý mọi thứ từ khử trùng lặp đến snapshot. Cài đặt nó trên Site A:

sudo apt install restic -y

Khởi tạo kho lưu trữ từ xa qua đường hầm. Lệnh này yêu cầu restic sử dụng SFTP để giao tiếp với Pi tại địa chỉ 10.0.0.1:

restic -r sftp:[email protected]:/mnt/backup_vault/homelab init

Chọn một mật khẩu mạnh và lưu nó vào trình quản lý như Bitwarden. Nếu bạn làm mất mật khẩu này, dữ liệu sao lưu của bạn sẽ chỉ là những mớ hỗn độn vô giá trị.

Tự động hóa và quản lý dung lượng

Sao lưu thủ công rất dễ dẫn đến thất bại vì bạn chắc chắn sẽ quên. Thay vào đó, hãy sử dụng một script và systemd timer để xử lý công việc nặng nhọc này vào lúc 3 giờ sáng khi bạn đang ngủ.

1. Script sao lưu

Tạo tệp /home/pi/backup_script.sh trên Site A. Script này xử lý việc sao lưu và dọn dẹp dữ liệu cũ để tiết kiệm dung lượng đĩa:

#!/bin/bash
export RESTIC_REPOSITORY="sftp:[email protected]:/mnt/backup_vault/homelab"
export RESTIC_PASSWORD_FILE="/home/pi/.restic_pw"

# Sao lưu các thư mục cụ thể
restic backup /home/pi/data /var/www/html --verbose

# Chính sách lưu giữ: giữ 7 bản hàng ngày, 4 bản hàng tuần và 6 bản hàng tháng
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

2. Tại sao Systemd Timer tốt hơn Cron

Mặc dù cron là tiêu chuẩn cũ, systemd timers vượt trội hơn cho việc sao lưu. Nếu Pi của bạn bị tắt nguồn vào thời điểm đã lên lịch, Persistent=true đảm bảo tác vụ sẽ chạy ngay lập tức khi máy khởi động lại.

Tạo tệp /etc/systemd/system/offsite-backup.timer:

[Unit]
Description=Chạy sao lưu offsite hàng ngày lúc 3 giờ sáng

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target

Những bài học kinh nghiệm xương máu

Nguồn điện là yếu tố then chốt

Raspberry Pi nổi tiếng là nhạy cảm với việc sụt áp. Nếu bạn cắm ổ cứng HDD 2.5″ trực tiếp vào cổng USB, Pi có thể bị sập nguồn khi ổ cứng quay. Hãy sử dụng nguồn chính hãng Raspberry Pi 15W. Đối với ổ cứng 3.5″, luôn sử dụng box có nguồn rời cắm điện tường.

Giám sát qua Healthchecks.io

Lỗi sao lưu trong âm thầm là một cơn ác mộng. Tôi thêm một lệnh curl đơn giản vào cuối script để gửi tín hiệu (ping) đến Healthchecks.io. Nếu dịch vụ này không nhận được phản hồi từ Pi của tôi trong 24 giờ, tôi sẽ nhận được cảnh báo trên điện thoại. Điều này đã cứu tôi hai lần khi bản cập nhật router làm hỏng đường hầm WireGuard.

Lần đồng bộ đầu tiên kiểu “Sneakernet”

Nếu bạn có 500GB dữ liệu và tốc độ tải lên tại nhà là 20Mbps, lần đồng bộ đầu tiên sẽ mất hơn 60 giờ. Đừng làm điều đó qua internet. Hãy mang chiếc Pi “offsite” về nhà, thực hiện sao lưu lần đầu qua mạng LAN Gigabit, sau đó mới chuyển nó đến vị trí cố định. Restic sẽ chỉ gửi các thay đổi tăng dần sau đó, thường chỉ mất vài phút.

Với chi phí chỉ bằng vài chiếc Raspberry Pi và một ít tiền điện, giờ đây bạn đã có một kế hoạch phục hồi sau thảm họa cấp chuyên nghiệp. Đó là một khoản đầu tư nhỏ cho sự an tâm khi biết rằng dữ liệu của mình an toàn trước hỏa hoạn và các rủi ro vật lý.

Share: