Files
obsidian-vault/family/how-to/wireguard-vpn.md
T
2026-05-29 09:01:25 +00:00

97 lines
3.1 KiB
Markdown
Executable File

# 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` — polling каждые 30 сек (launchd `StartInterval`, **НЕ** WatchPaths):
- Дома (роутер MAC `f0:79:59:77:9b:70`) → `wg-quick down`
- Вне дома → `wg-quick up`
WatchPaths вызывал race condition: `wg-quick down` менял DNS через networksetup → писал в `/Library/Preferences/SystemConfiguration/` → launchd тригерил скрипт снова → туннель рвался, IP слетал.
---
## Time Machine
Destination обновлён:
- Старый: `smb://timemachine@kraken._smb._tcp.local./TimeMachine` (mDNS, не работает)
- Новый: `smb://timemachine@kraken/TimeMachine` (VPN DNS ✅)
Контейнер: `mbentley/timemachine:smb` на Кракене, работает постоянно (`restart: unless-stopped`).
---
## DNS
wg0.conf **без** `DNS =`. PostUp/PostDown управляют scoped resolver:
- `PostUp = mkdir -p /etc/resolver && echo "nameserver 10.99.0.1" > /etc/resolver/kraken && killall -HUP mDNSResponder`
- `PostDown = rm -f /etc/resolver/kraken && killall -HUP mDNSResponder`
Только домен `kraken` резолвится через VPS dnsmasq (10.99.0.1). Глобальный DNS не трогается — Wi-Fi IP не слетает.
## Ключи
| Узел | Публичный ключ |
|------|---------------|
| 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 "sudo wg show"
# Логи auto-connect Eagle
cat /var/log/wg-auto.log
```