Перейти к содержанию

Поиск

Показаны результаты для тегов 'marzban'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Форумы

  • OpeNode
    • Новости
    • Общение
  • Статьи и обсуждения
    • Docker Контейнеры
    • Прокси и Виртуальный Частные Сети
    • Сетевое оборудование
    • 3D-моделирование и 3D-печать
    • WEB технологии и их применение
    • Операционные системы и Софт
    • Домашняя инфраструктура
    • Программирование и архитектура
    • Искусственный интеллект
    • OSINT
  • Клуб DWG Проблемы сборок
  • Клуб DWG Сборки DWG
  • Zero Trust Network Темы
  • Zero Trust Network OpenZITI
  • Marzban Инструкции
  • Marzban Продвинутые инструкции
  • Marzban Вопросы и проблемы
  • Marzban Общение
  • BookWorm Общение
  • BookWorm Поиск материалов
  • Общий клуб - ОБЩЕНИЕ Предложения по КЛУБАМ
  • Панели управления VPN и Proxy 3x-UI/X-ui
  • Панели управления VPN и Proxy Другие решения

Категории

  • Полезные файлы
    • CMS
  • Книги - общий раздел
    • Хакинг и безопасность [FILES]
    • СУБД [FILES]
    • Сети / VoIP [FILES]
    • Веб-дизайн и программирование [FILES]
    • Mac OS; Linux, FreeBSD и прочие *NIX [FILES]
  • 3D-модели для печати
  • Marzban Файлы
  • BookWorm Книги

Поиск результатов в...

Поиск контента, содержащего...


Дата создания

  • Начало

    Конец


Дата обновления

  • Начало

    Конец


Фильтр по количеству...

Регистрация

  • Начало

    Конец


Группа


Обо мне


