Перейти к содержанию

Форматы ссылок

Всё, что понимает клиент, — в одном месте. Регистр схемы не важен.

Ссылки на серверы

Схема Что внутри
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","version":1,"servers":[
  {"name":"Germany","config":"<base64 of .conf>"}]}

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, и формат один на всё.

Это обфускация, а не секретность. Ключ зашит в каждом клиенте, поэтому любой, кто разберёт приложение, прочитает эти значения. Это убирает адрес профиля с глаз — от беглого взгляда на трафик или от пересылки в чат — и не более того. Не прячьте так ничего действительно чувствительного.

Принимаются две схемы: 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:// — разрешаются все три варианта.