Зміст

🔋 Економний віддалений бекап на Raspberry Pi Zero 2W

Мета: отримати пристрій для бекапів на віддаленій локації, який споживатиме мало енергії, працюватиме 24/7 і буде максимально тихим

1. Вступ

Надійна стратегія резервного копіювання включає не лише локальні копії, а й віддалені, які зберігаються поза основним місцем.

Такі копії захищають ваші дані у випадку збою, крадіжки чи пошкодження основного сховища.

Хмарні сервіси — це зручно, але при великих об’ємах даних вони стають відчутно дорогими.

Тому в цьому гайді ми створимо власне віддалене сховище на базі Raspberry Pi Zero 2W із зовнішнім SSD та обєднаємо все в VPN мережі для легкого та безпечного доступу.

2. Компоненти

🔋 Головні вимоги до пристрою:

  • низьке енергоспоживання (працюватиме цілодобово);

  • тиха робота (не заважає вночі);

  • стабільність (мінімум обслуговування).

🧰 Обране рішення

  • Raspberry Pi Zero 2W — компактний, економний (≈2–3 Вт у роботі), вартість до 1000 грн.

  • MicroSD картка на 16-32GB

  • SSD диск серверного сегменту (2.5”, 2 ТБ) — має підвищену витривалість до записів і, у деяких моделей, захист від втрати даних при вимкненні живлення.

  • Перехідник USB–SATA — для підключення SSD до Raspberry.

  • Надійне живлення (2–3 А) — зарядний пристрій із запасом потужності.

  • Корпус для пасивного охолодження raspberry pi

2.1 Альтернативні варіанти

NanoPi NEO3 (💰 ~1500 грн)

/2025/11/01/ekonomnyj-viddalenyj-bekap-na-raspberry-pi-zero-2w/images/screenshot-2025-10-23-at-14.19.35-1024x856.png

ПлюсиМінуси
USB 3.0 — швидке підключення зовнішніх дисківОпераційна система лише з SD-карти (немає eMMC, SATA або M.2)
Повноцінний Ethernet — стабільне з’єднання без Wi-Fi

NanoPi Zero2 (💰 ~1500 грн)

/2025/11/01/ekonomnyj-viddalenyj-bekap-na-raspberry-pi-zero-2w/images/screenshot-2025-10-23-at-14.17.23-1024x657.jpg

ПлюсиМінуси
Можливість підключити eMMC або M.2 SSD для системиUSB лише 2.0 — нижча швидкість передачі даних
Ethernet-порт + USB-A (2.0)

Intel NUC (на Celeron) (💰 ~2000 грн вживаний)

/2025/11/01/ekonomnyj-viddalenyj-bekap-na-raspberry-pi-zero-2w/images/screenshot-2025-10-23-at-14.22.36-1024x533.png

ПлюсиМінуси
Повноцінний комп’ютер із місцем для двох дисківВище енергоспоживання (у кілька разів більше, ніж у Raspberry)
Ethernet + кілька USB 3.0-портівТрохи більші габарити
Можна розгорнути Proxmox, rsync або навіть Proxmox Backup Server
Надійність і легкість у заміні компонентів

3. Встановлення операційної системи

1. Встановлюємо та відкриваємо Raspberry Pi Imager

/2025/11/01/ekonomnyj-viddalenyj-bekap-na-raspberry-pi-zero-2w/images/screenshot-2025-10-22-at-15.26.44-1024x669.png

2. Обираємо Raspberry Pi OS (other) -> Raspberry Pi OS Lite (64-bit) — цього достатньо для серверних задач. Без графічного інтерфейсу система споживає менше ресурсів.

/2025/11/01/ekonomnyj-viddalenyj-bekap-na-raspberry-pi-zero-2w/images/screenshot-2025-10-22-at-15.26.26-1024x670.jpg

3. У меню налаштувань (Advanced) вказуємо:

  • Назву хоста (Hostname), наприклад: backuper.

  • Логін та пароль

  • Wi-Fi – назву та пароль своєї мережі

  • Enable SSH - вмикаємо. По логіну та паролю або ssh ключу

  • Зберігаємо

4. Після завершення вставляємо картку в raspberry pi, підключаємо диск та живлення

4. Налаштування RPi для зберігання даних

Дізнаємося у веб панелі роутера IP-адресу пристрою та підключаємося по SSH:

ssh pi@<ip-адреса>

Вводимо логін та пароль або просто підтверджуємо що це саме той сервер до якого ми хочемо підключатися якщо додавали ssh ключ.

🔧 Що потрібно зробити:

1. Підготувати та змонтувати диск для резервних копій.
2. Встановити й налаштувати rsync-сервер для прийому даних.
3. Налаштувати VPN-з’єднання між Raspberry та пристроєм-джерелом бекапів.

