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

8.6 KiB
Raw Permalink Blame History

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 -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); он запускается как отдельный процесс и не меняет лицензию проекта.