Установка и настройка Marzban

Marzban — это инструмент управления прокси-серверами, который предоставляет простой и удобный пользовательский интерфейс для управления сотнями учетных записей прокси на базе Xray-core и созданный с использованием Python и ReactJS.
Установка Marzban
Установка Marzban с базой данных SQLite (по умолчанию):
sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install
Установка Marzban с базой данных MySQL:
sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install --database mysql
Установка Marzban с базой данных MariaDB:
sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install --database mariadb
После установки, для остановки вывода логов воспользуйтесь комбинацией Ctrl+C

Настройка Marzban
Вход в панель управления без SSL-сертификата
Для входа в панель без использования SSL сертификата и доменного имени, нам требуется создать туннель.
Команда для создания туннеля строится следующим образом:ssh -L [локальный порт]:[удалённый хост]:[удалённый порт] [пользователь]@[адрес сервера]
В нашем случае команда выглядит следующим образом:
ssh -L 8000:localhost:8000 root@IP сервера
Для Windows систем команду необходимо вводить в командной строке (cmd).
Для Linux и MacOS - в терминале.
После ввода данной команды, подтверждаем подключение вводом "Yes" и затем вводим пароль от сервера.

После подключения к серверу доступ к панели должен появиться с браузера вашего устройства по адресу http://127.0.0.1:8000/dashboard/
.

Как только вы закроете терминал доступ к панели управления Marzban пропадет.
Для входа в панель управления необходимо создать администратора. Для создания учетной записи администратора Marzban выполните следующую команду:
sudo marzban cli admin create --sudo

Используем созданную учетную запись для входа в панель управления.

Вход в панель управления с SSL-сертификатом
Для удобства входа в панель Marzban через браузер без настройки SSH туннеля требуется:
- Приобрести и привязать доменное имя к серверу с панелью Marzban (возможно использование собственного доменного имени)
- Выпустить SSL сертификат для доменного имени и указать сертификат в конфигурации панели Marzban
Для начала нужно добавить A-запись домена, направленную на сервер с панелью Marzban. Пример добавленной A-записи для домена marzban.pogrommist.ru
:

Проверить обновление данных в сети можно в различных сервисах, например: https://dnschecker.org
После глобального обновления доменного имени, переходим в SSH-консоль сервера и выпустим SSL-сертификат с использованием скрипта Acme.sh
Устанавливаем необходимое ПО
sudo apt install cron socat -y
curl https://get.acme.sh | sh -s email=Ваш_email
sudo mkdir -p /var/lib/marzban/certs/
Получаем сертификат
~/.acme.sh/acme.sh --set-default-ca --server letsencrypt --issue --standalone -d ВАШ_ДОМЕН \
--key-file /var/lib/marzban/certs/key.pem \
--fullchain-file /var/lib/marzban/certs/fullchain.pem
После успешного выпуска и получения SSL-сертификата он будет помещен в папку /var/lib/marzban/certs/
.

Теперь нам необходимо подключить выпущенный сертификат. Откроем конфигурационный файл панели через редактор nano и укажем пути до SSL-сертификата:
sudo nano /opt/marzban/.env
Изменяем следующие строчки:
UVICORN_SSL_CERTFILE = "/var/lib/marzban/certs/fullchain.pem"
UVICORN_SSL_KEYFILE = "/var/lib/marzban/certs/key.pem"
XRAY_SUBSCRIPTION_URL_PREFIX = https://ВАШ_ДОМЕН:ПОРТ

После внесения изменений в файл конфигурации необходимо перезапустить Marzban:
sudo marzban restart
Панель управления Marzban стала доступна по адресу https://marzban.pogrommist.ru:8000/dashboard/
с любого устройства.
Настройка Vless TCP Reality в панели Marzban
Vless Reality — это набор технологий для безопасной и эффективной передачи данных. Он включает в себя:
- VLESS. Это легковесный транспортный протокол, который обеспечивает безопасную связь между клиентом и сервером Xray. В отличие от своего предшественника VMess, VLESS не зависит от системного времени и использует UUID для аутентификации.
- REALITY. Это проект, направленный на улучшение существующих технологий TLS. Его главная цель — обеспечить более высокий уровень безопасности и конфиденциальности данных при передаче через интернет. REALITY устраняет некоторые уязвимости стандартного TLS, делая его более устойчивым к атакам.
- XTLS. Это технология, которая использует TLS для маскировки трафика. Она устанавливает настоящее TLS-соединение и анализирует трафик внутри этого туннеля. При использовании TLS 1.3 XTLS передаёт данные без изменений, что делает трафик почти неотличимым от обычного интернет-трафика.
Вместе VLESS, REALITY и XTLS представляют собой мощный набор инструментов для обеспечения безопасной и эффективной передачи данных.
Дальнейшие изменения будут проводиться в настройках, которые находятся в правом верхнем углу.