Пол

  1. UPD 10.08.2023 Обновлена инструкция., UPD 08.04.2024 Обновлена инструкция. Варианты серверов: 1. Aeza: получаем бонус 15% (если пополнить в первые 24часа регистрации) на пополнение баланса: https://aeza.net/?ref=377137. 2. На крайний случай 4vps: 4VPS.su (2Гб\с сервера) Для Нодов рекомендую Aeza.net После того как вы установили Marzban на ваш основной сервер, вы можете добавить дополнительные, подняв на них только сервиса Node составляющие. Основной репозиторий: https://github.com/gozargah/marzban-node Но инструкции там нет, поэтому вот этот пост. 1. Заходим на второй сервер. Обновляемся sudo apt-get update 3. Ставим git apt install git -y 4. Клонируем репозиторий git clone https://github.com/Gozargah/Marzban-node 5. Падаем в папку cd Marzban-node 6. Ставим докер curl -fsSL https://get.docker.com | sh 7. Идем на основную панель: 8. Выбираем добавить новую ноду 9. Выберите просмотр сертификата: 10. Скопируйте текст из окна в буфер обмена 11. Идем обратно на сервер ноды. Создаем нужные директории: mkdir -p /var/lib/marzban-node/ 12. Создаем файл в это директории: nano /var/lib/marzban-node/ssl_client_cert.pem 13. Вставляем сертификат из буфера обмена, скопированный на этапе 10. 14. Сохраняем документ: Ctrl + O затем Enter , и выходим из редактора Ctrl + Х 15. Теперь идем внутрь файла docker-compose nano ~/Marzban-node/docker-compose.yml 16. Теперь нам нужно раскомментировать протокол rest и ссылку на сертификат: Приводим к виду: SSL_CLIENT_CERT_FILE: "/var/lib/marzban-node/ssl_client_cert.pem" SERVICE_PROTOCOL: "rest" общий вид будет такой: 17. Сохраняем документ: Ctrl + O затем Enter , и выходим из редактора Ctrl + Х 18. Поднимаем контейнер docker compose up -d 19. Идем в панель Marzban 20. Вписываем адрес нашего сервера 21. И жмем Add Node. Все. Теперь при создании новых клиентов и коннектов, будет добавляться ещё один сервер к подписке.
  2. Всем привет, недавно узнал, что при заходе на российские сайты лучше отключать ВПН/Прокси, дабы сервер в будущем не был заблокирован (возможно я и ошибаюсь). Решаем следующую задачу - выходим в Рунет с нашим конфигом 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 и т.д.) эту маршрутизацию самостоятельно, но если у Вас много клиентов, то подавляющее большинство думаю не будет с этим заморачиваться. Поэтому данный способ я считаю универсальным. Инструкция не моя, мне в этом помогли.
  3. Что дают шаблоны? При использовании телеграм-бота, вы можете очень быстро создавать пользователей, просто указав его имя. Все остальные настройки уже будут переопределены. Есть кнопки: 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 действия такие же!
  4. Всем привет! Рассмотрим как можно заблокировать рекламу при использовании 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, нужно использовать зеркала.
  5. Всем привет! Статья будет достаточно короткой, но кому то, возможно, полезной. Если вы используете лимитированные сервисы, например, Vultr или DigitalOcean, то при большой прогоне трафика, его дополнительная покупка может быть дорогой. Но, покупка нового сервера - может быть дешевле, к тому же, позволит разгрузить основные ноды. Спасет нас, самая простая балансировка серверов через А-записи DNS. Как я уже рекомендовал ранее, я использую привязку всех доменов в CloudFlare. 1. Создаем копию Ноды. Здесь должно быть все четко. Одинаковые параметры сервера: Порты подключения mTLS ключи одинаковый параметр поднятия контейнера Подняли? Если сложно, напишите, я распишу. 2. Идем на CloudFlare и создаем копию записи поддомена. но с использованием другого IP адреса мы создали два поддомена, с одинаковым именем nl-node Но указали два разных айпи адреса Помимо этого, мы указали TTL - в 2 минуты (чтобы проверить, но вы можете указать и 5-10 минут. Это время удержания на сервере, до момента переподключения. 3. Идем в панель и добавляем узел Напоминаю, подключение узлов в панеле лучше осуществлять через IP адрес сервера. Первый сервер: Второй сервер: При добавлении, убирайте галочку: 4. Проверяем настройки хоста - inbound-ы А вот домен, мы указываем в настройках хоста: Без дублирования на сервера. Итог: Каждый пользователь, подключаясь по этому inbound будет попадать (каждый раз) на разные сервера по факту. Таким образом получится обеспечить равномерное распределение пользователей по вашим серверам в рамках одной локации.
  6. Продолжаем тему установки Marzban. 1. Включаем поддержку warp proxy в ядре xRay Для чего это нужно? Как я уже писал в других темах, это нужно для возможности обхода региональных блокировок на стороне того сайта, к которому вы обращаетесь, например, OpenAI.com. Можно установить двумя способами, тот который я уже описывал на форуме (полностью ручной) и с помощью скрипта. Напишу самый простой. Установка WARP-cli cd && bash <(curl -fsSL git.io/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": "discordapp.com:443", "xver": 0, "serverNames": [ "cdn.discordapp.com", "discordapp.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" ] }, { "type": "field", "domain": [ "regexp:.*\\.ru$" ], "ip": [ "geoip:ru" ], "outboundTag": "direct" }, { "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" } } }, В чем плюс использования единого инбаунда? Всё просто, вы можете варьировать теги по системе в дальнейшем как вам угодно, и очень удобно подключать и использовать ноды (расскажу в отдельной статье) Если есть вопросы и пожелания, пишите!
  7. Немного затупил в процессе настройки и установки. Кто-то пробывал?
  8. Всем привет! Из последнего, что появилось в клубе Marzban за последние 1.5 месяца (каждый пункт - отдельная статья): Разобрались что такое SNI и как правильно выбрать сайт для Reality под ваш сервер Разобрались как настроить балансировку через А записи в DNS Разобрались как настроить роутинг Ру трафика через Ру сервер Написал статью по ФэнШую на Marzban. Обновил скрипт для замены xray ядра - теперь это универсальный скрипт поиском последней версии ядра в офф.репе. Расписал про использование REST в связке узлов с мэйном. Написал детальную инструкцию как настроить использование единственного 443 порта на сервере через Haproxy и как настроить inboundы, чтобы все шло через один порт. Здесь же инструкция, как использовать разные поддомены для sub и для panel в рамках одного сервера Все это (и многое другое) доступно по подписке
  9. Всем привет! Пройдемся по теории. Один из основных способов маскировки, это использование 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 будет требовать дополнительных ресурсов!
  10. Друзья! Не для кого не секрет, что достаточно много различных инструкций уже можно найти в интернете. Но как их применить? Все ли они рабочие, либо как сделать их работающими. В этой серии статей постараюсь оставить максимально рабочую и стабильную инструкцию со всеми вытекающими комментариями почему так. 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.
  11. Всем привет Для возможности использования 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 (из-за проблем с утечкой памяти)
  12. Всем привет! Сегодня разберем создание контейнера с 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
  13. Всем привет! Сегодня тренировался пол дня, и наконец то получилось все сделать как положено. Решается задача: Как спрятать домен страницы подписки от основного домена панели. Как их разделить. А к тому же ещё и проксировать через 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
  14. Всем привет Давно напрашивается тема по искусству ФэнШуя для использования и реализации МэрцБана. 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 пока нет, но надеюсь напишу как появится время) Если все работает - не лезь Стабильно обновляй панель, ноды и ядро. Пока на этом все. Продолжение следует. Если вы с чем то не согласны, можете отобразить и обосновать в комментариях. Я расписал свою позицию и свой опыт. Если вам понравилась статья, и хотите услышать продолжение, то напишите в комментариях, о чем рассказать еще по понятию "ФэнШуя".
  15. Всем привет! Сегодня оглашу такую важную тему как резервное копирование базы и все параметров. 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 Теперь всё. Вывод будет примерно таким:
  16. Всем привет! С обновлением 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
  17. Всем привет Давно просят, пишу. 0. Возможная потребность Почему это может пригодится? ДДОС основного сервера и его недоступность Реинжиниринг серверов (это когда вы решаете поменять логику работы и размещения) Переезд на другой сервер (в добровольном порядке) Проблемы на основном сервере - требуется переустановка ОС 1. Условия Главным условиям такого переезда, наличие Дампа файлов. Хорошим инструментом для этого является бот автобэкапа в телеграм. Инструкцию я уже публиковал на эту тему. Бот присылает архив из двух основных папок с сохранением директорий: /opt/marzban и /var/lib/marzban/ /opt/marzban содержит в себе условия запуска Marzban. /var/lib/marzban/ содержит в себе все дополнительно используемые вами файлы. Поэтому есть смысл хранить все именно там. Если у вас старый сервер доступен, то лучше будет скопировать все данные непосредственно с него. (этот вариант мы и будем рассматривать) 2. Порядок переезда. 2.1. Сперва нам нужно взять в аренду новый сервер. 2.2. Обновляем все репозитории: apt update && apt upgrade -yqq 2.3. Устанавливаем Marzban официальным скриптом sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install А теперь внимание. Версии Marzban должны совпадать с тем сервером с которого вы переезжали. Если вы стабильно обновляете dev ветку, то и на новом сервере должна быть установлена именно она, чтобы не вызвать конфликты с БД. Если вы использовали все время DEV ветку, то делаем следующее. Меняем наш docker-compose.yml nano /opt/marzban/docker-compose.yml Параметр: image: gozargah/marzban:latest на image: gozargah/marzban:dev А затем запускаем обновление: marzban update 2.4. Остановка Marzban на новом сервере. marzban down 2.5. Привязка домена и получение сертификатов. Аналогично прошлой инструкции получаем сертификаты уже на новом сервере (но на старый домен) Перед выпуском сертификатов ОБЯЗАТЕЛЬНО ПРОПИШИТЕ НОВЫЙ IP АДРЕС НОВОГО СЕРВЕРА ВАШЕГО ДОМЕНА/ПОДДОМЕНА на котором запускался Marzban! Пункты 3 и 4 из инструкции: https://openode.xyz/topic/668-ustanovka-marzban-chast-1-obschaya-ustanovka/ На этом подготовка нового сервера завершена. 3. Остановка Marzban на старом сервере. Тормозим наш Marzban командой: marzban down 4. Копируем файлы со старого сервера, на новый с ЗАМЕНОЙ. Как я уже не раз советовал в телеграм, я использую для работы с серверами Termius. И там встроен SFTP клиент. Открываем два сервера на двух разных вкладках И переносим данные с сервера на сервер: (слева старый сервер, справа новый) в папке VAR/LIB/MARZBAN мы НЕ ПЕРЕНОСИМ только папку certs, так как мы уже выпустили новые! 5. Запуск Marzban на новом сервере. marzban up На этом все. Проверяйте ваш доступ. Все должно работать. Клиенты, ноды и все остальное уже должно работать. Не забывайте обеспечить прежние условия безопасности и скопировать параметры UFW в том числе. БОНУС. Скрипт для копирования конфигурации UFW. Выполнять на старом сервере. bash <(wget -qO- dignezzz.github.io/server/ufw-copy.sh) Вывод будет иметь формат: Эту команду можно будет просто выполнить на новом сервере, при условии что будет уже установлен ufw. В случае восстановления из бэкапа телеграм, шаги идентичны. Просто файлы вы копируете не со старого сервера, а из своего архива (игнорируя папку certs)
  18. Всем привет. Для начала рекомендую ознакомиться с недавней статьей по общей безопасности сервера. Но сегодня мы разберем немного конкретных действий для работы с Marzban. 1. Использование UFW на Мэйн сервере. Здесь нет ничего сложного, но я написал для вас скрипт: bash <(wget -qO- https://dignezzz.github.io/marzban/ufw_main.sh) Что он делает? 0. Установит UFW 1. Определяет SSH порт 2. Определяет порты ваших подключений, которые используются в xray_core 3. Определяет порт панели, который используется в .env 4. Открывает стандартные порты взаимодействия панели и сервера: 62050 и 62051 5. Запретит все входящие и разрешит все исходящие соединения 2. Использование UFW на Node сервере. Я также доработал скрипт для установки на узле. bash <(wget -qO- https://dignezzz.github.io/marzban/ufw_node.sh) Что он делает? 0. Установит UFW 1. Определит SSH порт и откроет его 2. Откроет стандартные порты 62050 и 62051 3. Если вы использовали мой вариант мульти-ноды, то откроет и порты 5001-5010, 6001-6010 4. Запретит все входящие и разрешит все исходящие соединения 3. Пояснения 1. Я не рекомендую ограничивать подключение Узла (ноды) к мэйн серверу, на жесткую указывая IP мэйн-сервера для взаимодействия с конкретным портом. С одной стороны это да - безопасно очень. С другой стороны это будет выдавать ошибки Time Out когда вы через клиент-приложение будете пинговать на скорость ваши сервера. 2. Обязательно устанавливайте Fail2Ban 3. Обязательно используйте SSH-ключи и отключайте использование паролей для авторизации.
  19. Всем привет! Давно просилась статейка, про изменения в версии 1.8.0. Конфиг от прошлой версии для новых клиентов уже не будет подходить. В прошлой теме я дал очень много теории, и живой пример работающей конфигурации. Сейчас адаптируем. Хоть теперь это и ППЦ как стало не удобно... 1. Основной источник информации Конечно, основной источник информации это официальный сайт разрабов. https://sing-box.sagernet.org/migration/ 2. Изменения. Как мы видим из описания, поменялось написание правил в конфиге. 2.1. Файл Кэша Мы его не используем, он нас не касается. 2.2. Миграция GeoIP в наборы правил Новое написание теперь такое: { "route": { "rules": [ { "ip_is_private": true, "outbound": "direct" }, { "rule_set": "geoip-cn", "outbound": "direct" }, { "rule_set": "geoip-us", "rule_set_ipcidr_match_source": true, "outbound": "block" } ], "rule_set": [ { "tag": "geoip-cn", "type": "remote", "format": "binary", "url": "https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-cn.srs", "download_detour": "proxy" }, { "tag": "geoip-us", "type": "remote", "format": "binary", "url": "https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-us.srs", "download_detour": "proxy" } ] }, "experimental": { "cache_file": { "enabled": true // required to save Rule Set cache } } } Что видим? Вместо geoip: private, теперь отдельный вариант: "ip_is_private" Вместо привычного geoip:ru, мы теперь можем использовать отдельный раздел "rule_set" со своими тегами. В первую очередь это создано для тех, кто создает на базе этого ядра свои приложения, ведь теперь благодаря rule_set мы можем прогружать свои наборы правил. Можем собирать свои, или подгружать на клиент-приложение тот набор правил, который является актуальным. Сейчас в примере указан geoip-cn.srs, но мы будем использовать их же, но c ru адаптацией: geoip-ru.srs. Наш набор для geoip, будет выглядеть таким образом: { "route": { "rules": [ { "ip_is_private": true, "outbound": "direct" }, { "rule_set": "geoip-ru", "outbound": "direct" } ], "rule_set": [ { "tag": "geoip-ru", "type": "remote", "format": "binary", "url": "https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-ru.srs", "download_detour": "proxy" } ] }, "experimental": { "cache_file": { "enabled": true // required to save Rule Set cache } } } Мы прописали путь до обновляемого файла geoip-ru. Мы оставили только один rule-set. Мы оставили кэширование файла geoip, чтобы не пришлось его качать каждый раз при подключении. 2.3. Миграция Geosite в наборы правил По аналогии geoip, поменялся набор правил и для geosite. Смысл весь тот же, поэтому я сразу приведу наш рабочий вариант: { "route": { "rules": [ { "rule_set": "geosite-cn", "outbound": "direct" } ], "rule_set": [ { "tag": "geosite-ru", "type": "remote", "format": "binary", "url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-ru.srs", "download_detour": "proxy" } ] }, "experimental": { "cache_file": { "enabled": true // required to save Rule Set cache } } } НО! Конечному клиенту, этого будет мало. Обычно, для клиента я ещё добавляю дополнительные правила, чтобы запросы к telegram. whatsapp, google, apple шли напрямую. Пришлось перерыть не мало чатов и репозиториев, чтобы найти живые файлы конфигов. Источник: https://github.com/yangchuansheng/sing-box-geosite/tree/main/rule В такие аналогичные файлы, вы можете собрать свои сайты, которые хотите отправлять в директ у юзеров, либо принудительно проксировать. Я не нашел готового файла с собранными geosite:apple, в формате json.. видимо придется ковырять самому, собираю отсюда: https://github.com/v2fly/domain-list-community/blob/master/data/apple 3. Итоговый конфиг. { "log": { "disabled": false, "level": "warn", "timestamp": true }, "dns": { "servers": [ { "tag": "dns_proxy_udp", "address": "udp://1.1.1.1", "address_resolver": "dns_direct", "strategy": "prefer_ipv4", "detour": "proxy" }, { "tag": "dns_proxy_tcp", "address": "tcp://1.1.1.1", "address_resolver": "dns_direct", "strategy": "prefer_ipv4", "detour": "proxy" }, { "tag": "dns_proxy", "address": "https://1.1.1.1/dns-query", "address_resolver": "dns_direct", "strategy": "prefer_ipv4", "detour": "proxy" }, { "tag": "dns_direct", "address": "local", "strategy": "prefer_ipv4", "detour": "direct" }, { "tag": "dns_block", "address": "rcode://success" } ], "rules": [ { "outbound": "any", "server": "dns_direct" } ], "fakeip": { "inet4_range": "198.18.0.1/16" }, "independent_cache": true }, "inbounds": [ { "type": "tun", "mtu": 9000, "interface_name": "tun125", "tag": "tun-in", "inet4_address": "172.19.0.1/30", "inet6_address": "fdfe:dcba:9876::1/126", "auto_route": true, "strict_route": true, "endpoint_independent_nat": true, "stack": "mixed", "sniff": true } ], "outbounds": [ { "type": "selector", "tag": "proxy", "interrupt_exist_connections": true, "outbounds": [] }, { "type": "urltest", "tag": "️ Самый быстрый", "outbounds": null, "url": "https://www.gstatic.com/generate_204", "interval": "1m0s" }, { "type": "direct", "tag": "direct" }, { "type": "block", "tag": "block" }, { "type": "dns", "tag": "dns-out" } ], "route": { "rules": [ { "protocol": "dns", "outbound": "dns-out" }, { "rule_set": "geoip-ru", "outbound": "direct" }, { "ip_is_private": true, "outbound": "direct" }, { "rule_set": [ "YouTube", "Telegram", "geoip-google", "geoip-telegram" ], "outbound": "direct" } ], "rule_set": [ { "type": "remote", "tag": "geoip-ru", "format": "binary", "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/CHIZI-0618/v2ray-rules-dat/release/singbox_ip_rule_set/geoip-ru.srs", "download_detour": "direct" }, { "type": "remote", "tag": "geoip-google", "format": "binary", "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/CHIZI-0618/v2ray-rules-dat/release/singbox_ip_rule_set/geoip-google.srs", "download_detour": "direct" }, { "type": "remote", "tag": "geoip-telegram", "format": "binary", "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/CHIZI-0618/v2ray-rules-dat/release/singbox_ip_rule_set/geoip-telegram.srs", "download_detour": "direct" }, { "type": "remote", "tag": "YouTube", "format": "source", "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/yangchuansheng/sing-box-geosite/main/rule/YouTube.json", "download_detour": "direct" }, { "type": "remote", "tag": "Telegram", "format": "source", "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/yangchuansheng/sing-box-geosite/main/rule/Telegram.json", "download_detour": "direct" } ], "final": "direct", "find_process": true, "auto_detect_interface": true }, "experimental": { "cache_file": { "enabled": true } } } Пока искал ошибки, немного "почикал" конфиг Но он точно рабочий. Метод установки остается старый. 4. Скачиваем и устанавливаем 4.1. Качаем файл sudo wget -N -P /var/lib/marzban/templates/singbox/ https://dignezzz.github.io/ru_singbox_2.json 4.2. Корректируем .env Открываем .env nano /opt/marzban/.env Ищем строку: CUSTOM_TEMPLATES_DIRECTORY="/var/lib/marzban/templates/" И убеждаемся что она раскомментирована (в начале нет #) После неё добавляем ещё одну строку: SINGBOX_SUBSCRIPTION_TEMPLATE="singbox/ru_singbox_2.json" Сохраняем, закрываем. 4.3. Перезагружаем Marzban: marzban restart -n Готово!
  20. Для корректной работы подключений, должны быть правильно настроены и подключения. Из коробки, не все подключения Marzban работают правильно. Информация насыщена из источника Репозиторий автора (gozargah.github.io) Выбраны максимально рабочие варианты: VLESS TCP REALITY { "tag": "VLESS TCP REALITY", "listen": "0.0.0.0", "port": 2040, "protocol": "vless", "settings": { "clients": [], "decryption": "none" }, "streamSettings": { "network": "tcp", "tcpSettings": {}, "security": "reality", "realitySettings": { "show": false, "dest": "tradingview.com:443", "xver": 0, "serverNames": [ "tradingview.com" ], "privateKey": "CGT_YQt0HWMfX7XcvZhdzChag8401evaHVWs3KaPw0U", "shortIds": [ "", "6ba85179e30d4fc2" ] } }, "sniffing": { "enabled": true, "destOverride": [ "http", "tls" ] } }, VLESS TCP TLS { "tag": "VLESS TCP TLS", "listen": "0.0.0.0", "port": 2043, "protocol": "vless", "settings": { "clients": [], "decryption": "none" }, "streamSettings": { "network": "tcp", "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" } } }, TROJAN TCP TLS { "tag": "TROJAN TCP TLS", "listen": "0.0.0.0", "port": 2057, "protocol": "trojan", "settings": { "clients": [] }, "streamSettings": { "network": "tcp", "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" } } }, SHADOWSOCKS (классический) { "tag": "SHADOWSOCKS", "listen": "0.0.0.0", "port": 2060, "protocol": "shadowsocks", "settings": { "clients": [], "network": "tcp,udp" } } WARR+ через WG - при настройке через CloudFlare WARP+ { "tag": "warpplus", "protocol": "wireguard", "settings": { "secretKey": "ЗНАЧЕНИЕ ИЗ PRIVATE_KEY ФАЙЛА wgcf-profile.conf", "DNS": "1.1.1.1", "kernelMode": false, "address": [ "172.16.0.2/32" ], "peers": [ { "publicKey": "ЗНАЧЕНИЕ ИЗ PUBLIC_KEY ФАЙЛА wgcf-profile.conf", "endpoint": "engage.cloudflareclient.com:2408" } ] } },
  21. ShadowSocks решения: Marzban Full | Marzban Quick | Marzban Node | x-ui | 3x-ui | 3x-ui Docker Всем привет! Данная статья является устаревшей, рекомендуется переход на DEV ветку. В ближайшее время выйдет новая статья. Будет доступна только по подписке в Клубе Marzban. Переход на DEV ветку расписан в ЭТОЙ статье: Данная статья устарела. Рекомендую приобрести подписку и получить доступ к самой актуальной информации по Marzban Пока спал хайп на неработающий WireGuard, потому что он пока временно работает снова.. Хотел бы затронуть тему детальной настройки. Что мы сделаем в этой статье: Арендуем сервер Установим с нуля Marzban Установим сертификаты на домен Настроим docker-compose.yml Настроим .env файл и включим режим Proxy в CF. () (потенциально не работает Trojan протокол в этом режиме) Настроим продвинутую версию бота Настроим продвинутую версию клиентского интерфейса (страница подписки) Настроим WARP Proxy на Marzban через редактирование xRay core. Поехали! Marzban (персидское слово, означающее "граница" - произносится /мэрзбан/) - это инструмент управления прокси, который обеспечивает простой и удобный пользовательский интерфейс для управления сотнями прокси-аккаунтов, работающих на основе Xray-core и созданных с использованием Python и Reactjs. Почему рекомендую использовать Marzban? Marzban - это удобный, функциональный и надежный инструмент. Он позволяет создавать различные прокси для ваших пользователей без необходимости сложной конфигурации. С помощью встроенного веб-интерфейса вы сможете отслеживать, изменять и ограничивать пользователей. Возможности: - Встроенный веб-интерфейс - Работа в Docker. - Полностью поддерживает REST API - Поддержка нескольких узлов (для распределения и масштабируемости инфраструктуры) - Поддержка протоколов Vmess, VLESS, Trojan и Shadowsocks - Мультипротокол для одного пользователя - Множество пользователей на одном входящем - Множество входящих на одном порту (поддержка резервных вариантов) - Ограничения трафика и срока действия - Периодические ограничения трафика (например, ежедневные, еженедельные и т. д.) - Совместимая с V2ray ссылка на подписку (например, V2RayNG, OneClick, Nekoray и т. д.), Clash и ClashMeta - Автоматическое создание ссылок для обмена и генератор QR-кодов - Мониторинг системы и статистика трафика - Настраиваемая конфигурация xray - Поддержка TLS и REALITY - Встроенный Telegram Bot для админов - Интегрированный интерфейс командной строки (CLI) - Поддержка множества языков 1. Нам нужно арендовать хороший и быстрый сервер. Например можно рассмотреть: * Aeza: получаем бонус 15% (если пополнить в первые 24часа регистрации) на пополнение баланса: https://aeza.net/?ref=377137 * На крайний случай 4vps: 4VPS.su (2Гб\с сервера) 1.1. Регистрируемся по ссылке. 1.2. Выбираем желаемую страну. Но по моему опыту тестирования всех локаций, самые лучшие скорости в РФ у серверов в Дании и в Швейцарии. 1.3. Получаем адрес, логин и пароль. 1.4. Заходим через SSH клиент. 2. Устанавливаем Marzban также из официально репозитория: sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install Идёт установка: 2.1. Пока идёт установка, идём в CloudFlare и добавляем доменную А запись: В поле Name напишите имя поддомена, допустим proxy, и в итоге адрес панели Marzban будет proxy.vashdomain.ru В поле IPv4 address пропишите IP адрес вашего сервера Имя поддомена конечно вы можете использовать любое, домен соответственно - ваш. Упомянутую доменную A запись также можно добавить напрямую у своего доменного регистратора, вместо делегирования домена на CloudFlare 2.2. Возвращаемся в консоль. Здесь вы увидите логи контейнера. Нам они не интересны, и их закрытие на работу контейнера не повлияют. Поэтому вы можете просто взять и закрыть их кнопками Ctrl + C 2.3. Нужно создать администратора. Делается это командой : marzban cli admin create --sudo 2.4. Вводим имя и пароль для пользователя: 2.5. Идем в панель: http://в.а.ш.ip:8000/dashboard/ Основной этап прошли. Теперь идём настраивать дальше. 3. Установим сертификаты на домен 3.1. Идём обратно в консоль. Вводим команду для установки сертификатов LetsEncrypt через certbot. apt-get install certbot -y certbot certonly --standalone --agree-tos --register-unsafely-without-email -d proxy.vashdomain.ru certbot renew --dry-run Получаем сообщение: Значит все хорошо. Если вы получили ошибку, проверьте домен или возможно привязка к IP не выполнилась ещё, подождите немного. Если ваша ошибка имеет такой вид: Значит у вас 80й порт либо занят, либо закрыт фаерволом. Проверяйте сами. 4. Настроим docker-compose.yml файл 4.1. Основная папка с которой мы будем работать это /opt/marzban/ cd /opt/marzban/ 4.2. Ставим редактор nano apt install nano -y 4.3. Открываем файл docker-compose.yml nano docker-compose.yml Стандартно файл будет выглядеть так: 4.4. Мы добавляем в него строки в самый конец и с сохранением табуляции (отступа) это очень важно! Добавляем привязку файлов ключей для домена. Итоговый вид будет такой: services: marzban: image: gozargah/marzban:latest restart: always env_file: .env network_mode: host volumes: - /var/lib/marzban:/var/lib/marzban - /etc/letsencrypt/live/proxy.vashdomain.ru/fullchain.pem:/var/lib/marzban/certs/fullchain.pem - /etc/letsencrypt/live/proxy.vashdomain.ru/privkey.pem:/var/lib/marzban/certs/key.pem Заменяйте только значения своего домена. Сохраняем Ctrl+O => Enter. Закрываем редактор Ctrl + X 4.5. Перезапускаем Marzban marzban restart Получаем такой вид: Закрыть логи Ctrl + C. 5. Редактируем .env (в директории он будет скрыть, если смотреть командой dir) . Описание каждого параметра есть здесь: https://github.com/Gozargah/Marzban#configuration 5.1. Открываем файл .env: nano .env Теперь будем вносить корректировки постепенно. 5.2. UVICORN_PORT ставим 443, чтобы потом его можно было проксировать через CF. UVICORN_PORT = 443 Если вы планируете как и я проксировать подключения к домену через CloudFlare, то ознакомиться со списком поддерживаемых портов вы можете по ссылке: Network ports · Cloudflare Fundamentals docs 5.3. Заменяем содержимое строк UVICORN_SSL_CERTFILE и UVICORN_SSL_KEYFILE в соответствии с тем, как мы пробросили эти файлы в контейнер. UVICORN_SSL_CERTFILE = "/var/lib/marzban/certs/fullchain.pem" UVICORN_SSL_KEYFILE = "/var/lib/marzban/certs/key.pem" 5.4. Убираем комментарий # в начале строки и исправляем URL_PREFIX: XRAY_SUBSCRIPTION_URL_PREFIX="https://proxy.vashdomain.ru" 5.5. Сохраняем и закрываем редактор (Ctrl+O, Enter, Ctrl+X) 5.6. Теперь перезапускаем Marzban: marzban restart 5.7. Отныне доступ к веб-панели у нас будет по адресу: https://proxy.vashdomain.com/dashboard Проверяем что всё открывается: 5.8. Теперь можно смело включать режим Proxy в CF. UPD: Убедитесь что у вас в настройках SSL/TLS включен режим FULL: Если меняете настройки здесь, нужно подождать минут 15 (иногда дольше) пока настройки применятся к домену. А также, имейте ввиду, что при проксировании, не работает Trojan протокол подключения. 6. Настраиваем Telegram бота Marzban. Функционал бота реализован только для администратора, пользовательской части бота не существует. Зато функционал достаточно объемный: Системная статистика Создание пользователей Редактирование одного или нескольких (в расширенной версии) Удаление пользователей Продление и редактирование аренды пользователей Возможность включения и отключения протоколов для пользователя Копирование всех вариантов подключений, в том числе ссылки на подписку. В расширенном боте может быть несколько администраторов. Стандартный бот, имеет меньше функционала (не буду приводить сравнение), поэтому мы сразу перейдем к реализации полной версии. 6.1. Начнем с клонирования репозитория GitHub. Установим Git apt install git -y Перейдем в папку /opt/marzban/ и создадим копию репозитория с ботом cd /opt/marzban/ 6.2. Клонируем репозиторий: git clone https://github.com/DigneZzZ/marzban-telebot 6.3. Редактируем docker-compose.yml. nano docker-compose.yml В КОНЕЦ файла нужно добавить новые строки, как мы делали ранее: - /opt/marzban/marzban-telebot/telegram:/code/app/telegram - /opt/marzban/marzban-telebot/config.py:/code/config.py Содержимое получится примерно такое: services: marzban: image: gozargah/marzban:latest restart: always env_file: .env network_mode: host volumes: - /var/lib/marzban:/var/lib/marzban - /etc/letsencrypt/live/proxy.vashdomain.ru/fullchain.pem:/var/lib/marzban/certs/fullchain.pem - /etc/letsencrypt/live/proxy.vashdomain.ru/privkey.pem:/var/lib/marzban/certs/key.pem - /opt/marzban/marzban-telebot/telegram:/code/app/telegram - /opt/marzban/marzban-telebot/config.py:/code/config.py 6.4. Редактируем .env nano .env В файле нам необходимо внести несколько поправок. 6.4.1. Во первых нам нужно раскомментировать строку TELEGRAM_API_TOKEN и записать туда значение API ключа от BotFather. Получим что то такое: TELEGRAM_API_TOKEN = 11111111111:AbEKqX2_Cb7JSADgrw-hsf-ewxczzvbOqm 6.4.2. Затем мы ДОБАВИМ новую строку TELEGRAM_ADMINS_ID. Обращаю внимание, именно ADMINS - т.к. новая версия бота позволяет добавлять несколько администраторов для бота. ID получаем у @userinfobot в телеге. Получится примерно так: TELEGRAM_ADMINS_ID = 11111111 Если нужно несколько админов, вписываем так: TELEGRAM_ADMINS_ID = 11111111, 222222222 6.4.3. Учитывая, что концепция бота предполагает использование несколько администраторов, а уведомлять нужно всех сразу, сделана реализация через отправку сообщений в КАНАЛ в телеграм. Для этого: 1. создайте новый Приватный канал в телеграм. 2. Напишите туда сообщение 3. Перешлите это сообщение вот этому боту: @userinfobot 4. В ответ получите информацию: 5. ОБЯЗАТЕЛЬНО добавьте СВОЕГО бота в этот канал. Сделайте его администратором (иначе нельзя) 6.4.4. В файле .env добавляем новую строку: TELEGRAM_LOGGER_CHANNEL_ID = -100011111100 Куда соответственно указываем номер канала (полностью, с "минусом") 6.4.5. Рядом добавляем ещё одну строку: TELEGRAM_DEFAULT_VLESS_XTLS_FLOW = "xtls-rprx-vision" 6.5. Перезапускаем marzban marzban restart Идём в бота и проверяем функционал. 7. Улучшаем пользовательский вид страницы подписки. По умолчанию, страница выглядит вот так: Но мы сделаем лучше! 7.1. Я уже модифицировал страницу, перевел на русский, убрал язык фарси и по умолчанию выставлен русский Клонируем репозиторий: cd /opt/marzban/ git clone https://github.com/DigneZzZ/sub-page.git 7.2. Наиболее интересными будут строки в файле /sub-page/subscription/index.html начиная с 221: let settings = { "darkMode": 1, "language": "ru", "support": "", // can be telegram's support username link (exp: https://t.me/gozargah_marzban) 7.3. Теперь нам нужно прописать эти страницы в файле Docker-compose.yml: nano docker-compose.yml Добавляем в конце строки: - /opt/marzban/sub-page/subscription.py:/code/app/views/subscription.py - /opt/marzban/sub-page/subscription:/code/app/templates/subscription Если телеграм бота вы не ставили, тогда нужно будет добавить ещё одну строку: - /opt/marzban/sub-page/config.py:/code/config.py 7.4. А вот файл config.py мы второй раз подвязать не сможем, хотя оттуда нам нужна 1 строка параметра, поэтому мы идем в папку с нашим ботом: cd /opt/marzban/marzban-telebot/ 7.5. И редактируем файл config.py nano config.py нам нужно НАЙТИ строку содержащую: SUBSCRIPTION_PAGE_TEMPLATE И добавить после неё такую: SUBSCRIPTION_PAGE_LANG = config("SUBSCRIPTION_PAGE_LANG", default="ru") Сохраняем. Закрываем. 7.6. Перезапускаем наш Marzban: marzban restart готово! Идём на страницу подписки, и смотрим: з.ы. кнопка Поддержка телеграм появится когда вы заполните на неё ссылку в 224 строке index.html UPD: более красивый вариант подписки здесь: dignezzz/marzban-sub (github.com) 8. Включаем поддержку warp proxy в ядре xRay Можно установить двумя способами, тот который я уже описывал на форуме (полностью ручной) и с помощью скрипта. Напишу самый простой. 8.1. Установка WARP-cli cd && bash <(curl -fsSL git.io/warp.sh) proxy Легко и просто. 8.2. Идём в нашу панель. Жмём на шестиренку: Открывается: 8.3. Советую написать log конфиг как у меня: "log": { "loglevel": "warning", "access": "./access.log", "error": "./error.log" } 8.4. Ищем Outbounds: И вставляем КОД как у меня: { "tag": "WARP", "protocol": "socks", "settings": { "servers": [ { "address": "127.0.0.1", "port": 40000 } ] } } 8.5. Опускаемся ниже и находим routing: "routing": { "rules": [ И вставляем последнюю часть кода: { "type": "field", "outboundTag": "WARP", "domain": [ "openai.com", "google.com", "spotify.com" ] }, Должно получиться так: На этом всё! Сохраняем! Пользуемся!
  22. Всем привет! Обещал рассказать про настройку на сервере, которая будет передаваться на клиент SingBOX при импорте подписки SingBox работает на ядре sing-box, а не на xray_core.. От этого все у нас выполняется немного по другому. 1. Стандартный файл json Вся информация тянется с вашего сервера, с версии 0.4.0 Мэрцбана есть поддержка SingBox и в него уже зашит необходимый файл: Marzban/app/templates/singbox/default.json at master · Gozargah/Marzban (github.com) В принципе, он позволяет работать. Его вид такой: { "log": { "level": "warn", "timestamp": true }, "dns": { "servers": [ { "tag": "dns_proxy", "address": "1.1.1.1", "address_resolver": "dns_direct", "strategy": "prefer_ipv4", "detour": "Internet" }, { "tag": "dns_direct", "address": "local", "strategy": "prefer_ipv4", "detour": "direct" }, { "tag": "dns_block", "address": "rcode://success" } ], "rules": [ { "geosite": "private", "server": "dns_direct" }, { "outbound": "any", "server": "dns_direct" } ], "fakeip": {}, "independent_cache": true }, "inbounds": [ { "type": "tun", "mtu": 1400, "inet4_address": "172.19.0.1/30", "inet6_address": "fdfe:dcba:9876::1/126", "auto_route": true, "strict_route": true, "endpoint_independent_nat": true, "stack": "mixed", "sniff": true } ], "outbounds": [ { "type": "selector", "tag": "Internet", "outbounds": null }, { "type": "urltest", "tag": "Best Latency", "outbounds": null, "url": "https://www.gstatic.com/generate_204", "interval": "1m0s" }, { "type": "direct", "tag": "direct" }, { "type": "block", "tag": "block" }, { "type": "dns", "tag": "dns-out" } ], "route": { "geoip": { "download_url": "https://github.com/soffchen/sing-geoip/releases/latest/download/geoip.db", "download_detour": "direct" }, "geosite": { "download_url": "https://github.com/soffchen/sing-geosite/releases/latest/download/geosite.db", "download_detour": "direct" }, "rules": [ { "protocol": "dns", "outbound": "dns-out" }, { "geoip": "private", "outbound": "direct" } ], "auto_detect_interface": true }, "experimental": {} } Разберем по структуре. log: Этот раздел отвечает за настройки журнала. Уровень журнала установлен на “warn”, что означает, что будут записываться только предупреждения и ошибки. Параметр “timestamp” в значении true указывает, что каждое сообщение в журнале будет снабжено временной меткой. dns: Этот раздел содержит настройки DNS. Он определяет серверы DNS и правила, которые используются для разрешения доменных имен. Включает в себя настройки для прокси DNS, прямого DNS и блокировки DNS. inbounds: Этот раздел определяет настройки для входящих подключений. В данном случае используется тип подключения “tun” с определенными настройками, такими как MTU, адреса IPv4 и IPv6, настройки маршрутизации и т.д. https://sing-box.sagernet.org/configuration/inbound/#tag Но нельзя напрямую выдать конкретные inbounds для всех клиентов, это будет не корректно и не правильно. outbounds: Этот раздел определяет настройки для исходящих подключений. Он содержит различные типы подключений, такие как “selector”, “urltest”, “direct”, “block” и “dns”. https://sing-box.sagernet.org/configuration/outbound/#structure route: Этот раздел содержит настройки маршрутизации. Он определяет правила для маршрутизации трафика на основе протокола или географического местоположения. Также содержит ссылки для загрузки баз данных geoip и geosite. НО! Файлы geosite должны быть подгружены в формате db. https://sing-box.sagernet.org/configuration/route/ experimental: Этот раздел предназначен для экспериментальных функций. В нашем примере он пуст, нам он не нужен. Почитать можно здесь: https://sing-box.sagernet.org/configuration/experimental/ Вся документация по ядру здесь: Introduction - sing-box (sagernet.org) (ИМЕННО ПО ЯДРУ!) Важно помнить! Этим файлом мы настраиваем не ядро на сервере, а клиент на устройстве! Поэтому много здесь поменять и "накрутить" не получится. Есть также альтернативный файл с Иранской конфигурацией: marzban-template/singbox/default.json at master · oXIIIo/marzban-template (github.com) 2. Соберём свою версию: Я выделю несколько разделов, которые могут быть интересны и полезны. 2.0. Авто-селектор по скорости (из иранской версии) { "type": "urltest", "tag": "️ Самый быстрый", "outbounds": null, "url": "https://www.gstatic.com/generate_204", "interval": "1m0s" }, Это означает, что он тестирует скорость соединения с указанным URL и выбирает самый быстрый outbound для обработки трафика. Поле “interval” равно “1m0s”, что, вероятно, означает, что тестирование происходит каждую минуту. Он же будет выбран по умолчанию при подключении. 2.1. fakeip - раздел DNS. В singbox, fakeip - это функция, которая позволяет использовать поддельные IP-адреса в качестве назначения для UDP. Когда fakeip включен, singbox отправляет поддельные IP-адреса как назначение для UDP. Это может быть полезно в некоторых сценариях, например, когда вы хотите обойти ограничения или блокировки, основанные на IP-адресе. Однако, стоит отметить, что использование fakeip может вызвать некоторые проблемы. Например, если сервер непосредственно запрашивает поддельный IP-адрес, это может привести к непредвиденным результатам. В некоторых случаях, для решения этой проблемы может потребоваться включение функции sniffing на сервере. Попробуем в использовании такой вариант: "fakeip": { "inet4_range": "198.18.0.1/16" }, В этом примере fakeip настроен на использование диапазона IP-адресов 198.18.0.1/16. Это означает, что singbox будет использовать IP-адреса из этого диапазона в качестве поддельных адресов назначения для UDP. Этот блок мы будем использовать в rules. 2.2. independent_cache Параметр independent_cache в singbox относится к настройкам DNS. Когда independent_cache установлен в false, это означает, что singbox будет использовать общий кэш для всех DNS-серверов. Это может быть полезно в ситуациях, когда вы хотите, чтобы все DNS-серверы делили общий кэш, чтобы избежать дублирования кэшированных записей и уменьшить использование памяти. Однако это также может привести к тому, что некоторые DNS-серверы будут получать кэшированные записи, которые были изначально предназначены для других серверов. Если independent_cache установлен в true, каждый DNS-сервер будет иметь свой собственный независимый кэш. Это может быть полезно, если вы хотите изолировать кэш каждого DNS-сервера, чтобы предотвратить перекрестное воздействие кэшированных записей. 2.3. Остальные правила в DNS блоке мы оставляем без изменений. Получаем вид первого блока: { "log": { "disabled": false, "level": "warn", "timestamp": true }, "dns": { "servers": [ { "tag": "dns_proxy_udp", "address": "udp://1.1.1.1", "address_resolver": "dns_direct", "strategy": "prefer_ipv4", "detour": "proxy" }, { "tag": "dns_proxy_tcp", "address": "tcp://1.1.1.1", "address_resolver": "dns_direct", "strategy": "prefer_ipv4", "detour": "proxy" }, { "tag": "dns_proxy", "address": "https://1.1.1.1/dns-query", "address_resolver": "dns_direct", "strategy": "prefer_ipv4", "detour": "proxy" }, { "tag": "dns_direct", "address": "local", "strategy": "prefer_ipv4", "detour": "direct" }, { "tag": "dns_block", "address": "rcode://success" } ], "rules": [ { "outbound": "any", "server": "dns_direct" } ], "fakeip": { "inet4_range": "198.18.0.1/16" }, "independent_cache": false }, Порядок и приоритет задается сверху-вниз. Поэтому правила по DNS будет тоже идти, сперва в варианте с UDP, затем с TCP. 3. Раздел inbounds оставляем шаблонный. "inbounds": [ { "type": "tun", "mtu": 9000, "interface_name": "tun125", "tag": "tun-in", "inet4_address": "172.19.0.1/30", "inet6_address": "fdfe:dcba:9876::1/126", "auto_route": true, "strict_route": true, "endpoint_independent_nat": true, "stack": "mixed", "sniff": true } ], Наш конфигурационный файл singbox содержит входящее подключение (inbound) типа “tun”. type: “tun” указывает, что это входящее подключение является туннельным интерфейсом. Туннельные интерфейсы используются для перенаправления сетевого трафика на уровне ядра операционной системы. mtu: MTU (Maximum Transmission Unit) определяет максимальный размер пакета данных, который может быть передан за один раз. Значение 9000 обычно выбирается для сетей с большим MTU, таких как сети Ethernet jumbo frame. interface_name: “tun125” - это имя виртуального сетевого интерфейса, созданного singbox. tag: “tun-in” - это метка, которую singbox использует для идентификации этого входящего подключения. Метки позволяют singbox легко ссылаться на определенные подключения при настройке маршрутов и правил. inet4_address и inet6_address: Эти параметры определяют IPv4 и IPv6 адреса виртуального сетевого интерфейса соответственно. auto_route: Значение true указывает, что singbox автоматически добавляет маршруты для перенаправления трафика через виртуальный сетевой интерфейс. strict_route: Значение true указывает, что singbox строго следует маршрутам, указанным в настройках, и не позволяет операционной системе изменять эти маршруты. endpoint_independent_nat: Значение true указывает, что singbox использует NAT (Network Address Translation), который не зависит от конечной точки. Это означает, что singbox будет использовать один и тот же порт для всех подключений к одному и тому же удаленному хосту и порту, независимо от локального порта исходного подключения. stack: Значение “mixed” указывает, что singbox может использовать как IPv4, так и IPv6 для обработки трафика. sniff: Значение true указывает, что singbox будет “сниффовать” или анализировать пакеты данных, проходящие через виртуальный сетевой интерфейс, чтобы определить, какой протокол используется (например, HTTP, TLS и т.д.). 4. Outbounds: "outbounds": [ { "type": "selector", "tag": "proxy", "interrupt_exist_connections": true, "outbounds": [] }, { "type": "urltest", "tag": "️ Самый быстрый", "outbounds": null, "url": "https://www.gstatic.com/generate_204", "interval": "1m0s" }, { "type": "direct", "tag": "direct" }, { "type": "block", "tag": "block" }, { "type": "dns", "tag": "dns-out" } ], Наш конфигурационный файл singbox содержит исходящее подключение (outbound) типа “selector”. Вот что означают каждый из этих параметров: type: “selector” указывает, что это исходящее подключение является селектором. Селекторы используются для группировки нескольких исходящих подключений и выбора одного из них на основе определенных критериев. tag: “Proxy” - это метка, которую singbox использует для идентификации этого исходящего подключения. Метки позволяют singbox легко ссылаться на определенные подключения при настройке маршрутов и правил. interrupt_exist_connections: Значение true указывает, что singbox прервет существующие соединения, если выбранный селектор изменится. Это может быть полезно, если вы хотите, чтобы ваш трафик всегда проходил через оптимальное подключение, даже если это означает прерывание текущих соединений. outbounds: Этот массив должен содержать список исходящих подключений, которые селектор будет использовать. В вашем случае этот массив пуст, что означает, что селектор не имеет исходящих подключений для выбора. 5. Route Здесь мы поговорим про правила роутинга. "route": { "geoip": { "download_url": "https://github.com/Sagernet/sing-geoip/releases/latest/download/geoip.db", "download_detour": "direct" }, "geosite": { "download_url": "https://github.com/Sagernet/sing-geosite/releases/latest/download/geosite.db", "download_detour": "direct" }, "rules": [ { "protocol": "dns", "outbound": "dns-out" }, { "geosite": "private", "outbound": "direct" }, { "geoip": "private", "outbound": "direct" }, { "geoip": ["ru"], "outbound": "direct" }, { "geosite": [ "google", "telegram", "youtube", "whatsapp", "apple", "category-gov-ru" ], "outbound": "direct" }, ], "auto_detect_interface": true, "override_android_vpn": true }, "experimental": { } } Какие правила мы сможем использовать, посмотреть можно здесь (ru зона там тоже есть): https://github.com/Chocolate4U/Iran-sing-box-rules geoip и geosite: Эти разделы определяют URL-адреса для загрузки баз данных geoip и geosite. Эти базы данных используются singbox для определения географического местоположения IP-адресов и сайтов. Параметр “download_detour” указывает, какое исходящее подключение использовать для загрузки этих баз данных. rules: Этот раздел содержит список правил маршрутизации. Каждое правило определяет, какой трафик должен быть направлен на определенное исходящее подключение. Например, трафик с протоколом “dns” будет направлен на исходящее подключение “dns-out”, а трафик с протоколом “quic” будет заблокирован. auto_detect_interface: Значение true указывает, что singbox автоматически определяет сетевой интерфейс, который должен быть использован для маршрутизации трафика. override_android_vpn: Значение true указывает, что singbox будет переопределять настройки VPN в Android. Это может быть полезно, если вы хотите, чтобы весь трафик на вашем устройстве Android проходил через singbox. 6. Итоговый вариант (собираем все вместе): { "log": { "disabled": false, "level": "warn", "timestamp": true }, "dns": { "servers": [ { "tag": "dns_proxy_udp", "address": "udp://1.1.1.1", "address_resolver": "dns_direct", "strategy": "prefer_ipv4", "detour": "proxy" }, { "tag": "dns_proxy_tcp", "address": "tcp://1.1.1.1", "address_resolver": "dns_direct", "strategy": "prefer_ipv4", "detour": "proxy" }, { "tag": "dns_proxy", "address": "https://1.1.1.1/dns-query", "address_resolver": "dns_direct", "strategy": "prefer_ipv4", "detour": "proxy" }, { "tag": "dns_direct", "address": "local", "strategy": "prefer_ipv4", "detour": "direct" }, { "tag": "dns_block", "address": "rcode://success" } ], "rules": [ { "outbound": "any", "server": "dns_direct" } ], "fakeip": { "inet4_range": "198.18.0.1/16" }, "independent_cache": false }, "inbounds": [ { "type": "tun", "mtu": 9000, "interface_name": "tun125", "tag": "tun-in", "inet4_address": "172.19.0.1/30", "inet6_address": "fdfe:dcba:9876::1/126", "auto_route": true, "strict_route": true, "endpoint_independent_nat": true, "stack": "mixed", "sniff": true } ], "outbounds": [ { "type": "selector", "tag": "proxy", "interrupt_exist_connections": true, "outbounds": [] }, { "type": "urltest", "tag": "️ Самый быстрый", "outbounds": null, "url": "https://www.gstatic.com/generate_204", "interval": "1m0s" }, { "type": "direct", "tag": "direct" }, { "type": "block", "tag": "block" }, { "type": "dns", "tag": "dns-out" } ], "route": { "geoip": { "download_url": "https://github.com/Sagernet/sing-geoip/releases/latest/download/geoip.db", "download_detour": "direct" }, "geosite": { "download_url": "https://github.com/Sagernet/sing-geosite/releases/latest/download/geosite.db", "download_detour": "direct" }, "rules": [ { "protocol": "dns", "outbound": "dns-out" }, { "geosite": "private", "outbound": "direct" }, { "geoip": "private", "outbound": "direct" }, { "geoip": ["ru"], "outbound": "direct" }, { "geosite": [ "google", "telegram", "youtube", "whatsapp", "apple", "category-gov-ru" ], "outbound": "direct" }, ], "auto_detect_interface": true, "override_android_vpn": true }, "experimental": { } } Правила роутинга для будущей версии singbox 1.8.0 - будут другими!!! Имейте ввиду! Инфа тут: https://sing-box.sagernet.org/migration/#migrate-geoip-to-rule-sets 7. Скачиваем и устанавливаем 7.1. Качаем файл sudo wget -N -P /var/lib/marzban/templates/singbox/ https://dignezzz.github.io/ru_singbox.json 7.2. Корректируем .env Открываем .env nano /opt/marzban/.env Ищем строку: CUSTOM_TEMPLATES_DIRECTORY="/var/lib/marzban/templates/" И убеждаемся что она раскомментирована (в начале нет #) После неё добавляем ещё одну строку: SINGBOX_SUBSCRIPTION_TEMPLATE="singbox/ru_singbox.json" Сохраняем, закрываем. 7.3. Перезагружаем Marzban: marzban restart -n Готово! Обновлено 14:50 11.12.2023
  23. В продолжении развивающих тем, перейдем к варианту, когда у вас количество текущих или потенциальных пользователей перевалило за 200 человек.. Пожалуй только в этом варианте есть смысл переходить на MySQL. Этот вариант мы и разберем. Требование: Для стабильной работы базы данных, требуются дополнительные ресурсы. Минимально рекомендуемые параметры в этом случае (с учетом количества пользователей): 2+ ядра, 4+ гига, 30Гб+ места (на всякий случай) + SWAP. Офф инструкция: Настройка MySQL | Марзбан (gozargah.github.io) 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 restart: always env_file: .env 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 environment: MYSQL_DATABASE: marzban 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: mysql:latest restart: always env_file: .env command: --bind-address=127.0.0.1 --mysqlx-bind-address=127.0.0.1 environment: MYSQL_DATABASE: marzban 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.3. Если вы не хотите устанавливать phpMyAdmin, то не вставляйте вторую часть кода. Учтите, что очень важно соблюдать отступы, это формирует вложенность параметров при формировании контейнера!!! 2. Редактирование файлa .env 2.1. Давайте сначала добавим новые переменные, каждая на отдельную строку: SQLALCHEMY_DATABASE_URL="mysql+pymysql://root:[email protected]/marzban" MYSQL_ROOT_PASSWORD=DB_PASS Здесь значение DB_PASS нужно заменить на свой пароль. Окончание строки переменной 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 root -p -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)
  24. Всем привет! Разберем, как настроить подключение узлов (Node) к main серверу при использовании DEV ветки 1. Что изменилось с прошлой версии? Изменился принцип сертификации подключений, теперь это mTLS. 2. Изменения в интерфейсе Marzban DEV Если вы обновились до DEV ветки, то наверно уже заметили изменения в разделе добавления узлов: Здесь нам необходимо будет получить сертификат. Его можно скачать или скопировать через значок "глаза" . Мы будем именно копировать, потому что узел будем настраивать сразу для использования на нескольких Мэйн-серверов. 3. Настраиваем Узел Marzban Первым делом идём на сервер, который будет являться нашим узлом. 3.1. Обновляемся. Я всегда рекомендую обновляем сервер, хотя бы 1 раз в месяц. А перед установкой нового особенно. sudo apt-get update -y && sudo apt-get upgrade -y 3.2. Устанавливаем необходимые пакеты в систему apt install curl socat git -y 3.3. Устанавливаем Docker curl -fsSL https://get.docker.com | sh 3.3. Клонируем репозиторий: git clone https://github.com/Gozargah/Marzban-node 3.4. Создаем папку для сертификатов mkdir -p /var/lib/marzban-node/ 3.5. Создаем заготовки для двух мэйн-серверов: touch /var/lib/marzban-node/server1.pem && touch /var/lib/marzban-node/server2.pem 3.6. В этом примере мы разберем, как подготовить ноду для использования сразу на двух мэйн-серверах, поэтому заменим содержимое файла docker-compose.yml. Переходим в папку Marzban-node cd Marzban-node 3.7. Заменяем содержимое файла docker-compose на заранее подготовленный мной шаблон: curl -fsSL https://raw.githubusercontent.com/DigneZzZ/Marzban-m-node-sh/main/docker-compose.yml -o docker-compose.yml В перспективе будут созданы 2 контейнера: marzban-node-node-1-1. Порты для подключения: 5001 и API: 6001 marzban-node-node-2-1. Порты для подключения: 5002 и API: 6002 Если вам нужно будет подключать больше мэйн серверов, то просто создайте копии строк поменяв порты и пути до сертификатов. 3.8. Копируем сертификат с Мейн сервера 1: 3.9. Наполняем содержимое файлов server1.pem и server2.pem по примеру: nano /var/lib/marzban-node/server1.pem 3.10. Поднимаем контейнер командой: docker compose up -d 3.11. Возвращаемся в Мейн панель, и вводим необходимые данные: Адрес и имя собственно вводишь своё. Аналогично делаешь потом для второго мэйн-сервера, указав порты для другого контейнера. 3.12. Теперь можно прогнать скрипт для настройки UFW Firewall на вашей ноде: bash <(wget -qO- https://raw.githubusercontent.com/DigneZzZ/Marzban-m-node-sh/main/ufw-node.sh) готово! Если где-то будут ошибки, пишите мне! PS: Для особо любопытных можете попробовать установить вместо пунктов 3.1-3.8 мой скрипт: bash <(wget -qO- https://raw.githubusercontent.com/DigneZzZ/Marzban-m-node-sh/main/multi-node.sh) Можно также поменять ядро:
  25. По просьбам трудящихся, если кто не хочет заморачиваться с Docker и ждать рабочего варианта.. Выкладываю классическую версию. AdGuard Home — это DNS сервер, блокирующий рекламу и трекинг на сетевом уровне. Его функция в том, чтобы дать вам полный контроль над сетью и всеми вашими устройствами, и при этом он не требует установки никаких клиентских приложений. В то же время, AdGuard Home предоставляет веб-интерфейс, с помощью которого можно легко управлять процессом фильтрации. 1. Качаем: wget https://static.adguard.com/adguardhome/release/AdGuardHome_linux_amd64.tar.gz 2. Распаковываем: tar -xzf AdGuardHome_linux_amd64.tar.gz 3. Устанавливаем права: chmod +x - R AdGuardHome 4. Устанавливаем: cd AdGuardHome&& sudo ./AdGuardHome -s install 5. Заходим: http://X.X.X.X:3000 - ваш АйПи или через подключенный VPN: http://127.0.0.1:3000 6. В процессе установки, нужно будет выбрать интерфейсы. Выбирайте только 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 Настройка ядра Теперь идём сразу в конфигурацию нашего xray ядра: nano /var/lib/marzban/xray_config.json Прописываем в самое начало после открытой скобки { "dns": { "servers": [ "127.0.0.1" ] }, Должно получиться так: ИЛИ Аналогично можно сделать и через web-интерфейс: После всего этого делаем перезапуск сервера: marzban restart -n
×
×
  • Создать...

Важная информация

Вы принимаете наши Условия использования, Политика конфиденциальности, Правила. А также использование Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.

Яндекс.Метрика