💡 Якщо вже є налаштоване безпечне VPN-з’єднання між локаціями (наприклад, через маршрутизатори), додатковий VPN-тунель можна пропустити.
Але окремий Tailscale-тунель додає гнучкості:
• не потребує статичної IP-адреси;
• не залежить від провайдера;
• працює навіть після переміщення пристрою в інше місце.

4.1 Підготовка диску

Зробити швидко

sudo apt update && sudo apt install -y curl
bash -c "$(curl -fsSL https://raw.githubusercontent.com/ravado/homeserver/refs/heads/main/remote-backup-server/0_setup_disc.sh)"

Зробити вручну

Перевіримо, що система бачить диск:

lsblk

маємо побачити USB-диск — зазвичай це **/dev/sda** або щось схоже

sda           8:0    0 119.2G  0 disk <- це він!
mmcblk0     179:0    0  14.8G  0 disk 
|-mmcblk0p1 179:1    0   512M  0 part /boot/firmware
`-mmcblk0p2 179:2    0  14.3G  0 part /

Форматуємо диск у ext4:

sudo parted -s /dev/sda mklabel gpt mkpart primary ext4 0% 100%
sudo mkfs.ext4 -F -L BACKUPDISK /dev/sda1

Створимо теку для монтування:

sudo mkdir /mnt/backups

Дізнаємось унікальний ідентифікатор диску (UUID), та копіюємо його, щоб змонтувати по id для надійності:

sudo blkid /dev/sda

Відкриваємо таблицю файлових систем:

sudo nano /etc/fstab

Додаємо новий рядок де підставляємо справжній UUID диску:

UUID=<uuid-для-заміни> /mnt/backups ext4 defaults,noatime,nofail 0 0

Зберігаємо зміни та перезавантажуємо сервіси:

sudo systemctl daemon-reload

Монтуємо диск командою:

sudo mount -a

перевіряємо:

df -h

Маємо побачити **/mnt/backups**

4.2 Налаштування rsync сервісу

Зробити швидко

sudo apt update && sudo apt install -y curl
bash -c "$(curl -fsSL https://raw.githubusercontent.com/ravado/homeserver/refs/heads/main/remote-backup-server/1_setup_rsync_service.sh)"

Зробити вручну

Оновимо репозиторії та встановимо необхідний пакет:

sudo apt update && sudo apt install rsync -y

Створимо окремого користувача backuper, який матиме доступ тільки до нашої теки з бекапами:

sudo adduser backuper

Дамо цьому користувачу права на теку, куди ми монтували диск:

sudo chown -R backuper:backuper /mnt/backups

Cтворюємо конфігураційний файл rsyncd.conf

sudo nano /etc/rsyncd.conf

Він визначає, яку теку ми “публікуємо” для бекапів і під яким іменем.

У ньому вказуємо:
• ім’я користувача — наприклад backuper,
• шлях до нашої теки для бекапів — /mnt/backups,
• і файл із паролем для доступу.

uid = backuper
gid = backuper
use chroot = no
max connections = 2
timeout = 300
[backups]
   path = /mnt/backups
   comment = Remote Backup Disk
   read only = false
   auth users = backuper
   secrets file = /etc/rsyncd.secrets
uid = backuper
gid = backuper
use chroot = no
max connections = 2
timeout = 300

[backups]
   path = /mnt/backups
   comment = Remote Backup Disk
   read only = false
   auth users = backuper
   secrets file = /etc/rsyncd.secrets

Зберігаємо цей файл, і наступним створюємо файл з логіном та паролем:

sudo nano /etc/rsyncd.secrets

У ньому зберігаємо логін і пароль розділеними двокрапкою:

backuper:SuperSecretPass

Задаємо права доступу, щоб інші користувачі не мали доступу до цього файлу:

sudo chmod 600 /etc/rsyncd.secrets

Вмикаємо сервіс rsync, та додаємо до автозапуску:

sudo systemctl enable --now rsync

Тепер **rsync** працює як сервіс і слухає порт 873.

Перевірити з іншого пристрою в тій же мережі:

rsync backuper@ip_адреса::

Маємо побачити список які віддає rsync:

backups Remote Backup Disk

4.3 Налаштування VPN

Щоб мати доступ до бекап-серверу з будь-якої мережі, налаштуємо VPN-з’єднання.

Для цього використаємо Tailscale — сервіс на основі протоколу WireGuard, який поєднує простоту налаштування з високою швидкістю та безпекою.

Зробити швидко

sudo apt update && sudo apt install -y curl
bash -c "$(curl -fsSL https://raw.githubusercontent.com/ravado/homeserver/refs/heads/main/remote-backup-server/2_setup_tailscale.sh)"

Зробити вручну

Встановлюємо **curl**:

sudo apt install curl -y

Далі офіційний інсталятор tailscale:

curl -fsSL https://tailscale.com/install.sh | sh

Підключаємося до vpn мережі Tailnet.

sudo tailscale up

Якщо потрібен віддалений SSH через Tailscale, додати параметр –ssh:

sudo tailscale up --ssh

Через деякий час команда виведе посилання — копіюємо його та відкриваємо у браузері. Авторизуємося через акаунт Tailscale, та додаємо пристрій до мережі.

Щоб перевірити, чи все підключилось, виконуємо:

tailscale status

Маємо побачити свій пристрій з адресою, що починається на 100 — це його приватна IP-адреса в мережі Tailscale.

І все — VPN готовий!

Щоб пристрій автоматично підключався до мережі в новій локації, не забудьте додати параметри другої Wi-Fi точки.

sudo nmtui

5. Налаштування з’єднання з локальної мережі

Щоб локальний пристрій бачив віддалене сховище, його теж потрібно підключити до тієї ж VPN-мережі через Tailscale.

Або ж можна налаштувати маршрутизацію, щоб усі пристрої локальної мережі мали доступ до сховища без встановлення VPN окремо на кожному. Далі буде саме другий варіант.

Зробити швидко

sudo apt update && sudo apt install -y curl
bash -c "$(curl -fsSL https://raw.githubusercontent.com/ravado/homeserver/refs/heads/main/remote-backup-server/3_setup_lxc_router.sh)"

5.1 Tailscale Gate на LXC

Створюємо лінукс контейнер (LXC) в proxmox який буде нашим гейтом і вказуватиме правильний шлях до віддаленого rsync сервісу:

- Name: tailscale-gate
- Шаблон: ubuntu
- Диск: 2gb
- CPU: 1 core
- Memory: 512mb
- Network: статична ip або dhcp 

Зберігаємо але поки не стартуємо контейнер

Відкриваємо конфігураційний файл контейнеру

nano /etc/pve/lxc/id-контейнеру.conf

додаємо такі рядки:

lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file

Зберігаємо, і тепер можна запускати контейнер.

5.2 Встановлення Tailscale

Переходимо в консоль контейнеру, оновимо кеш доступних пакетів та саму систему

sudo apt update && sudo apt upgrade -y

Встановлюємо **curl**:

sudo apt install curl -y

Встановимо tailscale клієнта:

curl -fsSL https://tailscale.com/install.sh | sh

і тепер запустимо його:

tailscale up

Переходимо за згенерованим посиланням і додаємо пристрій в мережу.

5.3 Роутинг

Вмикаємо форвардинг по IP — дозволяємо системі пересилати трафік між мережами. Для цього створюємо окремий конфігураційний файл:

sudo nano /etc/sysctl.d/99-tailscale.conf

Додаємо два таких рядки:

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1

Зберігаємо і закриваємо. Застосовуємо ці зміни командою:

sudo sysctl -p /etc/sysctl.d/99-tailscale.conf

Додаємо кілька правил маршрутизації, щоб пристрої з локальної мережі знали, куди саме надсилати трафік у мережу Tailscale:

iptables -t nat -A PREROUTING -p tcp --dport ${RSYNC_PORT} -j DNAT --to-destination ${REMOTE_IP}:${RSYNC_PORT}

${RSYNC_PORT} - порт rsync - 873
${REMOTE_IP} - ip адреса віддаленого rsync в мережі tailscale (має починатися з 100.*.*.*)

Це правило пересилає весь TCP-трафік із порту 873 на адресу нашого віддаленого сервера. Її можна знайти в панелі Tailscale, якщо не зберегли під час налаштування.

Додаємо правило маскараду — воно дозволяє трафіку повертатися назад правильним шляхом, щоб з’єднання працювало у дві сторони:

iptables -t nat -A POSTROUTING -p tcp -d ${REMOTE_IP} --dport ${RSYNC_PORT} -j MASQUERADE

Встановлюємо пакет iptables-persistant щоб наші правила зберегти в постійній пам’яті і не втрачати при перезавантаженні:

sudo apt install iptables-persistent -y

При встановленні утиліта запропонує автоматично зберегти вже існуючі записи ip таблиць, погоджуємося. Або можемо зберегти їх потім командою:

netfilter-persistent save

Щоб переконатися що пристрої з локальної мережі мають доступ до віддаленого серверу можна виконати таку команду (з іншого пристрою який не є в мережі tailscale):

nc -zv ${LXC_IP} 873

Де підставимо ip адресу нашого контейнера. Маємо отримати відповідь:

Connection to 192.168.91.54 port 873 [tcp/rsync] succeeded!