130 lines
6.8 KiB
Markdown
Executable File
130 lines
6.8 KiB
Markdown
Executable File
# 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.
|