3X-UI – бесплатная веб-панель для управления ядром Xray. В ней через браузер создаются подключения, добавляются пользователи, задаются лимиты трафика и выдаются ссылки и QR-коды для приложений. В этой статье мы установим панель, настроим самый устойчивый к блокировкам вариант VLESS Reality с потоком XTLS Vision и подключим первое устройство. Все шаги мы повторили на тестовом сервере с Debian 12, версия 3X-UI на момент проверки 3.10.2.
Если панель вам не нужна
Тем, кому нужен VPN «для себя» без настройки, проще поставить Marzban нашим скриптом. Он сам выбирает сайт для маскировки и настраивает всё одной командой.
Как устроено подключение VLESS Reality
Когда приложение на телефоне подключается к серверу, провайдер видит начало обычного защищённого соединения TLS, такого же, как при открытии любого сайта по HTTPS. В самом первом сообщении клиент открыто называет имя сайта, к которому обращается, и это поле называется SNI. Именно по SNI, адресу сервера и характеру трафика системы фильтрации решают, пропустить соединение или нет. Идея Reality в том, чтобы в этом сообщении стояло имя настоящего постороннего сайта, а всё остальное выглядело как обычное посещение этого сайта.
Чтобы такая маскировка выдерживала проверку, сервер должен уметь отвечать так же, как настоящий сайт. Поэтому Xray на сервере работает как развилка. Приложение, у которого есть открытый ключ сервера и один из коротких идентификаторов (Short ID), особым образом помечает своё приветствие, и Xray узнаёт своего клиента. Все остальные, будь то проверяющая система провайдера или случайный сканер, получают прозрачную пересылку к настоящему сайту, который называется целью (target), и видят его подлинный сертификат. Снаружи сервер неотличим от посредника, через который открывается чужой сайт, и попытка «зайти и посмотреть» ничего не выдаёт.
Внутри уже установленного соединения работает протокол VLESS. Он не шифрует данные повторно, потому что эту задачу выполняет внешний слой TLS. Поток XTLS Vision добавляет к этому ещё одну защиту. Когда внутри туннеля идёт обычный HTTPS, а так устроено почти всё в современном интернете, получается «TLS внутри TLS», и размеры первых пакетов такого соединения образуют узнаваемый рисунок. Vision выравнивает эти пакеты, а после рукопожатия перестаёт шифровать уже зашифрованные данные второй раз, что заодно снижает нагрузку на сервер.
Последний элемент маскировки – отпечаток TLS. Каждый браузер начинает соединение по-своему, с характерным набором параметров, и приложение VPN должно притворяться одним из них. Этот отпечаток выбирается в поле uTLS, и для серверов в России мы советуем firefox. Почему не chrome, подробно объясняется в статье про Marzban.
Что понадобится
- Сервер с Debian 12 или Ubuntu 24.04. Панель нетребовательна, на нашем тестовом сервере с 1 ГБ памяти после установки было занято около 450 МБ, поэтому хватит тарифа DE-Promo. Если сервера ещё нет, закажите его по инструкции.
- Подключение по SSH, например через Termius. Команды выполняются от имени
root. - Свободные порты 443 и 80. На порту 443 будет работать VPN, а через порт 80 Let's Encrypt проверяет сервер, когда выдаёт и продлевает сертификат для панели.
Шаг 1. Установите панель
Подключитесь к серверу и выполните команду установки с официальной страницы проекта.
# Скачиваем и запускаем официальный установщик 3X-UI
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)Установщик скачает панель и задаст несколько вопросов. Отвечайте так.
- Database Selection – нажмите Enter, чтобы выбрать SQLite. Отдельная база PostgreSQL нужна только при сотнях пользователей.

Выбор базы данных
- Would you like to customize the Panel Port settings? – введите
nи нажмите Enter. Панель получит случайный порт, и найти её сканерам будет сложнее. - Choose SSL certificate setup method – введите
2и нажмите Enter. Панель получит бесплатный сертификат Let's Encrypt прямо на IP-адрес сервера, домен для этого не нужен. - Is ... the correct incoming public IPv4 address – проверьте, что указан IP-адрес вашего сервера, и нажмите Enter.
- Do you have an IPv6 address to include? и Port to use for ACME HTTP-01 listener – просто нажмите Enter оба раза.

