👋

Пожалуйста, отключите блокировщик рекламы.

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

Установка и настройка 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 установлен и запущен

Настройка Marzban

💡
По соображениям безопасности, панель управления Marzban недоступна по IP-адресу. Вам необходимо получить SSL-сертификат для домена.

Вход в панель управления без SSL-сертификата

Для входа в панель без использования SSL сертификата и доменного имени, нам требуется создать туннель.

Команда для создания туннеля строится следующим образом:
ssh -L [локальный порт]:[удалённый хост]:[удалённый порт] [пользователь]@[адрес сервера]

В нашем случае команда выглядит следующим образом:

ssh -L 8000:localhost:8000 root@IP сервера

Для Windows систем команду необходимо вводить в командной строке (cmd).
Для Linux и MacOS - в терминале.

После ввода данной команды, подтверждаем подключение вводом "Yes" и затем вводим пароль от сервера.

SSH туннель

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

Вход в панель управления Marzban

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

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

sudo marzban cli admin create --sudo
Создание учетной записи администратора Marzban

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

Панель управления Marzban

Вход в панель управления с SSL-сертификатом

Для удобства входа в панель Marzban через браузер без настройки SSH туннеля требуется:

  • Приобрести и привязать доменное имя к серверу с панелью Marzban (возможно использование собственного доменного имени)
  • Выпустить SSL сертификат для доменного имени и указать сертификат в конфигурации панели Marzban

Для начала нужно добавить A-запись домена, направленную на сервер с панелью Marzban. Пример добавленной A-записи для домена marzban.pogrommist.ru:

Пример А-записи для поддомена
💡
После установки А-записи, необходимо дождаться обновления данных в глобальной сети. Обычно это происходит в течении 5-15 минут, но иногда время обновления DNS-записей занимает до 24 часов.

Проверить обновление данных в сети можно в различных сервисах, например: 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/

Получаем сертификат

💡
В команде ниже необходимо обязательно указать Ваше используемое доменное имя после параметра -d
~/.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/.

⚠️
Данный сертификат действует 3 месяца. Для автоматического продления его через cron, требуется оставить открытым 80 порт.

Теперь нам необходимо подключить выпущенный сертификат. Откроем конфигурационный файл панели через редактор 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://ВАШ_ДОМЕН:ПОРТ
Подключение SSL к Marzban

После внесения изменений в файл конфигурации необходимо перезапустить 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 представляют собой мощный набор инструментов для обеспечения безопасной и эффективной передачи данных.

Дальнейшие изменения будут проводиться в настройках, которые находятся в правом верхнем углу.

Настройки протоколов Marzban

По умолчанию в блоке "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

После добавления протокола Vless TCP Reality требуется изменить значения:

  • ServerNames
  • Dest
  • Privatekey
  • Publickey
  • shortIds
⚠️
Подбор Server Name и Dest рекомендуем выполнять командой ping
Чем ниже пинг до определенного сайта, тем меньше задержка при работающем соединении
Необходимо выбирать надежные сайты, если сайт будет недоступен, соединения не будет.
Обязательно выбирайте не популярные но надежные сайты в качестве Server Name и Dest для вашей конфигурации Vless TCP Reality.

В качестве проверки работоспособности будем использовать yahoo.com. Как подобрать SNI читайте дальше.

Сгенерируем новые ключи шифрования и параметр shortIds в командной строке вашего сервера командами

docker exec marzban-marzban-1 xray x25519
openssl rand -hex 8
Генерация ключей шифрования

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

Конфиг VLESS

После внесения изменений, необходимо сохранить изменения, перезагрузить ядро.

Исправим ошибку "Таймаут" в приложениях, добавив правило в самое начало блока 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

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

Ссылка на подписку Marzban

Выбор сайта для маскировки

Для корректной работы Vless-Reality нужно очень ответственно подойти к выбору сайта, под который мы будем маскироваться. От используемого домена маскировки зависит скорость установления подключений клиентов к вашему серверу и устойчивость вашей маскировки.

💡
Важно отметить тот факт, что XTLS‑Reality имеет недостаток — если сайт, под который вы маскируетесь, испытывает технические проблемы (например, временно отключил TLSv1.3), или огородился от вашего сервера (устав от проксируемых запросов на установление соединений), или попал под блокировку, то точно так же перестанет работать и ваш прокси.

Минимальные требования к сайту:

  • Сайт должен располагаться за пределами РФ
  • Поддерживает подключения по 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"), то они отобразятся. Попробуйте сходить по ним в браузере. Если не открывается, или лезут ошибки - такой домен нам не подходит, а если открывается и ошибок нет - можно попробовать маскироваться под него. Пример сканирования случайного адреса:

Результаты сканирования RealiTLScanner

В данном случае были найдены нормальные домены "barxeles.com" и "nytimes.com".

Помимо этого не будет лишним зайти на ваш сервер и с него выполнить команду ping до указанного сайта, чтобы из нескольких подходящих сайтов выбрать тот, который ближе всего к вашему VPS-серверу.

Вариант второй - поиск сайта самостоятельно и его проверка на соответствие требованиям. Например, ваш сервер находится в Нидерландах, находим список нидерландских сайтов и выбираем понравившийся. Пробуем по нему перейти. Если всё ок, то проверяем его на соответствие требованиям, проверяем ping от вашего сервера до него и пытаемся маскироваться под него.

Полезные ссылки: