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

Лидеры

  1. ProBot

    ProBot

    Авторы


    • Баллы

      4

    • Постов

      58


  2. Deniom

    Deniom

    Эксперты


    • Баллы

      4

    • Постов

      18


  3. Bkeenke

    Bkeenke

    Клубный админ


    • Баллы

      3

    • Постов

      34


  4. MPA3b

    MPA3b

    Студенты


    • Баллы

      3

    • Постов

      10


Популярный контент

Показан контент с высокой репутацией за 20.08.2024 во всех областях

  1. Всем привет! Немного задержавшись с продолжением по личным объективным причинам, продолжаю рассказы. Для чистоты пояснений и инструкций я сделаю все эти действия с нуля и подключу одну ноду. Все данные в статье буду приводить как есть, так как все сервера и домены тестовые, можете ломиться сколько угодно они уже будут удалены. Повторяться сильно не буду, поэтому базовую настройку мы просто повторим. Относительно прошлой статьи мы сразу поменяем место для установки нашей панели. Оно будет по пути: /opt/remnawave 1. Аренда сервера Для начала, как обычно, нам нужно выбрать сервер. 1.1. Рекомендации по аренде Из последнего, что могу посоветовать к аренде: Как бы ни ругались, но проверенный за много лет: 4VPS: https://4vps.su/r/p52GUJhPv8b5 Самый стабильный для мейн-сервера в РФ Selectel: https://selectel.ru/?ref_code=8d43638548 Если нужны стабильные ноды, конечно Kamatera: https://go.cloudwm.com/visit/?bta=36601&nci=5749 2. Подготовка сервера 2.1. Установка Docker Первым делом на новом сервере ставим Docker: curl -fsSL https://get.docker.com | sh 2.2. Создание папки для проекта Remnawave mkdir -p /opt/remnawave/ 2.3. Переход в папку cd /opt/remnawave/ 2.4. Настройка домена в Cloudflare Идем в панель Cloudflare. Добавляем домен и привязываем к своему серверу (надеюсь, вы знаете, как это делать): remna.openode.xyz 2.5. Настройка страницы подписки Аналогично делаем для страницы подписки. У меня это будет: link.openode.xyz Отлично. 2.6. Установка Caddy Caddy мы будем ставить по инструкции с двухфакторной аутентификацией: https://remna.st/security/caddy-with-minimal-setup Создаем папку для Caddy. Caddy у нас будет работать в Docker, так проще для старта. Но вы можете делать на свое усмотрение. mkdir -p /opt/remnawave/caddy && cd /opt/remnawave/caddy 2.7. Создание файла Caddyfile Создаем файл Caddyfile: nano /opt/remnawave/caddy/Caddyfile Прописываем в него: { order authenticate before respond order authorize before respond security { local identity store localdb { realm local path /data/.local/caddy/users.json } authentication portal remnawaveportal { crypto default token lifetime {$AUTH_TOKEN_LIFETIME} enable identity store localdb cookie domain {$REMNAWAVE_PANEL_DOMAIN} ui { links { "Remnawave" "/dashboard/home" icon "las la-tachometer-alt" "My Identity" "/r/whoami" icon "las la-user" "API Keys" "/r/settings/apikeys" icon "las la-key" "MFA" "/r/settings/mfa" icon "lab la-keycdn" } } transform user { match origin local action add role authp/admin require mfa } } authorization policy panelpolicy { set auth url /r allow roles authp/admin with api key auth portal remnawaveportal realm local acl rule { comment "Accept" match role authp/admin allow stop log info } acl rule { comment "Deny" match any deny log warn } } } } https://{$REMNAWAVE_PANEL_DOMAIN} { route /api/* { reverse_proxy http://remnawave:3000 } handle /r { rewrite * /auth request_header +X-Forwarded-Prefix /r authenticate with remnawaveportal } route /r* { authenticate with remnawaveportal } route /* { authorize with panelpolicy reverse_proxy http://remnawave:3000 } } link.openode.xyz { reverse_proxy http://remnawave-subscription-page:3010 } Все данные у нас будут браться из environment, которые мы будем передавать в контейнер. ЕСЛИ ВЫ НЕ ХОТИТЕ ИСПОЛЬЗОВАТЬ ДВУХФАКТОРНУЮ АУТЕНТИФИКАЦИЮ ДЛЯ ВХОДА В ПАНЕЛЬ, ТО УДАЛИТЕ СТРОКУ ИЗ КОДА ВЫШЕ: require mfa 2.8. Создание файла контейнера для Caddy Создаем файл контейнера для Caddy: nano docker-compose.yml Вставляем содержимое: services: remnawave-caddy: image: remnawave/caddy-with-auth:latest container_name: 'remnawave-caddy' hostname: remnawave-caddy restart: always environment: - AUTH_TOKEN_LIFETIME=3600 - REMNAWAVE_PANEL_DOMAIN=remna.openode.xyz - AUTHP_ADMIN_USER=admin - AUTHP_ADMIN_EMAIL=admin@openode.xyz - AUTHP_ADMIN_SECRET=super-puper-openode ports: - '0.0.0.0:443:443' - '0.0.0.0:80:80' networks: - remnawave-network volumes: - ./Caddyfile:/etc/caddy/Caddyfile - remnawave-caddy-ssl-data:/data networks: remnawave-network: name: remnawave-network driver: bridge external: true volumes: remnawave-caddy-ssl-data: driver: local external: false name: remnawave-caddy-ssl-data Контейнер создали, но запускать пока не будем. Сеть мы заранее указали ту, которую создадим далее. 3. Установка панели 3.1. Создание файла docker-compose.yml Переходим в папку Remnawave и создаем файл docker-compose.yml: cd /opt/remnawave/ && nano docker-compose.yml Устанавливать будем latest-ветку, так как там сейчас все самые полезные функции. В скором времени будет релиз 1.5.0 в latest, поэтому можно будет смело его брать за базу. services: remnawave-db: image: postgres:17 container_name: 'remnawave-db' hostname: remnawave-db restart: always env_file: - .env environment: - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_DB=${POSTGRES_DB} - TZ=UTC ports: - '127.0.0.1:6767:5432' volumes: - remnawave-db-data:/var/lib/postgresql/data networks: - remnawave-network healthcheck: test: ['CMD-SHELL', 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}'] interval: 3s timeout: 10s retries: 3 remnawave: image: remnawave/backend:latest container_name: 'remnawave' hostname: remnawave restart: always ports: - '127.0.0.1:3000:3000' env_file: - .env networks: - remnawave-network depends_on: remnawave-db: condition: service_healthy remnawave-redis: image: valkey/valkey:8.0.2-alpine container_name: remnawave-redis hostname: remnawave-redis restart: always networks: - remnawave-network volumes: - remnawave-redis-data:/data remnawave-subscription-page: image: remnawave/subscription-page:latest container_name: remnawave-subscription-page hostname: remnawave-subscription-page restart: always environment: - REMNAWAVE_PANEL_URL=http://remnawave:3000 # Здесь мы указали контейнер и порт контейнера. Но если у вас страница будет стоять отдельно, вы должны указать здесь домен для панели - APP_PORT=3010 - META_TITLE="Subscription Page Title" - META_DESCRIPTION="Subscription Page Description" ports: - '127.0.0.1:3010:3010' networks: - remnawave-network networks: remnawave-network: name: remnawave-network driver: bridge external: false volumes: remnawave-db-data: driver: local external: false name: remnawave-db-data remnawave-redis-data: driver: local external: false name: remnawave-redis-data Для страницы подписки замените в - REMNAWAVE_PLAIN_DOMAIN=remna.openode.xyz на ВАШ домен панели Можно также добавить для страницы подписки параметр ниже: - CUSTOM_SUB_PREFIX=sub тогда получится такой вариант: remnawave-subscription-page: image: remnawave/subscription-page:latest container_name: remnawave-subscription-page hostname: remnawave-subscription-page restart: always environment: - REMNAWAVE_PANEL_URL=http://remnawave:3000 - SUBSCRIPTION_PAGE_PORT=3010 - META_TITLE="Subscription Page Title" - META_DESCRIPTION="Subscription Page Description" - CUSTOM_SUB_PREFIX=sub ports: - '127.0.0.1:3010:3010' networks: - remnawave-network После этих изменений, у вас к адресу подписки добавится дополнительный параметр в url: link.openode.xyz/sub/<uuid> Тогда и для .env (который мы будем формировать дальше) нужно будет указывать правильный параметр для sub_public_domain SUB_PUBLIC_DOMAIN=link.openode.xyz/sub Сохранили и закрыли. 3.2. Создание файла .env Создаем здесь же файл .env: nano .env И вставляем в него содержимое из файла по ссылке: https://github.com/remnawave/backend/blob/main/.env.sample Я приведу сразу готовый свой файл: cd ~/remnawave/ && nano docker-compose.yml ### APP ### APP_PORT=3000 METRICS_PORT=3001 ### API ### # Possible values: max (start instances on all cores), number (start instances on number of cores), -1 (start instances on all cores - 1) # !!! Do not set this value more that physical cores count in your machine !!! API_INSTANCES=max ### DATABASE ### # FORMAT: postgresql://{user}:{password}@{host}:{port}/{database} DATABASE_URL="postgresql://postgres:postgres@remnawave-db:5432/postgres" ### REDIS ### REDIS_HOST=remnawave-redis REDIS_PORT=6379 ### JWT ### ### CHANGE DEFAULT VALUES ### JWT_AUTH_SECRET=6ac5b3ba99b94d9e0f6b9c242691c14e3bd54492b60aff7829e6b050535d8827278c098b42d6833a314af104f2c9da8046c33a14f45c00c43117dda0ba4ea25866a3562babea7ac59c523fea04cab6c24c4f191846b73ac7420fb265b0f910ad09018f662e8daf7e6bf8173546d89687fdb839fd14f34e754b20ae1e1d556ee3 JWT_API_TOKENS_SECRET=b3e86a783d3ca63941fe48eb2fdf8901fa294b777376c77b852c98cab8e136d12f4a0b0c898a60cdda6c1a76af6f7a9acdd292a4040bc0a4a7c34091ddb25158aa785c90391e094672da646712d2ae1e6f7e2bada14a2deb9099c291bc464115fb0ae71d042baacc8f7890ea55d8eb6a42d474604429978880e851632ce187a6 ### TELEGRAM ### IS_TELEGRAM_NOTIFICATIONS_ENABLED=false #TELEGRAM_NOTIFY_USERS_CHAT_ID=change_me #TELEGRAM_NOTIFY_NODES_CHAT_ID=change_me #TELEGRAM_NOTIFY_USERS_THREAD_ID=change_me #TELEGRAM_NOTIFY_NODES_THREAD_ID=change_me TELEGRAM_OAUTH_ENABLED=false ### or TRUE (required IS_TELEGRAM_NOTIFICATIONS_ENABLED=true) TELEGRAM_OAUTH_ADMIN_IDS=change_me ### FRONT_END ### FRONT_END_DOMAIN=remna.openode.xyz ### SUBSCRIPTION PUBLIC DOMAIN ### ### RAW DOMAIN, WITHOUT HTTP/HTTPS, DO NOT PLACE / to end of domain ### ### Used in "profile-web-page-url" response header ### SUB_PUBLIC_DOMAIN=link.openode.xyz ### SWAGGER ### SWAGGER_PATH=/docs SCALAR_PATH=/scalar IS_DOCS_ENABLED=false ### PROMETHEUS ### ### Metrics are available at /api/metrics METRICS_USER=admin METRICS_PASS=admin ### WEBHOOK ### WEBHOOK_ENABLED=false ### Only https:// is allowed WEBHOOK_URL=https://webhook.site/1234567890 ### This secret is used to sign the webhook payload, must be exact 64 characters. Only a-z, 0-9, A-Z are allowed. WEBHOOK_SECRET_HEADER=vsmu67Kmg6R8FjIOF1WUY8LWBHie4scdEqrfsKmyf4IAf8dY3nFS0wwYHkhh6ZvQ ### CLOUDFLARE ### # USED ONLY FOR docker-compose-prod-with-cf.yml # NOT USED BY THE APP ITSELF # CLOUDFLARE_TOKEN=ey... ### Database ### ### For Postgres Docker container ### # NOT USED BY THE APP ITSELF POSTGRES_USER=postgres POSTGRES_PASSWORD=postgres POSTGRES_DB=postgres Для того что бы включить oAuth Telegram авторизацию - вы должны внести в вашего бота через @botfather параметр домена панели. Обязательно заменяйте все JWT-секреты на свои. Значения генерируем здесь: https://jwtsecret.com/generate 4. Запуск панели 4.1. Запуск контейнера Remnawave Поднимаем наш контейнер Remnawave: cd /opt/remnawave && docker compose up -d 4.2. Запуск контейнера Caddy Поднимаем наш контейнер Caddy: cd caddy && docker compose up -d 5. Настройка панели 5.1. Авторизация Зайдя на домен: remna.openode.xyz Видим следующее: Проходим авторизацию, в моем случае это было: admin@openode.xyz super-puper-openode 5.2. Создание токена MFA Теперь идет запрос, что нам нужно создать токен для многофакторной аутентификации. Если вы все сделали корректно, увидите окно регистрации в Remnawave: Я задал свои параметры и сохранил пароль в надежном месте. Панель готова! Создадим первого пользователя и проверим, что страница подписки работает корректно. 6. Обновление конфигурации 6.1. Обновление конфига Заходим на дашборде на страницу «Конфиг» и заменяем все содержимое на: { "log": { "loglevel": "warning" }, "inbounds": [ { "tag": "Vless TCP reality", "port": 443, "listen": "0.0.0.0", "protocol": "vless", "settings": { "clients": [], "decryption": "none" }, "sniffing": { "enabled": true, "destOverride": [ "http", "tls" ] }, "streamSettings": { "network": "tcp", "security": "reality", "tcpSettings": {}, "realitySettings": { "dest": "ftp.debian.org:443", "show": false, "xver": 0, "shortIds": [ "" ], "publicKey": "22mH2kO_6Q43slZjf-njD9TMv9xeYMA1P28PzEtqOWo", "privateKey": "Jy4FdQWKBOtLc2rvJqRxP-WMELzNhRxmUgequcAcLhQ", "serverNames": [ "ftp.debian.org" ] } } }, { "tag": "SS", "port": 8580, "listen": "0.0.0.0", "protocol": "shadowsocks", "settings": { "clients": [], "network": "tcp,udp" } } ], "outbounds": [ { "tag": "DIRECT", "protocol": "freedom", "settings": { "domainStrategy": "ForceIPv4" } }, { "tag": "BLOCK", "protocol": "blackhole" }, { "tag": "IPv4", "protocol": "freedom", "settings": { "domainStrategy": "ForceIPv4" } } ], "routing": { "rules": [ { "type": "field", "domain": [ "full:cloudflare.com", "domain:msftconnecttest.com", "domain:msftncsi.com", "domain:connectivitycheck.gstatic.com", "domain:captive.apple.com", "full:detectportal.firefox.com", "domain:networkcheck.kde.org", "full:*.gstatic.com", "domain:gstatic.com" ], "outboundTag": "DIRECT" }, { "type": "field", "protocol": [ "bittorrent" ], "outboundTag": "BLOCK" }, { "ip": [ "geoip:private" ], "type": "field", "outboundTag": "BLOCK" } ], "domainStrategy": "IPIfNonMatch" } } 6.2. Генерация ключей После этого обязательно генерируем пару ключей: Копируем эту пару ключей и заменяем содержимое в конфигурации VLESS (чтобы ваши ключи были уникальными). 7. Работа с инбаундами 7.1. Просмотр инбаундов Идем на вкладку «Инбаунды» и видим: Все инбаунды у нас автоматически подтянулись. Можно посмотреть самые важные характеристики, а также есть кнопка для массового управления ими. 8. Подключение ноды НОДА - это отдельный сервер xray, который будет на себя принимать подключения. Нода может быть установлена на одном сервере с панелью. Но это не рекомендуется по разным объективным причинам - безопасность, стабильность, скорость. Исключения составляет "соло" использование панели, например чисто для себя одного, и в таком варианте, использовать два сервера, один из которых чисто под панель, а второй под ноду - затратно. Нода это обычно зарубежный сервер. Ноды мы добавляем чтобы потом к ним подключаться. Системный требования для ноды ниже чем для панели. Обычно хватает 1 ядро, 2гб памяти и 10гб места. Если у вас нодой будут пользоваться достаточно большое количество человек, то имейте ввиду, что будут расти требования к процессору. Вот простая схема требований к ноде. до 70-100 человек (в зависимости от сетевой нагрузки) - 1 ядро 1гб до 300 человек - 2 ядра - 2 гб 10гб\с порт. до 600-800 человек - 4 ядра 8гб, и минимум 10гб\с порт. больше 1000 человек - лучше балансировку ноды, хотя бы по DNS. 8.1. Создание новой ноды Переходим в «Ноды» 2 и жмем «Создать новую ноду».. Появится такое окно Его не закрываем. Сейчас оно нам нужно для копирования ключа, а дальше мы заполним параметры сервера для подключения. 8.2. Подключение к серверу ноды Подключаемся к серверу нашей ноды (я использую Termius). 8.3. Установка скрипта ноды sudo bash -c "$(curl -sL https://github.com/DigneZzZ/remnawave-scripts/raw/main/remnanode.sh)" @ install 8.4. Ввод данных сертификата Будет предложено ввести данные сертификата из панели: Копируем из нашей панели: И вставляем как есть в нашу консоль. Дважды жмем Enter после вставки (чтобы появилась пустая строка, тогда он перейдет на следующий этап). Указываем порт (по умолчанию он 3000, можно нажать Enter). Далее задаст вопрос, хотите ли вы установить последнее ядро Xray-core (если нажать Enter, он это пропустит), но установить можно будет потом отдельно. И все. Готово. Контейнер запустится и будет ждать подключений: 8.5. Настройка параметров сервера Возвращаемся в нашу панель. Задаем параметры нашего сервера: ЗАПОМНИТЕ РАЗ И НА ВСЕГДА! ПОДКЛЮЧАЕМ НОДУ ТОЛЬКО IP-АДРЕСУ! НЕ ПО ДОМЕНУ! ДОМЕН МОЖНО УКАЗАТЬ ТОЛЬКО В НАСТРОЙКАХ ХОСТА!!! Жмем «Сохранить». Увидим сначала попытку подключения: Затем статус, что подключен: 9. Создание хостов 9.1. Создание хоста Последняя, заключительная часть создания подключения — это создание хостов. В Marzban они создавались автоматически. Здесь они создаются вручную. Идем во вкладку «Хосты». Жмем «Создать хост». Заполняем данные: Примечание — это то, как вы назовете сами свой хост и как он будет отображаться у пользователя. Например, Sweden. И к имени можно будет добавить переменные: Мы добавим только Days_left. В адресе ноды указываем либо IP-адрес сервера, либо поддомен, привязанный к этому серверу. Я укажу поддомен (это удобнее: в случае смены сервера достаточно будет поменять DNS-запись для этого адреса на новый сервер-ноду, и для пользователя смена пройдет незаметно). Выбираем наш инбаунд. А порт у нас подтянется самостоятельно из конфигурации. И ОБЯЗАТЕЛЬНО ДЕРНИТЕ СЕРЫЙ ФЛАЖОК , ПЕРЕВЕДЯ ЕГО В СОСТОЯНИЕ ВКЛЮЧЕННОГО Не знаю, как сейчас, но на некоторых клиентах была проблема, что Fingerprint не проставлялся автоматически. Поэтому давайте зададим его по умолчанию: Выбираем Chrome. Жмем «Сохранить». Готово! 9.2. Привязка инбаундов для пользователей Для уже созданных пользователей инбаунды нужно прописать принудительно, для всех новых создаваемых пользователей вы и так будете выбирать. Поэтому вернемся на вкладку «Инбаунды». И научимся работать с массовыми действиями. Включим Vless-инбаунд для ВСЕХ (но у нас это для нашего единственного пользователя): И получим такой результат: Готово! Чтобы сбросить пароль администратора (для входа в панель) или сертификаты, есть специальная консольная CLI-команда (выполнять на сервере с мейном): docker exec -it remnawave remnawave И получим такие варианты:
    5 баллов
  2. Всем привет! Предлагаю: Скинуться на заказную разработку дизайна страницы подписки для тех кто скинулся Совместное формирование ТЗ. Предложения по дизайнеру и верстальщику можно тоже сюда выложить. Задача: Уникальная страница для участников сообщества Легкий красивый дизайн Простое управление 3-4 вида цвета и заголовка. Будем мутить? Вместе будет явно дешевле. Прайс пока неизвестный, будем формировать исходя из ТЗ и количества участников.
    4 балла
  3. Новый MOTD-дэшборд от NeoNode Теперь это не просто приветствие при входе, а полноценный системный дашборд — всё самое важное о сервере прямо в терминале. Установка Обычный режим (для root bash <(wget -qO- https://dignezzz.github.io/server/dashboard.sh) --force Режим для обычного пользователя (без root) (не рекомендуется): bash <(wget -qO- https://dignezzz.github.io/server/dashboard.sh) --force --not-root Настройка отображаемых блоков: motd-config Что умеет дашборд Аптайм, загрузка CPU, RAM, диск, ядро IP-адреса: локальный, публичный и IPv6 Поддержка Docker — видны остановленные и «упавшие» контейнеры Проверка безопасности: SSH-порт, root-доступ, вход по паролю Статус UFW, Fail2Ban, CrowdSec Сетевой трафик (vnstat) Состояние обновлений APT и автообновлений Проверка актуальности версии дашборда (обновление по ссылке) 🛠 Гибкая настройка Каждый блок можно включить или отключить Конфиг сохраняется в /etc/motdrc или ~/.motdrc Управление через интерактивную утилиту motd-config Поддержка обычных пользователей (работает даже в LXC, Proxmox, WebSSH) (но очень урезанная и должен быть установлен нужный софт) Пример: хочешь скрыть Docker, автообновления и IP — отключи через motd-config, и они исчезнут из дашборда. Преимущества Работает «из коробки» — без лишних зависимостей Не требует crontab или внешних API Отображает только нужную тебе информацию Статусы с эмодзи ( ) — читается моментально Поддержка монохромных терминалов — не сломается в Proxmox или LXC Обновление от 24.04.2025: Удалены tput-цвета — теперь нет багов в «серых» терминалах Подсвечены критичные риски: root-доступ, UFW, fail2ban Выводит ядро и SSH-настройки Автообновление версии через GitHub Pages Есть предложения, баги или хочешь добавить свой блок — читай в Telegram канале или комментируй в теме!
    3 балла
  4. Вы пытаетесь максимально замаскировать свой VPN или proxy? Тогда вам наверняка необходимо убрать определение туннеля (двусторонний пинг). Перейдём к ознакомлению: В гайде повествуется об отключении определения туннеля на OC Linux и Windows. Запускаем ssh, переходим на сервер и логинимся под root пользователем Переходим к редактированию настроек ufw c помощью nano: nano /etc/ufw/before.rules Добавляем новую строку и сохраняем результат: # ok icmp codes -A ufw-before-input -p icmp --icmp-type destination-unreachable -j DROP -A ufw-before-input -p icmp --icmp-type source-quench -j DROP -A ufw-before-input -p icmp --icmp-type time-exceeded -j DROP -A ufw-before-input -p icmp --icmp-type parameter-problem -j DROP -A ufw-before-input -p icmp --icmp-type echo-request -j DROP 4. Перезапускаем фаервол ufw ufw disable && ufw enable 5. Сервер больше не должен отправлять ICMP трафик, а значит вам удалось скрыть двусторонний пинг!
    2 балла
  5. Всем привет! Когда был Marzban, я рассказывал как отправить YouTube трафик через РФ сервер, но с использованием отдельной панели 3x-ui. Вот эта тема: https://openode.xyz/topic/1213-otpravlyaem-youtube-cherez-rossiyskiy-server-s-pomoschyu-3x-ui/ Сейчас мы сделаем немного по другому, и удобнее, как мне кажется. 1. Выбор РФ сервера. Тема достаточно спорная, и в действительности найти достойный РФ сервер достаточно проблемно. Возможные варианты: cloud.vk.com (от 1000 рублей) cloud.ru (можно зайти на Free Tier, получить 4000 бонусных рублей на 2 месяца, а потом продолжить пользоваться бесплатным сервером оплачивая только ipv4 за 170р в месяц) selectel.ru - От 900 рублей, но там есть лимит трафика - 3тб в месяц НА АККАУНТ. Предлагаю остановиться на cloud.ru. 2. Настройка Фаервола сервера на Cloud.ru После оформления сервера у вас будет доступен только 22 порт. Фаервол на клауд.ру достаточно сложный, поэтому бегло покажу как разрешить всё. А рулить потом можете самостоятельно через UFW, например. 2.1. На главной странице находим Группы безопасности 2.2. Выбираем создание новой (зеленая кнопка справа) 2.3. Заполняем на скриншотах ниже Правило входящего трафика: Правило исходящего трафика: Разбиваем на TCP и UDP В итоге получилось чтобы так: И жмем - Создать. 2.3. Теперь идем в нашу Виртуальную машину. Заходим в "Сетевые параметры" Жмем Изменить группы безопасности И оставляем ТОЛЬКО ту которую мы создали ранее Галочку с SSH-access_ru убираем!!! Готово! 3. Создаем ноду для Remnawave. Читаем внимательно пункт 8 из прошлого поста: 4. Создаем новый Inbound на базе ShadowSocks, который мы будем использовать для подключения к ноде. { "tag": "shadowsocks-inbound", "port": 8581, "listen": "0.0.0.0", "protocol": "shadowsocks", "settings": { "clients": [], "network": "tcp,udp" }, "sniffing": { "enabled": true, "destOverride": [ "http", "tls", "quic" ] } } Я его вставил в конец, перед Outbound-ом. 5. Перейдем в Inbounds и проверим что у нас он создался: 6. Идем в HOSTS и создаем новый: Указав в Address - айпи нашего РФ сервера: 7. Создаем нового пользователя, и включаем ему единственный инбаунд: (не забудьте указать безлимит по трафику и по сроку действия!) 8. заходим в пользователя и жмем на кнопку где стрелка: Копируем ссылку: 9. Теперь нужно конвертировать в тег подключения. Идем на мой конвертер: https://decode.neonode.cc Вставляем ссылку, и жмем расшифровать. Копируем полученный результат. 10. Возвращаемся в конфигурацию XRAY в панеле 11. Добавляем новый OUTBOUND, в соответствии с тем что скопировали на шаге 9. Запоминаем имя тэга: ss-ru но вы можете переименовать как хотите! Главное не путайтесь! 12. Создаем новое правило в routing Я приведу сразу весь блок с роутингом "routing": { "rules": [ { "type": "field", "domain": [ "full:cloudflare.com", "domain:msftconnecttest.com", "domain:msftncsi.com", "domain:connectivitycheck.gstatic.com", "domain:captive.apple.com", "full:detectportal.firefox.com", "domain:networkcheck.kde.org", "full:*.gstatic.com", "domain:gstatic.com" ], "outboundTag": "DIRECT" }, { "type": "field", "domain": [ "geosite:youtube", "ggpht.cn", "ggpht.com", "full:googlevideo.com", "gvt1.com", "youtube.ru", "youtube-nocookie.com", "gvt2.com", "video.google.com", "wide-youtube.l.google.com", "withyoutube.com", "youtu.be", "youtube.com", "youtubeeducation.com", "youtubeembeddedplayer.googleapis.com", "youtubefanfest.com", "youtubegaming.com", "youtubego.co.id", "youtubego.co.in", "youtubego.com", "youtubego.com.br", "youtubego.id", "youtubego.in", "youtubei.googleapis.com", "youtubekids.com", "youtubemobilesupport.com", "yt.be", "ytimg.com", "2ip.io" ], "inboundTag": [ "VTR-GER", "VTR-USA", "VTR-LT", "VTR-Turk", "VTR-NL", "VTR-GB", "VTR-SWED" ], "outboundTag": "ss-ru" }, { "type": "field", "protocol": [ "bittorrent" ], "outboundTag": "BLOCK" }, { "ip": [ "geoip:private" ], "type": "field", "outboundTag": "BLOCK" } ], "domainStrategy": "IPIfNonMatch" } Обратите внимание на блок InboundTag! У меня этот блок inboundTag содержит в себе ВСЕ ТЕГИ моих ИНБАУНДОВ КРОМЕ ТЕГА shadowsocks-inbound!!!! ЭТО ОЧЕНЬ ВАЖНО! ЕСЛИ ВЫ УКАЖЕТЕ ТЕГ shadowsocks-inbound - ТО У ВАС ТРАФИК БУДЕТ ГОНЯТЬСЯ ПО КРУГУ И НИЧЕГО НЕ ОТКРОЕТСЯ!!!! "inboundTag": [ "VTR-GER", "VTR-USA", "VTR-LT", "VTR-Turk", "VTR-NL", "VTR-GB", "VTR-SWED" ТЕГА shadowsocks-inbound В ЭТОМ СПИСКЕ НЕ ДОЛЖНО БЫТЬ!!!! Вот в принципе и всё. Пользуйтесь! PS: 2ip.io я добавил в перечень доменов - исключительно для проверки, что все правила у нас работают! Благодаря этому, мы легко сможем: Мониторить состояние ноды Мониторить потребление трафика Подключить ещё Ру-сервера для балансировки нагрузки, если у вас она высокая
    2 балла
  6. Всем привет! Начну с картинок самой панели. Как вы могли заметить, данная панель очень похожа на всеми привычный Marzban, но с сильно переделанным дизайном Правда в ней есть и достаточно большое количество изменений. Я не являюсь официальной стороной разработки панели, поэтому буду писать свои наблюдения и заметки. Официальный канал: https://t.me/remnawave Официальная группа: https://t.me/+xQs17zMzwCY1NzYy Официальный сайт: https://remna.st Хаб идея и доработок: https://hub.remna.st/ Отличия от аналогов Для начала хочу отметить, что основной "мейнтейнер" панели - это российский разраб Kastov. 1. Использование базы данных PostgreDB. Ребята заранее подумали, что использование не надежной синхронной Sqlite является плохим тоном, а использовать различные вариации MariaDB и MySQL накладывают другие ограничения. 2. Подход к распределению Инбаундов к Нодам. Как вы знаете, в Marzban - есть один большой недостаток, не всегда удобно управлять инбаундами, и без дополнительных инбаундов, очень сложно управлять какой инбаунд идет на какую ноду. Команда из Marzneshin попыталась исправить эту ситуацию, и предложила свой подход.. где у каждой ноды свой отдельный конфиг Xray. Что это дает - стабильность и независимость ноды. Возможность изменять конфиг отдельного сервера без влияния на другие. В Remnawave сделали что то среднее (по крайней мере сейчас). Конфиг - один для всех нод (серверов), но у каждого сервера ты можешь выбрать какой инбаунд будет на нем доступен и будет работать. Это делается прям в настройках ноды: 3. Стабильность работы нод. Отличительной особенностью и основным акцентом работы панели - является независимость ноды от Мэйн сервера. Ноды в принципе работают как нечто отдельное и самостоятельное. Это важно! 4. Мэйн не стоит на раздаче Еще одной важной особенностью, является тот факт, что установленная панель не является сервером отдачи по умолчанию. Да, его можно сделать таким, но для этого сперва нужно установить на этот же мейн remnanode и подключить его как ноду в панеле. 5. Расширенные API возможности и метрики для Prometheus Тут особо нечего расписывать, но метрики - это приятно. 6. По умолчанию нет страницы подписки - все отдается в json. Да это так. Но есть решение. О нем позже. Разбираемся в требованиях и особенностях Требования нам подскажет сайт: Требований конечно выше чем у Marzban, т.к. у нас на бэкенде используется PostgreDB. Но это гарантирует стабильность и надежность БД и данных. Панель придерживается той же свежей концепции, что по умолчанию доступна только в локальной сети. Если вы панель хотите выносить наружу, вам потребуется Caddy или Nginx. Я люблю Caddy, поэтому разбирать будет на её примере. Аренда сервера Для начала, как обычно, нам нужно выбрать сервер. Из последнего, что могу посоветовать к аренде: Как бы не ругались, но проверенный за много лет: 4VPS: https://4vps.su/r/p52GUJhPv8b5 САМЫЙ СТАБИЛЬНЫЙ для Мэйна сервер в РФ Selectel: https://selectel.ru/?ref_code=8d43638548 Если нужны стабильные ноды, конечно Kamatera: https://go.cloudwm.com/visit/?bta=36601&nci=5749 1. Подготовка сервера 1.1. Первым делом на новом сервере ставить Docker: curl -fsSL https://get.docker.com | sh 1.2. Теперь давайте создадим папку для нашего проекта Remnawave Пока мы это будем делать в папке /root/, но по фэншую лучше в паке /opt/ (но это уже когда будет установщик готов) mkdir -p ~/remnawave/ 1.3. Переходим в папку: cd ~/remnawave/ 1.4. Идем в панель Cloudflare. Добавляем домен и привязываем к своему серверу (я надеюсь вы знаете как это делать): test.openode.xyz Аналогично делаем для страницы подписки. У меня это будет: link.openode.ru Отлично. 1.5. Создаем папку для Caddy. Caddy у нас будет работать в докере, так проще для старта. Но вы можете делать на свое усмотрение. mkdir -p ~/remnawave/caddy Создаем файл Caddyfile: nano ~/remnawave/caddy/Caddyfile Прописываем в него: test.openode.ru { reverse_proxy remnawave:3000 { header_up X-Real-IP {remote} header_up Host {host} } } link.openode.ru { reverse_proxy remnawave-subscription-page:3010 { header_up X-Real-IP {remote} header_up Host {host} } } 1.6. Создам контейнер для Caddy: cd ~/remnawave/caddy && nano docker-compose.yml Вставляем содержимое services: caddy: image: caddy:2.9 container_name: 'caddy' hostname: caddy restart: always ports: - '0.0.0.0:443:443' - '0.0.0.0:80:80' networks: - remnawave-network volumes: - ./Caddyfile:/etc/caddy/Caddyfile - caddy-ssl-data:/data volumes: caddy-ssl-data: driver: local external: false name: caddy-ssl-data networks: remnawave-network: external: true name: remnawave-network Контейнер создали, но запускать пока не будем. Сеть мы заранее указали ту, которую мы создадим далее. 2. Установка панели 2.7 Теперь перейдем к созданию Remnawave, а после этого уже поднимем наш Caddy. Переходим в папку Remnawave и создаем файл Docker-compose.yml: cd ~/remnawave/ && nano docker-compose.yml Устанавливать будем сейчас dev ветку (как пример), поэтому идем в репозиторий и забираем содержимое файла: https://github.com/remnawave/backend/blob/dev/docker-compose-prod.yml Но с корректировкой на ветку dev: remnawave: image: remnawave/backend:dev МЫ СРАЗУ УСТАНОВИМ контейнер для страницы подписки services: remnawave-db: image: postgres:17 container_name: 'remnawave-db' hostname: remnawave-db restart: always env_file: - .env environment: - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_DB=${POSTGRES_DB} - TZ=UTC ports: - '127.0.0.1:6767:5432' volumes: - remnawave-db-data:/var/lib/postgresql/data networks: - remnawave-network healthcheck: test: ['CMD-SHELL', 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}'] interval: 3s timeout: 10s retries: 3 remnawave: image: remnawave/backend:dev container_name: 'remnawave' hostname: remnawave restart: always ports: - '127.0.0.1:3000:3000' env_file: - .env networks: - remnawave-network depends_on: remnawave-db: condition: service_healthy remnawave-redis: image: valkey/valkey:8.0.2-alpine container_name: remnawave-redis hostname: remnawave-redis restart: always networks: - remnawave-network volumes: - remnawave-redis-data:/data remnawave-subscription-page: image: remnawave/subscription-page:latest container_name: remnawave-subscription-page hostname: remnawave-subscription-page restart: always environment: - REMNAWAVE_PLAIN_DOMAIN=panel.com - SUBSCRIPTION_PAGE_PORT=3010 - META_TITLE="Subscription Page Title" - META_DESCRIPTION="Subscription Page Description" ports: - '127.0.0.1:3010:3010' networks: - remnawave-network networks: remnawave-network: name: remnawave-network driver: bridge external: false volumes: remnawave-db-data: driver: local external: false name: remnawave-db-data remnawave-redis-data: driver: local external: false name: remnawave-redis-data Для страницы подписки замените в - REMNAWAVE_PLAIN_DOMAIN=panel.com на ваш домен панели Сохранили и закрыли. 2.8. Создаем здесь же файл .env: nano .env И вставляем в него содержимое из файла по ссылке: https://github.com/remnawave/backend/blob/dev/.env.sample А теперь вносим в содержимое корректировки: JWT токены: ### CHANGE DEFAULT VALUES ### JWT_AUTH_SECRET=change_me JWT_API_TOKENS_SECRET=change_me Значения генерируем здесь: https://jwtsecret.com/generate И вставляем (сгенерируйте свои комбинации!!!): ### CHANGE DEFAULT VALUES ### JWT_AUTH_SECRET=6ac5b3ba99b94d9e0f6b9c242691c14e3bd54492b60aff7829e6b050535d8827278c098b42d6833a314af104f2c9da8046c33a14f45c00c43117dda0ba4ea25866a3562babea7ac59c523fea04cab6c24c4f191846b73ac7420fb265b0f910ad09018f662e8daf7e6bf8173546d89687fdb839fd14f34e754b20ae1e1d556ee3 JWT_API_TOKENS_SECRET=b3e86a783d3ca63941fe48eb2fdf8901fa294b777376c77b852c98cab8e136d12f4a0b0c898a60cdda6c1a76af6f7a9acdd292a4040bc0a4a7c34091ddb25158aa785c90391e094672da646712d2ae1e6f7e2bada14a2deb9099c291bc464115fb0ae71d042baacc8f7890ea55d8eb6a42d474604429978880e851632ce187a6 Данные для телеграм: ### TELEGRAM ### IS_TELEGRAM_ENABLED=false TELEGRAM_BOT_TOKEN=change_me TELEGRAM_ADMIN_ID=change_me NODES_NOTIFY_CHAT_ID=change_me Я думаю вы справитесь самостоятельно Домен для Frontend: ### FRONT_END ### FRONT_END_DOMAIN=* Указываем здесь наш домен для панели: ### FRONT_END ### FRONT_END_DOMAIN=test.openode.ru Публичный домен подписки: ### SUBSCRIPTION PUBLIC DOMAIN ### ### RAW DOMAIN, WITHOUT HTTP/HTTPS, DO NOT PLACE / to end of domain ### SUB_PUBLIC_DOMAIN=example.com А здесь мы уже указываем домен для нашей страницы подписки, этот параметр будет подставляться в панеле. ### SUBSCRIPTION PUBLIC DOMAIN ### ### RAW DOMAIN, WITHOUT HTTP/HTTPS, DO NOT PLACE / to end of domain ### SUB_PUBLIC_DOMAIN=link.openode.ru Данные метрики: ### PROMETHEUS ### ### Metrics are available at /api/metrics METRICS_USER=admin METRICS_PASS=admin Эти параметры можно не менять, они у нас не будут доступны извне, т.к. порт для метрик у нас 3001 и мы его не прокидываем, а будем потом использовать для сбора статистики в Prometheus. Параметры которые не интересны нам сейчас: ### WEBHOOK ### WEBHOOK_ENABLED=false ### Only https:// is allowed WEBHOOK_URL=https://webhook.site/1234567890 ### This secret is used to sign the webhook payload, must be exact 64 characters. Only a-z, 0-9, A-Z are allowed. WEBHOOK_SECRET_HEADER=vsmu67Kmg6R8FjIOF1WUY8LWBHie4scdEqrfsKmyf4IAf8dY3nFS0wwYHkhh6ZvQ ### CLOUDFLARE ### # USED ONLY FOR docker-compose-prod-with-cf.yml # NOT USED BY THE APP ITSELF CLOUDFLARE_TOKEN=ey... База у нас в локалке, поэтому данные подключения к базе не критичны, можем оставить как есть: ### Database ### ### For Postgres Docker container ### # NOT USED BY THE APP ITSELF POSTGRES_USER=postgres POSTGRES_PASSWORD=postgres POSTGRES_DB=postgres 3. Установка сервиса подписки Remnawave теперь имеет свою страницу подписки. Все контейнеры мы уже включили в самом начале. Отлично. Теперь давайте поочередно все поднимем.: cd ~/remnawave && docker compose up -d Подняли наш контейнер с панелью: Теперь поднимем наш caddy: cd ~/remnawave/caddy && docker compose up -d Если сделали правильно То мы попадем на страницу регистрации админа: Регистрируемся, сохраняем пароль и радуемся успеху!!!! как установить и подключить ноду: Коротко как добавить ноду. На нужно сервере создаем файл docker-compose.yml: nano docker-compose.yml содержимое: services: remnanode: container_name: remnanode hostname: remnanode image: remnawave/node:dev env_file: - .env network_mode: host создаем .env: nano .env содержмое: ### APP ### APP_PORT=3000 ### XRAY ### SSL_CERT="PUBLIC KEY FROM REMNAWAVE-PANEL" вместо SSL_CERT="PUBLIC KEY FROM REMNAWAVE-PANEL" ВСтавляем то, что скопируете в панеле: Запускаем: docker compose up -d Вы также можете воспользоваться скриптом для установки ноды: sudo bash -c "$(curl -sL https://github.com/DigneZzZ/remnawave-scripts/raw/main/remnanode.sh)" @ install В панеле, указываем внутреннее имя, выбираем страну, указываем порт, и выбираем нужные инбаунды.
    2 балла
  7. Всем привет! Очень часто последнее время стали приходить вопросы - как отправить YouTube через Российский сервер и возможно ли это? Отвечаю - Возможно все. Условия: У пользователей должен быть настроен роутинг так, чтобы geosite:youtube - отправлялся в PROXY У пользователей вообще не настроен Routing Выполнение этих условий ОООЧЕНЬ важные. Что делать? 1. Берем в аренду сервер в РФ: Для начала нужен надежный провайдер в РФ. Предлагаю рассмотреть ProCloud https://procloud.ru?referral_id=274473 Для этих задач нам подойдет легко САМЫЙ простой сервер. Оформляем и берем его - 392 рубля в месяц. Создание занимает буквально минуту 2. Подключаемся на сервер 2.1. Ставим обновления apt update && apt upgrade -yqq 2.2. Ставим UFW apt install ufw -yqq 2.3.1. Добавляем наши исключения в UFW Политика по умолчанию: ufw default deny incoming ufw default allow outgoing Добавим сразу разрешения на SSH порт ufw allow 22 Добавим исключения на будущую панель 3X-UI ufw allow 8778 Добавим исключения на наш порт для подключения ufw allow 8443 Этого нам хватит! Включаем Firewall ufw enable 2.3. Меняем порт подключения по SSH bash <(wget -qO- https://dignezzz.github.io/server/ssh-port.sh) Скрипт сделает все сам, вам только нужно ввести порт 3. Устанавливаем 3x-UI Нам для быстроты и удобства использовать именно его. В репозитории: https://github.com/MHSanaei/3x-ui находим установочный скрипт: bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) Соглашаемся на кастомизацию: Я ввел настройки для примера, в т.ч. использовал порт 8778 который упоминал ранее В конце установки получили: Вводим команду: x-ui 3.1. Давайте выполним команду 16 - чтобы включить автозапуск при перезагрузке системы 3.2. Теперь зайдем на сервер, в моем случае это: http://87.228.13.101:8778/ Ввожу данные логина и пароля Панель работает. Отлично. 4. Настройка входящего подключения. Идем в раздел Подключения. Жмем Добавить подключение 4.1. Создаем новое подключение ShadowSocks. Учитывая что у VPS провайдеров не стоят ТСПУ и подключения никак не ограничиваются, мы будем использовать самое простое подключение - нам его будет достаточно! 4.2. Открываем созданное подключение - раздел Информации 4.3. Копируем настройки подключения 4.4. Теперь нам нужно преобразовать это подключение в формат Json для скармливания нашему XrayCore Воспользуемся встроенным инструментом в 3x-ui 4.5. Вставляем наше подключение и жмем кнопку 3 Получаем готовый конфиг 5. Идем в Marzban 5.1.Находим наш раздел Outbound 5.2.После протокола Freedoms вставляем наш чудо код из предыдущего скрина Общий вид получается таким: 5.3. Изменяем название tag на удобное нам: 5.4. Крутим ниже, находим раздел Routing: 5.5. Первым правилом вставляем код: { "type": "field", "outboundTag": "ru-vscale", "domain": [ "geosite:youtube", "ggpht.cn", "ggpht.com", "googlevideo.com", "gvt1.com", "gvt2.com", "video.google.com", "wide-youtube.l.google.com", "withyoutube.com", "youtu.be", "youtube.com", "youtubeeducation.com", "youtubeembeddedplayer.googleapis.com", "youtubefanfest.com", "youtubegaming.com", "youtubego.co.id", "youtubego.co.in", "youtubego.com", "youtubego.com.br", "youtubego.id", "youtubego.in", "youtubei.googleapis.com", "youtubekids.com", "youtubemobilesupport.com", "yt.be", "ytimg.com" ] }, Получаем вот такой вид: ГОТОВО! Идем и смотрим YouTube через сервер в РФ без рекламы нагрузка на сервер в состоянии 8К картинки - стабильная! ФИНИШНАЯ ПРЯМАЯ! Теперь панель 3x-ui нам не нужна! Закроем ее через UFW ufw deny 8778 ufw reload
    2 балла
  8. Я с хайдифи уже давно не работаю) Даже не знаю где там)) Но да, это в правилах роутинга. С ютубом на примере хайдифи тоже сложно подсказать.
    2 балла
  9. Всем привет! Еще в прошлом месяце, вышел новый транспортный протокол xHTTP. Он заменит собой полностью http, поэтому пока еще есть обратная совместимость у последних версий ядер xRay. Почитать можно тут: https://github.com/XTLS/Xray-core/discussions/4113#discussioncomment-11468947 Для тех кто не в курсе, есть генератор инбаундов: https://azavaxhuman.github.io/MarzbanInboundGenerator/v2/ тут можно посмотреть другие примеры конфигураций: https://github.com/XTLS/Xray-examples Но практически никто не выкладывает готового инбаунда, который сможет работать на marzban. Я больше месяца пытался собрать универсальный, работающий конфиг. И только в этой вариации у меня заработало. Работает на v2box на андроиде и на Streisand на iOS. Условия: Послдедняя версия ядра на сервере и ноде (>24.11.30) сам конфиг: { "tag": "VLESS-XHTTP-REALITY", "listen": "0.0.0.0", "port": 443, "protocol": "vless", "settings": { "clients": [], "decryption": "none", "fallbacks": [] }, "streamSettings": { "network": "xhttp", "realitySettings": { "dest": "ftp.debian.org:443", "maxClient": "", "maxTimediff": 0, "minClient": "", "privateKey": "YOUR PRIVATE KEY", "serverNames": [ "ftp.debian.org" ], "shortIds": [ "" ], "show": false, "xver": 0 }, "security": "reality", "xhttpSettings": { "host": "ftp.debian.org", "path": "/", "mode": "auto", "extra": { "headers": {}, "xPaddingBytes": "100-1000", "noGRPCHeader": false, "noSSEHeader": false, "scMaxEachPostBytes": 1000000, "scMinPostsIntervalMs": 30, "scMaxBufferedPosts": 30, "xmux": { "maxConcurrency": "16-32", "maxConnections": 0, "cMaxReuseTimes": "64-128", "cMaxLifetimeMs": 0, "hMaxRequestTimes": "800-900", "hKeepAlivePeriod": 0 }, "sockopt": {} } }, "sniffing": { "destOverride": [ "http", "tls", "quic", "fakedns" ], "enabled": true, "metadataOnly": true, "routeOnly": true } } } Есть еще вариант с TLS. Но его работоспособность не проверял. "tag": "VLess-XHTTP-TLS", "listen": "0.0.0.0", "protocol": "vless", "port": 2096, "settings": { "decryption": "none", "clients": [] }, "streamSettings": { "network": "xhttp", "xhttpSettings": { "path": "/yourpath?ed=2096", "host": "sub.domain.com", "maxUploadSize": 1500000, "maxConcurrentUploads": 150, "minUploadInterval": 30, "paddingBytes": 500, "noSSEHeader": false, "maxConcurrency": 24, "maxReuseTimes": 96, "maxLifetime": 0 }, "security": "tls", "tlsSettings": { "serverName": "sub.domain.com", "certificates": [ { "ocspStapling": 3600, "certificateFile": "/var/lib/marzban/ca/cert.crt", "keyFile": "/var/lib/marzban/ca/private.key" } ], "minVersion": "1.0", "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" } }, "sniffing": { "enabled": true, "destOverride": [ "http", "tls", "quic" ] } }, Указанный SNI дан для примера! Все требования для него как всегда остаются!
    2 балла
  10. РКН сегодня ночью (06.11.2024) заблокировал ЕСН от Cloudflare сделав недоступными все сайты использующие Proxied от CF, а также те же сертификаты с TLS 1.3. На данный момент проблему можно решить тремя путями: Не использовать Российские адреса; Отключить защиту ECH Отключить TLS 1.3 в браузере; Как отключить Cloudflare ECH? Полное отключение TLS 1.3 может быть не совсем безопасным способом. Если блокировки снимут, рекомендую его включить. Отключаем через API запрос: 1. Получение данных для API Cloudflare Чтобы отключить ECH, вам понадобятся Global API Key и Zone ID вашего домена. Global API Key. Перейдите на страницу Cloudflare по следующей ссылке и найдите ваш глобальный API-ключ: https://dash.cloudflare.com/profile/api-tokens Zone ID. Перейдите в управление вашим доменом на Cloudflare и прокрутите вниз страницу. Найдите строку Zone ID и скопируйте её. 2. Отключение ECH через API Cloudflare Теперь, когда у вас есть Global API Key и Zone ID, вы можете отключить ECH с помощью команды curl. Выполните следующую команду, заменив {ID_ZONE} на ваш Zone ID, а {ACCOUNT_EMAIL} и {GLOBAL_API_KEY} на ваш email и API-ключ соответственно: curl -X PATCH "https://api.cloudflare.com/client/v4/zones/{ID_ZONE}/settings/ech" \ -H "X-Auth-Email: {ACCOUNT_EMAIL}" \ -H "X-Auth-Key: {GLOBAL_API_KEY}" \ -H "Content-Type:application/json" --data '{"id":"ech","value":"off"}' Вариант 2: Отключение ECH через Postman Вы также можете выполнить отключение через Postman: 1. В Postman выберите метод PATCH и введите URL: https://api.cloudflare.com/client/v4/zones/{ID_ZONE}/settings/ech 2. В Headers добавьте следующие поля: X-Auth-Email: ваш email-адрес Cloudflare. X-Auth-Key: ваш Global API Key. Content-Type: application/json В Body выберите raw и введите следующий JSON: {"id": "ech", "value": "off"}
    2 балла
  11. Привет. Делал все по инструкции на самом кенетике выполняя каждый пункт. Все завелось с первого раза и заработало. Пытался zapret установить на роутер ксяоми под openwrt и чет не смог реализовать плюнул до лучших времен. Из apk под андроид хорошо работает DPI Tunnel при наличии root-прав.
    2 балла
  12. Всем привет! Я закончил разработку скрипта, который позволит легко управлять и устанавливать Marzban Node Я уже отправил PR в команду разработки, и делюсь им с вами.3 Новая установка Скрипт аналогичен базовому скрипту установки панели marzban, но адаптирован для работы с нодой. sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban-node.sh)" @ install Во время установка будет задано два вопроса. Первый - попросит ввести вас сертификат который вы получите из панели Второй - желаете ли вы использовать REST протокол (по умолчанию используется) https://github.com/Gozargah/Marzban-scripts/ Существующая установка marzban-node Если у вас уже есть установленный узел, то лучше остановите и удалите существующий контейнер и папку и установить скрипт заново! Чтобы контейнеру и скрипту задать другое имя, используйте: sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban-node.sh)" @ install --name marzban-node2 Всего хорошего!
    2 балла
  13. Hi, Thanks for your question. Currently, the forum focuses mainly on detailed installation and configuration guides for panels like Remnawave and Marzban. There is no dedicated content or templates tailored for bypassing censorship in Iran at this time. Most examples are generic or geared toward Russia. That said, some users have reported limited success with configurations using VLESS + Reality, XTLS, or fallback with CDN domains, but this depends heavily on the current network situation in Iran, which changes often.
    1 балл
  14. С 31.03.2025 компоновка приложений в subscription-page в remnawave стала максимально адаптивной и удобной. Инструкции я напишу чуть позже. А пока покидаю просто свои подборки с приложениями и конфигурациями. Информация об этом есть на странице: https://remna.st/subscription-templating/client-configuration Максимально полный вариант. app1.json
    1 балл
  15. В данной инструкции описано использование VLESS TCP REALTY совместно с TOR в качестве клиента в Marzban. +----------+ +--------+--------+ | *ray | | *ray | Tor | | Client +------->+ Server + Client +------> TOR | | | | | +----------+ +--------+--------+ 1. Анонимизация исходящего трафика Трафик от клиентов может направляться через Tor, чтобы скрыть IP-адрес сервера при выходе в интернет. 2. Доступ к .onion-ресурсам Tor позволяет подключаться к сайтам в сети Tor (адреса .onion), которые недоступны через обычный интернет. 3. Повышение приватности клиента Возможность маршрутизировать трафик определённых клиентов или доменов через Tor для дополнительной анонимности. Или вообще весь трафик как описано в инструкции. Установка TOR на сервер apt update apt install tor -y После установки Tor автоматически запускается и слушает на порту 9050. Это SOCKS-прокси. Убедись, что Tor работает как SOCKS-прокси Установи curl, если не установлен: apt install curl -y Проверь, работает ли Tor как SOCKS-прокси: curl --socks5-hostname 127.0.0.1:9050 https://check.torproject.org Должен появиться текст: Congratulations. This browser is configured to use Tor. Настраиваем нашу маршрутизацию в ядре XRAY Ниже приведен готовый конфиг с маршрутизацией для работы VLESS TCP REALTY с маршрутизацией всего трафика через TOR { "log": { "loglevel": "warning" }, "routing": { "rules": [ { "ip": [ "geoip:private" ], "outboundTag": "BLOCK", "type": "field" }, { "type": "field", "domain": [ "geosite:category-ads-all" ], "outboundTag": "tor-out" } ] }, "inbounds": [ { "tag": "VLESS+TCP+REALITY+8443", "listen": "0.0.0.0", "port": 8443, "protocol": "vless", "settings": { "clients": [], "decryption": "none" }, "streamSettings": { "network": "tcp", "security": "reality", "tcpSettings": { "acceptProxyProtocol": false, "header": { "type": "none" } }, "realitySettings": { "show": false, "dest": "cloudflare.com:443", "xver": 0, "serverNames": [ "cloudflare.com", "www.cloudflare.com" ], "privateKey": "uHkNpGqR5mRiJgIjDIoHJ-zkuyziqZnvkpwFFmQRfio", "publicKey": "iQtd1bmrAxS0vuif4OqpU1vDVGJvwjsr1g5VG7SA6kM", "shortIds": [ "33679f28b5a720c9" ], "spiderX": "/", "fingerprint": "chrome" } }, "sniffing": { "enabled": true, "destOverride": [ "http", "tls" ], "metadataOnly": false, "routeOnly": false } } ], "outbounds": [ { "tag": "tor-out", "protocol": "socks", "settings": { "servers": [ { "address": "127.0.0.1", "port": 9050 } ] } }, { "protocol": "freedom", "tag": "DIRECT" }, { "protocol": "blackhole", "tag": "BLOCK" } ] } Разберем отдельные части приведенного выше конфига Создаем дополнительный outbound "tor-out" с типом socks: { "tag": "tor-out", "protocol": "socks", "settings": { "servers": [ { "address": "127.0.0.1", "port": 9050 } ] } } и используем его в маршрутизации routing: geosite:category-ads-all указывает на то что все сайт должны быть маршрутизированы через tor-out { "type": "field", "domain": [ "geosite:category-ads-all" ], "outboundTag": "tor-out" } Используем протокол VLESS+TCP+REALRTY на порту 8443: { "tag": "VLESS+TCP+REALITY+8443", "listen": "0.0.0.0", "port": 8443, "protocol": "vless", "settings": { "clients": [], "decryption": "none" }, "streamSettings": { "network": "tcp", "security": "reality", "tcpSettings": { "acceptProxyProtocol": false, "header": { "type": "none" } }, "realitySettings": { "show": false, "dest": "cloudflare.com:443", "xver": 0, "serverNames": [ "cloudflare.com", "www.cloudflare.com" ], "privateKey": "uHkNpGqR5mRiJgIjDIoHJ-zkuyziqZnvkpwFFmQRfio", "publicKey": "iQtd1bmrAxS0vuif4OqpU1vDVGJvwjsr1g5VG7SA6kM", "shortIds": [ "33679f28b5a720c9" ], "spiderX": "/", "fingerprint": "chrome" } }, "sniffing": { "enabled": true, "destOverride": [ "http", "tls" ], "metadataOnly": false, "routeOnly": false } } Генерация ключей для Realty: Шаги по генерации ключей "privateKey" и "publicKey" внутри контейнера Marzban 1. Найди имя контейнера Marzban docker ps Ищи что-то вроде marzban-backend или xray. Например: CONTAINER ID IMAGE NAME ... 123abc456def gozargah/marzban marzban-backend ... 2. Зайди внутрь контейнера docker exec -it marzban-backend bash Замените marzban-backend на фактическое имя вашего контейнера. 3. Выполни генерацию ключей xray x25519 Результат будет таким: Private key: mW0kTzJ9Tz3NfExampleKey1234567890abcdef= Public key: Bp1Fak3Publ1cKeyExampleXYZ0987654321= 4. Выйди из контейнера exit Также в качестве альтернативы можете воспользоваться командой: docker exec marzban-backend xray x25519 Замените marzban-backend на фактическое имя вашего контейнера. Как создать shortIds вручную? 1. Использование генератора случайных строк Чтобы сгенерировать такой идентификатор вручную, можно использовать команду в Linux (или другой системе с bash): head /dev/urandom | tr -dc 'a-f0-9' | head -c 16 Этот скрипт берет случайные байты, преобразует их в строку из символов [a-f0-9] и выводит первые 16 символов. Пример вывода: 33679f28b5a720c9 Это будет твой shortId. Сохрани его и используй в конфиге. Альтернативная команда для генерации идентификатора: openssl rand -hex 8 Подбор SNI Лучше используйте свои SNI вместо упомянутых: "dest": "cloudflare.com:443", "xver": 0, "serverNames": [ "cloudflare.com", "www.cloudflare.com" ] для этого используйте сканер поиска https://github.com/XTLS/RealiTLScanner
    1 балл
  16. Панель обновлять можно как у тебя на примере. Если установить дополнительно вышедший сегодня скрипт: https://github.com/DigneZzZ/remnawave-scripts/blob/main/README_RU.md#-установщик-remnawave-panel То команды будут проще: remnawave update Ноду можно и так как ты показал, но можно и через скрипт, если ты его ставил: remnanode update Ядра только на нодах. Поэтому можно командой remnanode core-update
    1 балл
  17. о, так все просто оказывается, спасибо. я думал там на другой сервер бэкенд подписки надо класть))
    1 балл
  18. подскажите как получить одобренный пост? Хотел просмотреть инструкцию по double vpn
    1 балл
  19. Резервное копирование Keenetic + Entware Если на роутер установлена дополнительная система Entware, можно использовать скрипт, создающий резервную копию настроек роутера, прошивки и Entware с настройками. После выполнения — приходит Telegram-уведомление. Скрипт создан на основе обсуждения на форуме Keenetic Community: форум. Скрипт #!/opt/bin/bash set -x export PATH=/opt/bin:/opt/sbin:/bin:/usr/bin:/usr/sbin:/sbin # =========== НАСТРОЙКИ ============ CONFIG_FILE="/opt/etc/backup_config.env" if [[ ! -f $CONFIG_FILE ]]; then echo " Конфигурационный файл $CONFIG_FILE отсутствует!" exit 1 fi # Импорт конфигурации source "$CONFIG_FILE" DATE=$(date +%Y-%m-%d_%H-%M-%S) ARCHIVE_NAME="keenetic_backup_${DATE}.tar.gz" ARCHIVE_PATH="${LOCAL_TMP_DIR}/${ARCHIVE_NAME}" # Логирование в syslog log() { logger "[BACKUP]: $1" echo "$(date +%Y-%m-%d_%H:%M:%S) $1" | tee -a "$LOG_FILE" } # Отправка Telegram уведомлений send_telegram() { MESSAGE=$(echo -e "$1" | sed 's/$/%0A/g') curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_TOKEN/sendMessage" \ -d chat_id="$TELEGRAM_CHAT_ID" \ -d message_thread_id="$TELEGRAM_THREAD_ID" \ -d parse_mode="Markdown" \ -d text="$MESSAGE" } # Очистка локальной директории cleanup_local() { log " Очистка локальной директории $LOCAL_BACKUP_DIR..." rm -rf "$LOCAL_BACKUP_DIR"/* || log " Не удалось очистить $LOCAL_BACKUP_DIR." log " Очистка локальной директории $LOCAL_TMP_DIR..." rm -rf "$LOCAL_TMP_DIR"/* || log " Не удалось очистить $LOCAL_TMP_DIR." } # Бэкап Entware backup_entware() { log " Создание бэкапа Entware..." tar cvzf ${LOCAL_BACKUP_DIR}/entware_backup_${DATE}.tar.gz -C /opt . > /dev/null } # Бэкап прошивки backup_firmware() { log " Создание бэкапа прошивки..." REL=$(ndmc -c 'show version' | grep 'release:' | awk '{print $2}') ndmc -c "copy flash:/firmware ${FW_BACKUP_DIR}/firmware-${REL}_${DATE}.bin" log " Создан бэкап прошивки: ${FW_BACKUP_DIR}/firmware-${REL}_${DATE}.bin" } # Бэкап конфига backup_config() { log " Создание бэкапа конфигурации..." ndmc -c "show running-config" > ${LOCAL_BACKUP_DIR}/config_${DATE}.cfg log " Создан бэкап конфигурации: ${LOCAL_BACKUP_DIR}/config_${DATE}.cfg" } # Архивация бэкапов create_archive() { log " Создание архива $ARCHIVE_NAME..." tar cvzf ${ARCHIVE_PATH} -C ${LOCAL_BACKUP_DIR} . > /dev/null || return 1 log " Архив создан: $ARCHIVE_PATH" } # Копирование на Nextcloud upload_to_nextcloud() { log " Копирование $ARCHIVE_PATH на Nextcloud..." curl -T ${ARCHIVE_PATH} -u ${NEXTCLOUD_USER}:${NEXTCLOUD_PASS} {$BACKUP_DIR_URL}/${ARCHIVE_NAME} log " Архив отправлен на Nextloud: $BACKUP_DIR_URL/${ARCHIVE_NAME}" } # Ротация бэкапов rotate_backups() { log " Получаем список бэкапов в Nextcloud..." # Получаем список бэкапов file_list=$(curl -s -u "$NEXTCLOUD_USER:$NEXTCLOUD_PASS" -X PROPFIND "$BACKUP_DIR_URL" -H "Depth: 1" \ | grep -oE "/remote.php/dav/files/[^<]*keenetic_backup_[^<]*\.tar\.gz") if [ -z "$file_list" ]; then log " Нет доступных бэкапов для ротации." return 0 fi echo "$file_list" | sort > /tmp/backups_sorted.txt total=$(wc -l < /tmp/backups_sorted.txt) # Удалим на один больше так как делаем новый бекап target_keep=$((KEEP_LAST - 1)) if [ "$total" -le "$target_keep"]; then log " Пока удалять нечего — всего $total бэкапов." return 0 fi delete_count=$((total - target_keep)) log " Удаляем $delete_count старых бэкапов..." head -n "$delete_count" /tmp/backups_sorted.txt | while read -r path; do filename=$(basename "$path") full_url="${BACKUP_DIR_URL}/${filename}" echo " Удаление: $full_url" curl -s -u ${NEXTCLOUD_USER}:${NEXTCLOUD_PASS} -X DELETE ${full_url} done log " Ротация завершена." } # =========== ОСНОВНОЙ СКРИПТ ============ main() { log "=== Начало резервного копирования ===" cleanup_local mkdir -p "$LOCAL_BACKUP_DIR" mkdir -p "$LOCAL_TMP_DIR" # Выполнение шагов backup_entware backup_firmware backup_config # Упаковка в единый архив create_archive # Ротация rotate_backups # Копирование на хранилища upload_to_nextcloud # Отправка отчета send_report log " Очистка локальной директории $LOCAL_TMP_DIR..." rm -rf "$LOCAL_TMP_DIR"/* || log " Не удалось очистить $LOCAL_TMP_DIR." send_telegram " Создана [резервная копия]($BACKUP_DIR_URL/$ARCHIVE_NAME) настроек роутера." log "=== Завершено ===" } main Установка скрипта # Путь к скрипту /opt/usr/bin/backup # Путь к конфигурации /opt/etc/backup_config.env # Сделать скрипт исполняемым chmod +x /opt/usr/bin/backup # Добавить в cron (ежедневно в 11:00) 0 11 * * * /opt/bin/bash /opt/usr/bin/backup Настройка backup_config.env KEEP_LAST=3 LOCAL_BACKUP_DIR="/tmp/mnt/Router/backups" FW_BACKUP_DIR="Router:/backups" LOCAL_TMP_DIR="/tmp/mnt/Router/tmp" LOG_FILE="/tmp/mnt/Router/backup.log" NEXTCLOUD_USER="user" NEXTCLOUD_PASS="password" BACKUP_DIR_URL="https://cloud.domain.ru/remote.php/dav/files/user/folder" TELEGRAM_TOKEN="token" TELEGRAM_CHAT_ID="CHAT_ID" # TELEGRAM_THREAD_ID="THREAD_ID" — удалить строку из скрипта, если не используете Что делает скрипт? Чистит временные директории Создаёт бэкап Entware (/opt) Создаёт бэкап прошивки Сохраняет текущую конфигурацию роутера Архивирует всё в keenetic_backup_*.tar.gz Отправляет архив на Nextcloud через WebDAV Удаляет старые резервные копии, оставляя только последние KEEP_LAST Отправляет Telegram-уведомление Альтернатива: rclone (не рекомендуется) Можно заменить curl на rclone для загрузки архива на облачные хранилища, например Google Drive. Однако, это сильно нагружает роутер. # Копирование на Google Drive upload_to_google_drive() { log " Копирование $ARCHIVE_PATH на Google Drive..." attempt_command "rclone copy $ARCHIVE_PATH $GDRIVE_REMOTE" "Копирование на Google Drive" } # Ротация бэкапов rotate_backups() { log " Ротация бэкапов старше $RETENTION_DAYS дней..." rclone delete --min-age "${RETENTION_DAYS}d" "$GDRIVE_REMOTE" && log " Ротация на GDrive завершена." rclone delete --min-age "${RETENTION_DAYS}d" "$MEGA_REMOTE" && log " Ротация на Mega завершена." } Восстановление Архив содержит три файла: config_* — конфигурация роутера firmware-* — прошивка роутера entware_backup_*.tar.gz — образ Entware со всеми настройками Для восстановления Entware — заменить стандартный архив установкой содержимого в install. Готово! Скрипт работает стабильно и регулярно делает резервные копии всех важных компонентов Keenetic + Entware. Если будут изменения, искать в оригинальной репе: https://deniom.ru/zametki/rezervnoe-kopirovanie-routera-keenetik/
    1 балл
  20. Отвечу сам себе )) Проблема решилась изменением групп безопасности на cloud.ru
    1 балл
  21. 1 балл
  22. вон снизу написано" управление dns записями" создай там "panel.svoi-domen.com or .ru ...... пример "panel.luntik.ru" создаешь и вписываешь уже на сервере созданный домен
    1 балл
  23. После замены значений, данные внутри контейнера уже не перетиhаются, так как Хранятся в Volume Пока контейнер запущен: docker exec remnawave-caddy rm /data/.local/caddy/users.json Затем docker compose down Редактируем docker-compose, ставим нужный пароль (без $!!!!!) Поднимаем docker compose up -d
    1 балл
  24. Если кто то будет пересоздавать и у вас remnawave начнет писать forbidden, то есть не пускать вас. То перейдите к себе на сервер в /opt/remnawave/ введите там docker exec -it remnawave remnawave и стрелочками выберите ❯ Select an action ● Reset superadmin (Fully reset superadmin) ○ Reset certs ○ Exit reset superadmin - enter - yes
    1 балл
  25. Так быстро сделал все по гайду. До страницы авторизации я дошел. Из отличий ставил не из dev, а latest.
    1 балл
  26. 1 балл
  27. привет, в статье пункт 1.4 caddy - нужно внести домены. после него в пункте 1.6 идет инструкция с привязкой домена. советую поменять их местами, т.к. изначально не логично, что в пункте 1.4 уже нужно вписывать домены, а в инструкции они появляются только в пункте 1.6. не разобравшись в коде панель не запустится.
    1 балл
  28. Да, у меня тоже заработало)
    1 балл
  29. ну я попробовал на чистом сервере сейчас все нормально
    1 балл
  30. Обновил функцию по зависимостям, проверьте еще пжл
    1 балл
  31. Это небольшая заметка о том как буквально за 10 минут организовать пересылку уведомлений из системы Proxmox VE в телеграмм. Небольшое вступление В один не очень приятный момент я столкнулся с тем что резервное копирование proxmox из за ошибки не выполнялось несколько дней, а так как эксперименты над виртуалками с моей стороны очень частые для меня это очень плохой звоночек. В один не очень хороший момент я мог просто не найти бэкап на который рассчитывал. Для предотвращения подобной ситуации в будущем решил настроить уведомления в proxmox. Сама система proxmox поддерживает три типа уведомлений: smtp, gotify и встроенную отправку почты linux. По умолчанию настроен вариант отправки почты linux, но из коробки это решение работать не будет и все уведомления оседают где то в логах системы. Рассмотрим два других варианта более подробно: Gotify - интересная легкая система которая может удобно собирать по http все уведомления в одном месте. И... на этом все... как по мне в ней не хватает как минимум адекватной возможности пересылки в другие системы. Smtp - это классическая почта, фактически вы даете данные авторизации для отправки почты от вашего имени (или от имени специального почтового ящика). Вариант использовать почту был уже более приемлемый но хотелось все таки получать уведомления в телеграмм (у меня уже были ранее настроены уведомления для watchtower, sonar, radar и т.д.). На просторах интернета есть несколько ботов которые подключаются к proxmox api Для управления системой, но по большей степени это именно управление и уведомления они не получают, ну и для задачи это было избыточно. В сухом остатке имеем два пути решения задачи Gotify или Smtp, причем приложение Gotify работает по принципу что именно приложение идет за сообщением а не сервер отправляет на телефон, это серьезное ограничение которое требует внешний доступ к серверу Gotify. Простое и элегантное решение UPD 03.03.25: В proxmox появилась возможность отправлять уведомления с использованием вебхуков теперь настройка еще проще На просторах интернета и обсуждений проблемы в telegram каналах было найдено простое и элегантное решение, smtp_to_telegram. Это небольшое приложение поднимает smtp сервер для приема писем без авторизации и пересылает их в telegram бот. Данный метод можно использовать не только для proxmox но и для любого сервиса поддерживающего smtp отправку уведомлений. Подробнее о самом решении можете посмотреть на странице GitHub: https://github.com/KostyaEsmukov/smtp_to_telegram Фактически нам необходимо создать телеграмм бота (или использовать уже имеющийся) который будет только отправлять сообщения, но не будет читать. Это позволяет без проблем использовать одного бота для нескольких уведомлений как например для watchtower (автоматического обновления докер образов). На просторах интернета множество инструкций по созданию телеграмм ботов подробно расписывать не буду. Коротко идем к служебному боту https://t.me/BotFather и создаем нового бота через меню, нам надо от него токен API. Не забываем написать нашему боту что нибудь для запуска. Так же с помощью https://t.me/myidbot необходимо узнать наш id для отправки сообщений, все опять таки крайне просто пишем боту /getid и получаем циферки которые нам нужны. Само решение будем запускать как я люблю в докере, так как это банально проще и легко воспроизводится: version: '3' services: readeck: container_name: SmtpToTelegram image: kostyaesmukov/smtp_to_telegram:latest restart: unless-stopped volumes: - /DATA/AppData/readeck:/readeck environment: - ST_TELEGRAM_CHAT_IDS=779979797 - ST_TELEGRAM_BOT_TOKEN=7127345363:AAEarsdfsdtnYsZZasdasdx0OfFcDc1NLU - ST_TELEGRAM_MESSAGE_TEMPLATE={subject}\n\n{body}\n\n{attachments_details} ports: - 2525:2525 Сам автор проекта не очень коммуникабельный и не собирает дорабатывать как либо решение, или банально делать образ докера под arm64 но есть альтернативный вариант под эту архитектуру. Для arm64 используйте образ image: cobra1978/smtp_to_telegram После запуска докер контейнера на нашем сервере на порту 2525 поднимется smtp сервер пересылки без авторизации. Переходим в настройку proxmox, нас интересует раздел notification у центра обработки данных. Создадим новую цель уведомлений smtp с данными для нашего сервиса пересылки (сервер это ip нашего сервера на котором запущен докер контейнер пересылки): Фактически отправитель и получатель могут быть вообще любыми адресами у сервиса нет контроля релевантности адресов кроме общего шаблона <name>@domein Фактически все у нас есть возможность отправлять уведомления proxmox в телеграмм, нажимаем test и видимо сообщение от бота. Если не сработало проверьте что у пользователя заполнен почтовый адрес Настройка уведомлений на почту Кроме бота можно настроить еще и дополнительно уведомления на почту, я для таких целей использую свой же почтовый ящик gmail. Но необходимо выполнить несколько предварительных настроек. Установить у пользователя proxmox почту. Для этого переходим в управление пользователями proxmox, и заполняем для пользователя от имени которого будем отправлять уведомления электронный адрес. Следующий пункт это получение пароля приложения для нашей почты которая будет выполнять отправку. Каждый почтовый сервис имеет свои правила и настройки, но большая часть современных требует создания пароля приложения с ограниченными правами. Для гугл можно посмотреть тут: https://support.google.com/accounts/answer/185833?hl=ru После получения пароля возвращаемся в раздел уведомлений proxmox и создаем новую цель для рассылки smtp, для своего почтового сервиса ищите настройки в поиске по словам "smtp <название вашего сервиса>" Обратите внимание что получатель и отправитель (настраивается в пользователе) почты могут совпадать, это будет письмо самому себе. Нажимаем тест и проверяем почту. Отправителя по умолчанию можно выключить, но удалить не получиться. Уведомления о бэкапах proxmox В proxmox существует достаточно гибкая система условий для уведомлений, подробно о ней можно почитать тут https://pve.proxmox.com/wiki/Notifications Я приведу небольшой пример который я использую для получения уведомлений о бэкапах как успешных так и ошибочных. Переходим в раздел уведомлений proxmox и создаем новый Notification Matchers Данные настройки будут отправлять на телеграмм и почту сообщение о событиях бэкапа в любое время. Для дополнительных ограничений по времени или других типов событий рекомендую ознакомится с документацией. Пример уведомления о бэкапах в телеграмм, к сообщению дополнительно прикладывается лог. Телеграмм бот дополнительно прикладывает его в виде файла так как не всегда удобно читать логи в сообщении телеграмм. И оно же на почте Спасибо за внимание, удачной настройки и меньше тревожных ведомлений.
    1 балл
  32. В новых версиях добавили возможность отправки уведомления через Webhook Пример как реализовать отправку:
    1 балл
  33. Вступление, или от простых бэкапов к отдельной системе Proxmox VE имеет встроенную поддержку создания резервных копий и снимков виртуальных машин, однако базовая реализация подвержена определенным ограничениям. Одной из таких проблем, с которой я столкнулся, является следующая: В моей схеме домашней инфраструктуры резервные копии виртуальных машин создавались каждую ночь в 4 часа утра. Полученные архивы сохранялись на жестком диске, подключенном к тому же мини-ПК. Это позволяло хранить до 7 копий виртуальных машин на диске, что было приемлемо, пока я не развернул отдельный контейнер с Nextcloud. Для меня важным стало резервное копирование жесткого диска, на котором хранятся пользовательские файлы Nextcloud. Это привело к увеличению суммарного размера ежедневной резервной копии с 5 ГБ до 30 ГБ и более. Такая ситуация оказалась неприятной и требовала поиска решения. Кроме того, я передавал полученные резервные копии из Nextcloud на основной компьютер для дополнительного резервного копирования, так как я не хотел рисковать потерей данных в случае отказа жесткого диска. Однако передача такого объема данных ежедневно по сети вызывала определенные неудобства, особенно учитывая тенденцию к увеличению объема данных. Попытка обсудить эту проблему в профильных чатах привела меня к изучению нового инструмента - Proxmox Backup Server (PBS). Зачем это все и что нам это дает? Основное отличие PBS заключается в том, что он не хранит полные копии бэкапов, а осуществляет запись только изменений в файлах. Этот процесс часто описывается термином 'инкрементальное резервное копирование' или 'дифференциальное резервное копирование'. Также имеется возможность настройки синхронизации с удаленным хранилищем, используя NFS. PBS автоматически проверяет целостность бэкапов, предоставляя также ряд других полезных функций. В моем случае, я хранил бэкапы за 3 дня (после добавления Nextcloud пришлось сократить историю с 7 до 3 дней), что в сумме занимало около 90-110 Гб на жестких дисках сервера и основного компьютера. Размер каждой виртуальной машины в архиве составлял от 5 до 10 Гб, а Nextcloud занимал около 20 Гб. После перехода на использование PBS, я теперь храню 30 резервных копий каждой виртуальной машины, занимающих примерно 65 Гб. Стоит отметить, что эти значения ситуативны и зависят от степени изменений данных. Если в вашем случае много изменений в больших файлах, то и объемы будут увеличиваться соответственно. Например, если вы решите создавать резервные копии фильмов (хотя зачем это нужно - другой вопрос). Фактически, PBS создает полную копию на первом этапе, а затем сохраняет только изменения по сравнению с предыдущей версией, что позволяет создавать некую 'машина времени' для данных. Особенности использования, или не все так радужно как хотелось бы... В отличие от бэкапов, создаваемых в виде архива, в данном случае мы получаем служебные файлы, которые кроме Proxmox никто прочитать не сможет. Это может быть серьезной проблемой, если надо вручную что-то вытащить, но всегда можно открыть и скачать архив через веб-интерфейс сервиса. Также для душевного спокойствия я оставил формирование классических бэкапов Proxmox в архив, но только раз в неделю, которые Nextcloud перекладывает на основной компьютер, а я уже руками забираю на внешний жесткий диск. Еще одной проблемой является то, что PBS не может делать синхронизацию через Samba для переноса бэкапов на тот же компьютер под Windows. Сам PBS поддерживает только NFS, который Microsoft не предоставляет на не серверных версиях Windows. Перенести файлы в ручном режиме или через WebDAV тоже не особо поможет, так как они являются скрытыми и частично зашифрованными. Для решения этой проблемы я испробовал много разных способов: от создания NFS сторонним софтом и в WSL до запуска отдельной виртуальной машины. Но самым оптимальным у меня получилось решение по запуску через Docker, о котором я расскажу отдельно. Также сам PBS можно поставить несколькими способами. Рекомендуемым вариантом является развертывание отдельной машины с образом ISO PBS, альтернативой может быть установка в Debian как пакет. Не рекомендуемым, но допустимым является установка в PVE, не рекомендуется из-за того, что данные могут быть потеряны, если возникнут проблемы с хостом. Еще один не очевидный, не заявленный и точно не рекомендуемый (но кого это остановит ) способ - это установка как Docker-контейнер. Основная часть, или хватит лирики В моем случае у меня был мини-ПК с жестким диском, на котором хранились бэкапы, так что вариант с установкой в PVE мне показался достаточно оптимальным, так как не требовал отдельной железки и вообще это домашний тестовый стенд (ака подопытный кролик). С этим делом все достаточно просто, можем обратиться к официальной инструкции: [https://pbs.proxmox.com/docs/installation.html#install-proxmox-backup-server-on-proxmox-ve] Но я вынес сюда основные шаги, на самом деле их будет всего 2. Подключаемся по SSH к хосту Proxmox и приступаем. 1. Добавляем репозиторий с PBS в источники для PVE nano /etc/apt/sources.list И добавляем запись deb http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription Внимание!!! Я предполагаю, что лишние репозитории у вас были заранее выключены и используется бесплатная версия. Для этого можно воспользоваться скриптом для настройки Proxmox (применять после чистой установки, иначе на свой страх может ломать источники и бог знает что еще) bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/post-pve-install.sh)" Все скрипты: [https://tteck.github.io/Proxmox/] 2. Обновляем список пакетов и устанавливаем PBS apt update apt install proxmox-backup-server Собственно на этом все, у нас есть PBS на нашем основном хосте, заходим на него по адресу: [https://<ip-or-dns-name>:8007] Нас встречает стандартный интерфейс proxmox и полное непонимание что с этим всем делать, но где наши не пропадали велики методом тыка идем в раздел хранилище данных, и создаем новое хранилище данных. Фактически мы указываем путь, где будут лежать наши файлы бэкапов в разбиении на служебные файлы proxmox. После инициализации получаем обзорную информацию о нашем диске, тут можно оценить и прогноз по заполнению и фактор дедукции (то на сколько наши бэкапы повторяют себя) а также посмотреть статусы по регламентным заданиям. Тут же настроим задание проверки резервных копий на целостность. Следующим шагом необходимо настроить права для работы с полученным хранилищем. Идем в радел управление доступом и создаем нового пользователя: На вкладке разрешения настраиваем доступ к самому хранилищу, я в общем виде выдаю права администратора так как не вижу угрозы для своей системы, но данный вопрос можно подробно почитать в справке. Добавляем примерно так: В итоге должно получиться В интерфейсе хранилища данных так же должны быть такие записи !!! Внимание !!! Дополнительный раздел и не обязательные действия. Если у вас есть свой домен и отдельный пунктик на предупреждения браузера о само подписанных сертификатах можно выпустить новый сертификат с помощью dns chelenge если или закинуть свой сертификат. Это надо если не используете прокси сервер или для обеспечения стабильности когда npm лежит. Данная инструкция так же актуальна для Proxmox VE. Переходим в раздел сертификаты, вкладка учетные записи: Создаем новую учетную запись, и новую запись модуля. На вкладке сертификаты добавляем новую запись ACME и выполняем запрос сертификата Данные действия обязательно делать до подключения так как получение сертификата изменяет подпись вашего сервера PBS. Подключение PBS к proxmox VE, или когда это уже закончиться… Заходим в веб интерфейс proxmox VE, идем в раздел хранилаща и добавляем наш PBS В моем случае настройки выглядят так: Сервер указываем IP вашего хоста, отдельно обращаю внимание что соединение происходит по 8007 порту, отдельностоит обратить внимание при настройки прокси сервера. Настройки по хранению резервных копий делать не надо за это будет отвечать сам PBS. Отдельно надо отметить поле отпечаток, он нужен для установки ssl соединения между нашими системами. Что бы его получить возвращаемся в интерфейс PBS и на вкладке понель мониторинга нажимаем показать отпечаток. После завершения настройки у вас появиться новое хранилище в вашем интерфейсе Proxmox VE Настроим резервное копирование. Переходим в раздел корня – «Резервное копирование» и создаем новую запись. Дополнительных настроек не надо. Отдельно надо отметить, что вариант сжатия мы не выбираем за это, отвечает сам PBS. Так же не маловажная особенность по режимам, которая, может быть, и при обычном создании бэкапов, но при использовании PBS она возникает гарантировано. Если выбирать режим «Снимок», которые делает бэкапы без остановки виртуальных машин, в процессе бэкапа создается копия виртуальной машины со всеми подключенными (и указанными для бэкапа) дисками. Эта копия создается в директории /var основного хоста, и если в процессе не хватит места, то возникнет ошибка типа такой: ERROR: Backup of VM 101 failed - command 'rsync --stats -h -X -A --numeric-ids -aH --delete --no-whole-file --sparse --one-file-system --relative '--exclude=/tmp/?*' '--exclude=/var/tmp/?*' '--exclude=/var/run/?*.pid' /proc/1632/root//./ /proc/1632/root//./mnt/nextcloud /var/tmp/vzdumptmp128654_101' failed: exit code 11 Для исправления ее есть несколько способов я использовал два: 1. Та виртуалка которая не помещается во временные файлы бэкапиться в режиме «Остановка» 2. Увеличение пространства lvm root для того что бы поместились данные. При этом не надо что бы туда влазил весь выделенный диск, достаточно что бы в свободное пространство помещались все сохраняемые данные. Так же есть способы с переопределением директории /var но данные методы мне показались запутанными и пока для моей ситуации не востребованы. Так же у меня осталось регламентное копирование в архивы раз в неделю для переноса на внешний диск как я и писал в начале статьи. Фактически на этом настройка PBS закончена, вы можете создавать более правильные и оптимальные бэкапы. В отдельном материале я расскажу как настроить синхронизацию PBS с компьютером для создание дополнительного хранилища бэкапов. Всем спасибо за внимание, желаю вам удачных бэкапов которы не когда вам не понадобяться.
    1 балл
  34. Есть еще способ с CF для анонсов если в друг кто пользуется CDN -Request Header Transform Rules - Modify Response Header - Create Rule Custom filter expression (field) Uri Full (Operator) does not equal (Value) Домен подписки (https://xx.xx.xx:порт/sub/) Then (add) announce (value) base64:блаблабла Set new header (Set static) profile-web-page-url (Value) (sub page url) (https://hdrezka.ag ) если не хотите светить свой адрес подписки то можно прописать любой сайт так как в программе есть кнопки которые ведут на страницу подписки либо на то что вы указали !!! У этого варианта не нужно рестартить панель
    1 балл
  35. Здравствуйте. Спасибо за статью, а то я измучался с выбором NVMe. Теперь знаю, что позже можно спокойно увеличить. Ещё я вижу, что у вас NextCloud и Media установлены напрямую через LXC Container. Подскажите как расшарить папки с данными этих приложенией в домашней сети.
    1 балл
  36. "routing": { "domainStrategy": "IPIfNonMatch", "rules": [ { "outboundTag": "DIRECT", "domain": [ "full:cp.cloudflare.com", "domain:msftconnecttest.com", "domain:msftncsi.com", "domain:connectivitycheck.gstatic.com", "domain:captive.apple.com", "full:detectportal.firefox.com", "domain:networkcheck.kde.org", "full:*.gstatic.com" ], "type": "field" }, { "type": "field", "outboundTag": "ru-timeweb", "domain": [ "geosite:youtube", "ggpht.cn", "ggpht.com", "googlevideo.com", "gvt1.com", "gvt2.com", "video.google.com", "wide-youtube.l.google.com", "withyoutube.com", "youtu.be", "youtube.com", "youtubeeducation.com", "youtubeembeddedplayer.googleapis.com", "youtubefanfest.com", "youtubegaming.com", "youtubego.co.id", "youtubego.co.in", "youtubego.com", "youtubego.com.br", "youtubego.id", "youtubego.in", "youtubei.googleapis.com", "youtubekids.com", "youtubemobilesupport.com", "yt.be", "ytimg.com" ] }, { "protocol": [ "bittorrent" ], "outboundTag": "BLOCK", "type": "field" }, { "ip": [ "geoip:private" ], "outboundTag": "BLOCK", "type": "field" } ] }
    1 балл
  37. у всех все по разному настроено ко всем вариантам не подготовишься писал когда то такую, может поможет
    1 балл
  38. Доброго дня! Делаю все по инструкции вроде ошибок нет все ок, но d-dash не открывается в браузере, не могу понять в чем может быть проблема, стейты контейнеров healthy, стоит ОС Ubuntu 24.04 Извините, разобрался, проблема была в caddy, точнее моя невнимательность)
    1 балл
  39. Всем привет! Как обещал уже давно, выкладываю статью по установке и настройке самостоятельного форка Marzban'a - MARZNESHIN Это первая статья в Русском сегменте с полноценной инструкцией по установке. Две статьи по настройке и запуску Marzneshin с обратным проксированием через Caddy: И по установке и подключении ноды Marznode к Marzneshin: Статьи доступны по подписке к клубам: https://openode.xyz/subscriptions/
    1 балл
  40. Прикольная панелька, я потестил неделю, понравилось)
    1 балл
  41. Привет, сообщество! Я рад представить вам мой новый проект — VPS Insider! Это не просто блог о VPS-хостинге, а место, где я делюсь эксклюзивными обзорами и секретными предложениями VPS-хостингов, которые вы не найдете на популярных сайтах. Что такое VPS Insider? Каждый день или через день я буду публиковать обзоры малоизвестных VPS-хостингов, которые отличаются отличными предложениями, высокой производительностью и стабильностью. Все сервисы проходят личное тестирование, поэтому я делюсь только проверенной информацией. ------------------------ Что вас ждет на VPS Insider? - Подробные обзоры VPS-хостингов, которые не на слуху, но заслуживают внимания. - Эксклюзивные предложения и промокоды, с помощью которых вы сможете сэкономить на VPS. - Сравнения различных VPS, чтобы вы могли выбрать подходящее решение для своих проектов. ------------------------ Как подписаться на канал? Если вы хотите быть в курсе последних предложений и секретных промокодов, присоединяйтесь к нашему Telegram-каналу: ------------------------ Варианты оплаты: Рубли: через сервис ссылка (учтите, что возможны трудности с оплатой, так как некоторые банки блокируют подобные транзакции). Криптовалюта: ссылка (доступны TON, USDT, TRX). Telegram Звезды: оплата напрямую через сервис Telegram ссылка. ------------------------ Стоимость подписки: Подписка на канал стоит 200 Telegram звезд (примерно 300-350 рублей) в месяц. Подписчики получают доступ к эксклюзивным обзорам, секретным предложениям и свежим новостям. --- Оставайтесь на связи! Следите за обновлениями и не пропустите уникальные предложения VPS, которые помогут вам сэкономить и найти лучшее решение для ваших задач!
    1 балл
  42. Привет, сообщество! У меня для вас хорошие новости! Теперь на VPS Insider доступны новые способы оплаты, чтобы вам было удобнее оформить подписку на эксклюзивные обзоры и секретные предложения. Варианты оплаты: Рубли: через сервис ссылка (учтите, что возможны трудности с оплатой, так как некоторые банки блокируют подобные транзакции). Криптовалюта: ссылка (доступны TON, USDT, TRX). Telegram Звезды: оплата напрямую через сервис Telegram ссылка. Оставайтесь на связи и не пропустите наши обновления!
    1 балл
  43. Если беру - то делаю бенч, если не беру - то просто пишу каждому свое ) ну DO это большой выбор стран. Но все забывают, что в рамках каждой страны есть очень классные варианты. И иногда с более интересными предложениями по трафику например. А скорость 10гбс не везде нужна. В любом случае почти для всех требуется зарубежная карта, но без проблем принимают они и виртуальные.
    1 балл
  44. Двусторонний пинг на анонимность никак не влияет, просто доказывает то, что вы сидите через VPN
    1 балл
  45. Окей обновлю на днях инструкцию
    1 балл
  46. после применения этой статьи, перестало вообще чо работать да же к ssh не могу подключиться, сайты не грузиться да же удаление строк # ok icmp codes не помогает
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...

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

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

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