Files
obsidian-vault/family/how-to/wireguard-vpn.md
T

98 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` на Кракене.
Расписание: 04:0016:00 UTC (10:0022:00 GMT+6), root crontab.
---
## 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
```