Что такое JSON и зачем он нужен в VPN
JSON (JavaScript Object Notation) — это лёгкий текстовый формат обмена данными, основанный на парах «ключ-значение». Он широко применяется в веб-разработке, API и конфигурационных файлах благодаря простоте чтения и обработки. В контексте VPN JSON используется для хранения настроек подключения: адреса серверов, протоколы, параметры шифрования, маршрутизации и другие опции.
В экосистеме HAPP JSON играет две ключевые роли. Во-первых, это формат импорта конфигураций серверов: пользователь может добавить сервер, вставив JSON-объект, который затем передаётся ядру XRAY. Во-вторых, JSON используется в API Happ-Proxy для управления подписками, устройствами и отправки push-уведомлений. Понимание структуры JSON помогает точнее настраивать соединение и автоматизировать администрирование.
Важно отметить, что JSON сам по себе не обеспечивает шифрование — он лишь структурирует данные. Безопасность соединения зависит от протокола (VLESS, VMess, Shadowsocks и т.д.) и настроек шифрования, которые передаются внутри JSON.
Форматы добавления конфигураций в HAPP
Приложение HAPP поддерживает несколько способов добавления VPN-конфигураций:
- Ручной ввод — через кнопку «+» на главном экране, где можно детально заполнить параметры протокола.
- Импорт по ссылке или QR-коду — автоматическое распознавание схем
vless://,vmess://,ss://,trojan://,hysteria2://и других. - Подписки — стандартные текстовые списки серверов или расширенные JSON-массивы.
JSON-подписки представляют собой массивы объектов, каждый из которых описывает отдельный сервер. Такой формат удобен для провайдеров, которые хотят передать не только адрес и протокол, но и дополнительные параметры: метаданные, маршруты, настройки TLS и т.д.
При импорте JSON-конфигурации HAPP обрабатывает её особым образом, что подробно описано в следующем разделе.
Прямая передача JSON в ядро XRAY: принцип 1:1
Когда пользователь импортирует конфигурацию в формате JSON, HAPP передаёт её ядру XRAY практически в неизменном виде. Это означает, что стандартные правила маршрутизации, фильтры и настройки интерфейса приложения не накладываются на JSON-файл. Конфигурация работает ровно так, как она прописана в исходном коде.
Этот принцип «прямой передачи» даёт продвинутым пользователям полный контроль над поведением ядра, но требует аккуратности: любая ошибка в JSON (например, неправильный синтаксис или неверное имя поля) может привести к сбою подключения. Поэтому перед использованием рекомендуется проверять JSON на валидность с помощью онлайн-инструментов или локальных утилит.
Несмотря на прямую передачу, HAPP сохраняет контроль над системным окружением ядра через профили маршрутизации. Это включает управление GEO-файлами (базами геоданных), возможность их оптимизации (урезанные версии) и настройку DNS-туннелирования. Параметры удалённого DNS берутся из активного профиля маршрутизации и могут быть изменены пользователем.
Косвенное управление через HAPP: GEO-файлы и DNS
Хотя JSON-конфигурация передаётся в XRAY напрямую, HAPP позволяет влиять на некоторые аспекты работы ядра через профили маршрутизации. Это важно для адаптации конфигурации под конкретные задачи.
Управление GEO-файлами. Пользователь может выбрать, какие базы геоданных (например, geoip.dat, geosite.dat) будут переданы ядру. Это влияет на правила маршрутизации, которые используют геолокацию IP-адресов и доменов.
Оптимизация GEO-файлов. При активации функции «Урезанные GEO-файлы» ядро получит только необходимые фрагменты баз, соответствующие выбранным тегам. Это экономит оперативную память и ускоряет запуск, особенно на слабых устройствах.
DNS-туннелирование. Параметры удалённого DNS (Remote DNS) берутся из активного профиля маршрутизации приложения. Пользователь может изменить их, чтобы направить DNS-запросы через VPN или использовать специфические резолверы.
Таким образом, даже при использовании «сырого» JSON-конфига можно гибко настраивать окружение ядра, не редактируя сам файл.
Расширенные параметры URI-схем: фрагментация и шумы
Для борьбы с DPI (deep packet inspection) HAPP поддерживает расширенные параметры в URI-ссылках, которые также могут быть включены в JSON-конфигурации. Эти инструменты помогают маскировать трафик и избегать блокировок.
Фрагментация — разбиение пакетов на части, чтобы DPI не мог распознать сигнатуру протокола. Параметр задаётся как fragment=length,interval,packets[,maxSplit], где length — длина фрагмента, interval — интервал между ними, packets — количество пакетов, maxSplit — максимальное число разбиений.
Шумы — добавление случайных данных в трафик для имитации обычного интернет-трафика. Работают только совместно с фрагментацией. Параметр: noises=type,packet,delay[,applyTo], например noises=rand,50-150,10-50,ip. Здесь type — тип шума, packet — диапазон размеров, delay — задержка, applyTo — к чему применять (например, ip).
Важно: настройки внутри сервера имеют приоритет только если выключены глобальные настройки приложения. Если глобальные параметры включены, они переопределяют серверные.
Метаданные и визуализация серверов в JSON
Для удобства организации списка серверов HAPP поддерживает метаданные, которые можно добавлять в JSON-конфигурацию. Это позволяет заменить техническое название (например, «VMess») на понятное описание.
В URI-ссылках метаданные добавляются после символа #, например vless://...@server:port#Мой сервер. В JSON-конфигурации для этого используется поле "meta": {"serverDescription": "Ваш текст"}.
Также можно использовать теги для группировки серверов, что упрощает навигацию в приложении. Метаданные не влияют на работу ядра, но значительно улучшают пользовательский опыт, особенно при большом количестве серверов.
API Happ-Proxy: управление подписками и устройствами
Happ-Proxy предоставляет REST API для автоматизации управления VPN-подписками. Базовый URL API — https://happ-proxy.com. Все запросы требуют параметры provider_code (8 символов) и auth_key (32 символа). Ответы приходят в формате JSON с полями rc (код результата) и msg (сообщение).
Основные методы:
- GET /api/add-install — создание новой ссылки провайдера (install). Параметры:
install_code(12 символов, опционально),note(до 255 символов). - GET /api/update-install — изменение параметров ссылки:
install_limit(от 1 до 100),note,status(5 — Disabled, 10 — Active). - GET /api/list-install — получение списка ссылок. Если не указан
id, возвращаются последние 5000 записей. - GET /api/list-hwid — список HWID (устройств) по конкретной ссылке. Требуется
install_codeилиinstall_id. - GET /api/delete-hwid — удаление устройства по HWID.
- GET /api/add-domain — привязка домена подписки. Требуется
domain_hash(SHA-256 от домена в нижнем регистре). - GET /api/delete-domain — удаление домена.
- GET /api/list-domain — список доменов.
Пример создания ссылки:
GET /api/add-install?provider_code=Ab12Cd34&auth_key=AbcdEfgh...&install_limit=10Ответ: {"rc":1,"msg":"Ok","install_code":"ABCDEF123456","id":33}.
Удалённое управление: push-уведомления и команды
API Happ-Proxy позволяет отправлять push-уведомления и команды удалённого управления на устройства пользователей. Это полезно для информирования об обновлениях или принудительного изменения настроек.
Push-уведомления — метод POST /remote/notification. Требуется активная подписка и тариф Enterprise. Тело запроса — JSON с полем PushNotificationForm, содержащим body, type_push (optional или force), expire_days, а также опционально title, link_for_open, background_image, locales (для локализации). Можно указать os (массив операционных систем) или hwid (до 5 устройств через запятую).
Ограничения:
- Общая рассылка (без HWID) — не чаще 1 раза в 5 минут.
- Размер сообщения после base64-кодирования — не более 4096 байт.
- Если указан
hwid, параметрosигнорируется.
Команды удалённого управления — метод POST /remote/command. Доступен на тарифах Pro и Enterprise. Позволяет менять настройки приложения на устройствах. Обязательные параметры: specific_device_toggle (true/false), settings (JSON с настройками). Если specific_device_toggle=true, требуется hwid; если false — os.
Пример тела запроса для уведомления:
{
"PushNotificationForm": {
"body": "Please update your app",
"type_push": "optional",
"expire_days": 7
},
"os": ["android"]
}Практические примеры JSON-конфигураций и ссылок
Рассмотрим несколько примеров, которые помогут понять, как выглядят JSON-конфигурации и URI-ссылки в HAPP.
Пример простого JSON-объекта для настройки VPN (гипотетический):
{
"server": "192.168.1.1",
"protocol": "VLESS",
"security": {
"auth": "password",
"cipher": "AES-256-GCM"
}
}Обратите внимание: реальные конфигурации XRAY имеют более сложную структуру, включая поля outbounds, inbounds, routing и т.д.
Пример URI-ссылки Hysteria2:
hy2://user:pass@host:port/?insecure=1#Мой серверПример ссылки с фрагментацией и шумами:
vless://uuid@host:port?fragment=length,interval,packets&noises=rand,50-150,10-50,ip#Сервер с защитойПример JSON-подписки (фрагмент):
[
{
"outbounds": [
{
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "example.com",
"port": 443,
"users": [
{"id": "uuid", "encryption": "none"}
]
}
]
}
}
],
"meta": {
"serverDescription": "Основной сервер"
}
}
]Эти примеры демонстрируют гибкость формата и возможности настройки.
Ограничения, безопасность и лучшие практики
При работе с JSON-конфигурациями и API важно учитывать ограничения и соблюдать меры безопасности.
Ограничения API:
install_limitне может быть меньше текущего количества HWID.- Нельзя отменить push-уведомление менее чем за 10 минут до запланированного времени.
- Для массовых рассылок действует антиспам-ограничение: 1 раз в 5 минут.
- Максимальный размер сообщения — 4096 байт после base64.
Безопасность:
- Никогда не передавайте
auth_keyтретьим лицам. Храните его в защищённом месте. - Используйте HTTPS при обращении к API.
- Проверяйте JSON на валидность перед импортом, чтобы избежать ошибок.
- Регулярно обновляйте приложение HAPP для получения новых функций и исправлений.
Лучшие практики:
- Для массового управления используйте API, а не ручное редактирование.
- Применяйте метаданные для удобной организации серверов.
- Используйте фрагментацию и шумы только при необходимости, так как они могут увеличивать нагрузку на устройство.
- Следите за лимитами HWID и своевременно удаляйте неиспользуемые устройства через API.
Вопросы и ответы
Как импортировать JSON-конфигурацию в HAPP VPN?
В приложении HAPP нажмите кнопку «+» на главном экране, выберите «Импорт из буфера» или «Импорт из файла», затем вставьте JSON-объект или выберите файл. Приложение автоматически распознает формат и добавит сервер. Убедитесь, что JSON валиден, иначе импорт может не сработать.
Что значит «прямая передача» JSON в ядро XRAY?
Это означает, что при импорте JSON-конфигурации HAPP передаёт её ядру XRAY без изменений. Стандартные правила маршрутизации и настройки интерфейса не применяются. Конфигурация работает ровно так, как написана. При этом HAPP сохраняет контроль над GEO-файлами и DNS через профили маршрутизации.
Какие протоколы поддерживает HAPP VPN?
HAPP поддерживает VLESS, VMess, Shadowsocks, Socks5, Trojan, Hysteria2 (включая hy2). Эти протоколы можно добавлять через URI-ссылки, QR-коды или JSON-конфигурации. Каждый протокол имеет свои параметры, которые можно настроить вручную или через импорт.
Как использовать API Happ-Proxy для управления подписками?
Для работы с API нужны provider_code и auth_key. Основные методы: add-install для создания ссылки, list-install для просмотра, list-hwid для получения устройств, delete-hwid для удаления. Все запросы отправляются на https://happ-proxy.com с параметрами в query string. Ответы приходят в JSON.
Какие ограничения на отправку push-уведомлений через API?
Общая рассылка без указания HWID доступна не чаще 1 раза в 5 минут. Размер сообщения после base64-кодирования не должен превышать 4096 байт. При точечной отправке можно указать до 5 HWID за раз. Для использования push-уведомлений требуется тариф Enterprise.
Что такое HWID и как его удалить?
HWID — это уникальный идентификатор устройства, который используется для привязки подписки к конкретному устройству. Удалить HWID можно через API методом delete-hwid, указав install_code и hwid. Это полезно, если устройство потеряно или больше не используется.
Как добавить метаданные к серверу в JSON?
В JSON-конфигурации добавьте поле "meta": {"serverDescription": "Ваш текст"}. Это заменит техническое название сервера на понятное описание. Также можно использовать теги после символа # в URI-ссылке, например vless://...@host:port#Мой сервер.