diff --git a/family/how-to/wireguard-vpn.md b/family/how-to/wireguard-vpn.md new file mode 100644 index 00000000..9fef50a6 --- /dev/null +++ b/family/how-to/wireguard-vpn.md @@ -0,0 +1,89 @@ +# WireGuard VPN — Eagle ↔ Kraken + +> Создано: 2026-05-14 +> Статус: ✅ работает + +## Топология + +``` +Eagle (10.99.0.2) ←→ wg0 VPS (10.99.0.1) ←→ wg1 VPS (10.99.1.1) ←→ Kraken (10.99.1.2) + :51820 :51821 +``` + +Два интерфейса на VPS чтобы избежать hairpin forwarding. FORWARD идёт wg0→wg1, SNAT меняет src Eagle на `10.99.1.1`. + +--- + +## Адреса + +| Узел | VPN IP | +|------|--------| +| VPS | 10.99.0.1 (wg0) / 10.99.1.1 (wg1) | +| Eagle | 10.99.0.2 | +| Kraken | 10.99.1.2 | + +`kraken` резолвится через dnsmasq на VPS (DNS = 10.99.0.1 в конфиге Eagle). + +--- + +## Персистентность + +| Компонент | Узел | Как выживает ребут | +|-----------|------|--------------------| +| wg-quick@wg0 + wg-quick@wg1 | VPS | systemd enabled | +| PostUp FORWARD + SNAT | VPS | в `/etc/wireguard/wg0.conf` | +| nftables (10.99.0.0/16 forward) | VPS | `/etc/nftables.conf`, systemd enabled | +| dnsmasq (`kraken` → 10.99.1.2) | VPS | `/etc/dnsmasq.d/vpn-hosts.conf`, systemd enabled | +| wg-quick@wg0 | Kraken | systemd enabled | +| wg-auto LaunchDaemon | Eagle | `/Library/LaunchDaemons/top.eagle.wg-auto.plist` | + +--- + +## Auto-connect на Eagle + +`/usr/local/bin/wg-auto.sh` — следит за SSID через `WatchPaths` на `/Library/Preferences/SystemConfiguration/`: +- SSID == `ASUS5` → `wg-quick down` (дома, Kraken в локалке... но сейчас Kraken не дома, поэтому VPN всегда нужен) +- SSID != `ASUS5` → `wg-quick up` + +> ⚠️ Пока Kraken не дома (не на ASUS5) — туннель нужен всегда, даже когда Eagle на ASUS5. Скрипт нужно будет пересмотреть если Kraken вернётся домой. + +--- + +## Time Machine + +Destination обновлён: +- Старый: `smb://timemachine@kraken._smb._tcp.local./TimeMachine` (mDNS, не работает) +- Новый: `smb://timemachine@kraken/TimeMachine` (VPN DNS ✅) + +Контейнер: `mbentley/timemachine:smb` на Кракене. +Расписание: 04:00–16:00 UTC (10:00–22:00 GMT+6), root crontab. + +--- + +## Ключи + +| Узел | Публичный ключ | +|------|---------------| +| VPS wg0 | `6W6hSw0JFLm0BbyeNp1g7wF7dKKTZmGvPRdir68mz0w=` | +| VPS wg1 | `ssRV2497NQ3Lfzvx/FLO0jDlcCXdK/RReJQ36i0yuR8=` | +| Eagle | `dDgIjBUNguodOHWoz7iFsImvKhteodHcFWM8mMe4UiE=` | +| Kraken | `8kIdCKMIoMsW09/aQX6+pU0SS/rN4PysJL59w17eGRg=` | + +--- + +## Диагностика + +```bash +# Eagle +sudo wg show +ping kraken + +# VPS +ssh root@91.207.28.205 "wg show all" + +# Kraken +ssh kraken-ssh "sudo wg show" + +# Логи auto-connect Eagle +cat /var/log/wg-auto.log +``` diff --git a/work/plans/time-machine-tunnel-backup.md b/work/plans/time-machine-tunnel-backup.md index c1fef22a..9d67b78b 100644 --- a/work/plans/time-machine-tunnel-backup.md +++ b/work/plans/time-machine-tunnel-backup.md @@ -1,162 +1,7 @@ -# Plan: Time Machine Backup via WireGuard VPN +# Plan: Time Machine via WireGuard VPN — ВЫПОЛНЕНО -**Date**: 2026-05-14 -**Status**: Ready to implement +> Перенесено в [[wireguard-vpn]] +> Дата: 2026-05-14 +> Статус: ✅ реализовано -## 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 = -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 = -AllowedIPs = 10.99.0.2/32 - -[Peer] -# Kraken -PublicKey = -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 = - -[Peer] -PublicKey = -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 = - -[Peer] -PublicKey = -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 -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, это приемлемо -- Time Machine login/pass: timemachine/timemachine +Детали реализации, топология, ключи и диагностика: `family/how-to/wireguard-vpn.md`