Remnawave
Панель с удобным управлением пользователями и всем остальным сильно неудобным(((
- Создание ноды remnanode с ssl сертификатами (Если много нод)
- v.2 Создание ноды remnanode с ssl сертификатами (Если много нод)
- Профиль конфигурации для Vless TCP Reality с маскировкой под selfsteal
- Нода remnanode с прокси через CDN. timeweb, beget
Создание ноды 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
Настройка cdn beget
Настройка ноды
На ноду необходимо установить 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. Необходимо переписать ВСЕ настройки.
Далее после добавления инбаунда в сквад, в подписке появится подключение.