Files
obsidian-vault/work/plans/time-machine-tunnel-backup.md
T

4.8 KiB
Raw Blame History

Plan: Time Machine Backup via WireGuard VPN

Date: 2026-05-14
Status: Ready to implement

Problem

Kraken (RPi5) в другой сети — доступен только через SSH-туннель на VPS (91.207.28.205:2223).
Time Machine настроен на smb://timemachine@kraken._smb._tcp.local./TimeMachine через mDNS — не работает.
Последний бэкап: 12 мая 2026. Квота: 3.98 TB.


Топология

Eagle (10.99.0.2) ──→ VPS:51820 ←── Kraken (10.99.0.3)
                      10.99.0.1

VPS — WireGuard сервер (хаб). Eagle и Kraken — оба клиенты, оба инициируют исходящий UDP.

Kraken не может быть сервером: он за домашним NAT, входящий UDP снаружи недоступен без port forwarding на роутере.
Cloudflare туннель не нужен — WireGuard использует UDP, CF его не поддерживает. Идёт напрямую на VPS.

Kraken держит два исходящих туннеля на VPS:

  • уже есть: autossh TCP:2223 (SSH доступ)
  • новый: wg-quick UDP:51820 (VPN)

Что уже есть

Узел Статус
VPS (Debian 6.1) kernel module wireguard есть, wireguard-tools не установлен
Kraken (RPi5 6.12) wireguard-tools в apt, модуль встроен в ядро
Eagle (macOS) Нужен WireGuard.app (App Store) или brew install wireguard-tools

Фаза 1 — VPS: сервер (~10 мин)

apt install -y wireguard-tools

# Ключи
wg genkey | tee /etc/wireguard/server.key | wg pubkey > /etc/wireguard/server.pub

# /etc/wireguard/wg0.conf
[Interface]
Address = 10.99.0.1/24
ListenPort = 51820
PrivateKey = <server.key>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
# Eagle
PublicKey = <eagle.pub>
AllowedIPs = 10.99.0.2/32

[Peer]
# Kraken
PublicKey = <kraken.pub>
AllowedIPs = 10.99.0.3/32

# IP forwarding
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf && sysctl -p

systemctl enable --now wg-quick@wg0

Фаза 2 — Kraken: клиент (~5 мин)

sudo apt install -y wireguard-tools

# Ключи
wg genkey | sudo tee /etc/wireguard/client.key | wg pubkey | sudo tee /etc/wireguard/client.pub

# /etc/wireguard/wg0.conf
[Interface]
Address = 10.99.0.3/24
PrivateKey = <client.key>

[Peer]
PublicKey = <server.pub>
Endpoint = 91.207.28.205:51820
AllowedIPs = 10.99.0.0/24
PersistentKeepalive = 25

sudo systemctl enable --now wg-quick@wg0

Фаза 3 — Eagle: клиент (~5 мин)

# Генерация ключей
wg genkey | tee ~/eagle.key | wg pubkey > ~/eagle.pub

# tunnel.conf (импортировать в WireGuard.app)
[Interface]
Address = 10.99.0.2/24
PrivateKey = <eagle.key>

[Peer]
PublicKey = <server.pub>
Endpoint = 91.207.28.205:51820
AllowedIPs = 10.99.0.0/24
PersistentKeepalive = 25

Фаза 4 — Тест (~5 мин)

ping 10.99.0.1   # Eagle → VPS
ping 10.99.0.3   # Eagle → Kraken
smbclient -L //10.99.0.3 -U timemachine

Фаза 5 — Time Machine

sudo tmutil removedestination <old-id>
sudo tmutil setdestination smb://timemachine@10.99.0.3/TimeMachine

Или через GUI: System Settings → General → Time Machine → Add Backup Disk → smb://timemachine@10.99.0.3/TimeMachine


Фаза 6 — Cloudflare туннель: отключить (не удалять)

CF туннель kraken сейчас используется для Hermes API (kraken.qentra.top → localhost:8642).
После того как WireGuard заработает, туннель для SSH/SMB больше не нужен — но удалять не стоит, пусть лежит как fallback.

# На Кракене — остановить cloudflared (если хотим освободить ресурсы)
sudo docker stop cloudflared

# Или оставить работающим — он не мешает, потребляет ~20MB RAM
# В CF Zero Trust: просто не добавлять новых hostname-ов под него

Не удалять туннель в CF Zero Trust dashboard — оставить в состоянии Inactive как fallback.


Заметки

  • AllowedIPs = 10.99.0.0/24 — только VPN-трафик через туннель, интернет напрямую
  • SMB через WireGuard достаточно быстр для TM
  • VPS = single point of failure для TM, это приемлемо