VPN-конфиг в контексте V2Ray/Xray/sing-box-клиентов — это набор параметров, по которым приложение понимает, куда подключаться и как именно строить туннель или proxy-соединение. Подписка, или subscription URL, — это ссылка, по которой клиент получает один или несколько таких конфигов и потом может обновлять их без ручной пересылки каждой строки.
Путаница возникает потому, что все это часто называют одним словом «ключ». На практике это могут быть разные вещи: одиночная строка vless://..., QR-код с тем же содержимым, HTTPS-ссылка на подписку, YAML-профиль Clash, JSON-конфигурация Xray или sing-box, deep link для конкретного приложения. Перед импортом важно понять не бренд клиента, а формат данных.
#Конфиг и подписка: в чем разница
Одиночный конфиг описывает один узел. Например, одна VLESS-ссылка содержит адрес сервера, порт, UUID пользователя, транспорт, настройки TLS или Reality и имя профиля. Если администратор меняет сервер, порт или ключ, старую одиночную ссылку обычно нужно заменить вручную.
Подписка — это URL, который возвращает список профилей. В v2rayN wiki подписка описана как обычный доступный URL, ответ которого содержит ссылки профилей напрямую или в Base64-кодировке, а среди поддерживаемых протоколов перечислены VMess, Shadowsocks, SOCKS, VLESS, Trojan, Hy2, TUIC, WireGuard и Anytls. В Hiddify похожий сценарий называется profile link или remote profile: пользователь добавляет ссылку из буфера обмена либо вручную в поле URL.
- Одиночный конфиг удобен для одного сервера и простой диагностики.
- Подписка удобна, когда узлов несколько, они меняются или у профиля есть срок действия.
- QR-код не является отдельным форматом безопасности: чаще всего он просто кодирует ссылку или subscription URL.
- Файл JSON/YAML может быть полным локальным профилем, но не каждый клиент умеет импортировать любой JSON или YAML.
#Что бывает внутри ссылки
Самый узнаваемый вариант — URI с названием протокола в начале: vless://, vmess://, trojan://, ss://, hysteria2://. Такая строка обычно импортируется из буфера обмена, через QR-код или через кнопку «Import from clipboard». Subscription URL чаще выглядит как обычный HTTPS-адрес: https://example.com/sub/USER_TOKEN. Этот адрес сам не является сервером VPN; он только отдает клиенту список серверных профилей.
В Project X для VLESS outbound перечислены базовые поля address, port, id, encryption и flow. В sharing link эти значения оказываются в URL: часть до вопросительного знака обычно задает пользователя, адрес и порт, а query-параметры после ? описывают транспорт и защиту. Название после # — это человекочитаемая метка профиля; оно не должно использоваться как секрет.
address,hostили домен — куда подключается клиент. Для TLS/Reality важен не только IP, но и ожидаемое имя сервера.port— порт на сервере. Ошибка в одной цифре даст таймаут или отказ соединения.idили UUID — идентификатор пользователя. Его нельзя публиковать: это часть доступа.encryption— параметр протокола VLESS; в классических профилях частоnone, но это не то же самое, что отсутствие TLS или Reality.security— нижний слой безопасности, напримерtlsилиreality.type— транспорт: RAW/TCP, WebSocket, gRPC, XHTTP и другие варианты.flow— режим управления потоком, напримерxtls-rprx-vision, если он поддерживается клиентом и сервером.sni,fp,pbk,sid— частые параметры Reality/TLS-профилей.path,host,serviceName,authority— параметры конкретного транспорта, особенно WebSocket и gRPC.
От теории к подключению
От понимания к подключению
Если вы уже разобрались, зачем нужен VPN, можно получить данные для подключения и настроить доступ по инструкции.
#Почему нельзя чинить ссылку на глаз
Профиль работает только как согласованная связка. Если сервер ожидает VLESS + Reality + RAW + Vision, а клиент импортировал VLESS + WebSocket + TLS, подключение не станет «почти правильным» — это будет другой профиль. В документации Project X для WebSocket отдельно описаны path и host, а для gRPC — serviceName и authority; эти поля должны соответствовать серверной стороне.
Поэтому ручное редактирование полезно только тогда, когда вы точно знаете, что меняете. Исправить название профиля после # безопаснее, чем менять sni, pbk, path или serviceName. Если профиль выдан панелью или администратором, лучше импортировать его целиком и сверять проблему с источником, а не собирать новую ссылку по фрагментам из разных инструкций.
#Как работает обновление подписки
Когда пользователь нажимает «Update subscription», клиент делает обычный сетевой запрос к URL подписки. Если ссылка доступна, сервер подписок возвращает список профилей: иногда простым текстом по одному URI на строку, иногда Base64-ответом, иногда YAML/Clash или sing-box-совместимым профилем. Клиент разбирает ответ, обновляет список узлов, добавляет новые, удаляет исчезнувшие или заменяет старые в рамках своей логики.
Это объясняет типовые ситуации. Если сам URL не открывается из той же сети, клиенту нечего импортировать. Если URL открылся, но формат не поддерживается приложением, список не появится. Если владелец подписки удалил узел, он пропадет после обновления. Если у URL истек токен или поменялся домен панели, старый профиль может еще отображаться в кэше, но больше не обновляться.
- Первое обновление иногда лучше делать без включенного proxy/VPN, если клиент предлагает такой выбор.
- Автообновление не гарантирует работоспособность узла: оно только получает свежий список.
- Клиент может сохранять старую копию подписки, поэтому после сбоя стоит проверить кэш или добавить профиль заново.
- Разные клиенты по-разному обрабатывают одинаковый URL: один может принять Clash YAML, другой ждет набор vless:// строк.
#Доверие и безопасность
Подписка — это не просто удобная ссылка, а источник конфигурации, которому вы разрешаете менять список подключений в клиенте. Владелец URL может добавлять и удалять узлы, менять маршруты, отдавать разные профили для разных пользователей и видеть технические метаданные запросов к подписке. Сам сервер, через который идет трафик, также является стороной доверия.
Нельзя публиковать subscription URL, QR-код, UUID, токен панели и скриншоты с полными ссылками. Даже если в ссылке используется example.com-похожий домен, длинный путь или параметр после ?token= часто является персональным доступом. Публичные подборки «бесплатных конфигов» дополнительно опасны тем, что неизвестно, кто управляет выходным сервером, как долго он будет жить и какие правила маршрутизации применяются.
- Проверяйте источник приложения и источник профиля отдельно.
- Не импортируйте ссылку, если не понимаете, кто контролирует сервер и подписку.
- Не отключайте проверку сертификата только потому, что подключение не стартует.
- Удаляйте старые профили и отзывайте доступ в панели, если ссылка больше не нужна.
- Если профиль рабочий или корпоративный, не пересылайте его в общие чаты и не загружайте в онлайн-декодеры.
#Безопасные примеры
Примеры ниже показывают форму, а не рабочие учетные данные. Домен example.com, UUID и ключи здесь демонстрационные. Не нужно вставлять их в клиент.
vless://00000000-0000-4000-8000-000000000000@example.com:443?encryption=none&security=reality&type=tcp&flow=xtls-rprx-vision&sni=www.example.org&fp=chrome&pbk=PUBLIC_KEY_EXAMPLE&sid=abcd#demo-vless-realityТакую строку можно читать слоями: vless:// задает протокол, UUID до @ идентифицирует пользователя, example.com:443 задает адрес и порт, параметры после ? описывают шифрование VLESS, Reality, транспорт, flow и связанные поля, а #demo-vless-reality задает имя в списке клиента.
https://example.com/sub/user-token-placeholderЭто пример subscription URL. Внутри самой HTTPS-ссылки обычно не видно всех узлов, потому что клиент должен скачать ответ с сервера подписок. Если открыть такую ссылку в браузере, можно увидеть текст, Base64, YAML или ошибку авторизации. Не публикуйте реальный ответ: он может содержать все профили из подписки.
#Чеклист перед импортом
- Определите тип данных. Это одиночный
vless://профиль, subscription URL, QR-код, YAML/JSON-файл или deep link приложения? - Проверьте клиент. Он должен поддерживать нужный протокол, Reality/TLS, транспорт, flow и формат подписки.
- Скопируйте ссылку полностью. Потерянный символ после
?,&или#может изменить профиль. - Не редактируйте секретные поля. UUID, token,
pbk,sid,sniиpathдолжны соответствовать серверу. - Добавьте один профиль за раз. Так проще понять, какая подписка обновляется и какой узел выбран.
- Обновите подписку вручную. После добавления URL дождитесь появления узлов и посмотрите, нет ли ошибки формата.
- Проверьте базовое подключение. Сначала без сложных правил, затем DNS, TUN, system proxy и маршрутизацию.
#Частые проблемы импорта
- Клиент пишет invalid URL. Часто скопирован не сам профиль, а весь текст инструкции, ссылка обрезана мессенджером или символы
&и%испорчены при пересылке. - Подписка добавилась, но список пустой. URL может возвращать неподдерживаемый формат, ошибку авторизации, HTML-страницу вместо профилей или пустой ответ после истечения доступа.
- Узлы появились, но не подключаются. Проверьте поддержку Reality, XHTTP/gRPC/WebSocket,
flow, версию core и совпадение времени/сети только после проверки доступности сервера. - Работает на телефоне, но не на Windows. В разных клиентах отличаются core, права TUN, system proxy, firewall и поддержка новых параметров ссылки.
- После update пропали серверы. Источник подписки мог изменить список, токен мог истечь, а клиент мог заменить старые узлы свежим пустым ответом.
- Статус connected есть, сайты не открываются. Это уже не обязательно ошибка импорта: смотрите DNS, маршрутизацию, TUN, правила исключений, IPv6 и конфликт с другим VPN-клиентом.
- QR-код не сканируется. Увеличьте яркость, проверьте, что код содержит поддерживаемую ссылку, или используйте копирование URL вручную.
Главное правило: конфиг отвечает на вопрос «как подключиться к конкретному узлу», а подписка отвечает на вопрос «где клиенту брать и обновлять список таких узлов». Чем меньше вы смешиваете эти уровни, тем проще безопасно импортировать профиль и быстрее найти причину ошибки.