Files

130 lines
6.8 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# sdm-xray
Собственный анти-DPI туннель: форк [Xray-core](https://github.com/XTLS/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
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
bash <(curl -fsSL https://git.my-handbook.ru/ded_ikar/sdm-xray/raw/main/install.sh) --selfsigned
```
Адрес сервера в клиенте — IP VPS. Сертификат не требует домена/ACME.
### Удаление
```bash
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-туннель:
```bash
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](https://git.my-handbook.ru/ded_ikar/sdm-xray/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:
```bash
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
```
Панель:
```bash
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.