117 lines
5.0 KiB
Markdown
117 lines
5.0 KiB
Markdown
# Server Hysteria2 baseline
|
||
|
||
## Цель документа
|
||
|
||
Зафиксировать правила для серверного слоя Hysteria2 в модели, где UI поставляется вместе с проектом, а Hysteria берётся из official upstream во время установки.
|
||
|
||
## Роль Hysteria2
|
||
|
||
Hysteria2 — основной транспортный компонент сервера.
|
||
Он не форкается и не поставляется как часть UI-форка.
|
||
|
||
## Source policy
|
||
|
||
Базовое правило:
|
||
- Hysteria2 скачивается **во время установки**
|
||
- источник — **официальный upstream**
|
||
- install layer не должен подменять собой upstream-дистрибуцию Hysteria2
|
||
|
||
## Версионная политика
|
||
|
||
С учётом выбранной модели «берём свежее из upstream» фиксируется такая практика:
|
||
|
||
- по умолчанию install layer тянет **свежий upstream release / install source**
|
||
- фактически установленная версия обязательно записывается в `post-install.env`
|
||
- поддерживаются политики `latest | vX.Y.Z` через `HY2XS_HYSTERIA_VERSION`
|
||
- при `vX.Y.Z` install обязан валидировать соответствие фактически установленной версии
|
||
|
||
## Платформа
|
||
|
||
- ОС: только Debian 12
|
||
- init/system management: systemd
|
||
- сетевой фильтр: nftables
|
||
- архитектура baseline: x86_64/amd64
|
||
|
||
## Listen и сеть
|
||
|
||
### Listen
|
||
- только IPv4
|
||
- формат: `0.0.0.0:<PORT>`
|
||
|
||
### Порт
|
||
- один фиксированный UDP-порт
|
||
- этот порт должен совпадать в:
|
||
- server config
|
||
- firewall rules
|
||
- `post-install.env`
|
||
|
||
## Обфускация
|
||
|
||
В baseline включается:
|
||
- `obfs.type: salamander`
|
||
- `obfs.password`
|
||
|
||
Правила:
|
||
- пароль должен быть сильным
|
||
- пароль должен фиксироваться в конфигурационном контуре
|
||
- значение должно быть доступно оператору через runtime config и `post-install.env`
|
||
|
||
## TLS
|
||
|
||
Требования:
|
||
- production default: `acme`
|
||
- поддерживаемые режимы: `acme | file | self_signed_dev`
|
||
- `self_signed_dev` только для dev/lab и только при явном `HY2XS_ALLOW_SELF_SIGNED_DEV=true`
|
||
- корректный `server_name` / SNI на клиентах
|
||
- одна понятная TLS policy
|
||
- без смешивания нескольких несовместимых схем по умолчанию
|
||
|
||
Инварианты:
|
||
- `acme` -> только `acme` block в конфиге;
|
||
- `acme` block обязан содержать `type: http|tls` из runtime env (`HY2XS_ACME_TYPE`);
|
||
- `HY2XS_ACME_TYPE=dns` в production-профиле запрещён до отдельной реализации;
|
||
- `file` -> только `tls.cert`/`tls.key` block;
|
||
- `self_signed_dev` -> только dev сценарии.
|
||
|
||
## Auth policy
|
||
|
||
Для baseline выбирается одна предсказуемая auth-модель.
|
||
|
||
Правила:
|
||
- install flow должен оставить рабочий auth state
|
||
- bootstrap auth material должен быть либо передан оператором, либо безопасно сгенерирован
|
||
- дальнейшая модель выдачи доступа пользователям не фиксируется в этом пакете docs
|
||
|
||
## Bandwidth и congestion
|
||
|
||
Серверная baseline policy:
|
||
- `bandwidth.up = 50 mbps`
|
||
- `bandwidth.down = 50 mbps`
|
||
- `ignoreClientBandwidth = false`
|
||
|
||
Важно:
|
||
- эти параметры сами по себе не исчерпывают speed policy
|
||
- корректный лимит ожидается только в паре с совместимым клиентским конфигом
|
||
|
||
## Рекомендуемые пути
|
||
|
||
- `/etc/hysteria/config.yaml`
|
||
- `/var/lib/hysteria/`
|
||
- `/etc/hy2xs/hy2xs.env`
|
||
- `/etc/hysteria/post-install.env`
|
||
|
||
## Серверные инварианты
|
||
|
||
После установки должно быть верно:
|
||
|
||
1. Hysteria2 получена из official upstream
|
||
2. фактическая версия отражена в `post-install.env`
|
||
3. конфиг валиден
|
||
4. сервис стартует через systemd
|
||
5. нужный UDP-порт реально слушается
|
||
6. тестовый совместимый клиент может подключиться
|
||
7. bundled UI работает поверх актуального состояния сервера
|
||
8. `trafficStats.secret` отдельный от `JWT_SECRET`
|
||
9. IPv6 listen не используется
|
||
10. публичные клиентские endpoint/URL берутся из `HY2XS_PUBLIC_HOST` + `HY2XS_PUBLIC_PORT`, а не из `listen`/request-host
|