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

4.9 KiB

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/TimeMachine Бандл: mbp-black.sparsebundle Контейнер: mbentley/timemachine:smb на Кракене, работает постоянно (restart: unless-stopped). Пароль: timemachine (samba user в контейнере)

Диагностика сбоя аутентификации

Симптом: Time Machine показывает «The network backup disk could not be accessed because there was a problem with the network username or password». Ping kraken работает, SMB-шар смонтировать через mount_smbfs — тоже.

Причины:

  1. Пароль samba-пользователя слетел — контейнер timemachine жив, но smbpasswd не задан. Проверка: ssh kraken 'docker exec timemachine pdbedit -L' — если не показывает NT hash после password last set, пароль надо переустановить.
  2. Keychain на Eagle хранит устаревший пароль — macOS кэширует старый пароль и не обновляет его автоматически.

Восстановление (2026-06-02):

  1. Переустановить пароль samba-пользователя в контейнере:
    ssh kraken 'docker exec -i timemachine sh -c "echo -e \"timemachine\\ntimemachine\" | smbpasswd -a -s timemachine"'
    
  2. Удалить все старые записи timemachine@kraken из Keychain (login + system)
  3. Cmd+K в Finder → smb://kraken/TimeMachine → Connect As → Registered User → timemachine / timemachine
  4. Перевыбрать destination: sudo tmutil setdestination -p smb://timemachine@kraken/TimeMachine

Проверка доступа из консоли:

mkdir -p /tmp/tm-test
mount_smbfs //timemachine:'timemachine'@kraken/TimeMachine /tmp/tm-test
ls /tmp/tm-test          # должен показать mbp-black.sparsebundle
umount /tmp/tm-test

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=

Диагностика

# 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

Связанные заметки