Сертификат для IP-адреса сервера
Через несколько минут установщик выпустит сертификат, запустит панель и покажет меню команд x-ui.
Шаг 2. Сохраните данные для входа
Перед меню установщик выводит блок Panel Installation Complete!. В нём всё, что нужно для входа.
- Username и Password – логин и пароль, они создаются случайными.
- Port и WebBasePath – порт и секретный путь панели.
- Access URL – готовый адрес панели, его нужно открыть в браузере.

Данные для входа, на скриншоте они скрыты
Сохраните эти данные в менеджер паролей. Если окно терминала уже закрыто, установщик продублировал их в файл, а адрес панели в любой момент покажет команда x-ui settings.
# Логин, пароль и адрес панели, записанные при установке
cat /etc/x-ui/install-result.env
# Текущий порт, путь и адрес панели
x-ui settings
Команда x-ui settings
Адрес панели – это тоже пароль
Без секретного пути панель не откроется даже у того, кто знает логин и пароль, она отвечает ошибкой 404. Не публикуйте адрес целиком и не отправляйте его в открытые чаты.
Шаг 3. Войдите в панель
Откройте в браузере адрес из строки Access URL. Он начинается с https://, а сертификат настоящий, поэтому браузер не будет ругаться на безопасность. Введите логин и пароль и нажмите Войти.

Вход в 3X-UI
Слева находится меню панели. Нам понадобятся три раздела.
- Входящие – здесь создаются подключения, то есть порты и протоколы, на которых сервер принимает VPN.
- Клиенты – пользователи, у каждого свой ключ, лимиты и ссылка.
- Настройки панели – логин, пароль, двухфакторная защита и другие параметры самой панели.
Шаг 4. Создайте подключение VLESS Reality
- Откройте раздел Входящие и нажмите Создать подключение.
- На вкладке Основное заполните поля.
- Примечание – любое понятное название, например
VLESS Reality. - Протокол – оставьте
vless. - Порт – укажите
443. Это порт обычных сайтов, и соединение на нём выглядит естественно.
- Примечание – любое понятное название, например

Основные настройки подключения
- Вкладки Протокол и Поток не трогайте. В поле Транспорт уже стоит
RAW, так в новых версиях называется обычный TCP. - Перейдите на вкладку Безопасность и нажмите Reality.
- В поле uTLS выберите
firefox. - Нажмите Найти цели. В открывшемся сканере введите сайт для маскировки, например
www.computerbase.de, и нажмите Сканировать. Как выбрать свой сайт, рассказано ниже.

Проверка сайта для маскировки
- Если в колонке Статус написано Подходит, нажмите Выбрать. Панель заполнит поле Цель и покажет зелёный блок с итогами проверки.
- Посмотрите на поле SNI. В нём должно остаться одно имя, совпадающее с сайтом, в нашем случае
www.computerbase.de. Если панель подставила другое имя, удалите его крестиком, введите нужное и нажмите Enter.

Отпечаток, цель и SNI
- Ключи, Short IDs и SpiderX панель создала сама, оставьте их как есть.

Ключи создаются автоматически, на скриншоте они скрыты
- Нажмите Создать внизу окна. В списке появится подключение с метками vless, TCP и Reality.

Подключение создано
Почему в поле SNI должно быть одно имя
Если выбрать в сканере крупный сайт, панель перенесёт в поле SNI все имена из его сертификата, иногда их несколько десятков. Мы проверили, что в этом случае каждая выдача подписки получает случайное имя из списка, например api-stg.semiconductor.samsung.cn вместо www.samsung.com. Устройства начинают обращаться к одному серверу под разными именами, и маскировка становится менее правдоподобной.
Шаг 5. Добавьте клиента
В версии 3 пользователи вынесены в отдельный раздел, и один клиент может пользоваться сразу несколькими подключениями.
- Откройте раздел Клиенты и нажмите Добавить клиентов.
- В поле Email введите имя клиента латиницей, например
phone. Почта здесь не нужна, это просто название.

Новый клиент
- Прокрутите форму вниз до поля Привязанные входящие, нажмите Выбрать всё и затем Создать.

Клиент привязан к подключению
- Теперь включите поток Vision. В строке клиента нажмите на значок карандаша, перейдите на вкладку Учетные данные, в поле Flow выберите
xtls-rprx-visionи нажмите Сохранить.

Поток XTLS Vision для клиента
Поле Flow появляется только при изменении клиента
В форме добавления его нет, потому что поток зависит от подключения, к которому привязан клиент. Поэтому сначала создайте клиента, а потом откройте его на изменение.
Шаг 6. Подключите устройство
- В строке клиента нажмите первый значок, с изображением QR-кода.
- В верхнем блоке Информация о подписке находится QR-код ссылки на подписку. Его удобно отсканировать телефоном, а кнопка с двумя листками рядом с названием копирует саму ссылку.

QR-код подписки, на скриншоте он скрыт
- Установите на устройство приложение на ядре Xray. Мы советуем Incy или Happ, ссылки на них и на другие приложения собраны в статье про Marzban.
- В приложении добавьте подписку из буфера обмена или отсканируйте QR-код и включите подключение.
Подписка лучше отдельной ссылки, потому что приложение само забирает с сервера актуальные настройки. Если вы поменяете сайт для маскировки или ключи, достаточно обновить подписку в приложении.
Чтобы проверить, что трафик идёт через VPN, откройте в браузере api.ipify.org. Там должен показываться IP-адрес вашего сервера. В панели у клиента появится зелёная метка В сети и начнёт расти счётчик трафика.

Устройство подключилось
Ссылка на подписку и QR-код – это ключ к вашему VPN
По ним подключится любой, у кого они окажутся. Для каждого человека создавайте отдельного клиента, тогда при утечке достаточно удалить одного.
Как выбрать сайт для маскировки
От выбора цели во многом зависит, насколько долго подключение проживёт без блокировки, поэтому этот шаг стоит сделать осознанно. Первое требование техническое. Сайт должен работать по TLS 1.3 и HTTP/2 и поддерживать современный обмен ключами X25519MLKEM768, иначе рукопожатие Reality не сможет правдоподобно повторить его поведение. Именно эти свойства проверяет сканер в панели, и статус Подходит означает, что все они на месте.
Второе требование касается правдоподобия. Система фильтрации видит одновременно имя сайта и IP-адрес, на который уходит соединение. Адреса крупных компаний вроде Samsung, Microsoft или Amazon хорошо известны и принадлежат их собственным сетям или сетям CDN, и обращение к такому имени, которое уходит на адрес обычного хостинга в Германии, выглядит неестественно. Гораздо естественнее выглядит небольшой европейский сайт, который сам размещён у хостинг-провайдера. По этой же причине не подходят сайты за Cloudflare и другими CDN, ведь их настоящие адреса тоже хорошо известны. Наш скрипт для Marzban выбирает сайты именно так, и его список можно использовать и здесь, например www.computerbase.de, www.reichelt.de, wiki.ubuntuusers.de или mailbox.org.
Если вы хотите подобрать свой вариант, введите его домен в сканере и нажмите Сканировать. Проверить, не стоит ли сайт за CDN, можно с сервера одной командой.
# Смотрим, какой сервер отвечает сайту. Cloudflare, Akamai или Fastly не подходят
curl -sI https://www.computerbase.de | grep -i '^server'Для www.computerbase.de команда ответила server: nginx, то есть сайт работает на собственном сервере. Ещё надёжнее маскироваться под собственный домен по схеме self-steal, она описана в отдельной статье.
Ограничения для клиентов
Все ограничения задаются в форме клиента на вкладке Основные. Ноль в любом поле означает «без ограничений».
- Лимит трафика (ГБ) – сколько гигабайт клиент может израсходовать. После этого подключение для него отключится.
- Лимит IP – сколько IP-адресов могут пользоваться ключом одновременно. Ограничение работает через Fail2ban, который установщик поставил сам.
- Лимит HWID – сколько устройств может получать подписку.
- Срок действия – дата, после которой клиент перестанет работать. Если включить Старт после первого использования, отсчёт начнётся с первого подключения, это удобно для подарочных ключей.
- Сброс трафика – как часто обнулять счётчик трафика клиента.
Защитите панель
Панель управляет всеми ключами, поэтому её стоит защитить сразу после настройки.
- Откройте Настройки панели → Учетная запись → Двухфакторная аутентификация, включите переключатель Включить 2FA и следуйте подсказкам панели. После этого для входа понадобится код из приложения-аутентификатора.

