162 lines
4.8 KiB
Markdown
162 lines
4.8 KiB
Markdown
# 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 мин)
|
||
|
||
```bash
|
||
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 мин)
|
||
|
||
```bash
|
||
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 мин)
|
||
|
||
```bash
|
||
# Генерация ключей
|
||
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 мин)
|
||
|
||
```bash
|
||
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
|
||
|
||
```bash
|
||
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 туннель: отключить (не удалять)
|
||
|
||
После того как WireGuard заработает, CF туннель для SSH/SMB больше не нужен — но удалять не стоит, пусть лежит как fallback. Уточнить в CF Zero Trust какие hostname-ы реально активны перед остановкой.
|
||
|
||
```bash
|
||
# На Кракене — остановить 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, это приемлемо
|