Поиск
Показаны результаты для тегов 'marzban'.
Найдено 37 результатов
-
Инструкция данная в первую очередь для продвинутых Для этого, нам потребуется PhpMyAdmin установленный для вашей базы данных. Авторизуйтесь в PMA. Выбираем вашу БД (в нашем случае это Marzban) И выполнить в ней простой SQL запрос: DELIMITER // CREATE TRIGGER DEFAULT_FLOW BEFORE INSERT ON proxies FOR EACH ROW BEGIN IF NEW.type = 'VLESS' AND JSON_UNQUOTE(JSON_EXTRACT(NEW.settings, '$.flow')) = '' THEN SET NEW.settings = JSON_SET(NEW.settings, '$.flow', 'xtls-rprx-vision'); END IF; END; // DELIMITER ; Благодаря этому, вы создаете условие-триггер: Добавлять FLOW при создании нового пользователя для VLESS. Чтобы отключить, выполнить: DROP TRIGGER DEFAULT_FLOW;
-
Всем привет! Уже опубликовав статью про установку MarzNeshin, понял что старая версия моей инструкции устарела и морально и технически, учитывая что вышла свежая версия Marzban, которая привнесла большое количество изменений. С момента написания моей статьи по ФэнШую прошло больше полугода, а она остается актуальной. И этой концепции я придерживаюсь. Сегодня мы разберем установку с нуля. 0. Вводная. На момент написания статьи, мой PR к скриптам установки находится на рассмотрении, ждем пока Saint сам протестирует установку и примет PR. https://github.com/Gozargah/Marzban-scripts/pull/29 Что изменилось в скрипте: Добавлена возможность выбора версии --dev Добавлена возможность установки сразу с базой данных --database mysql или --database mariadb Обновлена функцию обновления ядра Xray, сделал также красиво как и обновление в marzban-node, без лишних текстов и уведомлений. Изменился формат выбора версии для установки: --version v0.5.2 Пока ждем обновления офф скриптов, можно воспользоваться моей репой: https://github.com/DigneZzZ/Marzban-scripts-beta Что изменилось в Marzban начиная с версии 0.7.0 я расписывал здесь: Что изменилось в концепции установки: Теперь все свои сборки я ставлю в сеть Docker, а доступ к ним организовываю через Caddy. В целом это легко и просто. А главное быстро. Каждой ноде свой инбаунд Мэйн панель - только для администрирования БД только MySQL/MariaDB 1. Подготовка сервера 1.1. Аренда сервера Если ваш сервер Marzban уже приносит, или планирует приносить хороший доход, тогда вам нужно обеспечить достаточный уровень надежности вашей инфраструктуры. 1. Не нужно экономить на хороших и надежных серверах 2. Не нужно экономить на ресурсах для хорошей нагрузки 3. Не нужно экономить на стоимости ваш серверов для НОД - стабильность подключений и качество связи - это обязательное условия роста вашего "бизнеса"/"проекта" 1. Брать сервера под Мэйн в идеале нужно у крупных провайдеров, ориентированных на корпоративных клиентов. Примеры: Selectel, Cloud.Vk.Com, Yandex Cloud, Cloud.ru и др.. Также можно рассматривать крупных провайдеров типа: AWS, Vultr, Kamatera, Hetzner, но опять же - тарифы выбираем с выделенными ядрами, не Шэред, и главное - должна быть 100% гарантия что ваш сервер не удалят и вы сможете всегда его оплачивать. 2. Ситуации с сайтами могут быть самыми разными, начиная от ДДоС атак, заканчивая наплывом клиентов. Но конечно про экономику забывать не нужно. 3. Чем лучше провайдер и каналы - тем довольнее будут клиенты. Не нужно стараться дать им 30 стран на выбор, уверяю вас, они не оценят. Отталкивайтесь от географии ваших клиентов. Для РФ это сервер в Европе. ОООЧень редко кому нужна локация в США.. и тем более где нибудь в Чили или Австралии.. Нахрена им? Поэтому, провайдер должен быть стабильный, компания иностранная. Своими рекомендациями я уже поделился в канале VPS Insider (но по причине отсутствия заинтересованности я перестал его поддерживать, оставив всю историю там) вступить можно по ссылке за 170 Звёзд ТГ: https://t.me/+lQBQTGym57hmOTAy Скорость должна быть 10Гбс - минимум 2-5Гбс. Трафика от 3-5Тб (суммарного). Конечно лучше безлимит, но качественный сервер обычно имеет лимитированный трафик. Давайте возьмем сервер здесь: https://procloud.ru?referral_id=274473 Локацию берите Москва (для Мэйн сервера - без разницы) ОСь берите Ubuntu 24.04 ЦП - 2 ядра Память - 4 Гб. Диск - 30 Гб. Желательно максимально быстрый. 1.2. Взяли? Теперь подключаемся. Как и раньше я использую Termius для работы с серверами. 1.3. Первым делом запускаем обновление системы: apt update && apt upgrade -yqq 1.4. Запускаем установку Caddy Ставим Caddy sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list sudo apt update sudo apt install caddy 1.5. Ставим мой сервис CADD: sudo nano /usr/local/bin/cadd 1.6. Заполняем в открытом редакторе файл: #!/bin/bash CONFIG_FILE="/etc/caddy/Caddyfile" # Путь к файлу конфигурации Caddy LOG_LINES=20 # Количество строк журнала для вывода # Цвета для вывода в консоль RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # Без цвета (сброс) case "$1" in e) # Редактирование конфигурации nano "$CONFIG_FILE" ;; r) # Рестарт сервиса Caddy systemctl restart caddy echo -e "${GREEN}Caddy restarted.${NC}" ;; v) # Валидация конфигурационного файла caddy validate --config "$CONFIG_FILE" ;; s) # Статус сервиса Caddy systemctl status caddy | head -n 10 ;; l) # Логи сервиса Caddy journalctl -u caddy.service -n "$LOG_LINES" ;; f) # Форматирование Caddyfile caddy fmt --overwrite "$CONFIG_FILE" echo -e "${GREEN}File ${YELLOW} $CONFIG_FILE ${GREEN}has been formatted.${NC}" ;; h) # Вывод помощи echo -e "${YELLOW}Usage:${NC}" echo -e "${BLUE}cadd e${NC} - edit Caddyfile" echo -e "${BLUE}cadd r${NC} - restart Caddy" echo -e "${BLUE}cadd v${NC} - validate Caddyfile" echo -e "${BLUE}cadd s${NC} - check status of Caddy" echo -e "${BLUE}cadd l${NC} - show last ${LOG_LINES} lines from Caddy log" echo -e "${BLUE}cadd f${NC} - format file ${CONFIG_FILE}" echo -e "${BLUE}cadd h${NC} - display this help" ;; *) # Неправильный ввод команды echo -e "${RED}Invalid option!${NC} Usage: cadd {e|r|v|s|l|h|f}" ;; esac Сохранили и закрыли 1.7. Выдаем права файлу на исполнение: sudo chmod +x /usr/local/bin/cadd 1.8. Теперь поставим Docker curl -fsSL https://get.docker.com | sh 1.9. Теперь создадим нашу докер-сеть: Назовем ее caddy_net: docker network create \ --driver bridge \ --subnet 10.0.0.0/16 \ --gateway 10.0.0.1 \ caddy_net Диапазон у нас будет адресов 10.0.[0-255].[1-255] Но это с запасом. 2. Ставим Marzban. Ставить будем вариант сразу с MariaDB: sudo bash -c "$(curl -sL https://github.com/DigneZzZ/Marzban-scripts-beta/raw/main/marzban.sh)" @ install --database mariadb 2.1. Останавливаем Marzban: marzban down 2.2. Редактируем docker-compose: nano /opt/marzban/docker-compose.yml 2.3. Смотрим внимательно. Исходный вид: services: marzban: image: gozargah/marzban:latest restart: always env_file: .env network_mode: host volumes: - /var/lib/marzban:/var/lib/marzban - /var/lib/marzban/logs:/var/lib/marzban-node depends_on: mariadb: condition: service_healthy mariadb: image: mariadb:lts env_file: .env network_mode: host restart: always environment: MYSQL_ROOT_PASSWORD: password MYSQL_ROOT_HOST: '%' MYSQL_DATABASE: marzban MYSQL_USER: marzban MYSQL_PASSWORD: password command: - --bind-address=127.0.0.1 - --character_set_server=utf8mb4 - --collation_server=utf8mb4_unicode_ci - --host-cache-size=0 - --innodb-open-files=1024 - --innodb-buffer-pool-size=268435456 - --binlog_expire_logs_seconds=5184000 # 60 days volumes: - /var/lib/marzban/mysql:/var/lib/mysql healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] start_period: 10s start_interval: 3s interval: 10s timeout: 5s retries: 3 Приводим содержимое к нужному виду: services: marzban: image: gozargah/marzban:latest restart: always env_file: .env # network_mode: host volumes: - /var/lib/marzban:/var/lib/marzban - /var/lib/marzban/logs:/var/lib/marzban-node depends_on: mariadb: condition: service_healthy networks: caddy_net: ipv4_address: 10.0.10.2 mariadb: image: mariadb:lts env_file: .env # network_mode: host restart: always environment: MYSQL_ROOT_PASSWORD: password MYSQL_ROOT_HOST: '%' MYSQL_DATABASE: marzban MYSQL_USER: marzban MYSQL_PASSWORD: password command: # - --bind-address=127.0.0.1 - --character_set_server=utf8mb4 - --collation_server=utf8mb4_unicode_ci - --host-cache-size=0 - --innodb-open-files=1024 - --innodb-buffer-pool-size=268435456 - --binlog_expire_logs_seconds=5184000 # 60 days volumes: - /var/lib/marzban/mysql:/var/lib/mysql healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] start_period: 10s start_interval: 3s interval: 10s timeout: 5s retries: 3 networks: caddy_net: ipv4_address: 10.0.10.3 networks: caddy_net: external: true комментируем строку # network_mode: host Добавляем адреса в сети докер (хотя они нам не понадобятся уже) Gtht 2.4. Заходим в .env и приводим к виду: #UVICORN_HOST = "0.0.0.0" #UVICORN_PORT = 8000 # ALLOWED_ORIGINS=http://localhost,http://localhost:8000,http://example.com ## We highly recommend add admin using `marzban cli` tool and do not use ## the following variables which is somehow hard codded infrmation. # SUDO_USERNAME = "admin" # SUDO_PASSWORD = "admin" UVICORN_UDS: "/var/lib/marzban/marzban.socket" # UVICORN_SSL_CERTFILE = "/var/lib/marzban/certs/example.com/fullchain.pem" # UVICORN_SSL_KEYFILE = "/var/lib/marzban/certs/example.com/key.pem" DASHBOARD_PATH = "/d-dash/" XRAY_JSON = "/var/lib/marzban/xray_config.json" XRAY_SUBSCRIPTION_URL_PREFIX = "https://sub.domain.com" XRAY_SUBSCRIPTION_PATH = "yourSub" # XRAY_EXECUTABLE_PATH = "/usr/local/bin/xray" # XRAY_ASSETS_PATH = "/usr/local/share/xray" # XRAY_EXCLUDE_INBOUND_TAGS = "INBOUND_X INBOUND_Y" # XRAY_FALLBACKS_INBOUND_TAG = "INBOUND_X" TELEGRAM_API_TOKEN = 511414455:AsdgSDGsHfhFDbdfbFDFDFbdfCgw TELEGRAM_ADMIN_ID = 1111111111 TELEGRAM_LOGGER_CHANNEL_ID = -1234567890123 TELEGRAM_DEFAULT_VLESS_FLOW = "xtls-rprx-vision" # TELEGRAM_PROXY_URL = "http://localhost:8080" # DISCORD_WEBHOOK_URL = "https://discord.com/api/webhooks/xxxxxxx" CUSTOM_TEMPLATES_DIRECTORY="/var/lib/marzban/templates/" # CLASH_SUBSCRIPTION_TEMPLATE="clash/my-custom-template.yml" SUBSCRIPTION_PAGE_TEMPLATE="subscription/index.html" # HOME_PAGE_TEMPLATE="home/index.html" # V2RAY_SUBSCRIPTION_TEMPLATE="v2ray/default.json" # V2RAY_SETTINGS_TEMPLATE="v2ray/settings.json" # SINGBOX_SUBSCRIPTION_TEMPLATE="singbox/default.json" # SINGBOX_SETTINGS_TEMPLATE="singbox/settings.json" # MUX_TEMPLATE="mux/default.json" ## Enable JSON config for compatible clients to use mux, fragment, etc. Default False. # USE_CUSTOM_JSON_DEFAULT=True ## Your preferred config type for different clients ## If USE_CUSTOM_JSON_DEFAULT is set True, all following programs will use the JSON config # USE_CUSTOM_JSON_FOR_V2RAYN=False # USE_CUSTOM_JSON_FOR_V2RAYNG=True # USE_CUSTOM_JSON_FOR_STREISAND=False ## Set headers for subscription SUB_PROFILE_TITLE = "Susbcription" SUB_SUPPORT_URL = "https://t.me/support" SUB_UPDATE_INTERVAL = "2" ## External config to import into v2ray format subscription # EXTERNAL_CONFIG = "config://..." # SQLALCHEMY_DATABASE_URL = "sqlite:///db.sqlite3" # SQLALCHEMY_POOL_SIZE = 10 # SQLIALCHEMY_MAX_OVERFLOW = 30 ## Custom text for STATUS_TEXT variable # ACTIVE_STATUS_TEXT = "Active" # EXPIRED_STATUS_TEXT = "Expired" # LIMITED_STATUS_TEXT = "Limited" # DISABLED_STATUS_TEXT = "Disabled" # ONHOLD_STATUS_TEXT = "On-Hold" ### Use negative values to disable auto-delete by default USERS_AUTODELETE_DAYS = -1 USER_AUTODELETE_INCLUDE_LIMITED_ACCOUNTS = false ## Customize all notifications # NOTIFY_STATUS_CHANGE = True # NOTIFY_USER_CREATED = True # NOTIFY_USER_UPDATED = True # NOTIFY_USER_DELETED = True # NOTIFY_USER_DATA_USED_RESET = True # NOTIFY_USER_SUB_REVOKED = True # NOTIFY_IF_DATA_USAGE_PERCENT_REACHED = True # NOTIFY_IF_DAYS_LEF_REACHED = True # NOTIFY_LOGIN = True ## Whitelist of IPs/hosts to disable login notifications # LOGIN_NOTIFY_WHITE_LIST = '1.1.1.1,127.0.0.1' ### for developers # DOCS=True # DEBUG=True # If You Want To Send Webhook To Multiple Server Add Multi Address # WEBHOOK_ADDRESS = "http://127.0.0.1:9000/,http://127.0.0.1:9001/" # WEBHOOK_SECRET = "something-very-very-secret" # VITE_BASE_API="https://example.com/api/" JWT_ACCESS_TOKEN_EXPIRE_MINUTES = 0 # JOB_CORE_HEALTH_CHECK_INTERVAL = 10 # JOB_RECORD_NODE_USAGES_INTERVAL = 30 # JOB_RECORD_USER_USAGES_INTERVAL = 10 # JOB_REVIEW_USERS_INTERVAL = 10 # JOB_SEND_NOTIFICATIONS_INTERVAL = 30 SQLALCHEMY_DATABASE_URL = "mysql+pymysql://marzban:[email protected]:3306/marzban" Собственно мы корректируем параметры: Отключаем параметры: #UVICORN_HOST = "0.0.0.0" #UVICORN_PORT = 8000 Создаем параметры: UVICORN_UDS: "/var/lib/marzban/marzban.socket" XRAY_SUBSCRIPTION_URL_PREFIX = "https://sub.domain.com" XRAY_SUBSCRIPTION_PATH = "yourSub" DASHBOARD_PATH = "/d-dash/" TELEGRAM_API_TOKEN = 511414455:AsdgSDGsHfhFDbdfbFDFDFbdfCgw TELEGRAM_ADMIN_ID = 1111111111 TELEGRAM_LOGGER_CHANNEL_ID = -1234567890123 TELEGRAM_DEFAULT_VLESS_FLOW = "xtls-rprx-vision" CUSTOM_TEMPLATES_DIRECTORY="/var/lib/marzban/templates/" SUBSCRIPTION_PAGE_TEMPLATE="subscription/index.html" SUB_PROFILE_TITLE = "Susbcription" SUB_SUPPORT_URL = "https://t.me/support" SUB_UPDATE_INTERVAL = "2" USERS_AUTODELETE_DAYS = -1 USER_AUTODELETE_INCLUDE_LIMITED_ACCOUNTS = false Корректируем IP адрес подключения к нашей БД: SQLALCHEMY_DATABASE_URL = "mysql+pymysql://marzban:[email protected]:3306/marzban" Фуф. Ура. Теперь все. 2.5. Перезагружаем marzban marzban restart выглядеть должно вот так: 3.1.. Заходим в редактирование файла Caddy: cadd e 3.8. Файл будет предзаполнен. Удаляем все в файле и заполняем файл: { storage file_system { root /var/lib/caddy } email [email protected] acme_ca https://acme-v02.api.letsencrypt.org/directory log { output file /var/log/caddy/server.log { roll_size 30mb roll_keep 10 roll_keep_for 720h } level INFO } } sub.domain.com { # Логирование запросов log { output file /var/log/caddy/link-access.log } # Определение разрешённых путей с использованием matchers @allowed path /yourSub* # Прокси для разрешённых путей handle @allowed { reverse_proxy unix//var/lib/marzban/marzban.socket { header_up Host {host} header_up X-Real-IP {remote} } } # Для всех остальных запросов — 403 Forbidden handle { respond "403 Get the FUCK OUT!" 403 } } panel.domain.com { # Логирование запросов log { output file /var/log/caddy/panel-access.log } # Определение разрешённых путей с использованием matchers @allowed path /statics* /d-dash* /d-dash/#/login* /api* /docs* /redoc* /openapi.json # Прокси для разрешённых путей handle @allowed { reverse_proxy unix//var/lib/marzban/marzban.socket { header_up Host {host} header_up X-Real-IP {remote} } } # Для всех остальных запросов — 403 Forbidden handle { respond "403 Get the FUCK OUT!" 403 } } Сохраняем файл. 4. Проверяем и Перезапускаем Caddy проверяем файл: cadd v Если ошибок нет, тогда перезапускаем: cadd r Дальше все настройки как и всегда
-
Всем привет! Очень часто последнее время стали приходить вопросы - как отправить YouTube через Российский сервер и возможно ли это? Отвечаю - Возможно все. Условия: У пользователей должен быть настроен роутинг так, чтобы geosite:youtube - отправлялся в PROXY У пользователей вообще не настроен Routing Выполнение этих условий ОООЧЕНЬ важные. Что делать? 1. Берем в аренду сервер в РФ: Для начала нужен надежный провайдер в РФ. Предлагаю рассмотреть ProCloud https://procloud.ru?referral_id=274473 Для этих задач нам подойдет легко САМЫЙ простой сервер. Оформляем и берем его - 392 рубля в месяц. Создание занимает буквально минуту 2. Подключаемся на сервер 2.1. Ставим обновления apt update && apt upgrade -yqq 2.2. Ставим UFW apt install ufw -yqq 2.3.1. Добавляем наши исключения в UFW Политика по умолчанию: ufw default deny incoming ufw default allow outgoing Добавим сразу разрешения на SSH порт ufw allow 22 Добавим исключения на будущую панель 3X-UI ufw allow 8778 Добавим исключения на наш порт для подключения ufw allow 8443 Этого нам хватит! Включаем Firewall ufw enable 2.3. Меняем порт подключения по SSH bash <(wget -qO- https://dignezzz.github.io/server/ssh-port.sh) Скрипт сделает все сам, вам только нужно ввести порт 3. Устанавливаем 3x-UI Нам для быстроты и удобства использовать именно его. В репозитории: https://github.com/MHSanaei/3x-ui находим установочный скрипт: bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) Соглашаемся на кастомизацию: Я ввел настройки для примера, в т.ч. использовал порт 8778 который упоминал ранее В конце установки получили: Вводим команду: x-ui 3.1. Давайте выполним команду 16 - чтобы включить автозапуск при перезагрузке системы 3.2. Теперь зайдем на сервер, в моем случае это: http://87.228.13.101:8778/ Ввожу данные логина и пароля Панель работает. Отлично. 4. Настройка входящего подключения. Идем в раздел Подключения. Жмем Добавить подключение 4.1. Создаем новое подключение ShadowSocks. Учитывая что у VPS провайдеров не стоят ТСПУ и подключения никак не ограничиваются, мы будем использовать самое простое подключение - нам его будет достаточно! 4.2. Открываем созданное подключение - раздел Информации 4.3. Копируем настройки подключения 4.4. Теперь нам нужно преобразовать это подключение в формат Json для скармливания нашему XrayCore Воспользуемся встроенным инструментом в 3x-ui 4.5. Вставляем наше подключение и жмем кнопку 3 Получаем готовый конфиг 5. Идем в Marzban 5.1.Находим наш раздел Outbound 5.2.После протокола Freedoms вставляем наш чудо код из предыдущего скрина Общий вид получается таким: 5.3. Изменяем название tag на удобное нам: 5.4. Крутим ниже, находим раздел Routing: 5.5. Первым правилом вставляем код: { "type": "field", "outboundTag": "ru-vscale", "domain": [ "geosite:youtube", "ggpht.cn", "ggpht.com", "googlevideo.com", "gvt1.com", "gvt2.com", "video.google.com", "wide-youtube.l.google.com", "withyoutube.com", "youtu.be", "youtube.com", "youtubeeducation.com", "youtubeembeddedplayer.googleapis.com", "youtubefanfest.com", "youtubegaming.com", "youtubego.co.id", "youtubego.co.in", "youtubego.com", "youtubego.com.br", "youtubego.id", "youtubego.in", "youtubei.googleapis.com", "youtubekids.com", "youtubemobilesupport.com", "yt.be", "ytimg.com" ] }, Получаем вот такой вид: ГОТОВО! Идем и смотрим YouTube через сервер в РФ без рекламы нагрузка на сервер в состоянии 8К картинки - стабильная! ФИНИШНАЯ ПРЯМАЯ! Теперь панель 3x-ui нам не нужна! Закроем ее через UFW ufw deny 8778 ufw reload
-
UPD 10.08.2023 Обновлена инструкция., UPD 08.04.2024 Обновлена инструкция. Варианты серверов: 1. Aeza: получаем бонус 15% (если пополнить в первые 24часа регистрации) на пополнение баланса: https://aeza.net/?ref=377137. 2. На крайний случай 4vps: 4VPS.su (2Гб\с сервера) Теперь есть скрипт для легкой установки УЗЛА и управления им!
-
Что дают шаблоны? При использовании телеграм-бота, вы можете очень быстро создавать пользователей, просто указав его имя. Все остальные настройки уже будут переопределены. Есть кнопки: Create from template и кнопка Charge при заходе в пользователя: Все они, используют шаблоны пользователей, которые мы создадим Для того чтобы активировать шаблоны в телеграм, и удобно их использовать, вам нужно сначала включить эту возможность в .env. 1. Редактирование .env nano /opt/marzban/.env Находим строку: # DOCS = true и убираем комментарий со строки, чтобы получилось просто: DOCS = true 2. Перезапуск marzban marzban restart -n атрибут -n используется, чтобы не открывать логи после перезапуска. 3. Переходим в панель. Идём по адресу: https://domain.ru/docs А почитать информацию по API вы можете по ссылке: https://domain.ru/redoc Попадаем на такую страницу: Да, это именно веб-реализация API менеджмента. Удобно! Но первым делом, нам нужно авторизоваться. Жмем кнопку: Указываем свой логин и пароль от дэшборда: И жмём внизу: 4. Редактирование через АПИ шаблона пользователей. Нас интересует раздел: 4.1. Раскрываем раздел Add User Templates: 4.2. Жмем справа сверху - Try it Out И откроется тело запроса: из /redoc: 4.3. Теперь мы должны указать необходимые параметры. По умолчанию текст тут такой: { "name": "my template 1", "inbounds": { "vmess": [ "VMESS_INBOUND" ], "vless": [ "VLESS_INBOUND" ] }, "data_limit": 0, "expire_duration": 0 } name - задаем имя шаблона, короткое но понятное вам, например, 30 days / 300 gb inbounds - здесь мы должны указать теги наших подключений. В нашем случае тег будет: VLESS TCP REALITY data_limit - здесь мы должны задать размер доступного трафика, в байтах. Здесь есть один большой минус. Трафик указывайте в байтах. Придётся в панеле задавать вручную. data_limit_reset_strategy - Это стратегия сброса лимитов. Возможные варианты: no_reset / day / week / month / year Например, 300Гб = 322122547200 Байт Если задано 0 - значит без ограничений expire_duration - Время действия, в СЕКУНДАХ! Также можем указать для создаваемого пользователя username_suffix и username_prefix. Но зачем, я не понимаю )) В нашем случае для 30 days и 300 гб, запрос будет таким: { "name": "30 days/300gb", "inbounds": { "vless": [ "VLESS TCP REALITY" ] }, "data_limit": 322122547200, "expire_duration": 2592000 } Теперь осталось нажать синию кнопку: Получаем результат: Можно идти и проверять в Telegram бота. Обратите внимание на id: 9 Он вам пригодится, если вы захотите удалить какой то шаблон. 5. Удаляем шаблон. Удалить шаблон, также легко. Достаточно знать его ID. Нам нужен соответствующий раздел: Жмем сверху: Пишем ID = 9 (в нашем примере) и жмем Execute Удалили. Со всем остальным использованием API действия такие же!
-
Всем привет! Сегодня оглашу такую важную тему как резервное копирование базы и все параметров. 1. Ручное копирование. Тут всё просто, все нужные файлы для восстановления лежат в двух папках: /opt/marzban /var/lib/marzban Вы можете самостоятельно их скопировать себе на компьютер. Но часто делать - устанешь. 2. Автоматическое копирование Здесь нам поможет прекрасный скрипт https://github.com/AC-Lover/backup/ 2.1. Скачиваем скрипт и запускаем: bash <(curl -Ls https://github.com/AC-Lover/backup/raw/main/backup.sh) Скрипт интерактивный, поэтому он сам спросит обо всех параметрах которые необходимо задать. 2.2. Получение токена от BotFather. К сожалению, использовать того же бота с которым мы взаимодействуем по созданию и редактированию пользователей мы не можем, то нам нужно создать нового бота: Идём к @botfather в телеграм и создаем нового бота. 2.3. Добавляем этого бота, в тот же канал, который мы с вами создавали здесь в пункте 5.9: 2.4. Теперь скрипт спросит, хотите ли ввести какой то комментарий для себя. Можете оставить пустой, или сделать себе пометку: Бэкап сервера №1 или любого другого. Это будет просто информационная часть отправляемого сообщения. 2.5. Затем скрипт предложить настроить cron-задачу. Чтобы система автоматически запускала скрипт через заданный промежуток времени. Формат будет состоять из двух чисел: 0 6 Первое число это МИНУТЫ. Диапазон: 0 - 60 Второе число это ЧАСЫ: Диапазон 0 - 24 Если задать 0 0 - то бэкап будет приходить каждую минуту Если задать 30 0 - то каждые 30 минут Если задать 0 6 - то каждые 6 часов Если задать 0 12 - то каждые 12 часов Если задать 0 24 - то каждые 24 часа Оптимальный период - тот, за который у вас могут происходить изменения. Если изменений в базе не много и они редкие, вам будет достаточно каждые 24 часа. 2.6. Выбор панели. Скрипт был написан универсальным, он может работать с marzban. 3x-ui, hiddify панелями. Но мы выбирать будем конечно marzban, поэтому вводим букву M 2.7. Последний вопрос будет касаться сброса уже существующих задач cron. Это нужно чтобы при многократном запуске скрипта и наличии уже других правил для резервного копирования у вас не было наслоения и дублирования. Я бы предложил вам выбрать в любом случае Y. Это ничего особо не меняет в дальнейшей работе. 2.8. На этом основная работа по установке скрипта считается выполненной, и вам в телеграм уже должен прийти первый бэкап вашего сервера. НО! Чтобы все работало по таймеру, нам необходимо выставить права на исполняемый файл: ОБЯЗАТЕЛЬНО ВЫПОЛНИТЕ ЭТУ КОМАНДУ! Если ваш скрипт был запущен не из корневой директории, то укажите свой корректный путь. chmod +x /root/ac-backup-m.sh Теперь всё. Вывод будет примерно таким:
-
Друзья! Не для кого не секрет, что достаточно много различных инструкций уже можно найти в интернете. Но как их применить? Все ли они рабочие, либо как сделать их работающими. В этой серии статей постараюсь оставить максимально рабочую и стабильную инструкцию со всеми вытекающими комментариями почему так. 1. Берём в аренду сервер. Всё же, я бы порекомендовал использовать 4VPS. Скорости максимально хорошие. Цены тоже адекватные. Плюс можно попасть иногда на акции. Моя рефералка: https://4vps.su/account/r/18170 2. Установка последней версии Marzban 0.4.1 (актуально на 20.11.2023) 2.1. Обновляем систему: apt-get update && apt-get upgrade -y 2.2. Устанавливаем по скрипту всё что необходимо: sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install Вместо со скриптом установятся все необходимые для работы пакеты, в том числе docker. После установки, вы получите информацию о работе скрипта, в виде логов (если вы это видите - значит всё установлено!) После этого жмем просто Ctrl + C. 2.3. Создаем пользователя. Если вы не знали, то в системе Marzban могут быть два типа пользователей. SUDO Администраторы, и просто Администраторы. Обычные администраторы могут управлять только пользователями. Sudo администраторы - могут управлять ещё параметрами системы Поэтому первым пользователем, которого мы создадим, будет sudo администратор: marzban cli admin create --sudo Создали. Идём дальше. 3. Работа с доменом. Этот этап очень важный. Во-первых, вы не сможете выпустить сертификаты, если у вас не будет привязан домен. Во-вторых - вы не сможете использовать подписку, если у вас не будет настроен HTTPS для подписок. 3.1. Покупаем домен. Если для вас это актуально, я бы рекомендовал приобрести домен здесь: hostland.ru Там не высокие цены и на покупку и на продление. Для работы только с доменами, достаточно взять бесплатный пробный тариф (оформиться как хостинг), зайти в свой профиль и написать в службу ТехПоддержки с просьбой сменить тариф на Доменный паркинг. 3.2. Привязка домена. Я все же рекомендую привязать домен к CloudFlare - это удобно и быстро, а также удобно ими потом управлять. Плюс есть много полезных фишек (будет отдельная статья) Для этого в панеле регистратора, нужно будет изменить NS сервера: 3.3. Добавляем на CF Заходим на сайт https://dash.cloudflare.com/login и добавляем новый сайт к своему профилю. Будет несколько вопросов и тамже будут требования к настройкам NS серверов о которых я уже упомянул выше. Когда регистратор поменяет сервера для вашего домена (это обычно 1 - 24 часа) - у вас будет доступно управление доменами в панеле cloudflare 3.4. Добавляем А запись Тут все очень просто. Главное условие, не включайте проксирование. 4. Получение сертификатов. Для получения сертификатов, мы будем использовать acme скрипт. Для работы сертификатов у вас должны быть открыты порты: 443 и 80! 4.1. Устанавливаем необходимые пакеты в систему: sudo apt-get install cron socat nano -yqq -yqq - это автоматическое принятие условий (чтобы не жать Yes) и в абсолютно тихом режиме (без логов) 4.2. Устанавливаем acme.sh curl https://get.acme.sh | sh -s email=EMAIL Вместо емэйл можете указать свой, либо любой выдуманный. Работа с acme.sh удобна тем, что не придется каждый раз при получении сертификатов на домен - указывать своей емэйл. Получаем такой вывод: Отлично. Идём дальше. 4.3. Создаем папку для наших сертификатов (ВАЖНО!!!): mkdir -p /var/lib/marzban/certs/ 4.4. Выпускаем сертификаты: В коде скрипта замените DOMAIN на ваш домен, который вы использовали в CF. Это может быть и домен. и поддомен. ~/.acme.sh/acme.sh --set-default-ca --server letsencrypt --issue --standalone \ -d DOMAIN \ --key-file /var/lib/marzban/certs/key.pem \ --fullchain-file /var/lib/marzban/certs/fullchain.pem Если вы планируете использовать ещё и ноды по доменным именнам, может сразу выпустить сертификаты на поддомены: ~/.acme.sh/acme.sh --set-default-ca --server letsencrypt --issue --standalone \ -d DOMAIN \ -d SUBDOMAIN1.DOMAIN \ -d SUBDOMAIN2.DOMAIN \ --key-file /var/lib/marzban/certs/key.pem \ --fullchain-file /var/lib/marzban/certs/fullchain.pem По результату, мы получим такой вывод: Значит всё хорошо. Идем дальше. 5. Настройка файла окружения - .env 5.1. Переходи в папку нашей панели: cd /opt/marzban/ 5.2. Открываем для редактирования файл .env nano .env 5.3. Корректируем порт подключения: UVICORN_PORT = 443 Но вы можете указывать любой, удобный для вас. Учтите, что он должен быть далее подписан и в формате страницы подписки 5.4. Привязываем сертификаты В самый конец документа указываем строки на наши сертификаты: UVICORN_SSL_CERTFILE = "/var/lib/marzban/certs/fullchain.pem" UVICORN_SSL_KEYFILE = "/var/lib/marzban/certs/key.pem" Корректируем страницу подписки - параметр XRAY_SUBSCRIPTION_URL_PREFIX : XRAY_SUBSCRIPTION_URL_PREFIX = https://your.domain.com Если вы использовали не стандартный порт, например, 8443, то запись для XRAY_SUBSCRIPTION_URL_PREFIX будет такой: XRAY_SUBSCRIPTION_URL_PREFIX = https://your.domain.com:8443 5.5. Добавляем в контейнер временную зону: В самый конец документа прописываем строку TZ: Europe/Moscow 5.6. Добавляем информацию по вашей подписке для клиентов: SUB_PROFILE_TITLE = "Your VPN Name" Данная фишка работает при добавлении подписки, например в Hiddify. В другие, это пока не работает. 5.7. Добавляем сразу ссылку на нашу страницу подписки (файл мы скачаем чуть позже). CUSTOM_TEMPLATES_DIRECTORY="/var/lib/marzban/templates/" SUBSCRIPTION_PAGE_TEMPLATE="subscription/index.html" 5.8. Задаем интервал обновления подписки для клиентов: SUB_UPDATE_INTERVAL = "1" Значение указывается в часах - 1-2-3-6-12-24. 5.9. Задаем параметры для нашего телеграм бота. (если вы его планируете использовать) TELEGRAM_API_TOKEN = 5556095555555:AAAAAAAAAAAAAAAAAAAAAA TELEGRAM_ADMIN_ID = 1111111,5111111 TELEGRAM_LOGGER_CHANNEL_ID = -111111111111 TELEGRAM_DEFAULT_VLESS_XTLS_FLOW = "xtls-rprx-vision" TELEGRAM_API_TOKEN - API ключ вашего бота получаемый от @BotFather TELEGRAM_ADMIN_ID - ID ваш и других админов, разделенных запятыми. ID можно получить написав боту в телеграм: GetByID TELEGRAM_LOGGER_CHANNEL_ID - Канал куда бот будет публиковать уведомления (очень удобно, если особенно ботов у вас несколько - несколько мейнов). Для получения ID чата, нужно в вашем чате опубликовать сообщение и переслать это сообщение из чата боту: GetByID. В ответ бот вам пришлет такое сообщени: Your user ID: 12111111 Current chat ID: 12111111 Forwarded from chat: -1001111111111 Откуда информацию о чате мы и заберем. TELEGRAM_DEFAULT_VLESS_XTLS_FLOW - Параметр, благодаря которому, при создании пользователя с подключением VLESS через бота, ему будет сразу прописываться FLOW параметр. 6. Применяем изменения. Скачаем наш шаблон: и закинем его на сервер, в папку: /var/lib/marzban/templates/subscription Можно её даже создать предварительно: mkdir -p /var/lib/marzban/templates/subscription/ Теперь перезапуск: marzban restart Готово. 7. Идём в панель: https://yourdomain.com/dashboard Пока всё. В следующей части разберем: 1. Актуальные и рабочие варианты inbound. Я выложу максимально оптимизированное по настройкам ядро xray. 2. Рабочие варианты WARP проксирования 3. Настроим бэкап на сервере 4. Настроим ноду и подключим как отдельный инбаунд. 5. Обезопасим сервер и ноды с помощью ufw 6. Установим обновленное ядро xanmod (по всем отзывам, должна вырасти производительность сервера в работе подключений) 7. Работа с API (в т.ч. шаблоны пользователей в телеграм) 8. Поменяем ядро на актуальное: на перспективу: Рассмотрим вариант настройки всех инбаундов на одном порту 443 и проброс доменов через HaProxy.
-
xray Интегрированный в Marzban сервис обновления ядра XRay
TrustMe опубликовал тема в Marzban Инструкции
Все привет! Доработал базовый "демон", чтобы можно было легко обновлять ядро на панеле. PR разработчикам уже отправил, но установить к себе не составит труда Все элементарно - одна команда: curl -sSL "https://raw.githubusercontent.com/Gozargah/Marzban-scripts/master/marzban.sh" | install -m 755 /dev/stdin /usr/local/bin/marzban Использование простое: marzban core-update А после этого выбрать нужную версию. Сейчас обновляется только мэйн ядро. Готовлю скрипт для такого же простого обновления и управления нодой. UPD: Обещанный скрипт! -
Всем привет! В клубе Marzban доступна новая статья! Вы когда-нибудь сталкивались с ситуацией, когда необходимо установить две копии Marzban на одном сервере? Такая задача может показаться сложной, но сегодня мы разберем ее шаг за шагом. В нашей новой статье вы найдете детальную инструкцию, как осуществить эту установку и управлять обоими экземплярами через команды marzban cli. Мы рассмотрим: Как использовать Nginx Proxy Manager для организации reverse proxy при использовании Marzban Понимается что подключение клиентов исключительно к нодам (мэйн для этого мы не настраиваем) Разделение страниц подписки и панелей управления для каждого экземпляра. Конфигурацию мэйн сервера с открытыми только портами 443 (плюс сервисные api порты) Установку и настройку MySQL (MariaDB) базы данных для обоих экземпляров без переезда (с нуля) Почему мы обойдемся без HaProxy и будем использовать только порт 443 без дополнительных перебросов портов и reality. Пошаговый процесс ручной установки без использования скриптов. Не пропустите! Эта статья станет незаменимым руководством для всех, кто хочет настроить Marzban на одном сервере с максимальной эффективностью и удобством. Подписывайтесь на обновления, чтобы не пропустить новые полезные материалы!
-
Всем привет! Бывают разные технические ситуации, и вот иногда нужно сделать так, чтобы две копии Marzban были установлены на одном сервере. Сделать это возможно, и можно даже сделать управление ими через команды marzban cli. Сегодня расскажу как это сделать. За Reverse proxy будет отвечать Nginx Proxy Manager. Все подключения у клиентов будут только к нодам Страницы подписки и страницы панелей будут различаться. На мэйн сервере будут открыты только порты 443 Поднимать мэйны будем сразу с БД MySQL (MariaDB) Никакой HaProxy нам не нужен, мы не будем использовать никакой переброс портов и reality (везде будет 443 порт) Установка будет без скрипта, в ручном режиме. Начнем. 1. Берем сервер. Проще всего мне сейчас взять сервер у Vultr: https://www.vultr.com/?ref=9598405 Но как я уже говорил в теме ФэнШуя , за мэйн сервер хорошо подойдет и любой надежный провайдера в РФ, ведь к нему доступ будет скрыт полностью за CDN CloudFlare (проксироваться) и никто особо даже не узнает, что И я кажется я нашел для себя не дорогого но надежного провайдера: https://vscale.io/?invite=dhOwOGF0szepMIczf5bR (Обзор на него будет как нибудь в другой раз.) 1.1. Заказываем сервер. В моем случае я выбираю сервер с публичным адресом (конечно же), характеристики беру достаточные. Установка проходит очень быстро 2. Установка Nginx proxy manager Зашли на сервер. 2.1. Первым делом что? Правильно, обновили систему и установили обновления: apt update && apt upgrade -yqq 2.2. Теперь дело дошло до NPM Ставим сперва Docker curl -fsSL https://get.docker.com | sh Теперь ставим сам NPM mkdir npm && cd npm && nano docker-compose.yml Вставляем в него код (по инструкции: https://nginxproxymanager.com/setup/ ) services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: # These ports are in format <host-port>:<container-port> - '80:80' # Public HTTP Port - '443:443' # Public HTTPS Port - '81:81' # Admin Web Port # Add any other Stream port you want to expose # - '21:21' # FTP # Uncomment the next line if you uncomment anything in the section # environment: # Uncomment this if you want to change the location of # the SQLite DB file within the container # DB_SQLITE_FILE: "/data/database.sqlite" # Uncomment this if IPv6 is not enabled on your host # DISABLE_IPV6: 'true' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt Теперь запускаем контейнер: docker compose up -d И переходим по адресу нашего сервера на порт 81: http://31.129.56.165:81/ И вводим данные по умолчанию: Сменим сразу логин и пароль Зайдем в Proxy Host и зададим сразу домен для нашего NPM Под это дело я создам новый в CF новую запись, и сразу ее проксирую Возвращаюсь в NPM и задаю параметр домена и настройки как на скриншоте. Сеть докера по умолчанию 172.17.0.1 а порт 81 Иду на вкладку SSL и запрашиваю новый серт Отлично. Теперь идем в docker-compose.yml и уберем из публикации 81 порт nano ~/npm/docker-compose.yml Перезапускаем контейнер. docker compose restart И переходим на наш адрес: https://test-npm.openode.xyz/ 3. Установка первого Marzban Main Теперь возвращаемся к основной теме установки. Запускать каждый Marzban мы будем в отдельных контейнерах и в отдельных сетях (чтобы не было пересечения по IP адресам и портам). 3.1. Создаем новую сеть Docker docker network create --driver bridge --subnet 10.10.0.0/24 --gateway 10.10.0.1 network_one Сразу создадим вторую для второго Marzban docker network create --driver bridge --subnet 10.20.0.0/24 --gateway 10.20.0.1 network_two Давайте сразу подключим наш NPM к этим двум сетями: nano ~/npm/docker-compose.yml Добавляем в конец: networks: - network_one - network_two networks: network_one: external: true network_two: external: true Общий вид будет такой: Поднимаем заново контейнер командой: cd ~/npm && docker compose up -d 3.2. Создаем папку для первого Marzban mkdir -p /opt/marzban_1 && mkdir -p /var/lib/marzban_1 3.3. Создадим сразу файлы заготовки: touch /opt/marzban_1/docker-compose.yml && touch /opt/marzban_1/.env и скачаем наш xray-config curl -o /var/lib/marzban_1/xray_config.json https://raw.githubusercontent.com/Gozargah/Marzban/dev/xray_config.json 3.4. Заполним их содержимым docker-compose.yml: nano /opt/marzban_1/docker-compose.yml Будет иметь такой вид: services: marzban_1: image: gozargah/marzban:dev restart: always env_file: .env volumes: - /var/lib/marzban_1:/var/lib/marzban networks: network_one: ipv4_address: 10.10.0.10 depends_on: - mysql_1 mysql_1: image: mariadb:lts environment: MYSQL_ROOT_PASSWORD: my-root-password MYSQL_ROOT_HOST: '%' MYSQL_DATABASE: marzban MYSQL_USER: marzban MYSQL_PASSWORD: password command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci - --innodb-log-file-size=67108864 - --bind-address=0.0.0.0 volumes: - /var/lib/marzban_1/mysql:/var/lib/mysql networks: network_one: ipv4_address: 10.10.0.3 networks: network_one: external: true 3.5. Заполним их содержимым .env: Содержимое мы ПОЛНОСТЬЮ возьмем из оригинального репозитория DEV ветки: https://raw.githubusercontent.com/Gozargah/Marzban/dev/.env.example Теперь раскомментируем нужные нам строки: Добавим новую строку для подключения к нашей БД: SQLALCHEMY_DATABASE_URL="mysql+pymysql://marzban:[email protected]:3306/marzban" Добавим строчку с ядром (для дальнейшего обновления его) - АДРЕС УКАЗЫВАЕТСЯ В ПАПКЕ ВНУТРИ КОНТЕЙНЕРА, ПОЭТОМУ АДРЕС не /marzban_1/ XRAY_JSON = "/var/lib/marzban/xray_config.json" Добавим строки с данными для подписок: XRAY_SUBSCRIPTION_URL_PREFIX = "https://link.openode.xyz" XRAY_SUBSCRIPTION_PATH = for-you Это будут наши основные, остальные параметры указывайте на свое усмотрение. 3.6. Установим сразу два оригинальных сервиса marzban cli: curl -sSL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh | sudo install -m 755 /dev/stdin /usr/local/bin/marzban_1 и второй curl -sSL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh | sudo install -m 755 /dev/stdin /usr/local/bin/marzban_2 Это позволит нам использовать разные команды для управления двумя контейнерами: marzban_1 update (например) Но мы теперь зайдем и отредактируем один параметр внутри, который будет указывать наши папки. nano /usr/local/bin/marzban_1 Находим внутри строку: И меняем на название нашего сервиса и наших папок (для удобства - они должны совпадать): marzban_1 Получаем так: Аналогично делаем для второго: nano /usr/local/bin/marzban_2 Пробуем поднять наш первый контейнер. marzban_1 up Выйдет ошибка. Не переживаем!!! Смотри список наших контейнеров: docker ps видим такой вид: Теперь нам нужно зайти в наш контейнер с mysql: docker exec -it marzban_1-mysql_1-1 bash теперь команду работы с БД mariadb -u root -p запросит пароль, вводите password Создайте пользователя marzban и установите ему пароль: CREATE USER 'marzban'@'%' IDENTIFIED BY 'password'; Предоставьте пользователю marzban все привилегии на базе данных marzban: GRANT ALL PRIVILEGES ON marzban.* TO 'marzban'@'%'; FLUSH PRIVILEGES; Убедитесь, что пользователь создан и имеет необходимые права: SHOW GRANTS FOR 'marzban'@'%'; Вывод будет примерно таким, если у вас все корректно: Теперь перезапускаем наш marzban: marzban_1 restart И видим успех! 4. Возвращаемся в нашу nginx proxy manager и пробрасываем домен для подписки и для панели (покажу только на примере подписки): Готово! Все остальные настройки используйте аналогично как я писал в предыдущих статьях. 5. Аналогичные процедуры проводим для второго сервера marzban. Но везде где мы использовали marzban_1 делаем marzban_2. А где mysql_1 делаем mysql_2. Не забываем, что мы будем использовать другую сеть. Вот конфиг docker-compose.yml для marzban_2 из нашего примера: services: marzban_2: image: gozargah/marzban:dev restart: always env_file: .env volumes: - /var/lib/marzban_2:/var/lib/marzban networks: network_two: ipv4_address: 10.20.0.10 depends_on: - mysql_1 mysql_2: image: mariadb:lts environment: MYSQL_ROOT_PASSWORD: my-root-password MYSQL_ROOT_HOST: '%' MYSQL_DATABASE: marzban MYSQL_USER: marzban MYSQL_PASSWORD: password command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci - --innodb-log-file-size=67108864 - --bind-address=0.0.0.0 volumes: - /var/lib/marzban_2/mysql:/var/lib/mysql networks: network_one: ipv4_address: 10.20.0.3 networks: network_two: external: true Отдельной темой распишу потом как ограничить доступ к другим путям, если мы используем разные домены для подписки и для панели.
-
Введение В этой статье мы рассмотрим, как настроить автоматическое резервное копирование данных с использованием Rclone и Cloudflare R2. Мы создадим bash-скрипт, который будет создавать архив, загружать его в Cloudflare R2 и отправлять уведомления через Telegram. Также добавим этот скрипт в crontab для регулярного выполнения каждые 4 часа. Все это будет создавать архивы нашего мэйн сервера Marzban. Что такое Rclone? Rclone – это клиент командной строки для обеспечения работы и синхронизации файлов и директорий с облачными хранилищами. Облачный провайдер поддерживает множество, включая Amazon S3, Google Drive, Dropbox, и, конечно, Cloudflare R2. Rclone используется для резервного копирования файлов, синхронизации файлов между различными облачными и локальными хранилищами. Различные функции Rclone включают: Synchronization – синхронизация файлов между локальными хранилищами и облачными провайдерами. Copy – копирование файлов между различными папками облачного хранилища. Шифрование – шифрование файлов. Automator – работа по расписанию с использованием скриптов и crontab. Поддержка облачных провайдеров: Amazon S3, Google Drive, Dropbox, OneDrive, Cloudflare R2 и других. Что такое Cloudflare R2? Cloudflare R2 – это хранилище объектов, предоставляемое облачной службой безопасности Cloudflare. Оно предназначено для хранения больших объемов данных с минимальными затратами и высокой производительностью. R2 предоставляет доступ к данным через API, совместимый с S3, что позволяет использовать такие инструменты, как Rclone, для управления файлами. Преимущества Cloudflare R2: Низкие затраты: отсутствие платы за исходящий трафик. Высокая производительность: быстрая доставка контента благодаря глобальной сети Cloudflare. Совместимость с S3: возможность использования существующих инструментов и скриптов для работы с данными. 10ГБ пространство доступно на каждом аккаунте (в сумме всех бакетов) Настройка Cloudflare R2 К сожалению, первым делом, даже чтобы воспользоваться бесплатно, вам нужно будет привязать банковскую карту к своему аккаунту CF. РФ карты не принимает. НО без проблем принимает карты от Cashinout, сервис который я упоминал в этой статье: Вы можете сделать хитро. Оформить карту в Cashinout, пройти верификацию в CF, а затем удалить свою карту (деньги находящиеся на ней вернутся на ваш счет аккаунта Cashinout) Для начала работы с Cloudflare R2 выполните следующие шаги: Создайте аккаунт Cloudflare: Зарегистрируйтесь на сайте Cloudflare и войдите в свой аккаунт. (этот шаг я пропускаю, понимая что у вас он уже есть) Создайте R2 хранилище: В панели управления Cloudflare перейдите в раздел R2. Создайте новый бакет, указав его имя и настройки. Создайте API токен: Перейдите в раздел API Tokens. Нажмите кнопку Create Token. Выберите Введите имя и укажите параметры так как на скриншоте Нажмите Create Token и сохраните ваш токен. (можете пока просто не закрывать окно) Установка и настройка Rclone Установка и настройка Rclone Установите Rclone: curl https://rclone.org/install.sh | sudo bash Настройте Rclone: rclone config Следуйте инструкциям для создания нового удаленного подключения: n) New remote name> s3cf Type of storage to configure. Enter a string value. Press Enter for the default (""). Storage> s3 AWS Access Key ID> YOUR_CLOUDFLARE_ACCESS_KEY AWS Secret Access Key> YOUR_CLOUDFLARE_SECRET_KEY Region to connect to. Enter a string value. Press Enter for the default (""). region> Endpoint for S3 API. Optional. Use an empty string for the default endpoint. Enter a string value. Press Enter for the default (""). endpoint> https://<account-id>.r2.cloudflarestorage.com AWS Access Key ID> YOUR_CLOUDFLARE_ACCESS_KEY AWS Secret Access Key> YOUR_CLOUDFLARE_SECRET_KEY Эти параметры мы получаем из нашего окна с API ключами CF. Когда нужно будет указать в последнем этапе endpoint, вы можете взять их из настроек бакета. openode (из моего примера) вводить не нужно! Готово! Чтобы проверить подключение, вы можете ввести команду: rclone ls s3cf:openode В данном случае s3cf - Это название конфига которое вы создавали на первом шаге rclone config А openode - Это имя бакета которое вы создавали в CF. Создание и настройка bash-скрипта Создайте файл скрипта backup_script.sh в папке /root/: nano /root/backup_script.sh Вставьте следующий код: #!/bin/bash # Переменные для Telegram TELEGRAM_BOT_TOKEN="YOUR_TELEGRAM_BOT_TOKEN" TELEGRAM_CHAT_ID="YOUR_TELEGRAM_CHAT_ID" # Папки для архивации SRC_DIRS=("/opt/marzban" "/var/lib/marzban") # Папка для хранения архива DEST_DIR="/root" # Имя архива с датой и временем DATE=$(date +'%Y-%m-%d_%H-%M-%S') ARCHIVE_NAME="OPENODE_backup_$DATE.zip" ARCHIVE_PATH="$DEST_DIR/$ARCHIVE_NAME" # Создание архива zip -r "$ARCHIVE_PATH" "${SRC_DIRS[@]}" # Целевая папка в Cloudflare R2 TARGET_DIR="s3cf:openode/" # Функция для отправки уведомления в Telegram send_telegram_message() { MESSAGE=$1 curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" -d chat_id="${TELEGRAM_CHAT_ID}" -d text="${MESSAGE}" } # Загрузка архива в Cloudflare R2 и отправка уведомления if rclone copy "$ARCHIVE_PATH" "$TARGET_DIR"; then send_telegram_message "Архив $ARCHIVE_NAME успешно загружен в Cloudflare R2." # Удаление локального архива после копирования rm "$ARCHIVE_PATH" else send_telegram_message "Ошибка при загрузке архива $ARCHIVE_NAME в Cloudflare R2." fi # Ротация архивов в Cloudflare R2 (оставить только за последние 7 дней) rclone delete --min-age 7d "$TARGET_DIR" Сохраняем. Сделайте скрипт исполняемым: chmod +x /root/backup_script.sh Можем попробовать запустить: ./backup_script.sh Если все прошло хорошо, и уведомления получены в телеграм, то можно настроить crontab: crontab -e Вставляем в пустую строку: 0 */4 * * * /root/backup_script.sh >/dev/null 2>&1 Готово! Каждые 4 часа будут собираться архивы и приходить уведомления.
- 1 ответ
-
- 2
-
- cloudflare
- cf r2
-
(и ещё 2 )
C тегом:
-
mysql Установка Marzban [Часть 6] - Переход на MySQL
TrustMe опубликовал тема в Marzban Продвинутые инструкции
В продолжении развивающих тем, перейдем к варианту, когда у вас количество текущих или потенциальных пользователей перевалило за 200 человек.. Пожалуй только в этом варианте есть смысл переходить на MySQL. Этот вариант мы и разберем. Требование: Для стабильной работы базы данных, требуются дополнительные ресурсы. Минимально рекомендуемые параметры в этом случае (с учетом количества пользователей): 2+ ядра, 4+ гига, 30Гб+ места (на всякий случай) + SWAP. Офф инструкция: Настройка MySQL | Марзбан (gozargah.github.io) В связи с последними изменениями в mysql, процедура обновления на БД изменилось. 0. Создаем контейнер, который потом будем использовать. 0.1. Создаем том данных docker volume create mysql 0.2. Создаем контейнер Данные по контейнеру вы можете задать свои. но это не обязательно. docker run -d --rm --name mysql -v /var/lib/marzban/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-root-password -e MYSQL_ROOT_HOST=127.0.0.1 -e MYSQL_DATABASE=marzban -e MYSQL_PASSWORD=password -e MYSQL_USER=marzban mariadb:lts --character_set_server=utf8mb4 --collation_server=utf8mb4_unicode_ci --innodb-log-file-size=67108864 В данном случае мы базу данных также складываем в папку /var/lib/marzban/mysql для возможности дальнейшего бэкапа. 0.3. Останавливаем контейнер docker exec -it mysql mysqladmin shutdown -u root -p При остановке будет запрошен пароль, вводите: my-root-password 1. Редактируем docker-compose.yml Открываем для редактирования файл nano /opt/marzban/docker-compose.yml И заменяем содержимое, либо вносим поправки. 1.1. Полная замена содержимого Стираем все что есть, и вставляем код: services: marzban: image: gozargah/marzban:latest restart: always env_file: .env network_mode: host volumes: - /var/lib/marzban:/var/lib/marzban depends_on: - mysql mysql: image: mariadb:lts network_mode: host command: - --bind-address=127.0.0.1 - --character_set_server=utf8mb4 - --collation_server=utf8mb4_unicode_ci - --host-cache-size=0 - --innodb-open-files=1024 - --innodb-buffer-pool-size=268435456 volumes: - /var/lib/marzban/mysql:/var/lib/mysql phpmyadmin: image: phpmyadmin/phpmyadmin:latest restart: always env_file: .env network_mode: host environment: PMA_HOST: 127.0.0.1 APACHE_PORT: 8010 UPLOAD_LIMIT: 1024M depends_on: - mysql 1.2. Если мы будем дополнять ваш текущий файл, то будем начинать с добавления строки для нашего marzban depends_on: depends_on: - mysql mysql: image: mariadb:lts network_mode: host command: - --bind-address=127.0.0.1 - --character_set_server=utf8mb4 - --collation_server=utf8mb4_unicode_ci - --host-cache-size=0 - --innodb-open-files=1024 - --innodb-buffer-pool-size=268435456 volumes: - /var/lib/marzban/mysql:/var/lib/mysql 1.3. Если вы не хотите устанавливать phpMyAdmin, то не вставляйте вторую часть кода. Учтите, что очень важно соблюдать отступы, это формирует вложенность параметров при формировании контейнера!!! 2. Редактирование файлa .env 2.1. Давайте сначала добавим новые переменные, каждая на отдельную строку: SQLALCHEMY_DATABASE_URL="mysql+pymysql://marzban:[email protected]:3306/marzban" MYSQL_ROOT_PASSWORD=DB_PASS #для phpmyadmin Здесь значение password нужно заменить на свой пароль. Окончание строки переменной SQLALCHEMY_DATABASE_URL должно соответствовать вашему имени базы данных, которую вы задаете в MYSQL_DATABASE. Помимо всего прочего, MySQL мы не выносим в открытый доступ, а значит он будет использоваться только в локальной сети. А вот если вам постоянно не нужен доступ к phpMyAdmin,то закрывайте его через UFW: ufw deny 8010 (но если он вам нужен, то нужно обязательно прописать правило: ufw allow 8010) 2.1. Комментируем лишние строки - Добавляем в начале # : #SQLALCHEMY_DATABASE_URL="sqlite:////var/lib/marzban/db.sqlite3" 3. Применение изменений. Сначала обновляем: marzban update Затем перезапускаем: marzban restart -n Нужно будет подождать около минуты-1.5. 4. Работа с базой 4.1. Создаем дамп базы данных: sqlite3 /var/lib/marzban/db.sqlite3 '.dump --data-only' | sed "s/INSERT INTO \([^ ]*\)/REPLACE INTO \`\\1\`/g" > /tmp/dump.sql 4.2. Копируем дамп в директорию MySQL: cd /opt/marzban && docker compose cp /tmp/dump.sql mysql:/dump.sql 4.3. Переносим данные из SQLite в MySQL: docker compose exec mysql mysql -u marzban -ppassword -h 127.0.0.1 marzban -e "SET FOREIGN_KEY_CHECKS = 0; SET NAMES utf8mb4; SOURCE /dump.sql;" Для запуска процесса, будет запрошен пароль для MySQL. 4.4. Перезапускаем Marzban: marzban restart -n 4.5. Удаляем временный файл: rm /tmp/dump.sql phpMyAdmin будет доступен по адресу: http://domain.com:8010 Порт должен быть открыть в UFW: ufw allow 8010 Логин для входа: root Пароль: заданный вместо DB_PASS 5. Установим SWAP в систему Данная опция не обязательна, но позволяет повысить объем свободной памяти в системе. Но может затормозить систему в целом. Так как вам для этого нужны диски с высокой скоростью чтения/записи. Я уже давно написал скрипт, создающего это в автоматическом режиме. Поэтому воспользуйтесь просто командой: bash <(wget -qO- https://raw.githubusercontent.com/DigneZzZ/dwg/main/tools/swap.sh) 6. Автоматический скрипт смены БД Нашел на ГитХабе скрипт для автоматической смены БД. При тестировании у меня не установился phpmyadmin. И 1 из 4 попыток, база перенеслась без данных. bash <(curl -s https://raw.githubusercontent.com/mobinalipour/marzban-to-mysql/main/marzban-to-mysql.sh) -
Всем привет Для возможности использования CF WARP+ в составе Marzban нужно выполнить ряд дополнительных настроек. Информацию взял с Репозиторий автора (gozargah.github.io) 1. Заходим в репозиторий: Releases · ViRb3/wgcf (github.com) Выбираем свой вариант - исходя из конфигурации сервера. Возьмем для примера amd64: wget https://github.com/ViRb3/wgcf/releases/download/v2.2.19/wgcf_2.2.19_linux_amd64 2. Меняем путь к файлу на /usr/bin/ и и его имя на wgcf mv wgcf_2.2.19_linux_amd64 /usr/bin/wgcf 3. Разрешаем исполнение вновь созданной команды: chmod +x /usr/bin/wgcf 4. Регистрируемся и создаем конфигурационный файл: wgcf register Создался файл: wgcf-account.toml А затем: wgcf generate Теперь в папке в которой вы находили у вас появился ещё файл: wgcf-profile.conf Теперь получим учетку WARP+ Идём в бота: https://t.me/generatewarpplusbot Подписываемся на его каналы и получаем свой ключ - license_key. Теперь идём в файл wgcf-account.toml nano wgcf-account.toml Заменяем значение license_key на то, которое мы получили от Бота. Делаем обновление учетки: wgcf update А теперь генерируем конфиг файл заново: wgcf generate Теперь идём создаем новый вариант inbound'a как здесь - WireGuard НО! Указываем в него те значения, которые хранятся в вашем конфиг файле wgcf-profile.conf Настраиваем нашу маршрутизацию в ядре XRAY Для этого нам нужно добавить новый outbound в раздел Routing'a { "outboundTag": "warpplus", "domain": [ "openai.com", "ai.com", "ipinfo.io", "iplocation.net", "spotify.com", "canva.com" ], "type": "field" }, Рекомендуется использовать данный режим только на ядрах xray не ниже 1.8.3 (из-за проблем с утечкой памяти)
-
Всем привет, недавно узнал, что при заходе на российские сайты лучше отключать ВПН/Прокси, дабы сервер в будущем не был заблокирован (возможно я и ошибаюсь). Решаем следующую задачу - выходим в Рунет с нашим конфигом VLESS TCP REALITY не через зарубежный сервер, либо напрямую с нашим РФ ip, либо через VPS в России. Вариант №1 - самый простой. Добавить geoip:ru к geoip:private в разделе routing. Должно получиться так: Далее в клиенте, в моем случае это v2rayNG, заходим в настройки и делаем так, как на скриншотах: Проверяем данную реализацию, заходим на Проверку айпи в Яндекс и если отображается наш РФ ip, всё ок. Затем можно зайти на тот же 2ip и проверить айпи нашего зарубежного хостера. ПРОФИТ! P.S. Остальные клиенты не рассматривал, в Nekobox и Hiddify по идее всё то же самое. Что насчёт клиентов Shadowrocket, Streisand, FoXray и V2box я не знаю, iOS у меня к сожалению нет и провести такое нет возможности. Если у Вас имеется одно из перечисленных приложений, то проверьте это у себя и если не затруднит, то выложите пожалуйста инструкцию в комментарии. Спасибо! UPD. на 17.03.2024: Инструкция для FoXray. Инструкция для Streisand. Вариант №2 - универсальный, но как отметил @TrustMe не совсем безопасный, если сервером будут пользоваться незнакомые Вам лица. Я приобретал сервер в Timeweb (не реферальная ссылка), взял самый начальный тариф в Питере за 188₽. 1. Подключаемся к серверу в РФ и выполняем команды (Источник) sudo apt update sudo apt upgrade -y sudo apt autoremove sudo apt dist-upgrade На этом этапе изменим ssh порт, также установим UFW и Fail2ban (если он нужен) из статьи с форума. 2. Установим Shadowsocks-Rust: Статью брал отсюда - источник. Установим пакеты, позволяющие apt использовать репозиторий через HTTPS: apt install -y apt-transport-https ca-certificates curl gnupg lsb-release Добавим официальный ключ GPG Docker: curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg Используем следующую команду для настройки стабильного репозитория Docker: echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null Теперь файл /etc/apt/sources.list.d/docker.list содержит репозиторий Docker. Обновим списки пакетов: apt update Установим Docker: apt install -y docker-ce docker-ce-cli containerd.io Убедимся, что Docker Engine установлен правильно, запустив hello-world образ: docker run hello-world Увидим следующее сообщение: Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world b8dfde127a29: Pull complete Digest: sha256:308866a43596e83578c7dfa15e27a73011bdd402185a84c5cd7f32a88b501a24 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. ... Извлечём Docker-образ Teddysun для Shadowsocks-Rust, введя команду: docker pull teddysun/shadowsocks-rust Создадим каталог с /etc именем /shadowsocks-rust: mkdir /etc/shadowsocks-rust Создадим файл конфигурации /etc/shadowsocks-rust/config.json. Выполним: nano /etc/shadowsocks-rust/config.json И вставим следующее, где заменим: 25117 на случайный номер порта. 25u4kC4XbIWZJ75Q на более надежным паролем. chacha20-ietf-poly1305 другим шифром, но убедитесь, что вы используете шифр AEAD. { "server":"0.0.0.0", "server_port":25117, "password":"25u4kC4XbIWZJ75Q", "timeout":300, "method":"chacha20-ietf-poly1305", "nameserver":"8.8.8.8", "mode":"tcp_and_udp" } Запустим следующую команду, заменив 25117 во всех четырех местах номер порта по вашему выбору: docker run -d -p 25117:25117 -p 25117:25117/udp --name ss-rust --restart=always -v /etc/shadowsocks-rust:/etc/shadowsocks-rust teddysun/shadowsocks-rust ПРОФИТ! 3. Установим ufw-docker (источник) Предполагается, что на данном этапе уже установлен UFW. Качаем из репозитория ufw-docker: sudo wget -O /usr/local/bin/ufw-docker https://github.com/chaifeng/ufw-docker/raw/master/ufw-docker sudo chmod +x /usr/local/bin/ufw-docker Далее установим ufw-docker и перезагрузим стандартный UFW. ufw-docker install sudo systemctl restart ufw Добавим ss-rust в исключения ufw-docker: ufw-docker allow ss-rust 4. Пропишем outbounds и routing на Main сервере В outbounds добавим следующее: { "tag": "ss-ru", "protocol": "shadowsocks", "settings": { "servers": [ { "address": "айпи РФ сервера", "method": "chacha20-ietf-poly1305", "ota": false, "password": "ваш пароль", "port": ваш порт, "level": 1 } ] }, "streamSettings": { "network": "tcp" } } Тэг "ss-ru" может быть любым, это просто в качестве примера, но если меняете название, то не забудьте прописать его в routing. В самое начало routing пропишем: "domainStrategy": "IPIfNonMatch", Получим такой вид: Далее в том же routing прописываем: { "ip": [ "geoip:ru" ], "inboundTag": [ "VLESS TCP REALITY" ], "outboundTag": "ss-ru", "type": "field" } В inboundTag перечисляем те инбаунды, которые будут использовать наш РФ сервер, если сайт на который мы заходим хостится в России. Конечная реализация выглядит следующим образом: 5. Проверяем работу нашего РФ сервера. Заходим на Проверку айпи в Яндекс и если отображается ip нашего российского хостера, то всё ок. Если нет, то значит Вы что-то сделали не так. Затем можно зайти на тот же 2ip и проверить айпи нашего зарубежного хостера (да, 2ip находится не в России) ВСЁ! Вы великолепны! P.S. Есть ещё один способ, но локальный, это прописать в клиентах (v2rayNG, Nekobox и т.д.) эту маршрутизацию самостоятельно, но если у Вас много клиентов, то подавляющее большинство думаю не будет с этим заморачиваться. Поэтому данный способ я считаю универсальным. Инструкция не моя, мне в этом помогли.
-
Всем привет! Рассмотрим как можно заблокировать рекламу при использовании Marzban. Есть 3 способа: 1. Использовать AdGuard Home, прописав в xray-config.json соответствующие строчки: nano /var/lib/marzban/xray_config.json И прописываем: "dns": { "servers": [ "127.0.0.1" ] }, Но если я правильно понял, то трафик делает петлю и всё начинает грузиться очень и очень медленно, такой способ я бы не рекомендовал использовать. Главный плюс в том, что можно всё контролировать через веб-панель ADH + шифрование трафика. 2. Прописать также в xray-config.json вместо 127.0.0.1 любой известный DNS сервер, который блокирует рекламу, например, тот же AdGuard: 94.140.14.14 и 94.140.15.15 (Список известных DNS-провайдеров). Минусы такого способа в том, что эти сервера мы не контролируем и не можем элементарно настроить списки блокировок, в частности нет никакого шифрования. 3. И третий способ, который я использую. В Ubuntu, если не ошибаюсь, то начиная с версии 20.04 используется служба systemd-resolved - локальный прослушиватель заглушки DNS на 127.0.0.53. Почитать подробнее можно тут. С помощью этой службы мы и будем менять DNS на самом сервере, не прописывая ничего в Marzban. Я использовал NextDNS, служба с бесплатными 300к запросами в месяц. Если израсходуете лимит, то DoT (шифрование) останется работать, но рекламу он перестанет блокировать. Для такого случая предусмотрены подписки за 149₽ в месяц или 1490₽ в год, РФ карты разумеется не принимают)) Что не мало важно, крипту они поддерживают. Приступим к настройке, перейдём на nextdns.io и пройдём регистрацию. В Security включено всё, кроме Google Safe и NRD (блокировка новых доменов, которым менее 30 дней - частенько блочило некоторые сайты, хотя их можно было включить во вкладку Allowlist, но не вижу смысла) В Privacy включены блок листы, для поиска по названиям список ниже: AdGuard DNS filter AdGuard Mobile Ads filter AdGuard Tracking Protection filter AdGuard Base filter AdGuard Social Media filter AdGuard Russian filter OISD NextDNS Ads & Trackers Blocklist NoTrack Tracker Blocklist 1Hosts (Lite) HaGeZi - Multi NORMAL С таким списком работает нормально огромное количество сайтов, странных блокировок пока не замечал. НО ВЕРОЯТНО СПИСОК ИЗЛИШЕН))) В Native Tracking Protection включаются трекеры от определенных производителей - тут уже на своё усмотрение. Также включен пункт Block Disguised Third-Party Trackers - на скриншоте не отображается. Parental Control - родительский контроль; Denylist - какие сайты хотите заблокировать; Allowlist - какие сайты исключить из блока; Analytics - статистика по блоку; Logs - логи. В Settings изменил следующее: Также на главной странице NextDNS есть возможность установить данные сервера на любую выбранную ОС: Но к этому мы ещё вернёмся! Теперь подключимся через Marzban и перейдём на страницу NextDNS. И привяжем IP нашего сервера. На этом настройка закончена! Приступим к настройке сервера. Проверим текущие DNS сервера: sudo resolvectl status Изменим DNS сервера глобально на сервере (в файле /etc/systemd/resolved.conf) По идее этого достаточно, чтобы реклама блокировалась даже без редактирования netplan (/etc/netplan), но если не редактировать netplan, то будет утечка DNS, по крайней мере у меня так где-то в 90% случаев. sudo nano /etc/systemd/resolved.conf Файл имеет следующий вид: Для внесения изменений необходимо отредактировать 3 пункта: DNS - наши сервера DNS; FallbackDNS - если будут недоступны основные сервера, то запросы будут проходить через них; DNSOverTLS - включаем DoT (true) Источники - один и два. Формат записей DNS в файле resolved.conf: DNS=94.140.14.14#dns.adguard.com Редактируем resolved.conf, т.к. мы включаем поддержку DoT, то убираем # и прописываем свои адреса NextDNS: DNS=прописываем адреса со страницы my.nextdns.io, можно вместе с DNSOverTLS=yes, либо прописать DoT ниже FallbackDNS: FallbackDNS=1.0.0.1#1dot1dot1dot1.cloudflare-dns.com (у меня прописано так); DNSOverTLS=true (в принципе тут всё понятно, включаем поддержку DoT). Отредактировали, сохранили, выходим. Перезапустим systemd-resolved sudo systemctl restart systemd-resolved И проверим статус: sudo systemctl status systemd-resolved Далее проверим текущие DNS сервера: sudo resolvectl status Мой вывод, не буду расписывать каждый пункт, думаю там итак всё понятно: По идее достаточно того, что прописано в Global И можно уже проверить, зайдя на любой сайт по проверке утечки DNS и рекламы, предварительно подключившись к Marzban. DNS: https://www.dnsleaktest.com/ https://browserleaks.com/dns https://ipleak.net/ Реклама: https://d3ward.github.io/toolz/adblock.html https://checkadblock.ru/ https://test.adminforge.de/adblock.html Но мы также будем редактировать netplan, путь /etc/netplan Переходим в папку и проверим какие файлы там лежат: cd /etc/netplan && ls Обычно там лежит один файл - 50-cloud-init.yaml Если два, то нужно настраивать каждый, либо перенести всё в один, как это сделать - гуглим, либо вот несколько источников по настройке: https://losst.pro/nastrojka-seti-netplan-v-ubuntu https://umnoe-gelezo.ru/2023/09/1604/ https://sysadminium.ru/adm_serv_linux-network_setup_on_ubuntu/ https://netplan.io/ Сразу повысим права файлу, ибо он может выдать предупреждение после применения netplan try: sudo chmod 600 /etc/netplan/50-cloud-init.yaml Редактируем файл netplan: sudo nano /etc/netplan/50-cloud-init.yaml Вносим туда следующее: ВАЖНО! Не копировать! Всё прописывать в ручную, без TAB, только пробелы! nameservers: addresses: [адреса DNS IPv4, можно прописать также IPv6] И т.к. я не хочу получать DNS сервера хостера через DHCP, то я включил: dhcp4: yes dhcp6: yes И добавил (источник) dhcp4-overrides: use-dns: no dhcp6-overrides: use-dns: no Если используете Hizakura, то они работают без DHCP и в файле netplan будет прописано gateway. При применении команды netplan try может выскочить предупреждение, что маршруты устарели и прочее, то по идее можно не обращать внимание. Главная задача - заменить DNS через nameservers. Всё, сохранились, вышли и теперь проверим текущую конфигурацию: sudo netplan generate Применяем конфигурацию с возможностью отмены: sudo netplan try Или просто применим конфиг: sudo netplan apply После применения команды netplan try может выскочить предупреждение, на него можно не обращать внимания. Cannot call Open vSwitch: ovsdb-server.service is not running. По идее при тесте утечки DNS не будут отображаться DNS хостера, но такое редко бывает. Проверяем DNS сервера: sudo resolvectl status И видим, что все сервера изменены. С помощью ngrep можно проверить, работает ли DNS over TLS. В этом режиме для DNS-запросов используется порт 853 (вместо стандартного 53). По этой причине при разрешении имени с DoT команда ngrep port 53 не выдаст ничего, а команда ngrep port 853 выведет зашифрованные данные. На этом всё! Вместо NextDNS можно использовать тот же AdGuard или что-то похожее. С такой конфигурацией у меня всё работает также, как с DNS хостера, никаких значительных изменений я не увидел, но возможно есть задержка в одну секунду +-, а вот по сравнению с AdGuard Home разница значительна! Немного полезных ссылок: https://adguard-dns.io/kb/ru/general/dns-providers/ https://www.dnsperf.com/#!dns-resolvers https://github.com/curl/curl/wiki/DNS-over-HTTPS https://dnscrypt.info/public-servers/ UPD. С такой реализацией не грузит плееры на hdrezka.ag, нужно использовать зеркала.
-
Всем привет! Статья будет достаточно короткой, но кому то, возможно, полезной. Если вы используете лимитированные сервисы, например, Vultr или DigitalOcean, то при большой прогоне трафика, его дополнительная покупка может быть дорогой. Но, покупка нового сервера - может быть дешевле, к тому же, позволит разгрузить основные ноды. Спасет нас, самая простая балансировка серверов через А-записи DNS. Как я уже рекомендовал ранее, я использую привязку всех доменов в CloudFlare. 1. Создаем копию Ноды. Здесь должно быть все четко. Одинаковые параметры сервера: Порты подключения mTLS ключи одинаковый параметр поднятия контейнера Подняли? Если сложно, напишите, я распишу. 2. Идем на CloudFlare и создаем копию записи поддомена. но с использованием другого IP адреса мы создали два поддомена, с одинаковым именем nl-node Но указали два разных айпи адреса Помимо этого, мы указали TTL - в 2 минуты (чтобы проверить, но вы можете указать и 5-10 минут. Это время удержания на сервере, до момента переподключения. 3. Идем в панель и добавляем узел Напоминаю, подключение узлов в панеле лучше осуществлять через IP адрес сервера. Первый сервер: Второй сервер: При добавлении, убирайте галочку: 4. Проверяем настройки хоста - inbound-ы А вот домен, мы указываем в настройках хоста: Без дублирования на сервера. Итог: Каждый пользователь, подключаясь по этому inbound будет попадать (каждый раз) на разные сервера по факту. Таким образом получится обеспечить равномерное распределение пользователей по вашим серверам в рамках одной локации.
-
Продолжаем тему установки Marzban. 1. Включаем поддержку warp proxy в ядре xRay Для чего это нужно? Как я уже писал в других темах, это нужно для возможности обхода региональных блокировок на стороне того сайта, к которому вы обращаетесь, например, OpenAI.com. Можно установить двумя способами, тот который я уже описывал на форуме (полностью ручной) и с помощью скрипта. Напишу самый простой. Установка WARP-cli С февраля автор больше не поддерживает свой инструмент. bash <(curl -fsSL https://raw.githubusercontent.com/DigneZzZ/warp.sh/main/warp.sh) proxy Легко и просто. 2. Рекомендуемый конфиг для VLESS TCP REALITY. Я рекомендую вам остановиться на одном единственном типе подключений - VLESS TCP REALITY. Работает, не блокируется. Ниже приведен лучший (на мой взгляд) вариант конфигурации. Он уже включает в себя проксирование через WARP. { "log": { "loglevel": "warning" }, "inbounds": [ { "tag": "VLESS TCP REALITY", "listen": "0.0.0.0", "port": 8443, "protocol": "vless", "settings": { "clients": [], "decryption": "none" }, "streamSettings": { "network": "tcp", "tcpSettings": {}, "security": "reality", "realitySettings": { "show": false, "dest": "flickr.com:443", "xver": 0, "serverNames": [ "flickr.com" ], "privateKey": "OGWADIQSFq3tUHrUTOug8mUQqG7OZeoKZR5Hv3LdmVg", "shortIds": [ "bbc0e34bc74e6183" ] } }, "sniffing": { "enabled": true, "destOverride": [ "http", "tls" ] } } ], "outbounds": [ { "protocol": "freedom", "tag": "DIRECT" }, { "tag": "WARP", "protocol": "socks", "settings": { "servers": [ { "address": "127.0.0.1", "port": 40000 } ] } }, { "protocol": "blackhole", "tag": "BLOCK" } ], "routing": { "rules": [ { "type": "field", "outboundTag": "WARP", "domain": [ "openai.com", "spotify.com" ] }, { "ip": [ "geoip:private" ], "outboundTag": "BLOCK", "type": "field" }, { "domain": [ "geosite:private" ], "outboundTag": "BLOCK", "type": "field" }, { "protocol": [ "bittorrent" ], "outboundTag": "BLOCK", "type": "field" } ] } } Для установки, заходим в вашу панель. Жмём на шестиренку: Открывается: Заменяем все содержимое на код который указывал выше. Теперь главное, обратите внимание на эти два значения: "privateKey": "OGWADIQSFq3tUHrUTOug8mUQqG7OZeoKZR5Hv3LdmVg", "shortIds": [ "bbc0e34bc74e6183" Вам для своего сервера, эти значения нужно указать самостоятельно. Для получения privateKey, нужно использовать на сервере команду: docker exec marzban-marzban-1 xray x25519 Для получения ShortIDs, нужно их сгенерировать вот этой командой: openssl rand -hex 8 и заменяем его в параметрах. Резервный вариант подключения - Trojan WS. Я бы рекомендовал его иметь в запасе, но не назначать каждому. Вот код, который нужно вставить сразу после "inbounds": [ { "tag": "TROJAN WS TLS", "listen": "0.0.0.0", "port": 2058, "protocol": "trojan", "settings": { "clients": [] }, "streamSettings": { "network": "ws", "wsSettings": { "path": "/" }, "security": "tls", "tlsSettings": { "serverName": "SERVER_NAME", "certificates": [ { "ocspStapling": 3600, "certificateFile": "/var/lib/marzban/certs/fullchain.pem", "keyFile": "/var/lib/marzban/certs/key.pem" } ], "minVersion": "1.2", "cipherSuites": "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" } } }, В чем плюс использования единого инбаунда? Всё просто, вы можете варьировать теги по системе в дальнейшем как вам угодно, и очень удобно подключать и использовать ноды (расскажу в отдельной статье) Если есть вопросы и пожелания, пишите!
-
Немного затупил в процессе настройки и установки. Кто-то пробывал?
-
Всем привет! Из последнего, что появилось в клубе Marzban за последние 1.5 месяца (каждый пункт - отдельная статья): Разобрались что такое SNI и как правильно выбрать сайт для Reality под ваш сервер Разобрались как настроить балансировку через А записи в DNS Разобрались как настроить роутинг Ру трафика через Ру сервер Написал статью по ФэнШую на Marzban. Обновил скрипт для замены xray ядра - теперь это универсальный скрипт поиском последней версии ядра в офф.репе. Расписал про использование REST в связке узлов с мэйном. Написал детальную инструкцию как настроить использование единственного 443 порта на сервере через Haproxy и как настроить inboundы, чтобы все шло через один порт. Здесь же инструкция, как использовать разные поддомены для sub и для panel в рамках одного сервера Все это (и многое другое) доступно по подписке
-
Всем привет! Пройдемся по теории. Один из основных способов маскировки, это использование 443 порта и использование Reality Но, чтобы не светить ваш сервер, к которому подключается клиент, он тоже должен работать на этом порту. А еще, чтобы и ваша панель и страница подписок - тоже должны быть на 443 порту. А самое главное, в рамках одного сервера, вы можете разделить по поддоменам панель и страницу подписки. Перейдем к делу. С этой задачей, удобно для нас всех поможет справиться haproxy. Это своеобразные аналог nginx. Но по мне, немного попроще. Задача его обрабатывать внутренние порты, и с одного внешнего (443) перенаправлять на внутренние в соответствии с тем, что требует входящее соединение. На самом деле, это лучше делать этапом 0 в создании сервера на Marzban. 1. Установим haproxy. apt install -y haproxy 2. Сразу настроим конфиг: nano /etc/haproxy/haproxy.cfg 3. По умолчанию видим такой набор: Но нам этого мало. 3.1. Добавляем в конец документа: listen front mode tcp bind *:443 tcp-request inspect-delay 5s tcp-request content accept if { req_ssl_hello_type 1 } use_backend panel if { req.ssl_sni -m end panel.domain.com } use_backend sub if { req.ssl_sni -i end sub.other-domain.com } use_backend reality if { req.ssl_sni -m end discord.org } default_backend reality backend panel mode tcp server srv1 127.0.0.1:10000 backend sub mode tcp server srv1 127.0.0.1:10000 backend reality mode tcp server srv1 127.0.0.1:12000 send-proxy Сразу давайте разберемся в понятиях этого содержимого 3.2. Если у вас каждая нода - как отдельный инбаунд, то создавать придется несколько backend и frontend, например так. А еще по той простой причине что для каждого сервера нужно искать свой SNI (я писал об этом в прошлой статье) use_backend reality-1 if { req.ssl_sni -i end telegram.org } use_backend reality-2 if { req.ssl_sni -i end discordapp.com } use_backend reality-3 if { req.ssl_sni -i end cdn.debian.org} и вторая часть: backend reality-1 mode tcp server srv1 127.0.0.1:12001 send-proxy-v2 tfo backend reality-2 mode tcp server srv1 127.0.0.1:12002 send-proxy-v2 tfo backend reality-3 mode tcp server srv1 127.0.0.1:12003 send-proxy-v2 tfo 3.3. Проброс сертификатов. Чтобы наши сертификаты, пробрасывались ко всем соединениям, нам нужно указать корректные пути: ca-base /var/lib/marzban/certs/fullchain.pem crt-base /var/lib/marzban/certs/key.pem 3.3.1. А что если у вас другой домен 2-го уровня для вашей сабки? Да ничего страшного, мы пробрасываем для него отдельный путь для сертификатов на фронтенд: frontend front_sub bind *:443 ssl crt-list /root/.acme.sh/sub_other_example.com/sub_other_domain.com.pem mode tcp При условии что мы указали примерно так: use_backend sub if { req.ssl_sni -i end sub.other-domain.com } Сохранили документ. Перезапустили сервис: systemctl restart haproxy 4. Настройка Marzban .env nano /opt/marzban/.env Опишу ключевые моменты. 4.1. Меняем адрес прослушивания. Почему это важно? Когда параметр UVICORN_HOST указан со значением 0.0.0.0 - это значит, что он будет слушать любое обращение по нему. Поэтому мы указываем только слушать внутренний порт, который уже указывали в haproxy Указываем соответственно и наш порт. из конфига выше. Не забудьте в контейнер прогрузить свои сертификаты: UVICORN_SSL_CERTFILE = "/var/lib/marzban/certs/fullchain.pem" UVICORN_SSL_KEYFILE = "/var/lib/marzban/certs/key.pem" после изменений, делаем: marzban restart -n 5. Настройка Xray Config В принципе, мы меняем только порт и указываем конкретный listen. Остальные параметры могут остаться без изменений. Учтите, что ваши параметры reality должны совпадать с haproxy { "tag": "VLESS_TCP_REALITY", "listen": "127.0.0.1", "port": 12000, "protocol": "vless", "settings": { "clients": [], "decryption": "none" }, "streamSettings": { "network": "tcp", "tcpSettings": { "acceptProxyProtocol": true }, "security": "reality", "realitySettings": { "show": false, "dest": "discord.org:443", "xver": 0, "serverNames": [ "discord.org" ], "privateKey": "XYX6m0Mj3faUstoEm5NBdegeXkHG6ZB78xzBv2n3ZUA", "shortIds": [ "6ba85179e30d4fc1" ] } }, "sniffing": { "enabled": true, "destOverride": [ "http", "tls" ] } } А теперь главный момент! Заходим в настройки хоста, и принудительно прописываем 443 порт! на этом все. Аналогичный конфиг вы должны будет поднять на каждой используемой NODE (узле) Если вы используете только TLS с CDN, например vless/vmess/trojan WebSocket + CDN, то вам нужно будет использовать опцию fallback xray-core (через создание fallback инбаунда) Если нужна будет статья на эту тему, можно будет написать, но позже. Но нужно понимать, что fallback будет требовать дополнительных ресурсов!
-
Всем привет! ИСПОЛЬЗОВАНИЕ ADGUARD HOME В СВЯЗКЕ С VLESS REALITY КРАТНО СНИЗИТ СКОРОСТЬ СОЕДИНЕНИЯ! УСТАНОВКА ADGUARD HOME ПРИ ИСПОЛЬЗОВАНИИ УЗЛОВ (NODE) - ДОЛЖНА БЫТЬ ВЫПОЛНЕНА НА КАЖДОМ СЕРВЕРЕ Сегодня разберем создание контейнера с AdGuardHome и подключением его к ядру Marzban. Я уже ранее публиковал другую тему, но там все было достаточно сложно и долго. Пройдемся заново. AdGuard можно устанавливать как в контейнер 1. Создаем контейнер 1.1. Создаем файл docker-compose.yml в папке agh mkdir agh && cd agh && nano docker-compose.yml Внутрь вставляем код: version: "3.9" services: adguardhome: image: adguard/adguardhome container_name: adguardhome restart: unless-stopped environment: - TZ=Europe/Moscow volumes: - ./work:/opt/adguardhome/work - ./conf:/opt/adguardhome/conf network_mode: host #Это можно прописать если вы хотите запустить AGH на уровне хоста. !!! 1.2. Запускаем контейнер: docker compose up -d 1.3. Открываем порт в UFW: sudo ufw allow 3000 2. Настройка Переходим по адресу: http://your-ip:3000 И попадаем на страницу установки: 2.1. Веб-интерфейс давайте засунем на какой-нибудь замудренный порт, и потом закроем его через UFW. Я себе сделаю такой: 2.2. А вот интерфейс для обслуживания запросов DNS, я выберу другой, локальный: Оговорка: Данная вариация предназначена для Marzban без использования Нод. Если вы используете ноды, то вам нужно будет повторить этот процесс для каждого сервера. Без сомнений, можно открывать DNS сервер на публику, но это потребует значительных мощностей от вашего сервера, когда его будут атаковать по 53 порту китайские боты... И конечно можно сделать, чтобы все сервера ссылались на один DNS сервер, но это увеличит задержки. Я так не рекомендую 2.3. Следующим шагом задаем логин и пароль админа: Затем несколько раз далее.. И попадаем на экран: 2.4. Открываем порт для нашей веб-админки: sudo ufw allow 9880 3. Переходи в панель AdGuard Home Давайте сразу его настроим: 3.1. Заходим в настройки DNS: Меняем Upstream DNS-серверы на: В резервных DNS задаем 1.1.1.1 Спускаемся чуть ниже, и жмем ПРИМЕНИТЬ Убедились что все ок: 3.2. Идем в Настройки - Основные настройки Переключаем режим журнала в 24 часа (можно и совсем выключить, если мало места на сервере) и жмем сохранить 3.3. Настройка фильтров. Заходим фильтры - Черные списки DNS. Вы можете их указать свои, но я обычно использую один. И для РФ хватает. Жмем добавить черный список =- Добавить свой список И добавляем: Имя задавайте любое Готово: 4. Идём в настройки Xray Core и добавляем: "dns": { "servers": [ "127.0.0.1" ] }, Получиться должно так: Теперь, нам нужно отключить службу systemd-resolved 1. Откройте терминал сервера 2. Введите следующую команду, чтобы остановить службу systemd-resolved: sudo systemctl stop systemd-resolved 3. Введите следующую команду, чтобы отключить службу systemd-resolved при загрузке системы: sudo systemctl disable systemd-resolved 4. Чтобы удалить символическую ссылку /etc/resolv.conf, выполните следующую команду: sudo rm /etc/resolv.conf 5. Создайте новый файл /etc/resolv.conf и добавьте в него необходимые настройки DNS. nano /etc/resolv.conf В файл вписываем: nameserver 127.0.0.1 6. Перезагрузите систему: sudo reboot После выполнения этих шагов, служба systemd-resolved будет отключена, и ваша система будет использовать новый файл /etc/resolv.conf для разрешения DNS-запросов. Всё. Запросы пролетают через наш AdGuard. Осталось закрыть наш порт в UFW командой: ufw deny 9880
-
Всем привет! Сегодня тренировался пол дня, и наконец то получилось все сделать как положено. Решается задача: Как спрятать домен страницы подписки от основного домена панели. Как их разделить. А к тому же ещё и проксировать через CF. Сейчас расскажу. 0. Для начала нам нужны два файла. Я для вас их уже скорректировал и подготовил с правками под последний шаблон. Лежат здесь: 1. Теперь нам нужно зарегистрировать второй поддомен, для страницы подписки. 1.1. Идем на CF и для какого хотите домена, добавляете новую запись поддомена. Айпи адрес указываете тот, на котором у вас будет стоять веб-сервер. (ПРОКСИРОВАНИЕ РАБОТАЕТ НОРМАЛЬНО!) 2. У нас должен быть установлен свой веб-сервер. Сделать вы это можете сами. Для самого просто примера, как поднимать панель Fastpanel, мы писали здесь: 2.1. Когда установили. Заходим на него. Создаем сайт: Ваш IP будет выбран (свой я скрыл). Указываете свой домен. DNS зону не создаем. Идём дальше: Пользователя я обычно выбираю стандартного, и не создаю новых. Базу данных создавать не нужно. FTP аккаунт тоже. Их отключаем тумблером. Проваливаемся в PHP настройки. Ставим как у меня: Если у вас не доступен php8.2, можете оставить 8.1., будет тоже работать. Сохраняем настройки PHP. Все. Жмем Создать сайт В разделе управления сайтом, заходит в SSL сертификаты Выпускаем новый Wildcart, или самоподписный, или можете загрузить из CF тут уже на ваше усмотрение. Я выбрал Wildcart Всё. Идем дальше. Заходим в файлы и загружаем два файла, которые я загрузил для вас в пункте 0. должно получиться так: Заходим в файл index.php (двойным кликом) И в 25 строке заменяем значение на адрес вашей МЭЙН панели с портом!!! ГОТОВО! 3. Корректируем параметры Marzban. Теперь идем в файл env на вашем основном сервере: nano /opt/marzban/.env И указываем для страницы подписки параметр - адрес нашей внешней страницы: XRAY_SUBSCRIPTION_URL_PREFIX = "https://subpage-vpn.domain.com" готово! Осталось перезапустить Marzban и проверить! marzban restart -n
-
Всем привет Давно напрашивается тема по искусству ФэнШуя для использования и реализации МэрцБана. 1. Начнем с того, что ВАМ нужно понять "Чего вы хотите от панели Marzban?" Варианты: Для себя и друзей (до 20-25 человек) Только для себя (1-5 человек) Для пассивного дохода + "сарафан-радио" со стабильным и надежным доступом (до 100 человек с перспективой роста) Аггрессивный лоу-прайс сервис VPN с рекламой по всем щелям и ботом для продажи (500+ человек за год) СуперКрутой VPN сервис с премиальными скоростями. Любые другие вариации и комбинации.. Начнем с конца. СуперКрутойVPN сервис И это точно не Marzban. Для СуперКрутогоVPN сервиса, вам Marzban не нужен. Вам нужны деньги и Dedicated сервер с гарантированным каналом. Вам нужна своя разработка софта (программ для каждой платформы), бота по продаже, и в идеале адаптированный под себя протокол (например обфусцированный мусорными пакетами WG). Аггрессивный лоу-прайс сервис VPN Этот вариант для Marzban + SHM. Я про него не писал еще, но о нем можно много говорить. Это готовый билинг с поддержкой ТГ-бота, который может просто подключаться к Marzban и заниматься пассивными продажами вашего VPN. Под тему SHM с очень детальными инструкциями планировался отдельный, закрытый (платный) клуб, но человек который планировал это писать и вести клуб (это не Я) - сейчас перегружен.. Надеюсь он доберется до нас Для себя и друзей и для пассивного дохода около 100+ человек - мы объединим, и рассмотрим их в этой мини статье. Это наш вариант на Marzban. Конечно, не исключено также применение SHM, или написание своего бота-продажника, но тем не менее, это отдельный разговор. Только для себя Вам не нужен Marzban. Проще обойтись установкой чего то простого: Amnezia VPN или vpnbot (телеграм решение, удобное для соло-использования где можно настроить разные типы подключений) 2. Выбор варианта реализации. Под выбором реализации, я понимаю проработку архитектуры решения в техническом плане. Варианты: 1 сервер Мэйн (подключение на Мэйн) 1 сервер Мэйн + Ноды (подкдючение на Мэйн и Ноды) количество нод не важно 1 сервер Мэйн + Ноды (подключение только на Ноды) количество нод не важно 1 сервер Мэйн + Ноды + сервер под страницу подписки (подключение на Мэйн и Ноды) Несколько Мэйн серверов + несколько Нод (с подключением на каждый Мэйн) 2.1. Приоритетным решением для организации доступа малого круга лиц (которых вы потенциально знаете - что исключает варианты саботажа среди клиентов), можно ограничиться 1 мэйн сервером и 1-2 водой Нода будет выполнять функцию резервного сервера для подключений. Мэйн будет также доступен для подключения. Это самый просто и очевидный вариант. Здесь вам не требуется много ресурсов ни в скорости доступа, ни в производительности. Минимальные тарифы на 4vps (как вариант) легко потянут эту реализацию. 2.2 При выборе для размещения небольшого VPN проекта 100+ человек, лучше рассмотреть вариант: сервер Мэйн + Ноды (подключение только на Ноды) Почему именно так? Мэйн сервер будет спрятан за CDN CloudFlare Подписка будет спрятана за CDN CloudFlare Люди будут подключаться только на ноды. 3. Требования к серверам. 3.1. Как я уже написал выше, для малого количества людей, супер производительные сервера и широкие каналы связи - не нужны, они излишни. Для круга лиц 20 человек, хватит конфигурации: 1 ядро (3.3 GHz) 2GB RAM 20 GB NVMe 2Gbit/s Но 20-30 активных пользователей потребуют чуть лучшей: 2 ядра (3.3 GHz) 4GB RAM 25 GB NVMe 2Gbit/s Это связано с тем, что загружая свою сеть, вы автоматически загружаете процессор. И в пике загрузке сети, у вас процессор загрузится на 100% на 1 ядре, и связь пропадет. К нодам, требования могут чуть ниже (на позицию) либо равноценны. И зависит это снова от того сколько людей активных ими будут пользоваться. По опыту могу сказать, что почти все используют 1й в списке сервер (80% людей) 3.2. Для реализации варианта сервер Мэйн + Ноды (подключение только на Ноды) нам потребуется несколько другая конфигурация. Требования к мэйну: Надежный провайдер. Под надежностью я понимаю максимальный SLA (доступность). Так как этот сервер будет отвечать за все подключения и будет хранить нашу базу данных. Провайдер может быть российским (может быть даже сервером на VK или Yandex Cloud Почему так? Просто потому что по сути, о нем никто не узнает. Адрес будет скрыт за CDN Cloudflare и останется анонимным. Заблокировать или проследить что мэйн у вас работает на РУ сервере - крайне сложно (в этом и смысл существования CDN) Высокая доступность сетевая - сервер должен уверено и быстро подключаться ко всем вашим нодам Сервер должен быть максимально защищен от ДДОС атак. Еще один плюс в пользу надежных провайдеров. Желательно hiCPU реализация сервера. Да, это может показаться излишним, но иногда 0.5 секунды решают многое. На HiCPU серверах обычно значительно лучше диски (1гб/с+ скорость у них) У них выше частота процессора, а значит все операции I/O будут выполняться стабильнее и быстрее. Требования к Нодам: Высокая скорость доступа (от 1гб/с), а лучше 5-10Гб/с Надежный провайдер Диверсификация серверов Это когда все Ноды (2-3) взяты у разных провайдеров. Это важно для обеспечения стабильности работы вашего сервиса, если на одного провайдера будет проходить ДДОС атака, вы пользователей попросите перключиться на другие сервера) Сервера в разных странах. Это тоже диверсификация, но здесь именно решается вопрос доступности контента (это во-первых) А во-вторых решается доступность и скорость работы пользователей из разных регионов Мира или России. Первый сервер в списке - должен быть достаточно мощным (2+ ядра / 4гб+ оперативы) У серверов должна быть хорошая связангость по регионам 4. Требования к протоколам и настройкам ядра. Здесь много расписывать нечего. Самым стабильным и неприметным остается VLESS+REALITY+Xtls-rprx-vision (другие добавлять даже не вижу смысла) Для реалити SNI-сервер следует выбирать искать в подсети провайдера, либо выбирать менее блокируемые, универсальным является Дискорд. (будет отдельная статья как подобрать) Каждая нода должна быть отдельным inbound-ом Все подключения должны быть через 443 порт (либо его производные 8443/2443/3443 и т.д.) - Задача этого порта - не привлекать внимание, когда вы по нему будете обращаться и маскировать. Желательно использовать haProxy - чтобы подключать все на 443 порт если у вас несколько типов подключений/инбаундов. (статьи по haProxy пока нет, но надеюсь напишу как появится время) Если все работает - не лезь Стабильно обновляй панель, ноды и ядро. Пока на этом все. Продолжение следует. Если вы с чем то не согласны, можете отобразить и обосновать в комментариях. Я расписал свою позицию и свой опыт. Если вам понравилась статья, и хотите услышать продолжение, то напишите в комментариях, о чем рассказать еще по понятию "ФэнШуя".
-
Всем привет! С обновлением Marzban до последней версии на Dev ветке пришло одно незначительное обновление и улучшение для работы Узлов (Node) - версия 0.3.0 Для их подключения добавился REST протокол. (Раньше был протокол RPC) В чем разница между RPC и REST? Оба они представляют собой тип архитектуры связи между системами, основное различие которых заключается в подходе к общению. REST фокусируется на конкретных ресурсах и операциях над ними, тогда как RPC фокусируется на вызове функций и методов в других системах. В общих чертах: Больше стабильности в соединении между Мэйном и Узлом Решается проблема стабильности подключения и соединения узла Сохраняется подключение к узлу при отключении Мэйна На ноде делаем: Открываем docker-compose.yml nano ~/Marzban-node/docker-compose.yml В секцию environment: Добавляем новую строку: SERVICE_PROTOCOL: rest Должно получиться примерно так: environment: SERVICE_PORT: 2000 XRAY_EXECUTABLE_PATH: "/var/lib/marzban/xray-core/xray" XRAY_API_PORT: 2001 SSL_CLIENT_CERT_FILE: "/var/lib/marzban-node/server2.pem" SERVICE_PROTOCOL: rest Если у вас два контейнера для двух мэйнов, то сделать это следует для обоих контейнеров. Сохраняем файл cd Marzban-node docker compose down docker compose pull docker compose up -d