Двухфакторная аутентификация
- Не меняйте случайный порт и секретный путь на простые вроде
2053или/panel. Именно их в первую очередь перебирают сканеры. - Если на сервере включён брандмауэр UFW, откройте в нём нужные порты, иначе панель и VPN станут недоступны.
# Порт VPN и порт 80 для продления сертификата
ufw allow 443/tcp
ufw allow 80/tcp
# Порт панели из строки Port и порт подписки
ufw allow 54584/tcp
ufw allow 2096/tcpВместо 54584 укажите порт своей панели. Порт 2096 панель использует для ссылок на подписку.
Обновление и резервная копия
Обновить панель можно одной командой. Перед обновлением сделайте резервную копию, как описано ниже.
x-ui updateРезервную копию проще всего сделать в самой панели. Откройте Дашборд, нажмите Бэкап и восстановление и затем кнопку скачивания у пункта Экспорт базы данных. Файл .db содержит всех клиентов и все подключения, его же можно загрузить обратно через Импорт базы данных, например при переезде на новый сервер.

Резервная копия базы
Остальные действия собраны в меню, которое открывается командой x-ui без параметров. Через него можно сбросить логин и пароль, сменить порт, управлять сертификатом и посмотреть журналы.

Меню x-ui
Частые вопросы
Забыли логин или пароль от панели
Если вы их не меняли, они записаны в файле /etc/x-ui/install-result.env, посмотрите его командой cat /etc/x-ui/install-result.env. Если меняли, выполните x-ui, выберите пункт 7. Reset Username & Password и задайте новые.
Панель не открывается
Проверьте три вещи.
- Адрес должен быть полным, вместе с портом и секретным путём. Без пути панель отвечает ошибкой 404.
- Адрес начинается с
https://. Поhttp://панель соединение не принимает. - Порт панели открыт в брандмауэре, а сама панель запущена. Состояние покажет команда
x-ui status.
Браузер пишет, что сертификат недействителен
Сертификат для IP-адреса выдаётся всего на 6 дней, и acme.sh проверяет его продление четыре раза в сутки. Для продления Let's Encrypt обращается к серверу по порту 80. Если этот порт закрыт брандмауэром или занят другой программой, например веб-сервером, сертификат истечёт. Освободите порт 80 и выпустите сертификат заново через x-ui → 20. SSL Certificate Management.
Приложение подключается, но сайты не открываются
- Обновите подписку в приложении. После смены ключей, сайта или потока старые настройки перестают подходить.
- Обновите само приложение. Новые версии Xray требуют от клиентов поддержки постквантового обмена ключами, и старые приложения с ними не работают.
- Проверьте, что у клиента выбран Flow
xtls-rprx-vision, а в подключении отпечаток uTLSfirefox. - Если не помогло, пройдите по шагам статьи «VPN на своём сервере не подключается».
Установщик пишет, что порт 443 занят
Посмотрите, какая программа его заняла, командой ss -lntp | grep ':443 '. Чаще всего это веб-сервер Nginx или другой VPN. Остановите его или выберите для подключения другой порт.
Наши ресурсы
Telegram-канал: https://t.me/f3cloud_news
Сайт хостинга: https://f3cloud.com