🚀 Быстрый старт

Подключитесь к серверу от имени root и выполните:

nano install.sh

Вставьте данный скрипт:

📥 Скачать
Загрузка содержимого install_remna.sh...

Подключитесь к серверу от имени root и выполните:

chmod +x install.sh && bash install.sh

📋 Возможности скрипта

  • Оптимизация: Включение BBR, управление IPv6, смена DNS, установка ядра XanMod.
  • Установка Remnawave: Настройка панели: автоматическая генерация всех секретных ключей (JWT, Database Pass), настройка docker-compose.yml. Установка ноды.
  • SSL и Nginx, Selfsteal: Интеграция с acme.sh для автоматического получения сертификатов (Wildcard через CF API или Standalone). Настройка Selfsteal.
  • Доп. компоненты: Установка WARP и Torrent Blocker одной кнопкой. DNS Balancer
  • Безопасность: Настройка UFW (Firewall) с открытием только нужных портов.
  • Управление сервисами: Редактирование конфигов. Запуск/останов/рестарт сервисов. Просмотр логов.
Важно: После установки доп. компонентов (WARP, Torrent Blocker) их нужно прописать в конфиг Xray (JSON) в самой панели.

⚙️ Пост-настройка (в Панели)

1. Если установили WARP

Добавьте этот блок в раздел outbounds вашего конфига Xray:

{
    "tag": "warp-out",
    "protocol": "freedom",
    "settings": {},
    "streamSettings": {
        "sockopt": {
            "interface": "warp",
            "tcpFastOpen": true
        }
    }
}

Добавьте этот блок в раздел routing вашего конфига Xray:

domain: Прописать домены (или geosite) для маршрутизации определенных сайтов.

inboundTag: Прописать ваши инбаунды "Node-1" и "Node-2", чтобы весь их трафик пустить через WARP

{
    "type": "field",
    "domain": ["netflix.com", "youtube.com", "geosite:category-ru"],
    "inboundTag": ["Node-1", "Node-2"],
    "outboundTag": "warp-out"
}

2. Если установили Torrent Blocker

В настройках конфигурации Xray укажите путь к логам: /var/log/remnanode/access.log

"log": {
    "error": "/var/log/remnanode/error.log",
    "access": "/var/log/remnanode/access.log",
    "loglevel": "error"
},

В конфиг Xray добавьте правило маршрутизации routing:

{
    "type": "field",
    "protocol": ["bittorrent"],
    "outboundTag": "TORRENT"
}

И соответствующий outbound:

{
    "protocol": "blackhole",
    "tag": "TORRENT"
}

3. Если установили Selfsteal

Измените ваш streamSettings в inbounds вашего конфига Xray:

Необходимо установить xver 1, так как в nginx включен proxy_protocol, чтобы логи nginx определяли реальный IP клиента, открывшего адрес заглушки.

В target (он же dest) указываем локальный адрес и порт заглушки.

В serverNames указываем domain заглушки.

"streamSettings": {
    "network": "raw",
    "security": "reality",
    "realitySettings": {
        "show": false,
        "xver": 1,
        "target": "127.0.0.1:9443",
        "shortIds": [
            ""
        ],
        "publicKey": "",
        "privateKey": "",
        "serverNames": [
            "gateway.domain.com"
        ]
    }
}

4. DNS Load Balancer (Auto-Switch)

Функция для автоматического переключения DNS-записи на наименее загруженную ноду. Включено в меню Доп. Компоненты -> Load Balancer.

Как это работает:
  • На Master-сервер (где панель) ставится "Балансировщик" (пункт 1). Он опрашивает агентов.
  • На все Worker-ноды ставится "Агент" (пункт 2). Он открывает порт 5050 и отдает статистику.
  • Если одна нода перегружена, балансировщик меняет IP вашего домена (например, best.domain.com) в Cloudflare на свободную ноду.

Порядок настройки:

  1. Запустите скрипт на всех Worker-нодах и выберите: Доп. Компоненты -> Load Balancer -> Установить Агента.
  2. Запустите скрипт на Master-сервере и выберите: Доп. Компоненты -> Load Balancer -> Установить Балансировщик.
    (Понадобится API Token от Cloudflare)
  3. Там же выберите Управление нодами -> Добавить Ноду и впишите IP-адреса ваших воркеров.

5. Каскадная маршрутизация

Клиент - RU нода - EU нода

Первым пунктом необходимо настроить конфигурацию Xray на зарубежной ноде.

Измените target, serverNames, сгенерируйте ключи publicKey и privateKey

Запомните publicKey вашего инбаунда, он понадобится при настройке RU ноды.

