ddf0ddf71e
Сквозная миграция HY2XS на современную Hysteria (2.12.2) и переход на v1. Build: - версия Hysteria резолвится на этапе сборки из HyNetworks/hysteria и замораживается в metadata пакета (version + immutable url + sha256); - compatibility gate: реальный бинарник должен принять канонический конфиг HY2XS для gecko и salamander до создания пакета; - сборка прогоняет тесты оркестратора и админки. Конфигурационный контракт: - HY2XS_CONFIG_SCHEMA_VERSION=2, чужая схема отклоняется fail-fast; - obfs стал настоящим union gecko|salamander, gecko — default; - obfs-блок рендерится оркестратором целиком, два подтипа одновременно структурно невозможны; - современный baseline: congestion bbr/standard, disableLossCompensation=false, disableStatelessReset=false, полный quic-блок. Исправления: - share URI для gecko: генератор был завязан на Obfs.Salamander.Password и выдавал нерабочую ссылку при любой другой обфускации; - SNI брался только из ACME-блока и уходил пустым при HY2XS_TLS_MODE=file; - экспорт конфига выносил trafficStats.secret, access_token и obfs-пароль; - экспорт терял неизвестные upstream-поля при round-trip через типизированную модель; - renderRuntimeEnv печатал тип обфускации литералом, расходясь с конфигом; - namedotcom удалён из ACME-реестра (нет в Hysteria с 2.11.0). Тесты: - 95 тестов оркестратора: env, рендер, семантика профиля, резолвер, rollover; - тесты URI и экспорта в Go; - tools/test/e2e-hysteria.sh с реальным клиентом Hysteria. UX: - подсказки и примеры в форме создания пира. Прочее: CHANGELOG.md, .gitattributes (LF для target-side файлов), документация на русском.
9.5 KiB
9.5 KiB
Изменения HY2XS
Формат основан на Keep a Changelog. Проект использует семантическое версионирование.
Версия относится к самому HY2XS, а не к Hysteria: версия Hysteria выбирается на этапе сборки пакета и фиксируется в его metadata.
Unreleased
1.0.0 — 2026-08-27
Первый релиз линейки v1.
Обновление с
0.xне поддерживается. Между0.xи1.0.0изменились схема конфигурации, тип обфускации по умолчанию и контракт выбора версии Hysteria. Сервер, установленный из пакета0.x, нужно поднимать заново: очистка и установка с нуля. Подробности — в разделе «Миграция с 0.x» ниже.
Добавлено
- Разрешение версии Hysteria на этапе сборки. Builder по умолчанию сам
определяет последний стабильный upstream-релиз, скачивает артефакт,
вычисляет SHA-256 и замораживает
version+url+sha256в metadata пакета. Target-сервер по-прежнему скачивает конкретный неизменяемый артефакт и никогда не обращается к movinglatest. - Compatibility gate в сборке. До создания release-пакета builder рендерит канонический конфиг HY2XS тем же кодом, что и оркестратор, и запускает с ним реальный бинарник Hysteria — для обоих профилей обфускации. Несовместимый upstream ломает сборку, а не сервер оператора.
- Поддержка Gecko-обфускации (Hysteria 2.9.2+) со сквозной интеграцией:
оркестратор, шаблон конфига, модель админки, генерация
hysteria2://URI, типы и формы фронтенда. - Версия схемы конфигурации
HY2XS_CONFIG_SCHEMA_VERSION=2. Пакет отказывается работать с конфигурацией неизвестной схемы вместо того, чтобы молча применить чужие значения. - Современный серверный baseline в генерируемом конфиге:
congestion.type: bbr+bbrProfile: standard,bandwidth.disableLossCompensation: false,quic.disableStatelessReset: false, а такжеmaxIdleTimeout,maxIncomingStreams,disablePathMTUDiscovery. - Модель современной схемы Hysteria в админке:
obfs.gecko,ech,congestion,mimic,realm,tls.clientCA,quic.disableStatelessReset,bandwidth.disableLossCompensation,masquerade.proxy.xForwarded. Поля читаются и отображаются, даже если HY2XS не включает их в default-профиль. - Тесты оркестратора (
bun test): разбор env, рендер конфига, семантические инварианты профиля, резолвер upstream-релизов, release rollover. - E2E-проверка с реальным клиентом Hysteria —
tools/test/e2e-hysteria.sh: TLS и obfs handshake, HTTP auth (допуск и отказ), TCP и UDP forwarding, trafficStats, per-peer accounting, переподключение после перезапуска сервера и подключение клиента именно по сгенерированной ссылке. CHANGELOG.mdв корне репозитория.
Изменено
- Обфускация по умолчанию для новых установок — Gecko. Salamander
остаётся полностью поддержанным режимом совместимости и выбирается через
HY2XS_HYSTERIA_OBFS_TYPE=salamander. - Gecko использует upstream-defaults
512/1200и не выносит размеры пакетов в env: официальная URI-схема не умеет их передавать, поэтому нестандартные значения сделали бы клиентскую ссылку неполной. - Тип обфускации больше не собирается внутри статического YAML.
Оркестратор формирует проверенный
obfs-блок целиком, поэтому комбинация видаtype: geckoрядом с блокомsalamanderструктурно невозможна. - Экспорт конфига Hysteria работает от исходного YAML, а не от типизированной модели: поля, о которых HY2XS ещё не знает, переживают выгрузку.
- Smoke-проверки разбирают YAML и сверяют его с production-профилем, вместо поиска подстрок.
- Канонический upstream-репозиторий —
HyNetworks/hysteria(вместо устаревших ссылок наapernet). - Реестр ACME DNS-провайдеров во фронтенде приведён к актуальному
upstream: добавлены
namecheap,njalla,porkbun. - Дефолты формы Hysteria во фронтенде отражают baseline HY2XS (50/50 Mbps, Let's Encrypt, каталог ACME), а не пример из upstream-доки.
- Сборка запускает тесты оркестратора и админки до упаковки.
Исправлено
hysteria2://для Gecko. Генератор ссылок был завязан наObfs.Salamander.Password, поэтому при любой другой обфускации выдавал формально корректную, но неработающую ссылку без параметровobfs.- SNI в клиентской ссылке при файловых сертификатах. SNI брался только
из ACME-блока, поэтому при
HY2XS_TLS_MODE=fileуходил пустым. Теперь источник — ACME-домен, затемHY2XS_DOMAIN, затемHY2XS_PUBLIC_HOST; IP-адрес в качестве SNI не используется. - Утечка секретов в экспорте конфига. Выгружаемый оператору YAML
содержал
trafficStats.secret,access_tokenв auth-URL и пароль обфускации. Секреты вырезаются, включая поля, о которых HY2XS ещё не знает. - Расхождение runtime-конфига с разобранным.
renderRuntimeEnvпечатал тип обфускации и режим auth литералами, игнорируя фактическую конфигурацию, — из-за чего запись/etc/hy2xs/hy2xs.envмогла разойтись с тем, что реально применено. - Смешение веток
obfsв UI. Форма склеивала дефолт с ответом API и показывала блок обфускации, которого нет в конфиге сервера. namedotcomв списке ACME DNS-провайдеров. Провайдер удалён из Hysteria в 2.11.0; конфигурация с ним больше не запускается.- Отсутствие подсказок в форме создания пира. У полей «Пир», «Комментарий» и «Секрет» не было ни примеров, ни пояснений: оператор не мог понять без документации, что секрет необязателен и генерируется автоматически.
Безопасность
- Переход на Hysteria 2.12.2 закрывает исправления, вышедшие после 2.8.2, включая обход UDP ACL, возможный OOM через sniff и обход ACL через домены с завершающей точкой (2.9.2).
- Экспорт конфига больше не выносит секреты за пределы сервера.
Миграция с 0.x
Автоматическая миграция не предусмотрена и не планируется.
Порядок перехода:
- Выпишите с работающего сервера список пиров и их секреты.
- Разверните
1.0.0на чистом Debian 13 из release-пакета. - Заведите пиров заново и раздайте новые клиентские ссылки.
Клиентские ссылки 0.x в любом случае перестанут работать: смена
обфускации — это изменение wire-совместимости.