Files
claude-proxy/README.md
T
gusadmin 39b58e1a77 Add AmneziaWG mode (wireproxy-awg userspace SOCKS)
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>
2026-07-10 14:58:21 +03:00

118 lines
8.6 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.
# 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/H1H4). «Сохранить».
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`); он запускается как отдельный процесс и не меняет лицензию проекта.