Files
HY2XS_flamy/docs/06-speed-limits-and-congestion.md
T
founder ddf0ddf71e feat(v1): Gecko-обфускация, latest-stable Hysteria на сборке и forward-compatible admin
Сквозная миграция 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 файлов),
документация на русском.
2026-08-27 08:15:02 +05:00

5.1 KiB
Raw Permalink Blame History

Speed limits and congestion policy

Цель документа

Зафиксировать корректную speed policy без неточных упрощений.

Что нельзя считать правильной схемой

Нельзя описывать baseline так:

  • на сервере включили host BBR
  • выдали какой-то URI
  • автоматически получили строгий лимит 50 Mbps на клиента

Это неверная модель.

Три разные вещи, которые нельзя смешивать

Это главный источник путаницы в теме скоростей Hysteria.

Механизм Что это Где задаётся
Политика HY2XS 50/50 продуктовое решение проекта, сколько давать клиенту HY2XS_HYSTERIA_BANDWIDTH_UP / _DOWN
Brutal bandwidth режим Hysteria, работающий по согласованным сторонами значениям полосы bandwidth.up / bandwidth.down на сервере + hints на клиенте
Fallback congestion controller что делает Hysteria, когда Brutal не применяется congestion.type / congestion.bbrProfile

50 mbps здесь — не «оптимальная скорость Hysteria» и не свойство протокола. Это политика HY2XS.

Что зафиксировано в baseline

На сервере

  • bandwidth.up = 50 mbps
  • bandwidth.down = 50 mbps
  • bandwidth.disableLossCompensation = false
  • ignoreClientBandwidth = false
  • congestion.type = bbr
  • congestion.bbrProfile = standard

На клиенте

Совместимый клиентский конфиг должен задавать соответствующие bandwidth hints:

  • up_mbps = 50
  • down_mbps = 50

Практический смысл

Ожидаемый 50/50 Mbps contract считается корректным только тогда, когда сервер и клиентская конфигурация согласованы.

Логика выбора внутри Hysteria:

  • когда стороны согласовали Brutal bandwidth — используется Brutal;
  • когда это не применяется — используется выбранный fallback congestion controller.

Поэтому BBR тоже является частью явного baseline HY2XS, а не «настройкой по умолчанию, о которой можно не думать».

Loss compensation

bandwidth:
  disableLossCompensation: false

Компенсация потерь (появилась в Hysteria 2.10.0) позволяет отправлять быстрее заданной полосы, чтобы компенсировать потерю пакетов. В baseline HY2XS она включена, а значение фиксируется в конфиге явно — проект про воспроизводимое поведение, а не про молчаливое следование upstream-дефолтам.

Что делать с host-level BBR

net.ipv4.tcp_congestion_control=bbr можно оставить как общий системный тюнинг, но:

  • это не главный механизм speed policy Hysteria2;
  • это не замена клиентским bandwidth hints;
  • это не то же самое, что congestion.type: bbr в конфиге Hysteria — у Hysteria собственный congestion-control контур поверх QUIC;
  • это не центр документации по лимитам.

Что фиксировать в post-install.env

Минимум:

  • HY2_BANDWIDTH_UP
  • HY2_BANDWIDTH_DOWN
  • HY2_IGNORE_CLIENT_BANDWIDTH
  • HY2_DISABLE_LOSS_COMPENSATION
  • HY2_CONGESTION_TYPE
  • HY2_BBR_PROFILE

Дополнительно фиксируется HY2_VERSION как фактически установленная версия Hysteria2 и HY2_RESOLUTION как способ её выбора при сборке пакета.

Что нельзя писать в проектных доках

Не писать:

  • «лимит задаётся только на сервере, клиент не важен»
  • «любой URI достаточно для полной speed policy»
  • «host BBR и есть логика Hysteria»
  • «50 mbps — оптимальная скорость Hysteria» (это политика HY2XS, а не свойство протокола)
  • «Brutal и congestion controller — одно и то же»

Правильная baseline-формулировка

Пер-клиентный лимит 50/50 Mbps обеспечивается согласованной серверной и клиентской конфигурацией. Install baseline отвечает за серверную часть этого контракта; конкретный delivery/access слой в этот документ не входит.