Swap application icon on connect/disconnect via AppKit; ship arm64 build. Co-authored-by: Cursor <cursoragent@cursor.com>
331 lines
14 KiB
Markdown
331 lines
14 KiB
Markdown
# Navis
|
||
|
||
Клиент [NaiveProxy](https://github.com/klzgrad/naiveproxy) + [Hysteria 2](https://github.com/apernet/hysteria) + [AmneziaWG 2.0](https://docs.amnezia.org/documentation/amnezia-wg/) + [Xray](https://github.com/XTLS/Xray-core) (VLESS / VMess / Trojan) с профилями, пингом, URL-подпиской и автообновлением.
|
||
|
||
## Платформы
|
||
|
||
| OS | Артефакты | UI |
|
||
|----|----------|----|
|
||
| Windows amd64 | `Navis.exe` | GUI (WebView2) |
|
||
| macOS universal | `Navis.dmg` · `Navis.app.zip` | **GUI** (как Windows) |
|
||
| macOS arm64 / amd64 | `Navis` · DMG · `Navis-cli` | GUI + CLI |
|
||
| Android | `Navis.apk` | GUI (VpnService) |
|
||
|
||
## Скачать macOS прямо с git
|
||
|
||
Репозиторий: https://git.evilfox.cc/test2/navi
|
||
|
||
### Быстрая установка (автовыбор архитектуры)
|
||
|
||
```bash
|
||
curl -fsSL "https://git.evilfox.cc/test2/navi/raw/branch/main/scripts/install-macos.sh" | bash
|
||
```
|
||
|
||
Скрипт скачает **универсальный DMG** (работает на Intel и Apple Silicon) и откроет его.
|
||
|
||
### Универсальный DMG (рекомендуется)
|
||
|
||
Подходит для **всех** Mac — M1/M2/M3/M4 и Intel:
|
||
|
||
```bash
|
||
cd ~/Downloads
|
||
curl -fL -o Navis.dmg \
|
||
"https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-universal/Navis.dmg"
|
||
open Navis.dmg
|
||
```
|
||
|
||
### 1. Узнайте архитектуру Mac (если нужна отдельная сборка)
|
||
|
||
В Терминале:
|
||
|
||
```bash
|
||
uname -m
|
||
```
|
||
|
||
- `arm64` → Apple Silicon (M1/M2/M3/M4) → папка **darwin-arm64**
|
||
- `x86_64` → Intel → папка **darwin-amd64**
|
||
|
||
> **Важно:** на Mac M4 нельзя ставить сборку из `darwin-amd64` — иконка будет с перечёркиванием. Используйте **darwin-universal** или **darwin-arm64**.
|
||
|
||
### 2a. Скачать DMG для конкретной архитектуры
|
||
|
||
**Apple Silicon:**
|
||
|
||
```bash
|
||
cd ~/Downloads
|
||
curl -fL -o Navis.dmg \
|
||
"https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-arm64/Navis.dmg"
|
||
open Navis.dmg
|
||
```
|
||
|
||
**Intel:**
|
||
|
||
```bash
|
||
cd ~/Downloads
|
||
curl -fL -o Navis.dmg \
|
||
"https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-amd64/Navis.dmg"
|
||
open Navis.dmg
|
||
```
|
||
|
||
Откроется диск с `Navis.app` — перетащите в **Программы** (Applications).
|
||
|
||
Если Gatekeeper ругается:
|
||
|
||
```bash
|
||
xattr -dr com.apple.quarantine /Applications/Navis.app
|
||
```
|
||
|
||
Запуск CLI из .app:
|
||
|
||
```bash
|
||
/Applications/Navis.app/Contents/MacOS/Navis init
|
||
/Applications/Navis.app/Contents/MacOS/Navis install-core
|
||
/Applications/Navis.app/Contents/MacOS/Navis connect
|
||
```
|
||
|
||
Альтернатива DMG — zip с тем же `.app`:
|
||
|
||
```bash
|
||
# arm64
|
||
curl -fL -o Navis.app.zip \
|
||
"https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-arm64/Navis.app.zip"
|
||
# amd64
|
||
curl -fL -o Navis.app.zip \
|
||
"https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-amd64/Navis.app.zip"
|
||
unzip Navis.app.zip
|
||
```
|
||
|
||
### 2b. Скачать CLI-бинарник одной командой
|
||
|
||
**Apple Silicon (arm64):**
|
||
|
||
```bash
|
||
mkdir -p ~/Navis && cd ~/Navis
|
||
curl -fL -o Navis \
|
||
"https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-arm64/Navis"
|
||
chmod +x Navis
|
||
```
|
||
|
||
**Intel (amd64):**
|
||
|
||
```bash
|
||
mkdir -p ~/Navis && cd ~/Navis
|
||
curl -fL -o Navis \
|
||
"https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-amd64/Navis"
|
||
chmod +x Navis
|
||
```
|
||
|
||
Проверка версии / обновлений:
|
||
|
||
```bash
|
||
./Navis check-update
|
||
```
|
||
|
||
### 3. Первый запуск (CLI)
|
||
|
||
```bash
|
||
cd ~/Navis
|
||
./Navis init
|
||
./Navis install-core
|
||
./Navis set-proxy 'hysteria2://PASSWORD@HOST:PORT/?sni=...#name'
|
||
# или naive+https://user:pass@host
|
||
./Navis connect
|
||
```
|
||
|
||
Полезные флаги:
|
||
|
||
```bash
|
||
./Navis connect -no-sysproxy # только локальный SOCKS/HTTP, без networksetup
|
||
./Navis connect -probe # проверка туннеля после коннекта
|
||
```
|
||
|
||
Локальные прокси после `connect`:
|
||
|
||
- SOCKS5: `127.0.0.1:1080`
|
||
- HTTP: `127.0.0.1:1081`
|
||
|
||
Системный прокси на macOS выставляется через `networksetup` (может запросить права администратора).
|
||
|
||
### 4. Если macOS блокирует запуск
|
||
|
||
```text
|
||
“Navis” cannot be opened because it is from an unidentified developer
|
||
```
|
||
|
||
```bash
|
||
xattr -dr com.apple.quarantine ~/Navis/Navis
|
||
# или для .app:
|
||
xattr -dr com.apple.quarantine /Applications/Navis.app
|
||
```
|
||
|
||
Затем: **Системные настройки → Конфиденциальность и безопасность → Всё равно открыть**.
|
||
|
||
### 5. Обновление с git
|
||
|
||
```bash
|
||
cd ~/Navis
|
||
./Navis check-update
|
||
./Navis apply-update
|
||
# закройте процесс Navis — бинарник подменится сам
|
||
```
|
||
|
||
Или скачайте DMG/бинарник заново.
|
||
|
||
Прямые ссылки (raw):
|
||
|
||
| Архитектура | CLI | DMG | ZIP (.app) |
|
||
|-------------|-----|-----|------------|
|
||
| **universal** | [Navis](https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-universal/Navis) | [Navis.dmg](https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-universal/Navis.dmg) | [Navis.app.zip](https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-universal/Navis.app.zip) |
|
||
| arm64 | [Navis](https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-arm64/Navis) | [Navis.dmg](https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-arm64/Navis.dmg) | [Navis.app.zip](https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-arm64/Navis.app.zip) |
|
||
| amd64 | [Navis](https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-amd64/Navis) | [Navis.dmg](https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-amd64/Navis.dmg) | [Navis.app.zip](https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-amd64/Navis.app.zip) |
|
||
| манифест | [update.json](https://git.evilfox.cc/test2/navi/raw/branch/main/dist/update.json) | | |
|
||
|
||
## Android APK
|
||
|
||
Сборка: `build-android.bat` → `dist/navis-release/android/Navis.apk`
|
||
|
||
Установка: скопируйте APK на телефон → разрешите установку из неизвестных источников.
|
||
|
||
В APK: подписка, компактный список нод, пинг, «Лучший», автоподключение. Протоколы VLESS/VMess/Trojan (Xray) и Hysteria 2. Naive/AWG — импорт в UI, полный туннель дорабатывается.
|
||
|
||
Подробнее: [android/README.md](android/README.md)
|
||
|
||
## Сборка Windows
|
||
|
||
```bat
|
||
build.bat
|
||
```
|
||
|
||
или:
|
||
|
||
```bat
|
||
go build -ldflags="-H windowsgui -s -w" -o Navis.exe ./cmd/vpnapp
|
||
```
|
||
|
||
## Сборка macOS (кросс с Windows / Linux)
|
||
|
||
```bat
|
||
build-macos.bat
|
||
```
|
||
|
||
или:
|
||
|
||
```bash
|
||
CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -o dist/navis-release/darwin-arm64/Navis ./cmd/vpnclient
|
||
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o dist/navis-release/darwin-amd64/Navis ./cmd/vpnclient
|
||
```
|
||
|
||
## Обновления
|
||
|
||
Манифест: `https://git.evilfox.cc/test2/navi/raw/branch/main/dist/update.json`
|
||
|
||
Формат (multi-platform):
|
||
|
||
```json
|
||
{
|
||
"version": "1.4.0",
|
||
"notes": "…",
|
||
"platforms": {
|
||
"windows-amd64": { "url": "…/Navis.exe", "sha256": "…" },
|
||
"darwin-arm64": { "url": "…/darwin-arm64/Navis", "sha256": "…" },
|
||
"darwin-amd64": { "url": "…/darwin-amd64/Navis", "sha256": "…" }
|
||
}
|
||
}
|
||
```
|
||
|
||
Клиент сам выбирает ключ `GOOS-GOARCH`.
|
||
|
||
## Купить доступ
|
||
|
||
https://evilfox.win/
|
||
|
||
## Антивирусы (ложные срабатывания)
|
||
|
||
Некоторые AV (Bkav, Microsoft Wacapew/Wacatac, Ikarus Trojan.WinGo.Agent, Google, Trapmine) часто помечают **любые** неподписанные Go-бинарники с сетью и сменой системного прокси.
|
||
|
||
В 3.8.2:
|
||
- при неожиданном падении ядра снимается системный прокси и sentinel;
|
||
- логи ядра и проверка туннеля (Probe) в UI; connect-on-launch и автопереподключение;
|
||
- подписка удаляет устаревшие ноды прошлой синхронизации; «Лучший» без soft-ok UDP;
|
||
- трей (Windows), CI workflows, REQUIRE_CODESIGN для релиза; Android gated Naive/AWG + sync версии;
|
||
- 3.8.2+2: иконка в macOS Dock — буква N цвета морской волны при подключении, исходная при отключении.
|
||
|
||
В 3.8.1:
|
||
- меньше нагрузка в простое: лёгкий опрос интерфейса без полного клонирования конфига, кэш путей к ядрам, лог с лимитом размера;
|
||
- список серверов в UI не пересобирается без изменений; интервал опроса 4 с;
|
||
- быстрее и точнее пинг (учитывается протокол профиля; лёгкий разбор AWG Endpoint);
|
||
- AWG-прокси копирует трафик через буферный pool; PingAll и установка cores используют несколько ядер CPU;
|
||
- 3.8.1+1: первая сборка линейки 3.8.1.
|
||
|
||
В 3.8.0:
|
||
- единый GUI-контроллер `apphost` для Windows и macOS (без дублирования логики);
|
||
- безопасный lifecycle Connect/Disconnect (ожидание Stop, mutex Windows sysproxy);
|
||
- SHA-256 проверка при установке cores (naive / hy2 / xray);
|
||
- snapshot конфига в UI (`Config().Clone`);
|
||
- 3.8.0+2: обновление Navis.app через zip+SHA; Start вне mutex; getState без секретов; подпись/notarize scripts; UI CSS/JS split;
|
||
- 3.8.0+3: пинг Hy2/AWG по UDP — soft-ok при тишине (без ложных «недоступен»).
|
||
|
||
В 2.7.3:
|
||
- восстановление системного прокси после аварийного завершения;
|
||
- auth-токен для локального macOS `/api`;
|
||
- обязательный SHA-256 при обновлении;
|
||
- исправлен ложный UDP ping; HTTPS-only подписки; UI не зависает на connect;
|
||
- 2.7.3+2: импорт Amnezia `vpn://` — очистка невидимых символов, создание профиля при активном подключении, ошибка в модалке;
|
||
- 2.7.3+3: тёмная тема интерфейса (переключатель в шапке, сохранение выбора).
|
||
|
||
В 2.7.2:
|
||
- убран вечный цикл обновления (проверка больше не устанавливает сама; только кнопка «Обновить»);
|
||
- номер сборки в версии (`2.7.2+N` / FileVersion `2.7.2.N`); сравнение обновлений только по product semver.
|
||
|
||
В 2.7.1:
|
||
- обновление только по кнопке «Обновить»; можно «Пропустить эту версию» (следующую всё равно предложит).
|
||
|
||
В 2.7.0:
|
||
- GUI на macOS (тот же интерфейс, что на Windows): DMG → Navis.app открывает окно клиента; CLI лежит как `Navis-cli`.
|
||
|
||
В 2.6.2:
|
||
- быстрое отключение AWG: принудительно закрываются прокси-соединения, UI больше не зависает.
|
||
|
||
В 2.6.1:
|
||
- AmneziaWG: перед подключением Endpoint-хост резолвится в IP (предпочтительно IPv4) — обход сбоя IpcSet на Windows («No such host is known»).
|
||
|
||
В 2.6.0:
|
||
- исправлен разбор AmneziaWG: ключ в `awg://KEY@host`, JSON/`vpn://`, пробелы в именах полей, URL-safe base64.
|
||
|
||
В 2.3.0:
|
||
- Android APK: подписка, список нод, пинг, автолучший; VLESS/VMess/Trojan (Xray) и Hysteria 2 через VpnService.
|
||
|
||
В 2.2.1:
|
||
- универсальный macOS DMG (Intel + Apple Silicon), скрипт автоустановки, предупреждения при неверной архитектуре.
|
||
|
||
В 2.2.0:
|
||
- компактный список нод с пингом (как в Happ);
|
||
- параллельный пинг, кнопка «Лучший», автоподключение к серверу с минимальной задержкой после подписки.
|
||
|
||
В 2.1.0:
|
||
- вторичные кнопки перекрашены (не белые), чтобы не путать с основным действием.
|
||
|
||
В 2.0.0:
|
||
- новый интерфейс (connect-first), обновлённая иконка и типографика;
|
||
- чище UX: протокол-бейдж, сворачиваемые сервисные действия, статус-карточка.
|
||
|
||
В 1.9.0:
|
||
- VLESS / VMess / Trojan через официальный Xray-core (кнопка «Установить cores»).
|
||
|
||
В 1.8.0:
|
||
- автопроверка обновлений при старте и установка с автоперезапуском;
|
||
- AmneziaWG 2.0: вставьте полный `.conf` (Jc/Jmin/Jmax, S1–S4, H1–H4, I1–I5) или `awg://…` — встроенный userspace-туннель + локальный SOCKS/HTTP.
|
||
|
||
В 1.7.1 дополнительно:
|
||
- обновление только скачивается в `Downloads` (без самозамены exe);
|
||
- нет автопроверки обновлений и тихой загрузки cores при старте;
|
||
- нет вызова `netsh winhttp`;
|
||
- Windows manifest + metadata EvilFox.
|
||
|
||
Если всё ещё ругается — отправьте файл как False Positive:
|
||
- Microsoft: https://www.microsoft.com/wdsi/filesubmission
|
||
- Google: https://safebrowsing.google.com/safebrowsing/report_error/
|
||
- VirusTotal community vote: «False positive»
|
||
|
||
Полностью убрать ML-детекты обычно можно только с **Authenticode** (code signing).
|