Отказ от ответственности: Данный материал носит исключительно научно-исследовательский характер и предназначен для специалистов по сетевой безопасности и системных администраторов. Автор не призывает к нарушению законодательства. Все действия по модификации ПО вы выполняете на свой страх и риск.

Техническое примечание: Данный патч разработан и протестирован для Xray-core v26.1.13. Стабильность на других версиях не гарантируется. Перед внесением изменений обязательно создайте резервную копию исполняемого файла.

Ограничения: В связи с особенностями работы таймеров возможны разрывы соединений в чувствительных к задержкам приложениях (онлайн-игры, VoIP).

   

Цели модификации:#

  1. Внесение вариативности задержек (Jitter)

    • Механика: Перед инициализацией каждого исходящего соединения программно вводится случайная пауза в диапазоне 10–50 мс.
    • Назначение: Эмуляция нестабильного канала связи для тестирования устойчивости клиентского ПО и защиты сетевой сессии от автоматизированного статистического анализа.
  2. Принудительная ротация сетевых сессий

    • Механика: Ограничение времени жизни каждого соединения случайным интервалом от 3 до 12 минут.
    • Назначение: Предотвращение накопления аномальных объемов данных в рамках одной сессии. Это позволяет сегментировать поток данных, что соответствует паттернам работы обычных веб-приложений и снижает нагрузку на узлы связи.

 

Шаг 1: Подготовка среды#

Установи необходимые инструменты для сборки и системные утилиты

1
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
1
apt update && apt install golang-go git patch -y

 

Шаг 2: Загрузка исходного кода#

1
cd ~
1
git clone https://github.com/XTLS/Xray-core.git xray-src

 

Шаг 3: Применение патча#

  1. Создай файл патча
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
cat << 'EOF' > ~/xray_custom.patch
# Patch Name: Xray-core Jitter & Session Limit
# Target Version: Xray-core v26.1.13
--- freedom.go
+++ freedom.go
@@ -5,6 +5,7 @@
 	"crypto/rand"
 	"io"
 	"time"
+	"fmt"
 
 	"github.com/pires/go-proxyproto"
 	"github.com/xtls/xray-core/common"
@@ -85,8 +86,20 @@
 	ob.Name = "freedom"
 	ob.CanSpliceCopy = 1
 	inbound := session.InboundFromContext(ctx)
-
 	destination := ob.Target
+
+	myJitter := dice.Roll(40) + 10
+	fmt.Printf("[DEBUG] Соединение: %s | Jitter: %dms\n", destination.String(), myJitter)
+	time.Sleep(time.Duration(myJitter) * time.Millisecond)
+
+	myLife := time.Duration(dice.Roll(540)+180) * time.Second
+	fmt.Printf("[DEBUG] Лимит сессии: %v\n", myLife)
+
+	sessionCtx, sessionCancel := context.WithTimeout(ctx, myLife)
+	defer sessionCancel()
+	ctx = sessionCtx
 	origTargetAddr := ob.OriginalTarget.Address
 	if origTargetAddr == nil {
 		origTargetAddr = ob.Target.Address
@@ -165,7 +178,8 @@
 	}
 
 	plcy := h.policy()
-	ctx, cancel := context.WithCancel(ctx)
+	var cancel context.CancelFunc
+	ctx, cancel = context.WithCancel(ctx)
 	timer := signal.CancelAfterInactivity(ctx, func() {
 		cancel()
 		if newCancel != nil {
EOF
  1. Перейди в папку, где лежит файл freedom.go
1
cd ~/xray-src/proxy/freedom/
  1. Примени изменения из файла патча
1
patch freedom.go < ~/xray_custom.patch

 

Шаг 4: Компиляция#

Собери кастомный файл из измененных исходников

1
cd ~/xray-src/main
1
go build -v -o xray-custom

 

Шаг 5: Активация бинарника#

Замени стандартный исполняемый файл кастомным и перезапути панель

1
systemctl stop x-ui
1
cp ~/xray-src/main/xray-custom /usr/local/x-ui/bin/xray-linux-amd64
1
chmod +x /usr/local/x-ui/bin/xray-linux-amd64
1
systemctl start x-ui

ВАЖНО: Никогда не нажимай кнопку “Update Xray” в веб-интерфейсе панели. Это удалит твой кастомный бинарник.

 

Шаг 6: Проверка работы (Режим отладки)#

Для мониторинга активности в реальном времени используйте ручной запуск

1
systemctl stop x-ui
1
/usr/local/x-ui/bin/xray-linux-amd64 -c /usr/local/x-ui/bin/config.json

После этого подключись и открой пару сайтов.

Когда убедишься, что логи идут, нажми Ctrl + C и верни сервис в работу

1
systemctl start x-ui 

ГОТОВО!