По умолчанию в блоке "Inbounds" только Shadowsocks TCP, добавим вместо него Vless TCP Reality.
{
"tag": "VLESS TCP REALITY",
"listen": "0.0.0.0",
"port": 443,
"protocol": "vless",
"settings": {
"clients": [],
"decryption": "none"
},
"streamSettings": {
"network": "tcp",
"tcpSettings": {},
"security": "reality",
"realitySettings": {
"show": false,
"dest": "заменить:443",
"xver": 0,
"serverNames": [
"заменить"
],
"privateKey": "заменить",
"publicKey": "заменить",
"shortIds": [
"заменить"
]
}
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"fakedns"
]
}
}

После добавления протокола Vless TCP Reality требуется изменить значения:
- ServerNames
- Dest
- Privatekey
- Publickey
- shortIds
Чем ниже пинг до определенного сайта, тем меньше задержка при работающем соединении
Необходимо выбирать надежные сайты, если сайт будет недоступен, соединения не будет.
Обязательно выбирайте не популярные но надежные сайты в качестве Server Name и Dest для вашей конфигурации Vless TCP Reality.
В качестве проверки работоспособности будем использовать yahoo.com
. Как подобрать SNI читайте дальше.
Сгенерируем новые ключи шифрования и параметр shortIds в командной строке вашего сервера командами
docker exec marzban-marzban-1 xray x25519
openssl rand -hex 8

Нам необходимо скопировать параметры Private key и shortIds после чего заменить их в панели.

После внесения изменений, необходимо сохранить изменения, перезагрузить ядро.
Исправим ошибку "Таймаут" в приложениях, добавив правило в самое начало блока rules после квадратной скобки:
{
"outboundTag": "DIRECT",
"domain": [
"full:cp.cloudflare.com",
"domain:msftconnecttest.com",
"domain:msftncsi.com",
"domain:connectivitycheck.gstatic.com",
"domain:captive.apple.com",
"full:detectportal.firefox.com",
"domain:networkcheck.kde.org",
"full:*.gstatic.com"
],
"type": "field"
},
После внесения изменений, необходимо их сохранить и перезагрузить ядро.
Создание пользователя
Создадим пользователя в панели Marzban и выберем протокол Vless TCP Reality.

Копируем ссылку на подписку и вставляем ее в программу, через которую будем подключаться к серверу Marzban.



Выбор сайта для маскировки
Для корректной работы Vless-Reality нужно очень ответственно подойти к выбору сайта, под который мы будем маскироваться. От используемого домена маскировки зависит скорость установления подключений клиентов к вашему серверу и устойчивость вашей маскировки.
Минимальные требования к сайту:
- Сайт должен располагаться за пределами РФ
- Поддерживает подключения по TLSv1.3 и HTTP/2 (проверить поддержку TLS можно
openssl s_client -connect сайт:порт -tls1_3
, а HTTP/2 –openssl s_client -connect сайт:443 -alpn h2 </dev/null 2>/dev/null | grep -i "ALPN"
должно выдатьALPN protocol: h2
) - IP-адрес камуфляжного веб-сайта близок к IP-адресу вашего сервера
Можно воспользоваться специальной утилитой RealiTLScanner, которая ищет сайты в той же подсети, что и ваш сервер и проверяет поддержку TLSv1.3 и HTTP/2.
Открываем консоль в папке со скаченным файлом и вводим .\RealiTLScanner-windows-64.exe -addr server_ip
, где server_ip
–
Запустится процесс сканирования ip-адресов в бесконечном режиме. Обычно она находит большинство сайтов за первые минут 10-30. Если будут найдены какие-либо домены сайтов (поле "cert-domain"), то они отобразятся. Попробуйте сходить по ним в браузере. Если не открывается, или лезут ошибки - такой домен нам не подходит, а если открывается и ошибок нет - можно попробовать маскироваться под него. Пример сканирования случайного адреса:

В данном случае были найдены нормальные домены "barxeles.com" и "nytimes.com".
Помимо этого не будет лишним зайти на ваш сервер и с него выполнить команду ping до указанного сайта, чтобы из нескольких подходящих сайтов выбрать тот, который ближе всего к вашему VPS-серверу.
Вариант второй - поиск сайта самостоятельно и его проверка на соответствие требованиям. Например, ваш сервер находится в Нидерландах, находим список нидерландских сайтов и выбираем понравившийся. Пробуем по нему перейти. Если всё ок, то проверяем его на соответствие требованиям, проверяем ping от вашего сервера до него и пытаемся маскироваться под него.
Полезные ссылки: