Подключение ноды через VLESS (XRAY) | Remnawave v2.8.0+

В версии Remnawave 2.8.0 было добавлено использование socks5 прокси для подключения нод (проксирования соединений от панели к ноде).

Но нам не обязательно использовать внешний socks для такого подключения. С помощью socks мы можем перенаправить подключение в локально поднятый xray. Это позволяет проксировать соединение любым транспортом или протоколом, который поддерживает ядро: WebSocket, gRPC, XHTTP, TCP+REALITY и т.п. В итоге можно подключать ноды, например, через CDN.

Структура файлов:

/opt/xray-docker/
├── docker-compose.yml
└── xray/
    ├── error.log
    ├── access.log
    └── config.json  # конфигурация xray

  1. Создаём рабочую директорию:
mkdir -p /opt/xray-docker/xray
  1. Заранее создаём файлы логов, иначе Docker смонтирует их как директории:
touch /opt/xray-docker/xray/error.log /opt/xray-docker/xray/access.log
  1. Создаём и редактируем /opt/xray-docker/xray/config.json конфиг ядра xray, нам нужно создать inbound socks и добавить свой outbound.
    Вот пример конфига ядра:
{
  "inbounds": [
    {
      "listen": "0.0.0.0",
      "port": 3002,
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": false
      },
      "tag": "socks-in"
    }
  ],
  "log": {
    "error": "/xray/error.log",
    "access": "/xray/access.log",
    "dnsLog": false,
    "loglevel": "none"
  },
  "outbounds": [
    {
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "<IP/DOMAIN>",
            "port": 443,
            "users": [
              {
                "encryption": "none",
                "flow": "",
                "id": "<UUID>"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "realitySettings": {
          "fingerprint": "chrome",
          "publicKey": "<pubKey>",
          "serverName": "<SNI>",
          "shortId": ""
        },
        "security": "reality",
        "tcpSettings": {}
      },
      "tag": "proxy"
    },
    {
      "protocol": "blackhole",
      "tag": "block"
    },
    {
      "protocol": "freedom",
      "tag": "direct"
    }
  ],
  "routing": {
    "domainStrategy": "IPOnDemand",
    "rules": [
      {
        "ip": [
          "0.0.0.0/8",
          "10.0.0.0/8",
          "100.64.0.0/10",
          "127.0.0.0/8",
          "169.254.0.0/16",
          "172.16.0.0/12",
          "192.0.0.0/24",
          "192.0.2.0/24",
          "192.88.99.0/24",
          "192.168.0.0/16",
          "198.18.0.0/15",
          "198.51.100.0/24",
          "203.0.113.0/24",
          "224.0.0.0/3",
          "::/127",
          "fc00::/7",
          "fe80::/10",
          "ff00::/8"
        ],
        "outboundTag": "direct"
      },
      {
        "outboundTag": "proxy",
        "network": "tcp,udp"
      }
    ]
  }
}
  1. Создаём /opt/xray-docker/docker-compose.yml:
services:
  xray:
    image: teddysun/xray:latest
    container_name: xray
    hostname: xray
    restart: unless-stopped
    networks:
      - remnawave-network
    volumes:
      - ./xray/config.json:/etc/xray/config.json
      - ./xray/error.log:/xray/error.log
      - ./xray/access.log:/xray/access.log

networks:
  remnawave-network:
    name: remnawave-network
    driver: bridge
    external: true

Контейнер подключается к сети remnawave-network, к той же, в которой работает панель. Поэтому Remnawave обращается к нему по имени xray.

  1. Команда для запуска/перезапуска:
cd /opt/xray-docker && docker compose down && docker compose up -d && docker compose logs -f -t
  1. Проверяем, что никаких ошибок нет.
    Смотрим логи docker. При необходимости включаем уровень логов DEBUG и смотрим логи xray access.log и error.log.
    Можно проверить работоспособность командой:
docker exec -it remnawave curl -k -x socks5h://xray:3002 https://ifconfig.me
  1. В настройках ноды в панели Remnawave укажите SOCKS-прокси:
socks5://xray:3002

мне кажется проблема в том, что никто не хочет тянуть ещё 1 контейнер ядра на ноду, можно кнш, использовать тоже ядро и сделать, чтото вроде
```
{
“tag”: “tun-in”,
“protocol”: “tun”,
“settings”:
{
“autoRoute”: true,
“strictRoute”: true
}
}
```

конкретные настройки могут отличатся, но думаю главная проблема именно в том, что никто не хочет тянуть ещё 1 контейнер