🔋 Економний віддалений бекап на 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 грн)

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

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

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

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

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/backupsCтворюємо конфігураційний файл 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.secretsuid = 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 Disk4.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 nmtui5. Налаштування з’єднання з локальної мережі
Щоб локальний пристрій бачив віддалене сховище, його теж потрібно підключити до тієї ж 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!