Files

6.8 KiB
Executable File

sdm-xray

Собственный анти-DPI туннель: форк Xray-core с кастомным транспортом stealth. Клиент → своя VPS, трафик выглядит как обычный HTTPS-запрос к сайту.

Как это работает

Каждая туннельная сессия — один HTTP/2 POST-стрим поверх TLS 1.3. Снаружи выглядит как обычный POST-запрос к API реального сайта. Для зондов/DPI — зеркало реального сайта (по умолчанию iana.org): многостраничный сайт, ссылки переписаны на ваш домен.

Ключевые возможности:

  • Ротация путей — каждый запрос идёт по случайному пути из списка
  • Ретрай — при неудаче клиент автоматически пробует другой путь/порт
  • Padding/pacing — маскирует размеры и тайминги под браузер
  • Зеркало — зонд видит настоящий сайт, а не заглушку
  • REALITY — опционально, для полного сокрытия (чужой домен)

Установка на VPS

С доменом (рекомендуется)

Домен должен указывать A-записью на IP VPS, порт 80 открыт:

bash <(curl -fsSL https://git.my-handbook.ru/ded_ikar/sdm-xray/raw/main/install.sh) ваш-домен.ru

Скрипт установит xray + панель, получит сертификат Let's Encrypt, напечатает клиентский конфиг и пароль панели.

Без домена (self-signed)

Домен не нужен — сервер генерирует самоподписанный сертификат (10 лет), клиенты доверяют по отпечатку:

bash <(curl -fsSL https://git.my-handbook.ru/ded_ikar/sdm-xray/raw/main/install.sh) --selfsigned

Адрес сервера в клиенте — IP VPS. Сертификат не требует домена/ACME.

Удаление

bash <(curl -fsSL https://git.my-handbook.ru/ded_ikar/sdm-xray/raw/main/uninstall.sh)

Полностью удаляет systemd-юниты, бинари, конфиги, nginx-сайт, LE-сертификат. apt-пакеты не трогает.

Панель управления

Go-бинарник на VPS, слушает 127.0.0.1:8080. Доступ через SSH-туннель:

ssh -L 8080:127.0.0.1:8080 root@<vps-ip>
# затем http://localhost:8080  (login: admin / пароль из вывода install.sh)

Возможности:

  • Статус сервера (активность, версия, сертификат)
  • Управление клиентами (добавление/удаление/переименование, ротация UUID)
  • Туннель (зеркало, маскировка, экспертные настройки, TLS/REALITY)
  • Статистика (трафик по клиентам, онлайн-IP)
  • Логи, рестарт, бэкап/восстановление конфига
  • Логин + пароль для входа (по умолчанию admin / генерируется при установке)

Клиенты

Windows

Скачать xray-stealth-client-windows-amd64.exe из Releases, сохранить client-stealth.json (из вывода install.sh), запустить:

xray-stealth-client-windows-amd64.exe run -c client-stealth.json

SOCKS-прокси: 127.0.0.1:10808, HTTP-прокси: 127.0.0.1:10809.

Роутер (ARM64)

xray-stealth-client-linux-arm64 — положить в /tmp, тот же конфиг. SOCKS 127.0.0.1:10808 или TUN + policy routing.

Параметры транспорта

Параметр По умолчанию Описание
key — Общий секрет (клиент и сервер)
paths ["/api/t04d12b46/"] Туннельные пути (ротация)
ports [443] Порты (ротация, опция)
padMax 2048 Максимальный размер PAD-кадра
padProb 50 Вероятность PAD после DATA (%)
paceMs 0 Минимальный интервал между кадрами (мс)
paceJitterMs 0 Случайный довесок к paceMs (мс)
bps 0 Rate-limit (0 = выкл)
target — Зеркало (URL сайта для зондов)
retries 3 Количество ретраев
padProfile "browser" "browser" или "uniform"
decoy false Фоновый трафик к CDN

Сборка из исходников

Нужны Go 1.26, protoc, protoc-gen-go:

GOOS=linux GOARCH=amd64  go build -o xray-server-amd64 ./main   # сервер
GOOS=linux GOARCH=arm64  go build -o xray-client-arm64 ./main   # роутер
GOOS=windows GOARCH=amd64 go build -o xray-client-win.exe ./main # Windows

Панель:

cd panel && go build -o sdm-panel-linux-amd64 .

Структура репозитория

├── stealth/transport/internet/stealth/  # Код транспорта (новые файлы)
│   ├── config.proto + config.pb.go     # Конфигурация (protobuf)
│   ├── framing.go                       # Формат кадров
│   ├── conn.go                          # net.Conn поверх HTTP/2 стрима
│   ├── dialer.go                        # Клиент (TLS, ротация, ретрай)
│   └── hub.go                           # Сервер (зеркало, AUTH)
├── panel/                               # Панель управления (Go)
│   ├── main.go                          # HTTP-сервер + API
│   ├── ui.go                            # Встроенный HTML
│   └── stats/                           # Генерированные gRPC-стабы
├── install.sh                           # Установка на VPS
├── uninstall.sh                         # Удаление
├── PROTOCOL.md                          # Спецификация wire-протокола
├── CHANGELOG.md                         # История изменений
└── LICENSE                              # MPL-2.0

Лицензия

MPL-2.0. Новые файлы транспорта — наш код; изменённые файлы upstream (Xray-core) распространяются под MPL-2.0.