Remnawave

Панель с удобным управлением пользователями и всем остальным сильно неудобным(((

Создание ноды remnanode с ssl сертификатами (Если много нод)

Ниже описана инструкция по настройке ноды для панели remnawave, для ее использования необходимо заранее купить домен и создать поддомен для vps сервера.

Обновление пакетов и установка всех необходимых пакетов

Обновление и установка пакетов

apt update && apt install sudo curl nginx

Отключаем дефолтный сайт nginx

rm -f /etc/nginx/sites-enabled/default && systemctl stop nginx

Установка docker

sudo curl -fsSL https://get.docker.com | sh

Установка и выпуск сертификатов certbot

Каталоги для certbot в docker

mkdir -p /opt/certbot && cd /opt/certbot && nano docker-compose.yml

Вставьте следующее содержимое:

services:
  certbot:
    container_name: certbot
    image: certbot/certbot
    network_mode: host
    volumes:
      - ./certs:/etc/letsencrypt

Первичное получение сертификата
Замените your-domain.com и admin@your-domain.com на ваши данные:

docker run --rm \
  -v $(pwd)/certs:/etc/letsencrypt \
  -v $(pwd)/var-lib-letsencrypt:/var/lib/letsencrypt \
  --network host \
  certbot/certbot certonly --standalone \
  --non-interactive --agree-tos \
  --email admin@your-domain.com \
  -d your-domain.com
  

Удалить каталог README

rm /opt/certbot/certs/live/README

Установка remnanode

Создание каталога для remnanode

mkdir /opt/remnanode && cd /opt/remnanode && nano docker-compose.yml

Вставьте текст, не забудьте указать SECRET_KEY и NODE_PORT, если у вас он другой

services:
  remnanode:
    container_name: remnanode
    hostname: remnanode
    image: remnawave/node:latest
    network_mode: host
    restart: always
    cap_add:
      - NET_ADMIN
    ulimits:
      nofile:
        soft: 1048576
        hard: 1048576
    environment:
      - NODE_PORT=2272
      - SECRET_KEY=""
    volumes:
      - '/opt/certbot/certs/live:/etc/letsencrypt/live:ro'

Поднимаем контейнер, проверяем линк на панели.

docker compose up -d && docker compose logs -f -t

Скрипт для переноса ssl сертификатов в удобный каталог + параметры cron

Создаем скрипт для переноса файлов сертификата

cat > /opt/remnanode/update-certs-universal.sh << 'EOF'
#!/bin/bash

TARGET_DIR="/opt/certbot/certs/live"

echo "🔍 Анализируем $TARGET_DIR..."

# Ищем папку домена (игнорируем файлы)
DOMAIN=$(ls -A1 "$TARGET_DIR" 2>/dev/null | grep -E '^[a-zA-Z0-9][a-zA-Z0-9.-]*$' | grep -v '\.pem$' | head -1)

if [ -z "$DOMAIN" ]; then
    echo "❌ Папка домена не найдена, пробуем файлы в корне..."
    
    # Если нет папки — используем файлы из корня
    if [ -f "$TARGET_DIR/fullchain.pem" ] && [ -f "$TARGET_DIR/privkey.pem" ]; then
        echo "✅ Файлы уже в корне $TARGET_DIR — ничего не копируем"
        echo "Домен: auto (файлы в корне)"
        ls -la "$TARGET_DIR/"
        
        cd /opt/remnanode && docker compose restart remnanode
        echo "🔄 remnanode перезапущен"
        sleep 3
        docker logs remnanode --tail=10
        exit 0
    fi
    
    echo "❌ Ни папки домена, ни файлов в корне не найдено!"
    exit 1
fi

SOURCE_DIR="$TARGET_DIR/$DOMAIN"
echo "🔄 Найден домен: $DOMAIN → $SOURCE_DIR"

mkdir -p "$TARGET_DIR"

if [ -f "$SOURCE_DIR/fullchain.pem" ] && [ -f "$SOURCE_DIR/privkey.pem" ]; then
    cp "$SOURCE_DIR/fullchain.pem" "$TARGET_DIR/fullchain.pem"
    cp "$SOURCE_DIR/privkey.pem" "$TARGET_DIR/privkey.pem"
    chmod 644 "$TARGET_DIR/fullchain.pem"
    chmod 600 "$TARGET_DIR/privkey.pem"
    
    echo "✅ ✅ ✅ СЕРТИФИКАТЫ СКОПИРОВАНЫ ИЗ ПАПКИ ✅ ✅ ✅"
else
    echo "✅ Файлы уже в корне $TARGET_DIR"
fi

echo "📋 Финальное состояние:"
ls -la "$TARGET_DIR/"

cd /opt/remnanode && docker compose restart remnanode
echo "🔄 remnanode перезапущен"
sleep 3
docker logs remnanode --tail=10
EOF

chmod +x /opt/remnanode/update-certs-universal.sh

Запустить скрипт

cd /opt/remnanode
./update-certs-universal.sh

Добавить в cron задачу

(crontab -l 2>/dev/null; echo "0 0 28 * * cd /opt/certbot && docker compose run --rm certbot renew && /opt/remnanode/update-certs-universal.sh") | crontab -

Поднимаем заглушку

Запускаем nginx и добавляем в автозагрузку

sudo systemctl enable --now nginx

Создаем каталог для заглушки

mkdir -p /var/www/masq

Создаем html файл заглушки

tee /var/www/masq/index.html >/dev/null <<'HTML'
<!DOCTYPE html><html><head><meta charset="utf-8"><title>Please wait</title><style>body{background:#080808;height:100vh;margin:0;display:flex;flex-direction:column;align-items:center;justify-content:center;font-family:sans-serif}.dots{display:flex;gap:15px;margin-bottom:30px}.d{width:20px;height:20px;background:#fff;border-radius:50%;animation:b 1.4s infinite ease-in-out both}.d:nth-child(1){animation-delay:-0.32s}.d:nth-child(2){animation-delay:-0.16s}@keyframes b{0%,80%,100%{transform:scale(0);opacity:0.2}40%{transform:scale(1);opacity:1}}.t{color:#555;font-size:14px;letter-spacing:2px;font-weight:600}</style></head><body><div class="dots"><div class="d"></div><div class="d"></div><div class="d"></div></div><div class="t">RETRYING CONNECTION</div></body></html>
HTML

Создаем конфиг nginx

nano /etc/nginx/sites-available/masq

Вставляем конфиг ниже, необходимо заменить Y_D.ru на домен vps

server {
    listen 127.0.0.1:8443 ssl http2;
    server_name Y_D.ru www.Y_D.ru;

    root /var/www/masq;
    index index.html index.htm;

    ssl_certificate     /opt/certbot/certs/live/fullchain.pem;
    ssl_certificate_key /opt/certbot/certs/live/privkey.pem;

    location / {
        try_files $uri $uri/ /index.html;
    }
}

Создаем симлинк

ln -s /etc/nginx/sites-available/masq /etc/nginx/sites-enabled/masq

После перезагрузки nginx заглушка будет готова

sudo systemctl reload nginx

Сетевые настройки сервера

cat > /etc/sysctl.d/99-vpn-optim.conf << EOF
# VPN оптимизация - буферы 64MB
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864

# TCP буферы (min default max)
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864

# BBR + сетевые улучшения
net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq
net.core.netdev_max_backlog = 5000
EOF

# Применить
sysctl -p /etc/sysctl.d/99-vpn-optim.conf

# Проверить
sysctl net.core.rmem_max net.ipv4.tcp_congestion_control

v.2 Создание ноды remnanode с ssl сертификатами (Если много нод)

Ниже описана инструкция по настройке ноды для панели remnawave, для ее использования необходимо заранее купить домен и создать поддомен для vps сервера.

Обновление пакетов и установка всех необходимых пакетов

Обновление и установка пакетов

apt update && apt install curl nginx certbot

Отключаем дефолтный сайт nginx

rm -f /etc/nginx/sites-enabled/default && systemctl stop nginx

Установка docker

curl -fsSL https://get.docker.com | sh

Выпуск сертификатов certbot

Команда для выпуска сертификатов

certbot certonly --standalone -d Y_D.ru

В процессе установке необходимо со всем согласиться, указать домен и email

Установка remnanode

Создание каталога для remnanode

mkdir /opt/remnanode && cd /opt/remnanode && nano docker-compose.yml

Вставьте текст, не забудьте указать SECRET_KEY, NODE_PORT и заменить Y_D.ru

services:
  remnanode:
    container_name: remnanode
    hostname: remnanode
    image: remnawave/node:latest
    network_mode: host
    restart: always
    cap_add:
      - NET_ADMIN
    ulimits:
      nofile:
        soft: 1048576
        hard: 1048576
    environment:
      - NODE_PORT=2272
      - SECRET_KEY=""
    volumes:
      - '/etc/letsencrypt/live/Y_D.ru:/etc/letsencrypt/live:ro'

Поднимаем контейнер, проверяем линк на панели.

docker compose up -d && docker compose logs -f -t

Поднимаем заглушку

Запускаем nginx и добавляем в автозагрузку

systemctl enable --now nginx

Создаем каталог для заглушки

mkdir -p /var/www/masq

Создаем html файл заглушки

tee /var/www/masq/index.html >/dev/null <<'HTML'
<!DOCTYPE html><html><head><meta charset="utf-8"><title>Please wait</title><style>body{background:#080808;height:100vh;margin:0;display:flex;flex-direction:column;align-items:center;justify-content:center;font-family:sans-serif}.dots{display:flex;gap:15px;margin-bottom:30px}.d{width:20px;height:20px;background:#fff;border-radius:50%;animation:b 1.4s infinite ease-in-out both}.d:nth-child(1){animation-delay:-0.32s}.d:nth-child(2){animation-delay:-0.16s}@keyframes b{0%,80%,100%{transform:scale(0);opacity:0.2}40%{transform:scale(1);opacity:1}}.t{color:#555;font-size:14px;letter-spacing:2px;font-weight:600}</style></head><body><div class="dots"><div class="d"></div><div class="d"></div><div class="d"></div></div><div class="t">RETRYING CONNECTION</div></body></html>
HTML

Создаем конфиг nginx

nano /etc/nginx/sites-available/masq

Вставляем конфиг ниже, необходимо заменить Y_D.ru на домен vps

server {
    listen 127.0.0.1:8443 ssl http2;
    server_name Y_D.ru www.Y_D.ru;

    root /var/www/masq;
    index index.html index.htm;

    ssl_certificate     /etc/letsencrypt/live/Y_D.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/Y_D.ru/privkey.pem;

    location / {
        try_files $uri $uri/ /index.html;
    }
}

Создаем симлинк

ln -s /etc/nginx/sites-available/masq /etc/nginx/sites-enabled/masq

После перезагрузки nginx заглушка будет готова

systemctl reload nginx

Сетевые настройки сервера

cat > /etc/sysctl.d/99-vpn-optim.conf << EOF
# VPN оптимизация - буферы 64MB
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864

# TCP буферы (min default max)
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864

# BBR + сетевые улучшения
net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq
net.core.netdev_max_backlog = 5000
EOF

# Применить
sysctl -p /etc/sysctl.d/99-vpn-optim.conf

# Проверить
sysctl net.core.rmem_max net.ipv4.tcp_congestion_control

Профиль конфигурации для Vless TCP Reality с маскировкой под selfsteal

Сгенерируйте и замените your_secret_key на ваш приватный ключ (можно сгенерировать в редакторе профиля Remnawave)

Замените your_domain.ru на ваш домен

{
  "log": {
    "loglevel": "warning"
  },
  "dns": {
    "servers": [
      "1.1.1.1",
      "1.0.0.1"
    ]
  },
  "inbounds": [
    {
      "tag": "VLESS_REALITY_SELFSTEAL",
      "port": 443,
      "protocol": "vless",
      "settings": {
        "clients": [],
        "decryption": "none"
      },
      "sniffing": {
        "enabled": true,
        "destOverride": [
          "http",
          "tls",
          "quic"
        ]
      },
      "streamSettings": {
        "network": "raw",
        "security": "reality",
        "realitySettings": {
          "show": false,
          "xver": 0,
          "target": "127.0.0.1:8443",
          "spiderX": "/",
          "shortIds": [
            "6ba85179e30d4fc2"
          ],
          "privateKey": "your_secret_key",
          "serverNames": [
            "your_domain.ru"
          ]
        }
      }
    }
  ],
  "outbounds": [
    {
      "tag": "DIRECT",
      "protocol": "freedom"
    },
    {
      "tag": "BLOCK",
      "protocol": "blackhole"
    }
  ],
  "routing": {
    "rules": [
      {
        "ip": [
          "geoip:private"
        ],
        "outboundTag": "BLOCK"
      },
      {
        "domain": [
          "geosite:private"
        ],
        "outboundTag": "BLOCK"
      },
      {
        "protocol": [
          "bittorrent"
        ],
        "outboundTag": "BLOCK"
      }
    ]
  }
}

 

Нода remnanode с прокси через CDN. timeweb, beget

В связи с ограничениями со стороны хостеров вроде aeza, vk vloud, yandex cloud, предыдущие варианты обхода белых списков через vps с ip в разрешенном списке РКН, более невозможно. Сейчас, для доступа к внешнему интернету используется вариант с распределенной сетью CDN, в связи с особенностью работы технологии, ip адреса предоставляемые услугой CDN входят в список разрешенный список РКН.

Для реализации способа обхода необходимо арендовать vps сервер и выдать ему домен

Далее необходимо зарегистрироваться на timeweb или beget и заказать услугу cdn, во время оформления услуги указать ip арендованного vps сервера, ниже представлены настройки для разных сервисов.

Настройка CDN

Настройка cdn timeweb

photo_2026-05-22_18-23-01.jpgphoto_2026-05-22_18-23-00.jpg

photo_2026-05-22_18-23-02.jpgphoto_2026-05-22_18-23-03.jpg

photo_2026-05-22_18-23-07.jpgphoto_2026-05-22_18-23-05.jpg

Настройка cdn beget

Снимок экрана — 2026-05-24 в 20.46.44.pngСнимок экрана — 2026-05-24 в 20.47.47.png

Снимок экрана — 2026-05-24 в 20.48.03.pngСнимок экрана — 2026-05-24 в 20.48.30.png

Настройка ноды

На ноду необходимо установить remnanode и selfsni c помощью скрипта

Далее необходимо отредактировать конфигурационный файл nginx

nano /etc/nginx/sites-available/remnascrypt.conf

Вставить заменив Y_D.ru на ваш домен

server {
    listen 80;
    listen [::]:80;
    server_name Y_D.ru;

    location /.well-known/acme-challenge/ {
        root /var/www/remnascrypt;
        allow all;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name Y_D.ru;

    ssl_certificate     /etc/letsencrypt/live/Y_D.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/Y_D.ru/privkey.pem;

    root /var/www/remnascrypt;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /_xhttp {
        proxy_pass http://127.0.0.1:10085;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header Connection "";
        proxy_buffering off;
        proxy_request_buffering off;
        proxy_cache off;
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
        client_max_body_size 0;
    }
}

Проверить синтаксис и перезагрузить nginx

nginx -t && systemctl restart nginx

Настройка хоста в панели remnawave

К добавленной ноде необходимо создать профиль с конфигурацией

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "tag": "CDN_TIMEWEB",
      "port": 10085,
      "listen": "127.0.0.1",
      "protocol": "vless",
      "settings": {
        "clients": [],
        "decryption": "none"
      },
      "sniffing": {
        "enabled": true,
        "destOverride": [
          "http",
          "tls",
          "quic"
        ]
      },
      "streamSettings": {
        "network": "xhttp",
        "security": "none",
        "xhttpSettings": {
          "mode": "packet-up",
          "path": "/_xhttp",
          "extra": {
            "path": "/",
            "xmux": {
              "cMaxLifetimeMs": 0,
              "cMaxReuseTimes": 0,
              "maxConcurrency": "16-32",
              "maxConnections": 0
            },
            "seqKey": "page",
            "sessionKey": "X-Auth-Token",
            "xPaddingKey": "_ym_uid",
            "seqPlacement": "query",
            "xPaddingHeader": "X-Cache",
            "xPaddingMethod": "tokenish",
            "sessionPlacement": "header",
            "uplinkHTTPMethod": "GET",
            "xPaddingObfsMode": true,
            "xPaddingPlacement": "queryInHeader"
          },
          "noSSEHeader": false
        }
      }
    }
  ],
  "outbounds": [
    {
      "tag": "DIRECT",
      "protocol": "freedom"
    },
    {
      "tag": "BLOCK",
      "protocol": "blackhole"
    }
  ],
  "routing": {
    "rules": [
      {
        "ip": [
          "geoip:private"
        ],
        "outboundTag": "BLOCK"
      },
      {
        "domain": [
          "geosite:private"
        ],
        "outboundTag": "BLOCK"
      },
      {
        "protocol": [
          "bittorrent"
        ],
        "outboundTag": "BLOCK"
      }
    ]
  }
}

Далее нужно создать хост, выбрать созданный профиль и заменить yourcdn.com на домен выданный timeweb или beget. Необходимо переписать ВСЕ настройки.

Снимок экрана — 2026-05-24 в 21.40.57.pngСнимок экрана — 2026-05-24 в 21.42.00.png

Далее после добавления инбаунда в сквад, в подписке появится подключение.