From 7d1afa75f52f97f94382c6a6df076082ca3d58f2 Mon Sep 17 00:00:00 2001 From: Nikita Korotaev <104270279+iambabyninja@users.noreply.github.com> Date: Sun, 6 Apr 2025 21:08:52 +0500 Subject: [PATCH] RU REALITY: Add rate limiting to fallback handling via token bucket --- docs/ru/config/transport.md | 55 +++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/docs/ru/config/transport.md b/docs/ru/config/transport.md index 3e1f5a8..7f9a684 100644 --- a/docs/ru/config/transport.md +++ b/docs/ru/config/transport.md @@ -286,6 +286,12 @@ x25519Kyber768Draft00 "maxClientVer": "", "maxTimeDiff": 0, "shortIds": ["", "0123456789abcdef"], + "limitUploadRate": 0, + "limitUploadBrust": 0, + "limitUploadAfter": 0, + "limitDownloadRate": 0, + "limitDownloadBrust": 0, + "limitDownloadAfter": 0, "fingerprint": "chrome", "serverName": "", "publicKey": "", @@ -319,7 +325,9 @@ Reality лишь модифицирует TLS, и для реализации н ::: warning Из соображений маскировки Xray будет **непосредственно перенаправлять** трафик с неудачной аутентификацией (недопустимый запрос REALITY) на `dest`. Если IP-адрес сайта `dest` особый (например, сайт использует CloudFlare CDN), это равносильно тому, что ваш сервер действует как port forward для CloudFlare, что может привести к злоупотреблению. + Чтобы этого избежать, можно рассмотреть возможность использования Nginx и других методов для фильтрации нежелательных SNI. +Или вы также можете рассмотреть настройку соответствующих параметров `limit****`, чтобы ограничить скорость. ::: > `xver` : number @@ -358,6 +366,53 @@ Reality лишь модифицирует TLS, и для реализации н Если содержит пустое значение, `shortId` клиента может быть пустым. +::: warning +Предупреждение: Лучшей практикой для REALITY всегда является использование сертификата из той же ASN, поэтому, скорее всего, вам эта функция не понадобится; только если вы вынуждены использовать сертификат CDN, можно рассмотреть включение этой функции, чтобы избежать превращения вашего сервера в узел для других. + +Включение ограничения скорости может ввести новые характеристики, обнаруживаемые GFW! Если вы разработчик GUI/панели/скрипта установки в один клик, обязательно рандомизируйте эти параметры! +::: + +::: tip +Следующие шесть параметров `limit****` являются необязательными и позволяют ограничить скорость для проксируемых REALITY-соединений. По умолчанию установлено значение 0, что означает "не включено". + +Принцип: Алгоритм ограничения скорости активируется после передачи `after` байт. +Ограничение скорости использует алгоритм Token Bucket. Емкость ведра равна `brust`. Каждый переданный байт расходует один токен. Изначально ведро `brust` заполнено. +Ведро пополняется со скоростью `rate` токенов в секунду, пока не достигнет полной емкости. + +Пример: `after=10485760`, `brust=5242880`, `rate=1048576` означает, что после передачи `10 МБ` скорость будет ограничена до `1 МБ/с`. Если передача приостановлена, через 5 секунд возможен всплеск скорости до `5 МБ/с`, после чего скорость снова вернется к `1 МБ/с`. + +Рекомендации: Слишком большие значения `after` и `brust` не обеспечат эффективного ограничения скорости, тогда как слишком маленькие `rate` и `brust` могут быть легко обнаружены. +Параметры следует устанавливать разумно, учитывая размер ресурсов сайта, с которого "заимствуется" сертификат. Если всплески скорости нежелательны, можно установить `brust` равным `rate`. +::: + +> `limitUploadRate` : number + +Необязательный параметр. Ограничивает базовую скорость загрузки (upload) для проксируемых REALITY-соединений (байт/секунду). +Не может быть больше, чем `limitUploadBrust`. + +> `limitUploadBrust` : number + +Необязательный параметр. Ограничивает пиковую (burst) скорость загрузки (upload) для проксируемых REALITY-соединений (байт/секунду). +Не может быть меньше, чем `limitUploadRate`. + +> `limitUploadAfter` : number + +Необязательный параметр. Ограничение скорости загрузки (upload) для проксируемых REALITY-соединений начинается после передачи указанного количества байт. + +> `limitDownloadRate` : number + +Необязательный параметр. Ограничивает базовую скорость скачивания (download) для проксируемых REALITY-соединений (байт/секунду). +Не может быть больше, чем `limitDownloadBrust`. + +> `limitDownloadBrust` : number + +Необязательный параметр. Ограничивает пиковую (burst) скорость скачивания (download) для проксируемых REALITY-соединений (байт/секунду). +Не может быть меньше, чем `limitDownloadRate`. + +> `limitDownloadAfter` : number + +Необязательный параметр. Ограничение скорости скачивания (download) для проксируемых REALITY-соединений начинается после передачи указанного количества байт. + ::: tip Ниже приведена конфигурация для **исходящего** подключения (**клиента**). :::