{
  "log": {
    "error": "/var/log/remnanode/error.log",
    "access": "/var/log/remnanode/access.log",
    "loglevel": "error"
  },
  "inbounds": [
    {
      "tag": "Vless TCP Reality EU",
      "port": 443,
      "listen": "0.0.0.0",
      "protocol": "vless",
      "settings": {
        "clients": [],
        "decryption": "none"
      },
      "sniffing": {
        "enabled": true,
        "destOverride": [
          "http",
          "tls",
          "quic"
        ]
      },
      "streamSettings": {
        "network": "raw",
        "security": "reality",
        "realitySettings": {
          "show": false,
          "xver": 0,
          "target": "example.com:443",
          "shortIds": [
            ""
          ],
          "publicKey": "12345678qwerty",
          "privateKey": "87654321",
          "serverNames": [
            "example.com"
          ]
        }
      }
    }
  ],
  "outbounds": [
    {
      "tag": "DIRECT",
      "protocol": "freedom"
    },
    {
      "tag": "BLOCK",
      "protocol": "blackhole"
    }
  ],
  "routing": {
    "rules": [
      {
        "ip": [
          "geoip:private"
        ],
        "type": "field",
        "outboundTag": "BLOCK"
      },
      {
        "type": "field",
        "domain": [
          "geosite:private"
        ],
        "outboundTag": "BLOCK"
      },
      {
        "type": "field",
        "protocol": [
          "bittorrent"
        ],
        "outboundTag": "BLOCK"
      }
    ]
  }
}

Вторым этапом необходимо создать пользователя Bridge (он будет сервисным пользователем, не давайте ключи для подключения к данному профилю!).

Запомните VLESS UUID пользователя Bridge, он понадобится при настройке RU ноды.

Третьим этапом необходимо настроить конфигурацию Xray на RU ноде.

В inbounds Vless TCP Reality RU измените target, serverNames, сгенерируйте ключи publicKey и privateKey

В outbounds vnext-outbound замените IP/domain вашей EU ноды, VLESS UUID пользователя Bridge, serverNames EU ноды.

В routing добавьте правила маршрутизации. geoip:ru и geosite:category-ru пустите напрямую с RU ноды, inboundTag укажите ваш inbound RU ноды, чтобы весь оставшийся трафик ушел на EU ноду.

{
  "log": {
    "error": "/var/log/remnanode/error.log",
    "access": "/var/log/remnanode/access.log",
    "loglevel": "error"
  },
  "inbounds": [
    {
      "tag": "Vless TCP Reality RU",
      "port": 443,
      "listen": "0.0.0.0",
      "protocol": "vless",
      "settings": {
        "clients": [],
        "decryption": "none"
      },
      "sniffing": {
        "enabled": true,
        "destOverride": [
          "http",
          "tls",
          "quic"
        ]
      },
      "streamSettings": {
        "network": "raw",
        "security": "reality",
        "realitySettings": {
          "target": "example.com:443",
          "show": false,
          "xver": 0,
          "shortIds": [
            ""
          ],
          "publicKey": "REPLACE_WITH_YOUR_PUBLIC_KEY",
          "privateKey": "REPLACE_WITH_YOUR_PRIVATE_KEY",
          "serverNames": [
            "example.com"
          ]
        }
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "tag": "DIRECT"
    },
    {
      "protocol": "blackhole",
      "tag": "BLOCK"
    },
    {
      "protocol": "vless",
      "tag": "vnext-outbound",
      "settings": {
        "vnext": [
          {
            "address": "IP_вашей_ноды_EU",
            "port": 443,
            "users": [
              {
                "id": "VLESS UUID_пользователя_Bride",
                "flow": "xtls-rprx-vision",
                "encryption": "none"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "raw",
        "security": "reality",
        "realitySettings": {
          "serverName": "example.com",
          "publicKey": "publicKey_вашей_ноды_EUы",
          "spiderX": "/"
        }
      }
    }
  ],
  "routing": {
    "rules": [
      {
        "ip": [
          "geoip:private"
        ],
        "outboundTag": "BLOCK",
        "type": "field"
      },
      {
        "domain": [
          "geosite:private"
        ],
        "outboundTag": "BLOCK",
        "type": "field"
      },
      {
        "protocol": [
          "bittorrent"
        ],
        "outboundTag": "BLOCK",
        "type": "field"
      },
      {
        "ip": [
          "geoip:ru"
        ],
        "outboundTag": "DIRECT",
        "type": "field"
      },
      {
        "domain": [
          "geosite:category-ru"
        ],
        "outboundTag": "DIRECT",
        "type": "field"
      },
      {
        "type": "field",
        "inboundTag": [
          "Vless TCP Reality RU"
        ],
        "outboundTag": "vnext-outbound"
      }
    ]
  }
}