Added: - install.sh --selfsigned: no-domain mode with pinnedPeerCertSha256 - uninstall.sh: full removal of what install.sh deploys - Panel v3: TLS/REALITY switch, client rename, log level, backup/restore, version+cert status, traffic stats (xray stats API) - Auto-pin for self-signed certs in generated configs/links - Go tests (14 tests, all passing) - CHANGELOG.md, ARCHITECTURE.md, README.md rewrite - Email defaults to UUID when client name is empty (fixes stats) Fixed: - install.sh SIGPIPE and double-v banner - Mirror drained body bug (iana.org)
4.8 KiB
Executable File
4.8 KiB
Executable File
Архитектура sdm-xray
Документ для разработчиков. Для установки/использования — см. README.
Топология
клиент (ПК/роутер)
→ SOCKS5 127.0.0.1:10808
→ VLESS + stealth (свой фрейминг, HTTP/2, ротация путей)
→ TLS 1.3 (uTLS chrome, ALPN h2)
→ VPS:443
→ xray (сервер) → интернет
→ GET/HEAD от зондов → зеркало реального сайта
Транспорт stealth
Кастомный транспорт Xray-core (поле network: "stealth" в streamSettings).
Каждая сессия = один HTTP/2 POST-стрим (bidirectional).
Wire-протокол
[TLS 1.3] → [HTTP/2 POST на путь] → [тело: кадры]
Формат кадра: [4B длина][1B тип][payload]
| Тип | Значение | Смысл |
|---|---|---|
| DATA | 0x01 | Данные туннеля (VLESS-поток) |
| PAD | 0x02 | Padding (читатель пропускает) |
| AUTH | 0xFE | Первый кадр тела запроса (ключ) |
| CLOSE | 0xFF | Закрытие |
Поведение сервера
- POST на туннельный путь + AUTH → туннель (200 + двунаправленный обмен)
- POST без ключа/неверный ключ → 404 + закрытие
- GET/HEAD (не-туннельные) → reverse-proxy на
target(зеркало)
Зеркало
Сервер реверсивно проксирует GET/HEAD запросы на target (реальный сайт).
Переписывает Location, HTML-ссылки (href/src/content), CSS url() на свой домен.
Лимит тела: 8МБ. Accept-Encoding: identity (для переписывания).
Файлы транспорта
transport/internet/stealth/:
config.proto+config.pb.go— protobuf-конфигурацияconfig.go— регистрация конфига в Xrayframing.go— чтение/запись кадровconn.go— h2Conn (net.Conn поверх HTTP/2 стрима)dialer.go— клиент (TLS/uTLS, ротация, ретрай, decoy)hub.go— сервер (http.Server, зеркало, AUTH)
Изменённые файлы upstream:
infra/conf/transport_internet.go— case "stealth", поле StealthSettingsinfra/conf/transport_method.go— struct StealthConfig + Build()
Сборка (WSL)
cd ~/xray-mod
export PATH="$PATH:/usr/local/go/bin"
GOOS=linux GOARCH=amd64 go build -o build/xray-server-amd64 ./main
GOOS=linux GOARCH=arm64 go build -o build/xray-client-arm64 ./main
GOOS=windows GOARCH=amd64 go build -o build/xray-client-win.exe ./main
Regen protobuf:
protoc -I. --go_out=. --go_opt=paths=source_relative transport/internet/stealth/config.proto
Панель:
cd ~/sdm-panel
GOOS=linux GOARCH=amd64 go build -o sdm-panel-linux-amd64 .
Деплой на VPS
# SFTP: build/xray-server-amd64 → /usr/local/xray/xray
# install -m 755, systemctl restart xray
Конфиги:
/etc/xray/config.json— основной конфиг xray/etc/xray/panel.json— конфиг панели (bind/password/serverName)/etc/xray/server.crt+/etc/xray/server.key— self-signed сертификат (selfsigned-режим)/etc/letsencrypt/live/<domain>/— LE-сертификат (доменный режим)
VPS (актуальные)
| VPS | Домен | IP | Система | xray |
|---|---|---|---|---|
| Основная | pay.dedikar.online | 13.143.132.66 | Ubuntu 24.04 | 978fd1a |
| Старая | vds.dedikar.online | 94.183.182.49 | Ubuntu 24.04 | 8f75aa4 |
Интеграция в DedVpn.App
Копия: C:\Users\dedikar\PsiphonWarp\DedVpn.App
Services/Xray/XrayConfigBuilder.cs— эмитnetwork: "stealth"+stealthSettingsServices/Xray/SingBoxConfigBuilder.cs— guard: stealth не поддерживается в sing-box- vless://-ссылка из панели → импорт в приложение
- Runtime: патченый
xray.exeвruntime/xray/xray.exe
Известные ограничения
- HTTP/2 — один поток, throughput ограничен (~140 Мбит bulk, ~22 Мбит веб)
- Оптимизации (flush-батчинг, окна HTTP/2) провалились — откачены
- Стока REALITY быстрее (голый TLS), но stealth даёт уникальную маскировку
- Клиент и сервер должны быть одной версии форка
- На роутере (ARM Cortex-A53) — CPU для TLS является узким местом