39b58e1a77
Third mode alongside proxy and VLESS+Reality. Bundles wireproxy-awg built from a pinned, audited source commit (fork of wireproxy over the official amneziawg-go), exposing a local SOCKS5 tunnel with no TUN/driver/admin. User picks their AmneziaWG .conf; the app appends a [Socks5] section and routes Claude through it with the same fail-closed firewall. build-wireproxy.ps1 reproducibly builds the binary (portable Go + pinned commit); it is embedded as a resource and not stored in git. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
118 lines
8.6 KiB
Markdown
118 lines
8.6 KiB
Markdown
# claude-proxy
|
||
|
||
GUI-«рубильник» для десктопного **Claude** (MSIX/Store, Windows): включил — **весь** трафик
|
||
приложения идёт только через прокси, выключил — напрямую. Два режима: прямой SOCKS5/HTTP-прокси
|
||
и **VLESS + Reality** тоннель (встроенный Xray-core).
|
||
|
||
Нативный C#/.NET, один exe (~20 МБ). Ничего доустанавливать не нужно.
|
||
|
||
## Как это работает
|
||
|
||
Два слоя защиты:
|
||
|
||
1. **Функциональный** — Claude запускается через MSIX-активацию с аргументом
|
||
`--proxy-server="socks5://host:port"`. Chromium-стек аппы (в т.ч. запросы к API) уходит в
|
||
прокси. SOCKS5 обрабатывается нативно, с удалённым DNS (без DNS-утечки), без HTTP→SOCKS-моста.
|
||
|
||
2. **Fail-closed (гарантия)** — правило Windows Firewall на `claude.exe`: блок **любого**
|
||
исходящего, кроме адреса прокси. Если что-то полезет мимо прокси — оно не получит сеть
|
||
(заблокируется), а не утечёт напрямую. «Весь трафик через прокси или никак».
|
||
|
||
Приложение работает **без прав администратора** — поэтому запущенный им Claude это твой обычный
|
||
инстанс (тот, что в трее), а не отдельный админский. UAC запрашивается только на смену
|
||
firewall-правила (при вкл/выкл рубильника).
|
||
|
||
## Запуск
|
||
|
||
Двойной клик по **`ClaudeProxy.exe`** — откроется окно с рубильником.
|
||
|
||
- **Рубильник ВКЛ** — ставит firewall-лок и запускает Claude через прокси. Если Claude закрыт —
|
||
просто стартует его уже завёрнутым; если открыт — предложит перезапуск.
|
||
- **Рубильник ВЫКЛ** — снимает лок, останавливает тоннель, перезапускает Claude напрямую.
|
||
- **«Запустить Claude»** — старт Claude через прокси по требованию (ставит лок при необходимости).
|
||
- **«Проверить»** — самопроверка: перечисляет TCP-коннекты Claude и сверяет, что всё идёт через
|
||
прокси/тоннель; вердикт пишется в `%APPDATA%\ClaudeProxy\verify-<время>.log`.
|
||
- Переключение режима заблокировано, пока рубильник ВКЛ.
|
||
|
||
## Режим VLESS + Reality
|
||
|
||
Переключатель режима в шапке. В режиме VLESS поднимается локальный **Xray-core** (вход — SOCKS5
|
||
на `127.0.0.1:10808`, выход — твой VLESS+Reality сервер), Claude направляется на локальный SOCKS,
|
||
наружу-трафик шифрует и тоннелирует Xray. Fail-closed тут строже: `claude.exe` блокируется от
|
||
**всего** внешнего (loopback firewall не трогает) — то есть только в тоннель.
|
||
|
||
1. Переключи режим на **VLESS + Reality**.
|
||
2. Вставь `vless://...` share-link из 3x-ui в поле (оно маскируется — ключи не светятся). «Сохранить».
|
||
3. Рубильник **ВКЛ** — Xray распакуется из встроенного (или кнопкой «Распаковать»), поднимется
|
||
тоннель, Claude уйдёт в него.
|
||
|
||
Парсинг ссылки: Reality (pbk/sni/sid/spx/fp/flow) и транспорты tcp/grpc/ws.
|
||
|
||
## Режим AmneziaWG
|
||
|
||
Третий режим — **AmneziaWG** (WireGuard с обфускацией против DPI). Тоже userspace, без TUN/драйвера/
|
||
админа: встроенный `wireproxy-awg` поднимает локальный SOCKS5 поверх AmneziaWG-туннеля, Claude идёт
|
||
в него (fail-closed как в VLESS).
|
||
|
||
1. Переключи режим на **AmneziaWG**.
|
||
2. Кнопка **«Обзор...»** → выбери свой `.conf` от AmneziaWG (экспорт из приложения Amnezia или
|
||
с сервера — с обфускацией Jc/Jmin/Jmax/S1/S2/H1–H4). «Сохранить».
|
||
3. Рубильник **ВКЛ** — бинарь распакуется из встроенного, поднимется туннель, Claude уйдёт в него.
|
||
|
||
`wireproxy-awg` собирается **из исходников** (`build-wireproxy.ps1`) из зафиксированного,
|
||
проаудированного коммита (форк известного `wireproxy` с официальным `amnezia-vpn/amneziawg-go`).
|
||
|
||
## Требования
|
||
|
||
- Windows 10/11 (нужен встроенный .NET Framework 4.x — есть из коробки).
|
||
- Установленный десктопный **Claude** (MSIX/Store) — детектится автоматически.
|
||
|
||
Настройки хранятся per-user в `%APPDATA%\ClaudeProxy\config.ini`; Xray встроен в exe, ставится в
|
||
`%APPDATA%\ClaudeProxy\bin`. Пинится Xray-core `v26.3.27`.
|
||
|
||
## Сборка
|
||
|
||
```powershell
|
||
powershell -ExecutionPolicy Bypass -File build-native.ps1
|
||
```
|
||
|
||
Компилит через `csc` из .NET Framework (`C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe`,
|
||
есть на любой Windows — SDK не нужен). При первой сборке:
|
||
- скачивает **Xray-core** (пинованную версию, с проверкой SHA256);
|
||
- собирает **wireproxy-awg** из исходников (`build-wireproxy.ps1`: портативный Go + пиновый коммит) —
|
||
нужны `git` и интернет;
|
||
- оба бинаря встраивает как ресурсы; иконку генерит `make-icon.ps1`; манифест — asInvoker.
|
||
|
||
Результат — `dist\ClaudeProxy.exe`.
|
||
|
||
Исходники (`native/`):
|
||
- `Core.cs` — firewall (Windows Firewall COM API), MSIX-активация, Xray, детект приложения.
|
||
- `Support.cs` — конфиг, VLESS-парсер + генератор Xray-конфига, verify (через `netstat`), `Main`.
|
||
- `MainForm.cs` — WinForms UI.
|
||
|
||
Код на **C# 5** (csc из .NET Framework не поддерживает C# 6+).
|
||
|
||
> В репо остались PowerShell/ps2exe-исходники первой версии (`claude-proxy*.ps1`, `build.ps1`) —
|
||
> deprecated. От ps2exe отказались: упакованный exe ловил ложное срабатывание антивируса
|
||
> (эвристика на «PowerShell внутри exe»). Нативный managed-exe этим не страдает.
|
||
|
||
## Как оно себя проверяет
|
||
|
||
Кнопка «Проверить» перечисляет TCP-коннекты процессов Claude и классифицирует каждый удалённый
|
||
адрес: через прокси/тоннель, локальный, заблокированный обход (`SYN_SENT` в никуда) или **утечка**
|
||
(прямой установленный коннект). Вердикт + детали пишутся в лог-файл, который переживает разрыв
|
||
связи. Независимая земля-истина — логи самого прокси/сервера.
|
||
|
||
## Ограничения
|
||
|
||
- Слой 1 зависит от того, что Electron уважает `--proxy-server` (Chromium — да). Если часть
|
||
трафика пойдёт мимо Chromium, при fail-closed она **заблокируется** (не утечёт), но функция
|
||
аппы может не работать.
|
||
- Firewall-правило пинит IP прокси (резолв при включении). Сменился IP — переключи рубильник.
|
||
- Лок переживает перезагрузку; снимается выключением рубильника.
|
||
|
||
## Лицензия
|
||
|
||
Код проекта — **MIT** (см. `LICENSE`). Встроенный **Xray-core** — отдельный компонент под
|
||
**MPL-2.0** (см. `NOTICE.md`); он запускается как отдельный процесс и не меняет лицензию проекта.
|