Some checks failed
Published content check / validate (push) Failing after 3s
Обновить правила репозитория и подписи исходников в 99 заметках, не затрагивая пользовательские незакоммиченные файлы. Сделать Forgejo Actions содержательным: проверять опубликованный commit, а не пустое рабочее дерево после checkout.
101 lines
7.4 KiB
Markdown
101 lines
7.4 KiB
Markdown
---
|
||
date: 2026-07-11
|
||
tags:
|
||
- hysteria
|
||
- api
|
||
- мониторинг
|
||
- трафик
|
||
aliases:
|
||
- Hysteria Traffic Stats API
|
||
- Hysteria API трафика
|
||
- Hysteria kick пользователя
|
||
link: https://v2.hysteria.network/docs/advanced/Traffic-Stats-API/
|
||
---
|
||
|
||
# 🦎 Hysteria 2 — Traffic Stats API
|
||
|
||
> [!info] О чём заметка
|
||
> Как включить и использовать HTTP-API статистики Hysteria 2: посмотреть трафик по пользователям, кто сейчас онлайн, и отключить (kick) клиента. Полезно тем, кто раздаёт сервер нескольким людям. Включается в [[Hysteria/config-server|серверном конфиге]]. Обзор протокола — [[Hysteria/00-overview|тут]].
|
||
|
||
## TL;DR
|
||
|
||
- **Traffic Stats API** — встроенный в сервер HTTP-интерфейс: сколько кто накачал (`/traffic`), кто онлайн (`/online`), плюс возможность отключить пользователя (`/kick`).
|
||
- Работает по именам пользователей (id), которые задаются аутентификацией: `userpass`, HTTP-бэкенд или другой способ из [[Hysteria/config-server|серверного конфига]].
|
||
- Включается секцией `trafficStats` с `listen` и `secret`. **Всегда задавайте `secret`** — иначе любой, кто достучится до порта API, увидит статистику и сможет кикать пользователей.
|
||
- Kick сам по себе не блокирует навсегда: клиент переподключится. Чтобы отключить насовсем, надо ещё забанить пользователя в вашем бэкенде аутентификации.
|
||
|
||
## Зачем это нужно
|
||
|
||
Если сервер используете только вы — API, скорее всего, не понадобится. Он полезен, когда сервером пользуется несколько человек (`userpass` или свой бэкенд аутентификации): можно смотреть, кто сколько трафика израсходовал, кто сейчас подключён, и точечно отключать нарушителей — всё через простые HTTP-запросы, которые легко дёрнуть из скрипта или панели.
|
||
|
||
## Включение
|
||
|
||
Добавьте в [[Hysteria/config-server|серверный config.yaml]]:
|
||
|
||
```yaml
|
||
trafficStats:
|
||
listen: :9999
|
||
secret: some_secret
|
||
```
|
||
|
||
- **`listen`** — адрес и порт, где поднимется API.
|
||
- **`secret`** — ключ доступа. Прикладывается к запросам в заголовке `Authorization`.
|
||
|
||
> [!danger] Без secret API открыт всем
|
||
> Если не задать `secret`, любой, у кого есть доступ к адресу API, сможет посмотреть статистику трафика и отключать ваших пользователей. Всегда задавайте `secret`, а лучше — ещё и закройте порт API через [[Hysteria/acl-outbounds|ACL]] или фаервол, чтобы он не торчал наружу. Не вешайте API на публичный интерфейс без крайней необходимости.
|
||
|
||
Запрос с ключом делается так:
|
||
|
||
```shell
|
||
curl -H 'Authorization: some_secret' http://ip:9999/traffic
|
||
```
|
||
|
||
## Эндпоинты
|
||
|
||
### GET `/traffic` — трафик по пользователям
|
||
|
||
Возвращает JSON: id пользователя → сколько байт передано. `tx` — отдача клиента (upload), `rx` — приём клиента (download).
|
||
|
||
```json
|
||
{
|
||
"wang": { "tx": 514, "rx": 4017 },
|
||
"joe": { "tx": 7790, "rx": 446623 }
|
||
}
|
||
```
|
||
|
||
Параметр `?clear=1` обнуляет счётчики после выдачи — удобно для периодического снятия статистики (например, раз в сутки): `GET /traffic?clear=1`.
|
||
|
||
### GET `/online` — кто онлайн
|
||
|
||
Возвращает JSON: id пользователя → число подключений. Важно: считаются **экземпляры клиента (устройства)**, а не активные проксируемые соединения. Значение `2` у пользователя означает, что он подключён с двух устройств.
|
||
|
||
```json
|
||
{ "wang": 2, "joe": 1 }
|
||
```
|
||
|
||
### POST `/kick` — отключить пользователей
|
||
|
||
Принимает JSON-массив id для отключения:
|
||
|
||
```json
|
||
["wang", "joe"]
|
||
```
|
||
|
||
> [!warning] Kick не блокирует навсегда
|
||
> У клиента встроена логика переподключения — после kick он попытается подключиться снова. Чтобы отключить пользователя насовсем, недостаточно kick: нужно ещё заблокировать его в вашем бэкенде аутентификации (или убрать из списка `userpass`). Kick полезен как «сбросить сессию здесь и сейчас», а не как «забанить».
|
||
|
||
### GET `/dump/streams` — детали соединений
|
||
|
||
Возвращает JSON с информацией по каждому QUIC-потоку активных TCP-прокси-соединений: пользователь, запрошенный адрес, «пронюханный» протоколом домен (если включён sniffing), счётчики трафика, время создания и последней активности. Если добавить заголовок `Accept: text/plain`, вывод будет человекочитаемым, похожим на `ss -atn`. Полезно для отладки — увидеть, куда именно ходят соединения конкретного пользователя.
|
||
|
||
## 📚 См. также
|
||
|
||
- [[Hysteria/config-server|Конфиг сервера]] — где включается `trafficStats` и настраивается аутентификация (id пользователей).
|
||
- [[Hysteria/acl-outbounds|ACL и маршрутизация]] — как закрыть порт API от посторонних.
|
||
- [[Hysteria/00-overview|Hysteria 2 — обзор]] — общая картина.
|
||
- 🔗 [Traffic Stats API — официальная документация](https://v2.hysteria.network/docs/advanced/Traffic-Stats-API/)
|
||
|
||
---
|
||
|
||
> [!quote] 🤖 Эти статьи открыты — можно обучать на них ИИ
|
||
> При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование и скачивание всего репозитория одним zip-архивом доступны в Forgejo: [исходник этой заметки](https://git.zapret.moe/zapretdiscordyoutube/todo/src/branch/main/Hysteria/traffic-stats-api.md) · [весь репозиторий](https://git.zapret.moe/zapretdiscordyoutube/todo/src/branch/main).
|