Marzban: установка панели и VLESS Reality на VPS
Ставим Marzban официальным установщиком, настраиваем VLESS Reality на порту 443 с отпечатком firefox, создаём пользователя и подключаем телефон. Debian 12 и Ubuntu 24.04.

Marzban — веб-панель над ядром Xray. Через браузер создаёте пользователей, выдаёте им ссылки на подписку, видите расход трафика и отключаете доступ одной кнопкой. Для личного VPN на несколько устройств это самый простой вариант, где не нужно править JSON на каждого нового человека.
Ниже — установка с нуля на чистом сервере: панель, подключение VLESS Reality на порту 443, первый пользователь и проверка с телефона. Проверено на Debian 12 с Marzban 0.8.x.
Что нужно
- Сервер на tanaka.host с Debian 12 или Ubuntu 24.04, 1 ядро и 1 ГБ памяти хватает.
- Доступ по SSH под root — см. подключение по SSH.
- Свободный порт 443. Если на сервере уже крутится nginx или другой VPN, сначала освободите его.
Скрипт рассчитан на чистую систему. Если сервер уже чем-то занят, переустановите ОС из кабинета tanaka.host — так проще, чем вычищать остатки.
1. Установите Marzban
Официальный установщик ставит Docker, скачивает образы и запускает панель:
sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install
В конце он начнёт показывать журнал контейнера. Выйдите из него клавишами Ctrl+C — контейнеры продолжат работать. Файлы панели лежат в двух местах: настройки в /opt/marzban/.env, данные и конфигурация Xray — в /var/lib/marzban/.
Создайте администратора:
marzban cli admin create --sudo
Команда спросит логин и пароль. Запишите их в менеджер паролей.
2. Настройте VLESS Reality
По умолчанию в /var/lib/marzban/xray_config.json лежит демонстрационный набор инбаундов. Заменим его одним подключением VLESS Reality. Сначала сгенерируйте ключи и Short ID внутри контейнера Marzban:
docker compose -f /opt/marzban/docker-compose.yml exec marzban xray x25519
openssl rand -hex 8
Первая команда выведет Private key и Public key (в новых версиях Xray — PrivateKey и Password). Приватный ключ идёт в конфиг сервера, публичный панель сама подставит в ссылки клиентам. Вторая команда даёт Short ID.
Откройте конфиг и замените содержимое, подставив свой приватный ключ и Short ID:
nano /var/lib/marzban/xray_config.json
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"tag": "VLESS TCP REALITY",
"listen": "0.0.0.0",
"port": 443,
"protocol": "vless",
"settings": {
"clients": [],
"decryption": "none"
},
"streamSettings": {
"network": "tcp",
"security": "reality",
"realitySettings": {
"show": false,
"target": "www.computerbase.de:443",
"xver": 0,
"serverNames": ["www.computerbase.de"],
"privateKey": "PRIVATE_KEY",
"shortIds": ["SHORT_ID"]
}
},
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls", "quic"]
}
}
],
"outbounds": [
{
"protocol": "freedom",
"tag": "direct"
},
{
"protocol": "blackhole",
"tag": "block"
}
]
}
Массив clients оставляйте пустым — Marzban сам добавляет туда пользователей из панели. Перезапустите панель:
marzban restart
Сайт для маскировки www.computerbase.de — просто рабочий пример. Как выбирать свой, рассказано ниже.
3. Откройте порты
Если брандмауэр ещё не настроен, сделайте это сейчас по статье про UFW и firewalld. Нужны SSH, 443 и порт панели (по умолчанию 8000):
ufw allow 22/tcp
ufw allow 443/tcp
ufw allow 8000/tcp
ufw enable
4. Войдите в панель
Адрес панели — http://IP-сервера:8000/dashboard/. Логин и пароль — из шага 1. Язык переключается кнопкой с иконкой перевода в правом верхнем углу.
Панель работает по HTTP. Пароль уходит в открытом виде. Не входите с общественного Wi-Fi и не пересылайте адрес вместе с паролем в чатах. Если панель нужна надолго — поставьте перед ней nginx с сертификатом по статье про Let’s Encrypt.
Сразу проверьте отпечаток TLS: меню ☰ → Настройки хоста → VLESS TCP REALITY → Дополнительные опции → поле Fingerprint. По умолчанию там chrome, поставьте firefox и нажмите Применить.
5. Создайте пользователя
Пользователь — это отдельный ключ. На каждого человека и желательно на каждое устройство создавайте своего: при утечке удалите одного, остальные продолжат работать.
- Нажмите Создать.
- Имя пользователя — например
phone. - В блоке Протоколы убедитесь, что карточка Vless выделена.
- Лимит трафика и Дата истечения срока можно не заполнять.
- Нажмите Создать.
У пользователя в списке три кнопки:
| Кнопка | Что делает |
|---|---|
| Скопировать ссылку на подписку | Ссылка, по которой приложение само забирает актуальные настройки. Её и давайте людям |
| Скопировать конфигурации | Прямая ссылка vless:// на одно подключение |
| QR Code | QR-коды подписки и подключения для сканирования телефоном |
6. Подключите устройство
Подойдёт любой клиент на ядре Xray: Incy, Happ, v2rayN для компьютеров, v2rayNG для Android. В приложении выберите добавление из буфера обмена и вставьте ссылку на подписку либо отсканируйте QR-код. Включите подключение и откройте api.ipify.org — там должен быть IP вашего сервера.
Ссылка на подписку — это ключ. Кто её получил, тот подключился. Не публикуйте и не отправляйте в открытые чаты.
Клиенты на ядре sing-box (Hiddify, NekoBox, Throne, NekoRay) с Reality на свежих версиях Xray не работают — сервер принимает только клиентов с постквантовым обменом ключами ML-KEM. Берите приложения на Xray-core и держите их обновлёнными.
Почему firefox, а не chrome
Фильтры провайдеров оценивают TLS-соединение по совокупности: подсеть хостинга, SNI и отпечаток клиента. chrome стоит по умолчанию почти во всех VPN-приложениях, и пара «отпечаток Chrome + IP дата-центра» стала надёжным признаком прокси. На практике при нескольких одновременных подключениях с chrome соединение «замораживается» на минуты, с firefox — нет.
edge больше не подходит: с Xray 26.9.8 сервер Reality требует ML-KEM, а профиль edge соответствует старому Edge 85 без него. random и randomized тоже не используйте — могут выбрать профиль без ML-KEM.
Сайт для маскировки
Reality прячет VPN под обращение к обычному сайту. Требования к нему: TLS 1.3, HTTP/2, поддержка X25519MLKEM768 и — главное — не за Cloudflare, Akamai или другим CDN. Крупные бренды вроде microsoft.com не берите: их адреса известны, и «Microsoft на IP небольшого хостинга» выглядит подозрительно. Лучше небольшой европейский сайт на собственном сервере. Проверить, не стоит ли сайт за CDN:
curl -sI https://www.computerbase.de | grep -i '^server'
Ответ server: nginx — хорошо, cloudflare — не подходит. Ещё надёжнее маскироваться под свой домен — см. self-steal для VLESS Reality.
Полезные команды
| Команда | Что делает |
|---|---|
marzban status |
Состояние контейнеров, должно быть running |
marzban logs |
Журнал панели и Xray |
marzban restart |
Перезапуск после правки конфигов |
marzban update |
Обновление, пользователи и настройки сохраняются |
marzban down |
Остановить панель |
Частые ошибки
- Панель не открывается. Адрес через
http://, а неhttps://, порт 8000 открыт в брандмауэре,marzban statusпоказываетrunning. - Xray не стартует после правки конфига. Смотрите
marzban logs— чаще всего пропущена запятая в JSON или занят порт 443 (ss -lntp | grep ':443 '). - Подключается, но сайты не грузятся. Обновите подписку в приложении и само приложение; проверьте, что у пользователя статус Active, а в настройках хоста отпечаток
firefox. - Забыли пароль администратора.
marzban cli admin updateсменит пароль существующего.
Когда пользователей станет много и серверов несколько, посмотрите на Remnawave — есть инструкция по переезду.