В версии 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
- Создаём рабочую директорию:
mkdir -p /opt/xray-docker/xray
- Заранее создаём файлы логов, иначе Docker смонтирует их как директории:
touch /opt/xray-docker/xray/error.log /opt/xray-docker/xray/access.log
- Создаём и редактируем
/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"
}
]
}
}
- Создаём
/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.
- Команда для запуска/перезапуска:
cd /opt/xray-docker && docker compose down && docker compose up -d && docker compose logs -f -t
- Проверяем, что никаких ошибок нет.
Смотрим логи docker. При необходимости включаем уровень логов DEBUG и смотрим логи xrayaccess.logиerror.log.
Можно проверить работоспособность командой:
docker exec -it remnawave curl -k -x socks5h://xray:3002 https://ifconfig.me
- В настройках ноды в панели Remnawave укажите SOCKS-прокси:
socks5://xray:3002
