Зачем VPN-подписки кодируют в base64
Когда вы получаете от VPN-провайдера длинную строку из букв и цифр, это почти наверняка base64. Такое кодирование превращает произвольный текст в безопасный набор символов, который не ломается при пересылке через мессенджеры, почту или SMS. Ссылки на подписку часто содержат спецсимволы, пробелы и кириллицу, которые клиенты могут обрезать или превратить в разметку. Base64 решает эту проблему: строка состоит только из латинских букв, цифр и знаков +, /, =.
Важно понимать: base64 — это не шифрование, а просто кодирование. Любой может декодировать строку обратно и увидеть её содержимое. Секретность обеспечивает не само кодирование, а уникальный идентификатор внутри ссылки. Поэтому не стоит считать, что длинная строка защищает ваши данные — она лишь делает передачу удобнее.
Что может находиться внутри base64-строки в Incy
В контексте приложения Incy base64-строка может содержать несколько типов данных. Чаще всего это адрес подписки провайдера — тот же https://.../sub/..., просто упакованный в компактный вид. Внутри также может быть список серверов в формате vless://, vmess://, trojan:// и других протоколов — так обычно отвечает сервер провайдера. Наконец, base64 может содержать профиль маршрутизации — JSON с настройками правил, который передаётся через команду incy://routing/onadd/....
Разные сервисы отдают одну и ту же подписку по-разному: кто-то присылает прямую ссылку, кто-то — base64, кто-то — QR-код. Содержимое при этом одинаковое, меняется только способ упаковки. Приложение Incy умеет распознавать все эти варианты и импортировать их.
Форматы тела подписки: от base64 до JSON
Incy поддерживает несколько форматов тела подписки. Самый распространённый — base64-закодированные ссылки: тело ответа представляет собой строку, которая после декодирования содержит ссылки на серверы, по одной на строку. Поддерживается URL-safe base64, где - заменяется на +, а _ на /.
Второй формат — открытые ссылки (plain text), когда ссылки идут в читаемом виде. Третий — JSON-форматы: массив полных xray-конфигов или одиночный объект с inbounds, outbounds, routing и dns. Наконец, существует смешанный формат, где в одном теле могут быть ссылки на серверы, строки маршрутизации и метаданные вроде #announce: или #profile-title:.
Такое разнообразие позволяет провайдерам гибко настраивать доставку подписок, а пользователям — импортировать их в Incy без лишних действий.
Поддерживаемые протоколы в подписках Incy
Incy распознаёт множество протоколов, каждый со своей схемой. Основной — VLESS (vless://), также поддерживаются VMess (vmess://), Trojan (trojan://), Shadowsocks (ss://), Hysteria2 (hysteria2://, hy2://), SOCKS5 (socks://, socks5://), HTTP-proxy (http://user:pass@host:port) и WireGuard (wireguard://, wg://). Отдельно стоит AmneziaWG (amneziawg://, awg://) — обфусцированный WireGuard, который может передаваться и как .conf-файл в теле подписки.
Некоторые схемы, такие как ssr://, tuic:// и hysteria://, распознаются приложением, но не парсятся — серверы с этими схемами будут пропущены. Это важно учитывать, если вы используете устаревшие протоколы: Incy их просто проигнорирует.
AmneziaWG и WireGuard: особенности импорта .conf
Отдельного внимания заслуживает импорт конфигураций AmneziaWG и WireGuard. Тело подписки может быть сырым .conf-файлом — многострочным INI с секциями [Interface] и [Peer]. Приложение распознаёт его по наличию [Interface] и PrivateKey. AmneziaWG определяется по обфускационным параметрам: Jc, Jmin, Jmax, S1–S4, H1–H4, I1–I5.
AmneziaWG 3.x добавляет новые параметры, такие как HeaderProtectionKey, ContentPaddingAddition, RekeyAfterTime, RandomTrailers и другие. Они опциональны и прокидываются в движок как есть. Важно: секция [Interface] остаётся обязательной — в ней лежит PrivateKey, а конфиг из одной только [Device] отвергается. Также поддерживается секция [Device], куда можно выносить обфускацию и тюнинг.
Если в одной подписке нужно передать несколько AmneziaWG-серверов, используются два формата: построчный (amneziawg://#Имя) или JSON-контейнер с type: "amneziawg". В обоих случаях битая base64-запись пропускается, а дубликаты схлопываются.
HTTP-заголовки подписки: как они управляют поведением
Помимо тела подписки, Incy использует HTTP-заголовки для передачи метаданных. Например, profile-title задаёт имя подписки (до 25 символов), subscription-userinfo — статистику трафика и срок действия, support-url — ссылку на поддержку, announce — текст объявления. Заголовок profile-update-interval определяет, как часто клиент будет обновлять подписку.
Также есть заголовки для настройки баннера (banner-text, banner-button-url, banner-bg-color), фрагментации TCP (fragmentation-enable, fragmentation-length) и шумовых пакетов (noises-enable, noises-type, noises-packet). Эти заголовки позволяют провайдеру тонко настраивать клиентский опыт без изменения тела подписки.
Важно: значения из HTTP-заголовков имеют приоритет над значениями из тела. Inline-метаданные в теле используются как fallback, если соответствующий заголовок отсутствует.
Как проверить base64-строку перед импортом
Прежде чем вставлять длинную строку в Incy, стоит убедиться, что она не повреждена. Признаки испорченной строки: наличие пробела или переноса в середине (мессенджер разорвал строку), символы кириллицы (автозамена при копировании), многоточие в конце (это предпросмотр, а не вся ссылка). Если строка состоит только из латиницы, цифр и знаков -, _, =, скорее всего, она целая.
Обрезанную base64 восстановить нельзя — недостающий кусок не восстанавливается. Приложение либо покажет ошибку формата, либо добавит мусорный профиль. В таких случаях просите отправителя прислать строку заново, лучше файлом или через кнопку копирования. Существуют онлайн-инструменты для декодирования base64, которые позволяют посмотреть содержимое без отправки данных на сервер.
Практические примеры: как выглядят ссылки и команды
Рассмотрим несколько примеров. Прямая ссылка на подписку может выглядеть так: https://provider.example.com/sub/abc123. В base64 она превращается в строку вида aHR0cHM6Ly9wcm92aWRlci5leGFtcGxlLmNvbS9zdWIvYWJjMTIz. Команда импорта в Incy выглядит как incy://import/. Для маршрутизации используется incy://routing/onadd/.
В теле подписки могут встречаться специальные строки: #announce: Плановое обслуживание завтра, #profile-title: Мой VPN, #support-url: https://t.me/support. Они извлекаются из тела и не попадают в список серверов. Также поддерживаются inline-профили маршрутизации через ://autorouting/onadd/{base64}.
Если вы хотите передать свои правила маршрутизации на другое устройство, можно использовать конструктор профиля, который собирает JSON и выдаёт готовую ссылку incy://routing/onadd/....
Частые ошибки при импорте и как их избежать
Самая частая ошибка — неполное копирование строки. Мессенджеры часто обрезают длинные ссылки, особенно если в них есть спецсимволы. Чтобы избежать этого, используйте кнопку «Копировать» в приложении отправителя, а не выделение текста вручную. Также следите, чтобы строка не содержала пробелов и переносов — они ломают base64.
Другая ошибка — попытка добавить вторую подписку вместо замены существующей. В Incy команда import добавляет новую подписку, а add — заменяет. Если вы хотите обновить подписку, используйте соответствующую команду. Приложение также может показать «неверный формат» — это почти всегда означает, что строка неполная или повреждена.
Наконец, не пытайтесь «собрать» base64 для доступа самостоятельно — адрес провайдера выдаёт сервис, придумать его нельзя. Для профилей маршрутизации это возможно, но для доступа бессмысленно.
Вопросы и ответы
Что такое base64 и зачем он нужен в VPN-подписках?
Base64 — это способ кодирования произвольного текста в безопасный набор символов (латиница, цифры, +, /, =). Он нужен, чтобы ссылки на подписки не ломались при пересылке через мессенджеры и почту, которые могут обрезать или искажать спецсимволы. Внутри base64-строки может быть адрес провайдера, список серверов или профиль маршрутизации.
Можно ли декодировать base64 и увидеть содержимое?
Да, base64 — это не шифрование, а кодирование. Любой может декодировать строку обратно и увидеть её содержимое. Секретность обеспечивает не само кодирование, а уникальный идентификатор внутри ссылки. Поэтому не стоит считать, что длинная строка защищает ваши данные — она лишь делает передачу удобнее.
Какие протоколы поддерживает Incy при импорте подписок?
Incy поддерживает VLESS, VMess, Trojan, Shadowsocks, Hysteria2, SOCKS5, HTTP-proxy, WireGuard и AmneziaWG. Схемы ssr://, tuic:// и hysteria:// распознаются, но не парсятся — серверы с этими схемами будут пропущены. AmneziaWG может передаваться как .conf-файл в теле подписки.
Что делать, если Incy показывает «неверный формат» при импорте?
Скорее всего, строка неполная или повреждена. Проверьте, нет ли в ней пробелов, переносов или кириллицы. Если строка обрезана, восстановить её нельзя — попросите отправителя прислать заново, лучше файлом или через кнопку копирования. Также убедитесь, что вы используете правильную команду: import для добавления, add для замены.
Как передать несколько AmneziaWG-серверов в одной подписке?
Используйте построчный формат: amneziawg://#Имя по одной ссылке на строку, или JSON-контейнер с type: "amneziawg" и массивом servers. В обоих случаях битая base64-запись пропускается, а дубликаты схлопываются. Desktop-клиент AmneziaWG не поддерживает — .conf в теле там парсится как обычный WireGuard.
Можно ли собрать base64-ссылку самостоятельно?
Для профиля маршрутизации — да, это удобно, когда нужно передать свои правила на другое устройство. Конструктор профиля собирает JSON и выдаёт готовую ссылку incy://routing/onadd/.... Для доступа к провайдеру это бессмысленно: адрес выдаёт сервис, придумать его нельзя.
Чем отличаются команды incy://import и incy://add?
import добавляет новую подписку к уже существующим, а add заменяет текущую подписку. Если вы хотите обновить подписку, используйте add, чтобы избежать дублирования. В остальном обе команды принимают base64-строку или прямую ссылку.