2026-05-14 WireGuard VPN Eagle-Kraken: реализовано, TM работает

This commit is contained in:
Alexey Martemyanov
2026-05-14 17:05:15 +06:00
parent 1cddaa05d1
commit 491ead0f8e
2 changed files with 94 additions and 160 deletions
+89
View File
@@ -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:0016:00 UTC (10:0022: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
```
+5 -160
View File
@@ -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 = <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, это приемлемо
- Time Machine login/pass: timemachine/timemachine
Детали реализации, топология, ключи и диагностика: `family/how-to/wireguard-vpn.md`