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

Поиск

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

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

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

Тип контента


Форумы

  • 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 Другие решения
  • Marzneshin (Форк Marzban) Инструкции
  • RemnaWave [new] Инструкции

Категории

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

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

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


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

  • Начало

    Конец


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

  • Начало

    Конец


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

Регистрация

  • Начало

    Конец


Группа


Обо мне


Пол

Найдено 6 результатов

  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 И получим такие варианты:
  2. Всем привет! Когда был 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 я добавил в перечень доменов - исключительно для проверки, что все правила у нас работают! Благодаря этому, мы легко сможем: Мониторить состояние ноды Мониторить потребление трафика Подключить ещё Ру-сервера для балансировки нагрузки, если у вас она высокая
  3. Настройка WireGuard через Wgcf без warp-cli Всем привет! Я не очень люблю использовать warp-cli в socks-режиме, поэтому стараюсь везде использовать только подключение через WireGuard. У этого есть один главный плюс: Не нужно устанавливать warp-cli на все ноды. Начнём настройку? Запускать можно из любой папки и на любом сервере. Мы будем использовать только файл конфигурации. 1. Скачиваем wgcf Заходим в репозиторий: Releases · ViRb3/wgcf (github.com) Выбираем версию под ваш сервер. Например, для amd64: wget https://github.com/ViRb3/wgcf/releases/download/v2.2.26/wgcf_2.2.26_linux_amd64 2. Перемещаем и переименовываем файл Переместите его в системную директорию и дайте имя wgcf: mv wgcf_2.2.26_linux_amd64 /usr/bin/wgcf 3. Разрешаем исполнение файла chmod +x /usr/bin/wgcf 4. Регистрируемся и генерируем конфигурацию wgcf register Создался файл: wgcf-account.toml wgcf generate Теперь появился файл: wgcf-profile.conf 5. Смотрим содержимое конфига Выполните команду: cat wgcf-profile.conf Нас интересуют две строки: PrivateKey и PublicKey. Они понадобятся при настройке XRAY. 6. Настраиваем маршрутизацию в ядре XRAY Добавьте новый outbound в конфиг XRAY: { "tag": "warp", "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" } ] } } Подставьте значения secretKey и publicKey из файла. Пример готового блока outbounds "outbounds": [ { "tag": "DIRECT", "protocol": "freedom", "settings": { "domainStrategy": "ForceIPv4" } }, { "tag": "warp", "protocol": "wireguard", "settings": { "DNS": "1.1.1.1", "peers": [ { "endpoint": "engage.cloudflareclient.com:2408", "publicKey": "bm00000000000000000Vo510h2wPfgyo=" } ], "address": [ "172.16.0.2/32" ], "secretKey": "MISEK000000000000000000vim6zWY=", "kernelMode": false } }, { "tag": "BLOCK", "protocol": "blackhole" }, { "tag": "IPv4", "protocol": "freedom", "settings": { "domainStrategy": "ForceIPv4" } } ] 7. Добавляем outboundTag в раздел routing Добавьте правило маршрутизации для нужных доменов: { "outboundTag": "warp", "domain": [ "geosite:google-gemini", "openai.com", "ai.com", "ipinfo.io", "iplocation.net", "spotify.com", "canva.com" ], "type": "field" } Итоговый вид этого блока будет примерно таким: FAQ Как проверить работу? Проверьте IP после подключения к VPN/Proxy и открытия сайта https://ipinfo.io — он должен быть из диапазона Cloudflare. Как пересоздать профиль? Удалите файлы wgcf-account.toml и wgcf-profile.conf, затем выполните wgcf register и wgcf generate. Заключение Теперь вы знаете, как настроить WireGuard через Wgcf без установки warp-cli. Это гибкий и масштабируемый способ, который легко внедряется в любую инфраструктуру. Если у вас есть вопросы или предложения, пишите в комментариях!
  4. Друзья, всем привет! Постарался как можно информативнее и детально разобрать установку и запуск новой панели Remnawave. Что разобрано: Установка и настройка Caddy в контейнере Настройка Remnawave Подключение Remnawave-json Настройка всех параметров Подключение RemnaNode (ноды для Remnawave) Доступ по подписке: https://openode.xyz/subscriptions/ А после, вступаем в клуб: https://openode.xyz/clubs/10-remnawave-new/
  5. Всем привет! Начну с картинок самой панели. Как вы могли заметить, данная панель очень похожа на всеми привычный 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 В панеле, указываем внутреннее имя, выбираем страну, указываем порт, и выбираем нужные инбаунды.
  6. Инструкция по миграции с Marzban на Remnawave 1. Подготовка сервера 1.1. Установка необходимых зависимостей # Обновление пакетов sudo apt-get update # Установка необходимых инструментов разработки и Git sudo apt-get install -y git wget 2. Миграция 2.1. Загрузка инструмента миграции # Скачивание последней версии мигратора cd ~/remnawave && wget https://github.com/remnawave/migrate/releases/download/v1.3.0/remnawave-migrate-v1.3.0-linux-amd64.tar.gz 2.2. Распаковка файла tar -xf remnawave-migrate-v1.3.0-linux-amd64.tar.gz 3. Настройка конфигурации 3.1. Распаковка файла Первым делом мы в блокноте заполним необходимые значения: ./remnawave-migrate \ --panel-type=marzban \ --panel-url="http://marzban.example.com" \ --panel-username="admin" \ --panel-password="password" \ --remnawave-url="http://remnawave.example.com" \ --remnawave-token="your-token" \ --preserve-status инструкция: | Flag | Environment Variable | Description | Default | | ---------------------- | -------------------- | ---------------------------------------------- | --------- | | `--panel-type` | `PANEL_TYPE` | Source panel type (`marzban` or `marzneshin`) | `marzban` | | `--panel-url` | `PANEL_URL` | Source panel URL | | | `--panel-username` | `PANEL_USERNAME` | Source panel admin username | | | `--panel-password` | `PANEL_PASSWORD` | Source panel admin password | | | `--remnawave-url` | `REMNAWAVE_URL` | Destination panel URL | | | `--remnawave-token` | `REMNAWAVE_TOKEN` | Destination panel API token | | | `--batch-size` | `BATCH_SIZE` | Number of users to process in one batch | 100 | | `--last-users` | `LAST_USERS` | Only migrate last N users (0 means all users) | 0 | | `--preferred-strategy` | `PREFERRED_STRATEGY` | Preferred traffic reset strategy for all users | | | `--preserve-status` | `PRESERVE_STATUS` | Preserve user status from source panel | false | Токен для Remnawave создаем здесь: Собственно на этом все. Миграция выполнится автоматически и быстро. 5. Проверка после миграции 5.1. Что проверить: 1. Количество мигрированных пользователей 2. Правильность перенесенных данных: - Логины - Пароли - Лимиты трафика - Даты истечения - Статусы пользователей 6. Важные замечания 6.1. SSL/HTTPS - Убедитесь, что SSL-сертификаты на обоих серверах действительны - При использовании самоподписанных сертификатов добавьте флаг -k или --insecure в curl-запросы - В URL обязательно используйте https:// 6.2. Безопасность - Сделайте резервную копию данных Marzban перед миграцией - Храните файл .env в безопасном месте - После миграции смените пароли администратора на обеих панелях 6.3. Решение проблем Если возникают ошибки: 1. Проверьте доступность обоих серверов 2. Убедитесь в правильности URL (https://) 3. Проверьте правильность учетных данных 4. Просмотрите логи миграции 6.4. Рекомендации по процессу 1. Начните с тестовой миграции нескольких пользователей 2. Проверьте корректность данных тестовых пользователей 3. Если тест успешен, выполните полную миграцию 4. Сохраняйте лог миграции для анализа возможных проблем 7. Пост-миграционные действия 1. Проверьте работоспособность сервисов для случайной выборки пользователей 2. Уведомите пользователей о завершении миграции 3. Обновите DNS-записи (если требуется) 4. Сохраните резервную копию данных старой панели Все подписки из Marzban будут работать если использовать актуальную версию страницы подписки: https://github.com/remnawave/subscription-page
×
×
  • Создать...

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

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

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