# AuraVPN — полная миграция: «один свой VPN на 24/7» Этот документ — пошаговая инструкция, как **полностью переехать** на свой AuraVPN-сервер на 187.77.67.17 и сделать его постоянным VPN-соединением (а-ля clash-verge / Tailscale / WireGuard). После прохождения этих шагов твой Mac будет: - держать туннель к AuraVPN-серверу **всегда**, - автоматически переподключаться при разрыве (после v3.5; пока — ручной перезапуск через GUI tray), - быть устойчивым к коллизиям портов (v3.4 port discovery), - не зависеть от других VPN на машине. > ⚠️ Цель этого гайда — твой Mac. Для Windows/Linux отличия упоминаются курсивом. --- ## 0) Что уже сделано - **Сервер**: `187.77.67.17` поднят с v3.4-бинарём, systemd unit `aura.service`, бандлы выдаются `aura provision-client`. SSH-доступ как root по ключу `~/.ssh/vpn` через `Host 187.77.67.17` в `~/.ssh/config`. - **Клиент-бинарь**: собран на Mac в `~/AuraVPN/target/release/aura` (Apple Silicon). Версия `aura 0.1.0` (commit `40b38be`). - **GUI**: см. §6 — собирается в `.app`, ставится в `Applications`. - **Phase 1 тест**: ✅ пройден end-to-end (`ping 10.7.0.1: 5/5, RTT 61 мс, server tx/rx counters=5/5`). --- ## 1) Один раз: выпустить личный клиентский бандл На каждое устройство — отдельный бандл (свой cert + ключ + tunnel IP). ```sh # На СЕРВЕРЕ (ты подключаешься SSH-ом). 10.7.0.10 — IP в туннеле для этого устройства. ssh 187.77.67.17 ' ID=mac-xah30 # короткое имя устройства TUN_IP=10.7.0.10 # уникальный IP внутри 10.7.0.0/24 # (a) Сгенерировать сам бандл /usr/local/bin/aura provision-client \ --ca /etc/aura/pki \ --id "$ID" \ --server-addr 187.77.67.17 \ --server-name 28.dsadadad.org \ --tcp-port 443 --quic-port 444 \ --tun-ip "$TUN_IP" \ --enable-knock --enable-cover-traffic \ --bridges "187.77.67.17:443" \ --out "/root/bundle-$ID" # (b) КРИТИЧНО для v3.4: занести static-mapping в server.toml, # чтобы IpPool отдавал именно $TUN_IP, а не следующий свободный. # Если этого не сделать — packets дойдут до сервера, но ответы не вернутся # (см. task #52, починим в v3.5). if ! grep -q "\"$ID\" = \"$TUN_IP\"" /etc/aura/server.toml; then awk -v id="$ID" -v ip="$TUN_IP" " /^\[server\.pool\]/ {found=1} /^\$/ && found && !done { print if (!found_static) { print \"[server.pool.static]\"; found_static=1 } print \"\\\"\" id \"\\\" = \\\"\" ip \"\\\"\"; done=1; next } /^\[server\.pool\.static\]/ {found_static=1} {print} " /etc/aura/server.toml > /etc/aura/server.toml.tmp && mv /etc/aura/server.toml.tmp /etc/aura/server.toml systemctl restart aura.service fi # (c) Положить v3.4 bridges.signed в бандл cp /etc/aura/bridges.signed "/root/bundle-$ID/bridges.signed" # (d) Запаковать tar -czf "/root/bundle-$ID.tgz" -C /root "bundle-$ID" echo "bundle ready: /root/bundle-$ID.tgz" ' # Скачать на Mac scp 187.77.67.17:/root/bundle-mac-xah30.tgz ~/Downloads/ ``` Получается файл `~/Downloads/bundle-mac-xah30.tgz` (~2 КБ). --- ## 2) Поставить клиентский бинарь ```sh # Если у тебя есть git clone репо: cd ~/AuraVPN && cargo build --release -p aura-cli sudo install -m 0755 target/release/aura /usr/local/bin/aura # Проверка: which aura && aura --version # → /usr/local/bin/aura # → aura 0.1.0 ``` *На Linux то же. На Windows — `cargo build --release --target x86_64-pc-windows-gnu` и положить `aura.exe` куда удобно.* --- ## 3) Конфиг — выбрать режим Бандл из шага 1 по умолчанию имеет `default = "VPN"` — это **full-tunnel**, через VPN пойдёт весь трафик. Для **safe-test** (только `10.7.0.0/24` через туннель, остальное прямо) поменяй секцию `[tunnel.split]` в `client.toml` распакованного бандла: ```toml [tunnel.split] # Полный VPN: все наружу через сервер. Так и оставить для production. default = "VPN" # Safe-mode для теста (только tunnel-internal через TUN): # default = "DIRECT" # [[tunnel.split.vpn]] # cidr = "10.7.0.0/24" ``` Также на macOS заменить `tun_name` на `utun9` (или другой свободный — ядро на маке отказывается принимать имена не вида `utunN`): ```toml [tunnel] tun_name = "utun9" # вместо "aura0" ``` --- ## 4) Отключить старый VPN (`utun4` или какой у тебя там есть) У тебя сейчас параллельно работает другой VPN на `utun4`. Он перехватывает дефолтный роут через split-маски `1/8, 2/7, 4/6, ...` — AuraVPN с `default=VPN` будет с ним конкурировать. Выбери одно: **Вариант А.** Полностью переехать на AuraVPN. Останови старый VPN (через его GUI/CLI/`launchctl unload …`). Проверь `ifconfig -l | tr ' ' '\n' | grep utun` — `utun4` не должно быть. **Вариант Б.** Оставить старый VPN параллельно для определённых CIDR-ов, AuraVPN — для всего остального. Тогда в `client.toml`: ```toml [tunnel.split] default = "VPN" # Эти CIDR-ы НЕ через AuraVPN, а через старый VPN или прямо: [[tunnel.split.direct]] cidr = "192.168.0.0/16" # домашняя сетка [[tunnel.split.direct]] cidr = "10.0.0.0/8" # внутренние ресурсы работы ``` --- ## 5) Запуск (CLI-режим, для теста) ```sh cd /tmp/aura-v34-run RUST_LOG="info" sudo aura client --config client.toml --admin-socket /tmp/aura-admin.sock ``` Дождись в логе: ``` INFO aura_cli::client: TUN device up; routing traffic tun=utun9 INFO aura_cli::client: OS-level split-tunnel routes installed ``` Проверь: ```sh # Пинг внутрь туннеля — должен пройти ping -c 3 10.7.0.1 # Публичный IP — должен стать 187.77.67.17/DE (если default=VPN и старый VPN выключен) curl -s https://1.1.1.1/cdn-cgi/trace | grep -E "^(ip|loc)=" # Счётчики на сервере (rx/tx должны расти) ssh 187.77.67.17 'aura status --admin-socket /run/aura-admin.sock' ``` `Ctrl+C` чтобы выключить. --- ## 6) GUI-приложение (постоянный режим) > Если ты раньше не видел `.app` в Applications — это потому что мы её **не собирали** в `.app`-бандл, только scaffold. Сейчас собираем. ### 6.1 Сборка `.app` (один раз, ~5-15 мин) ```sh cd ~/AuraVPN/aura-gui npm install # если ещё не делал npm run tauri build ``` В конце получится: ``` aura-gui/src-tauri/target/release/bundle/ ├── macos/aura-gui.app ← двойной клик → запуск ├── dmg/aura-gui_0.1.0_aarch64.dmg ← перетянуть в /Applications ``` Поставить: ```sh cp -r ~/AuraVPN/aura-gui/src-tauri/target/release/bundle/macos/aura-gui.app /Applications/ ``` или открыть `.dmg` двойным кликом и перетащить `.app` в Applications вручную. ### 6.2 Использование GUI 1. Запусти `aura-gui` из Applications (или Spotlight'ом). В трее (правый верхний угол) появится иконка. 2. Открой окно → **Import .tgz** → выбери `~/Downloads/bundle-mac-xah30.tgz`. Профиль появится в списке. 3. Нажми **Connect** на профиле. macOS попросит пароль (нужен root для TUN). 4. Внизу окна — **status panel**: peer, tx/rx packets, default action. Если `running` зелёная — всё работает. 5. Закрытие окна **не выгружает** приложение — оно остаётся в трее. Disconnect / Quit — через меню трея. > ⚠️ v0.1 GUI ещё не умеет: code signing (macOS Gatekeeper покажет «приложение от неподписанного разработчика» — обойти через `xattr -d com.apple.quarantine /Applications/aura-gui.app`), auto-start at login (это §7), polkit-style запрос пароля (сейчас приложение надо запускать `sudo open -a aura-gui` если хочешь обойтись без отдельной аутентификации в моменте Connect). ### 6.3 Запуск GUI с правами без `sudo` Чтобы GUI мог поднимать TUN без `sudo`, дай бинарю Aura sticky-bit или используй `passwordless sudo` для конкретной команды: ```sh # Cmd 1: дай aura SUID-bit (любой юзер может запустить как root) sudo chmod u+s /usr/local/bin/aura # Cmd 2 (альтернатива, безопаснее): /etc/sudoers.d/aura sudo bash -c 'cat > /etc/sudoers.d/aura < ~/Library/LaunchAgents/ru.undergr0und.aura.plist <<'EOF' Label ru.undergr0und.aura ProgramArguments /Applications/aura-gui.app/Contents/MacOS/aura-gui RunAtLoad KeepAlive StandardOutPath /tmp/aura-gui.out.log StandardErrorPath/tmp/aura-gui.err.log EOF launchctl load -w ~/Library/LaunchAgents/ru.undergr0und.aura.plist # Снять с автозапуска позже: # launchctl unload -w ~/Library/LaunchAgents/ru.undergr0und.aura.plist ``` После этого GUI стартует при каждом логине, висит в трее, готов к Connect. Для **автоматического коннекта при запуске** (без клика на Connect) — на v0.1 ещё нет в GUI; пока вариант — `aura client` через отдельный LaunchDaemon под root. Это уже даёт «висит на VPN 24/7»: ```sh sudo tee /Library/LaunchDaemons/ru.undergr0und.aura-client.plist > /dev/null < Label ru.undergr0und.aura-client ProgramArguments /usr/local/bin/aura client --config /Users/xah30/Library/Application Support/ru.undergr0und.aura/profiles/bundle-mac-xah30/client.toml --admin-socket /var/run/aura-admin.sock RunAtLoad KeepAlive UserName root StandardOutPath/var/log/aura-client.out.log StandardErrorPath/var/log/aura-client.err.log EOF sudo launchctl load -w /Library/LaunchDaemons/ru.undergr0und.aura-client.plist ``` Замени путь к `client.toml` на путь, куда GUI распаковал твой бандл. Удалить: ```sh sudo launchctl unload -w /Library/LaunchDaemons/ru.undergr0und.aura-client.plist sudo rm /Library/LaunchDaemons/ru.undergr0und.aura-client.plist ``` --- ## 8) DNS через туннель В v3.4 клиент **НЕ перехватывает DNS** — твой `resolv.conf` остаётся прежним. Это значит: с `default=VPN` весь TCP/UDP идёт через сервер, **но DNS-запросы** идут к локально настроенному резолверу (твой провайдер / Cloudflare 1.1.1.1). Утечка DNS (operator/Минцифры может видеть **доменные имена**, которые ты резолвишь, хотя сам трафик зашифрован). Чтобы это закрыть: 1. Поставь резолвер на сторону VPN — допиши в `client.toml`: ```toml [tunnel] dns = "10.7.0.1" # будет разрешать запросы через сервер ``` 2. Сервер уже умеет роутить DNS через себя (порт 53 наружу через NAT). Установи на сервер unbound / dnsmasq: ```sh ssh 187.77.67.17 'apt install -y unbound && systemctl enable --now unbound' ``` 3. Перезапусти клиент. `curl -s https://1.1.1.1/cdn-cgi/trace` должен показывать тебя `ip=187.77.67.17`, а `dig @10.7.0.1 example.com` должен работать. --- ## 9) Проверка end-to-end После всех шагов: ```sh # 1. utun9 поднят, IP в туннеле ifconfig utun9 | head -2 # 2. Дефолт-роут через AuraVPN netstat -rn -f inet | head -5 # в строке default должна быть запись через utun9 (или 10.7.0.1) # 3. Публичный IP — сервера curl -s https://1.1.1.1/cdn-cgi/trace | grep -E "^ip=" # → ip=187.77.67.17 # 4. На сервере должны расти счётчики ssh 187.77.67.17 'aura status --admin-socket /run/aura-admin.sock' # → peer: mac-xah30 # rx packets: > 0 # tx packets: > 0 ``` --- ## 10) Откат / неполадки **Полностью убрать AuraVPN:** ```sh # Выгрузить LaunchAgent/Daemon launchctl unload -w ~/Library/LaunchAgents/ru.undergr0und.aura.plist sudo launchctl unload -w /Library/LaunchDaemons/ru.undergr0und.aura-client.plist 2>/dev/null # Удалить GUI rm -rf /Applications/aura-gui.app # Удалить бинарь sudo rm /usr/local/bin/aura # Удалить профили rm -rf ~/Library/Application\ Support/ru.undergr0und.aura ``` **Если интернет пропал после Connect**: Disconnect через трей. OS-routes откатятся через `OsRouteGuard::Drop`. Если не откатились (приложение упало) — вручную: ```sh sudo route -n delete -net 10.7.0.0/24 2>/dev/null # Или если default был перенаправлен: sudo route -n delete default; sudo route -n add default <твой шлюз 192.168.x.1> ``` **Если на сервере виден старый клиентский IP**, висящий в pool после рестарта Mac: ```sh ssh 187.77.67.17 'systemctl restart aura.service' ``` --- ## 11) Что ещё в роадмапе (для контекста) - **v3.5**: provision-client автоматически прописывает `[server.pool.static]` (сейчас руками, см. §1.b) - **v3.5**: client.rs auto-reconnect после `peer connection broke` (сейчас exit, нужен ручной перезапуск) - **v4 (aura-gui v0.2)**: - code signing + notarization (Mac Gatekeeper) - встроенный polkit/authorization-services prompt вместо `sudo open` - persistent settings + auto-connect last profile - SOCKS5/HTTP local proxy режим для clash-verge интеграции - **v4.1**: streaming logs в GUI, route override editor --- **Полное состояние сейчас:** клиент + сервер v3.4 работают по верифицированному ping-тесту (Phase 1 ✅). GUI v0.1 собирается в `.app`. CLI-режим production-ready. Auto-start закрывается через LaunchAgent. Полная миграция — после прохождения шагов 1-7 этого документа.