Русский · English
Конфигурации обфускации — и объяснение каждого числа в них. Всё считается в браузере: ни ключи, ни конфиги никуда не отправляются.
Инструмент собирает конфигурацию обфускации и объясняет, из чего она состоит. Не «нажми и надейся», а чертёж: у каждого параметра написано, откуда взята его граница, какая сторона его читает и что будет, если стороны разойдутся.
Клиенты умеют генерировать эти параметры сами, и это нормально ровно до того момента, когда туннель не поднимается. Тогда выясняется, что кнопка не объяснила ни что она выбрала, ни что из этого обязано совпасть на сервере.
Движка два, и задача у них одна и та же с разных сторон.
| Что делает | Параметров | |
|---|---|---|
| AmneziaWG | Прячет тип трафика: junk-пакеты перед хендшейком, паддинг сообщений, подмена байта типа. Снаружи это QUIC, TLS или DNS, а не WireGuard. | 23 |
| XRay | REALITY поверх VLESS. Снаружи — настоящее рукопожатие чужого сайта с его же сертификатом; внутри — ваш туннель. | 74 |
Important
Проект создан для исследовательских и образовательных целей и никогда не создавался для использования в России или странах СНГ. Применение инструментов обфускации трафика может нарушать законодательство вашей страны — ответственность за использование лежит на вас.
Обычный WireGuard слишком легко опознать: фиксированный байт типа сообщения и предсказуемые размеры пакетов (148 байт на handshake initiation, 92 на response) позволяют DPI определить протокол по первому же пакету и заблокировать его целиком.
AmneziaWG добавляет поверх той же криптографии слой обфускации. Architect подбирает его параметры так, чтобы они были корректными, совместимыми с вашим клиентом и не воссоздавали случайно тот самый отпечаток, от которого вы уходите.
Junk Jc/Jmin/Jmax |
S1 S2 |
S3 S4 |
CPS I1–I5 |
Заголовки H1–H4 |
Блок 3.x | Флаги 3.1RandomTrailers / DisableCookies |
|
|---|---|---|---|---|---|---|---|
| 1.0 | ✅ | ✅ | — | — | фиксированные | — | — |
| 1.5 | ✅ | ✅ | — | только клиент | фиксированные | — | — |
| 2.0 | ✅ | ✅ | ✅ | ✅ | диапазоны | — | — |
| 3.0 | ✅ | ✅ | ✅ | ✅ | диапазоны | ✅ | — |
| 3.1 | ✅ | ✅ | ✅ | ✅ | диапазоны | ✅ | ✅ |
Параметры выверены по исходникам amneziawg-go v3.0.1, ветки feat/awg3
и тегов v3.1.* репозиториев amneziawg-go и amneziawg-tools, а не по
документации — она на момент написания описывает 2.0.
| Параметр | Что делает |
|---|---|
HeaderProtectionKey |
Общий 32-байтный ключ ChaCha20. Хендшейк и cookie шифруются целиком, транспортные пакеты — только 16-байтный заголовок. В .conf пишется в base64, как PrivateKey; в UAPI — в hex. |
ContentPaddingAddition |
Случайный добавочный паддинг каждого транспортного пакета вместо выравнивания по 16 байт. |
RekeyAfterTimeRekeyTimeoutRejectAfterTimeKeepaliveTimeoutMaxHandshakeAttempts |
Диапазоны вместо фиксированных констант WireGuard — ровный ритм хендшейков перестаёт быть отпечатком. |
RandomTrailers 3.1 |
Случайный по длине хвост в конце каждого исходящего пакета. Согласования с другой стороной не требует. |
DisableCookies 3.1 |
Устройство молчит вместо отправки Cookie Reply. Ломает keepalive за NAT под нагрузкой, поэтому в генераторе выключен по умолчанию. |
Warning
При включённой защите заголовков S1–S4 не могут быть меньше 12. Nonce
шифра нигде не передаётся — он берётся из первых 12 байт S-паддинга, и
паддингу короче двенадцати байт нечего ему дать. Проверять это на практике
не придётся: обе реализации отказываются принимать такой конфиг до подъёма
интерфейса — amneziawg-go возвращает S%d must be more then %d to use headerProtection, модуль ядра пишет ту же фразу в лог и возвращает
-EINVAL. Интерфейс не поднимется, причина будет названа. Генератор
поднимает S до 12 автоматически, а валидатор отклоняет конфиги, где это
нарушено.
Теги <d>, <ds> и <dz> в v3.0.1 разбираются парсером, но не подключены к
отправке пакетов — это задел под AWG 4.0, поэтому генератор их не выдаёт.
Плюс 11 профилей мимикрии (QUIC Initial, QUIC 0-RTT, TLS 1.3, DTLS 1.3,
HTTP/3, SIP, DNS, Noise_IK и композитные) и матрица совместимости на 13
клиентов — у каждого свои потолки, и генератор их знает. Для выбравших
mihomo клиентом генератор рядом с .conf отдаёт прокси-блок в его
YAML-диалекте.
REALITY решает ту же задачу иначе: не маскирует трафик под чужой протокол, а берёт чужое рукопожатие целиком. Наблюдатель видит TLS-сессию с настоящим сайтом-донором и его настоящим сертификатом — потому что это и есть сертификат донора, полученный от него же.
Architect закрывает 74 параметра ядра Xray, разложенных по секциям:
| Секция | Что в ней |
|---|---|
| REALITY | dest, serverNames, ключевая пара x25519, shortIds, spiderX, ограничения версий и fallback-лимиты |
| Транспорт | XHTTP со всеми режимами, xmux, sockopt, TCP/WS/gRPC |
| FinalMask | Постобработка потока поверх выбранного транспорта |
| VLESS | flow, encryption, идентификаторы клиентов |
Каждый параметр помечен: сгенерирован — выбран за вас; задаётся — можно задать самому, и подсказка объяснит, из чего исходить; не покрыт — честно сказано, что до него ещё не дошли руки.
Note
Домен-донор и адрес вашего сервера — разные вещи, и в интерфейсе они лежат в
разных местах. Донор — это чей сертификат вы показываете; сервер — куда на
самом деле идёт соединение. Если dest указывает на один сайт, а serverNames
называет другой, наблюдатель увидит расхождение с одного пассивного взгляда:
Architect на это ругается.
База доменов-доноров — больше 1100 записей с фильтром по регионам, где для каждого указано, что про него известно, а не выдуманный «статус».
Для хостинг-панелей есть отдельная выгрузка: их валидаторы знают только
доядровый словарь (tcp вместо raw), и кнопка «для панели» переименовывает
ровно эти два места — ядро принимает оба написания.
Оба генератора умеют batch-генерацию в Web Worker, историю с экспортом в файл и проверку конфигов до передачи в клиент.
Заявлять и проверять — разные вещи, поэтому:
- Конфиги генерируются тысячами и проверяются на инварианты — в том числе на то, что ключевой материал не повторяется между генерациями.
- Пакеты разбираются как свои протоколы: QUIC по RFC 9000, TLS по 8446, DNS по 1035.
- Конфигурации XRay скармливаются настоящим ядрам в Docker — по ядру на версию. Одно ядро на всех не доказывает ничего: неизвестные ключи молча игнорируются, и конфиг с несуществующей фичей пройдёт.
Так нашлись три ошибки, которые тесты пропустили бы: VLESS Encryption, предложенный для v25.8.29, где его нет; ML-DSA-65 как необязательный на v25.7.23, где он обязателен; и режим XHTTP, которого нет в v24.11.11.
Бэкенда нет — принимать данные попросту нечему. Ни аналитики, ни трекеров, ни
cookies, ни сторонних скриптов; шрифты отдаются со своего домена, а не из Google
Fonts. Вся случайность берётся из crypto.getRandomValues() с отбраковкой,
исключающей смещение по модулю — Math.random() в генераторах нет нигде.
Страницу можно сохранить через Ctrl+S и пользоваться офлайн.
Онлайн: architect.vai-rice.space
git clone https://github.com/Vadim-Khristenko/Any-Tech-ARCHITECT.git
cd Any-Tech-ARCHITECT
bun install
bun run dev| Команда | Что делает |
|---|---|
bun run dev |
Dev-сервер с HMR |
bun run build |
Продакшн-сборка: заглушки для ботов, sitemap.xml, robots.txt |
bun run preview |
Просмотр собранного проекта |
bun run test:run |
Прогон тестов |
bun run typecheck |
Проверка типов |
bun run og |
Пересборка OG-изображений и превью для GitHub |
В релизных архивах лежит awg-serve — статический сервер на Rust без единой
зависимости, собранный под Linux, macOS и Windows. Ничего ставить не нужно:
bin/awg-serve-linux # Linux
bin/awg-serve-macos # macOS
bin\awg-serve-windows.exe # WindowsПорт по умолчанию 8080 (awg-serve 3000 — свой), --no-open не открывать
браузер. Исходник — в tools/awg-serve.
Скрипты scripts/serve.* остаются как альтернатива: они найдут bun, npx или
python, а --check покажет, что нашлось, ничего не запуская.
Если браузер недоступен — те же правила в виде обычного shell-скрипта, без зависимостей и без сети. Скрипт умеет только AmneziaWG; XRay пока живёт в браузере:
./scripts/awg-gen.sh -v 3.0 -p quic # один конфиг в stdout
./scripts/awg-gen.sh -v 3.0 -n 5 -d out/ # пять конфигов в каталог
./scripts/awg-gen.sh --help # все параметрыКонфигурация — половина дела; вторая половина — сервер, который её примет. Для
этого есть отдельный проект:
awg-containers-and-tools
— контейнеры AmneziaWG под все четыре версии протокола (1.0, 1.5, 2.0, 3.0) и
утилита awg-tool для развёртывания.
awg-tool gen --version 3.0 --profile quic --client amneziavpn
awg-tool install --host 203.0.113.9 --user root --key ~/.ssh/id_ed25519Особенно он нужен для 3.0: официальный пайплайн настройки конфигурации этой
версии не разбирает, поэтому awg-tool обходит парсер .conf и говорит с
демоном напрямую через UAPI-сокет. Параметры рандомизируются на каждое
развёртывание — чтобы разные инстансы не выглядели для DPI одинаково.
Проект неофициальный и поддерживается сообществом, как и Architect.
Ссылка на GitHub в разделе про заблокированный GitHub — так себе помощь, поэтому вот зеркала на своём Forgejo. Ими можно делиться:
| Что | Зеркало |
|---|---|
| Architect (этот репозиторий) | git.vai-rice.space/vai_prog/Any-Tech-ARCHITECT |
| Установщик для сервера | git.vai-rice.space/vai_prog/awg-containers-and-tools |
| Приложения Amnezia | git.vai-rice.space/amnezia-vpn |
git clone https://git.vai-rice.space/vai_prog/Any-Tech-ARCHITECT.gitПервые два — зеркала моих репозиториев. Третье, с приложениями Amnezia, независимое, а не официальный сайт Amnezia: сверяйте контрольные суммы и подписи релизов перед установкой.
Пишите — это лучший способ починить то, о чём мы не знаем. Заводите
issue,
присоединяйтесь к обсуждению в чате, а вскоре и на git.vai-rice.space.
Если проблема в конкретном конфиге, приложите версию AmneziaWG или Xray, клиент и его версию, а также сами параметры — без приватных ключей. Этого почти всегда достаточно, чтобы воспроизвести.
Разбор кода со ссылкой на исходники upstream — самый полезный вид issue, какой тут бывает: так были найдены и исправлены три ошибки в правилах и в тексте, о которых иначе никто бы не узнал.
Как устроена разработка — в CONTRIBUTING.md.
Проект живёт на энтузиазме: ни рекламы, ни спонсоров, ни монетизации.
Криптовалюта — BTC, ETH, TON, USDT, TRX, SOL
[!CAUTION] Проверяйте сеть перед отправкой: перевод в неверной сети означает безвозвратную потерю средств.
| Монета | Сеть | Адрес |
|---|---|---|
Bitcoin BTC |
Bitcoin · Native SegWit | bc1qwvfpdhjuzelw8s9vxcfjj6fatnq3cltf0d48jy |
Ethereum ETH |
Ethereum · ERC-20 | 0x277195Ff068756F09683FAB523b2cdDf8Ef35B44 |
Toncoin TON |
The Open Network | UQBVdcwKqy8lx_2plsf2YPbcBJdYbPtnKbddmFWZntqiAEME |
Tether USDT |
JETTON · TON | UQCaNScHxNbJsCi5Wc47rJqNpJPiDASUlMJ1nRwxq-hXSGoQ |
Tron TRX |
Tron · TRC-20 | TC8dYqkDYQkuCKe7A6PWXUgDRB8Rr2Xd9f |
Solana SOL |
Solana | 4i2uWx82jhgVorPQyM2y47X2YvRgCVNNWPfNmVrGcCaE |
Другие мои проекты — на vai-rice.space
Основано на идеях Special Junk Packet List от @VoidWaifu
MIT · Сделано для сообщества AmneziaVPN



