3x-ui: клиенты и ссылка-подписка
Инбаунд подняли — теперь надо выдать человеку доступ. Покажу, как правильно завести клиента в 3x-ui (только через интерфейс, и почему это критично), навесить лимиты со сроком и отдать ему одну ссылку-подписку вместо кучи ссылок на каждый сервер. Свои данные впиши в конструктор сверху.
Главная грабля: клиентов создавай ТОЛЬКО через UI
Начну с того, обо что бьются все, кто лезет в базу руками. В 3x-ui есть соблазн добавить пользователей напрямую в SQLite (x-ui.db) или отредактировать конфиг Xray — не делай так. Панель — единственный владелец списка клиентов. Как только она в следующий раз пересоберёт конфиг Xray (а она делает это при любом изменении инбаунда), она обнулит клиентов, которых ты вписал мимо неё.
Правило простое: всё, что касается клиентов, — только через интерфейс панели. Тогда БД и живой конфиг Xray остаются в синхроне. Полезешь в БД — получишь «клиент есть в базе, но его нет в конфиге, и подключение не работает» и потеряешь вечер на диагностику пустоты.
Добавляем клиента к инбаунду

Клиент в 3x-ui живёт внутри инбаунда. Открываешь Входящие, у нужного инбаунда жмёшь на число клиентов (или «+»), откроется форма добавления. Заполняешь:
- Email / имя — это метка клиента, по ней он виден в статистике. Пиши осмысленно:
ivan-tg-1204, а неclient1. Должно быть уникальным. - ID (UUID) — панель генерит сама (это
CLIENT_UUID). Кнопка рядом — новый. - Flow — для VLESS+Reality на TCP ставь
xtls-rprx-vision. Для XHTTP/gRPC/Hysteria — пусто, там Vision не используется. - Subscription ID / подписка — общий идентификатор подписки клиента (об этом ниже).
Сохранил — клиент появился в конфиге сразу, панель сама перезагрузила Xray. Ничего рестартить руками не нужно.
Лимиты и срок
Тут же в форме клиента — то, что делает из «просто доступа» управляемого платящего пользователя:
- Total Flow (лимит трафика) — сколько ГБ отдать.
0— безлимит. Клиент упёрся в лимит — доступ отрубается сам. - Expiry time (срок действия) — дата, после которой клиент отключается. Удобно для тарифов «на месяц»: продал — поставил дату.
- IP Limit — сколько одновременных устройств пустить. Ставь 2–3: это грубая, но рабочая защита от того, что один ключ раздали половине двора. Полностью шеринг это не лечит, но планку ставит.
Изменил лимит или срок — сохрани, панель применит на лету. Клиента можно временно выключить галочкой активности, не удаляя (пригодится для заморозки/грейса неплательщику).
Включаем сервис подписки
Дальше — то, ради чего всё затевалось. Вместо того чтобы слать человеку голую vless://-ссылку на каждый сервер, отдаём одну ссылку-подписку: клиент вставляет её в приложение и получает список всех своих серверов, а ты потом можешь менять серверы, не трогая клиента.
В Настройки панели → Подписка включи сервис подписки и задай:
Включить сервис подписки : да
Порт подписки : 2096 (или свой, открой в фаерволе)
Путь подписки : /sub/ (неочевидный лучше)
Домен / URI : your-domain.com (или SERVER_IP, если без домена)Открой порт подписки наружу:
ufw allow 2096/tcp # порт сервиса подпискиСохрани и перезапусти панель. Теперь у каждого клиента появляется его личная ссылка-подписка.
Забираем ссылку и отдаём клиенту
У клиента в списке инбаунда есть иконки: QR-код и ссылка-подписка. Ссылка выглядит так:
https://your-domain.com:2096/sub/SUBSCRIPTION_IDИменно её отдаёшь человеку — не отдельные vless://. Он вставляет её в клиент (Happ, v2rayTun, Hiddify, любой xray-клиент) и получает все сервера, которые ты завёл под этим Subscription ID. Хочешь дать человеку несколько инбаундов одной ссылкой — заводи в каждом инбаунде клиента с одинаковым Subscription ID: панель склеит их в одну подписку.
QR-код удобен для мобильных: человек сканирует камерой прямо из приложения — и подписка импортирована.
Проверка
Возьми ссылку тестового клиента, вставь в клиент на телефоне/ноуте, подключись и проверь реальный выход:
# с устройства под VPN — должен показать IP сервера, а не твой домашний
curl -s https://api.ipify.orgВернулся IP сервера — цепочка собралась: клиент → инбаунд → интернет. Пустая подписка почти всегда означает одно из двух: не включён сервис подписки в настройках или клиенты добавлены мимо UI (в БД) и панель их не видит в конфиге.
Клиенты и подписки готовы. Дальше выбирай протокол под ноду в ветке «протоколы» — начни с «VLESS + Reality пошагово», это база, которая держит инбаунд живым под DPI.
Следующий гайд Панель за 15 минут: Remnawave и первая подписка → ↗ Не понравилась статья или что-то непонятно? Напишите мне — помогу или поправлю. @notrealvpn →