Форматы ссылок¶
Всё, что понимает клиент, — в одном месте. Регистр схемы не важен.
Ссылки на серверы¶
| Схема | Что внутри |
|---|---|
vless:// vmess:// trojan:// ss:// socks:// |
Стандартные share-ссылки, как их выдаёт любая панель |
wireguard:// · amneziawg:// · awg:// · wg:// |
base64 обычного файла WireGuard .conf — того же текста, что принимает официальный клиент — или base64 JSON-настроек в стиле xray |
hysteria2:// · hy2:// |
Принимается и сохраняется, но пока не поддерживается ядром xray — такой сервер не подключится |
Base64 читается снисходительно — обычный и URL-safe алфавит, с выравниванием и без.
#fragment задаёт отображаемое имя (percent-encoded). Он же может нести описание сервера — см. раздел 04a.
Что показывает «Посмотреть конфиг»¶
Правило одно: если в ссылке base64 — показывается расшифрованное содержимое, иначе ссылка как есть. Поэтому wireguard://<base64> покажет читаемый .conf, а vless://uuid@host:443?… останется ссылкой — расшифровывать нечего. JSON выводится с отступами.
Подписки¶
По адресу подписки может вернуться:
-
обычный текст — по одной ссылке в строке;
-
base64 того же списка;
-
JSON — полный конфиг xray или контейнер с несколькими серверами WireGuard/AmneziaWG:
type принимается как amneziawg, awg, wireguard или wg. Битая запись пропускается, а не рушит всю подписку.
Зашифрованные значения заголовков¶
Значения заголовков можно передавать в закрытом виде — чтобы ссылки и настройки не расходились в открытую. Любой заголовок подписки может нести значение в зашифрованном виде — с тем же префиксом crypt1/, что и deep-links:
routing-update-url: crypt1/<base64>
routing: crypt1/<base64>
autorouting: crypt1/<base64>
s-dns: crypt1/<base64>
s-fragment: crypt1/<base64>
s-resolve: crypt1/<base64>
s-noise: crypt1/<base64>
new-url: crypt1/<base64>
s-siteurl: crypt1/<base64>
Клиент отрезает префикс, расшифровывает и дальше работает с результатом так же, как если бы он пришёл открытым текстом. Без префикса ничего не меняется — существующие подписки продолжают работать как есть. Шифрование необязательное и по-заголовочное: в одном ответе можно свободно смешивать зашифрованные и открытые значения.
Шифрование — ровно то же, что у ссылок smproxy://crypt1/…: AES-256-GCM, nonce || ciphertext || tag, base64, под тем же общим ключом. Панели, которая уже выдаёт такие ссылки, новый код не нужен: зашифруйте значение, добавьте префикс crypt1/ и положите в заголовок.
Чтобы получить зашифрованное значение вообще без кода, используйте публичный генератор — авторизация не нужна. В ответе два поля: link — готовая ссылка целиком, cryptedPart — только зашифрованная часть, её и подставляют в заголовок после префикса crypt1/.
POST https://provider.smproxy.io/public/crypto-link
{ "url": "https://example.com/routing.json" }
→ {
"link": "smproxy://crypt1/AbCd…",
"cryptedPart": "AbCd…"
}
routing-update-url: crypt1/AbCd…
s-dns: crypt1/AbCd…
Генератор зашифрованных ссылок → — публичный, без регистрации. Все инструменты: Генераторы ссылок.
Принимаются оба разделителя — crypt1/<base64> и crypt1:<base64> — но используйте слэш: так же, как в deep-links, и формат один на всё.
⚠ Это обфускация, а не секретность. Ключ зашит в каждом клиенте, поэтому любой, кто разберёт приложение, прочитает эти значения. Это убирает адрес профиля с глаз — от беглого взгляда на трафик или от пересылки в чат — и не более того. Не прячьте так ничего действительно чувствительного.
Deep-links¶
Принимаются две схемы: smproxy:// (текущая) и smartvpn:// (до переименования, оставлена рабочей для уже выданных ссылок). Это касается только кликабельных ссылок — систему открывает приложение, зарегистрированное на эту схему. Внутри заголовков routing / autorouting принимается любое слово схемы (раздел 07a).
| Ссылка | Действие |
|---|---|
smproxy://add?url=<encoded URL> |
Добавить подписку |
smproxy://add/<https://…> · add/<base64 URL> |
То же, в виде пути |
smproxy://crypt1/<base64> |
Добавить из зашифрованной полезной нагрузки |
smproxy://routing/add/<base64\|url> |
Импортировать профиль маршрутизации, не переключаясь на него |
smproxy://routing/onadd/<base64\|url> |
Импортировать и включить |
smproxy://autorouting/add\|onadd/<url> |
То же плюс обновление с этого адреса |
smproxy://routing/off |
Выключить маршрутизацию |
Полезная нагрузка может передаваться и как ?data=<base64>. Для ссылок маршрутизации по адресу может лежать JSON профиля, его base64 или другая ссылка smproxy:// — разрешаются все три варианта.