Конфигурации и JSON
Обычному пользователю JSON не нужен: ссылка-подписка делает всё сама. Он нужен там, где подписки нет — свой сервер, роутер, тонкая маршрутизация.
Когда конфиг действительно нужен
- Свой сервер: параметры задаёте вы, ссылки-подписки нет.
- Роутер или мини-ПК в роли шлюза — там графического клиента не будет, подробнее.
- Сложная маршрутизация с несколькими исходящими соединениями.
- Отладка: посмотреть, что именно приложение отправляет на сервер.
Во всех остальных случаях JSON только усложняет: он не обновляется сам и устаревает вместе с сервером.
Минимальная структура
{
"outbounds": [
{
"protocol": "vless",
"settings": {
"vnext": [{
"address": "node-de1.example.net",
"port": 443,
"users": [{
"id": "a7f3c9d1-2b4e-4c8a-9f11-77ab21c0e5d3",
"encryption": "none",
"flow": "xtls-rprx-vision"
}]
}]
},
"streamSettings": {
"network": "tcp",
"security": "reality",
"realitySettings": {
"serverName": "www.microsoft.com",
"publicKey": "xJ8…",
"shortId": "6ba85179",
"fingerprint": "chrome"
}
}
}
]
}
Это тот же ключ vless://, только развёрнутый. Все значения берутся из строки один в один: адрес и порт — из части после @, идентификатор — из части до @, остальное — из параметров после ?. Разложить свою строку на поля можно инструментом.
Обязательные поля
| Поле | Что задаёт | Если ошибиться |
|---|---|---|
protocol | Протокол исходящего соединения | Соединение не поднимется |
address, port | Куда подключаться | Тайм-аут |
id | Ваш идентификатор | Сервер закроет соединение |
security | Тип защиты: reality, tls, none | Ошибка TLS |
serverName / sni | Имя домена в рукопожатии | Рукопожатие не пройдёт |
publicKey, shortId | Параметры Reality | Сервер не ответит |
fingerprint | Под какой браузер маскируется TLS | Обычно работает, но менее стабильно |
Типовые ошибки разбора
- Массив вместо объекта. Файл начинается с
[— приложение ждёт объект с полемoutbounds. - Конфиг не от того ядра. Формат sing-box отличается от Xray: поля называются иначе. Приложение скажет, что структура неверна.
- Хвостовая запятая. JSON её не прощает — ошибка будет в неожиданной строке.
- Порт строкой.
"port": "443"вместо"port": 443— частая причина отказа. - Скопировано с переносами. Длинные ключи Reality при переносе строки ломаются.
Куда класть маршрутизацию
Правила живут в отдельном блоке routing и в приложении настраиваются через интерфейс — вручную писать их обычно не нужно. Собрать готовый блок правил можно конструктором, а разобраться, как они устроены, — в статье о правилах.
Проверьте, в приложении дело или в подписке
Вставьте в тот же клиент заведомо рабочую ссылку. Подключилось — приложение исправно, менять нужно подписку. Демо ТОК VPN на 3 дня выдаётся без карты.
Где взять готовый конфиг?
У того, кто дал вам доступ: панель управления сервером умеет отдавать и ссылку, и JSON. Готовые конфиги из чатов — это те же чужие ключи со всеми оговорками: про бесплатные.
Можно ли собрать JSON из ссылки-подписки?
Не напрямую: подписка — это список ключей. Сначала возьмите из неё конкретный сервер, потом разверните его ключ в конфиг.
Приложение импортировало JSON, но соединения нет
Структура верная, значения — нет. Чаще всего расходятся publicKey, shortId или serverName: сверьте их с исходным ключом.