Skip to content

wild-paws/xray

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 

Repository files navigation

Xray-core — VLESS + Reality через Docker

Ручная установка голого ядра Xray-core без панелей. Только Docker и конфиг файлы.


Содержание


Структура репозитория

.
├── config/
│   ├── 00_log.json        # Уровень логирования и пути к файлам логов
│   ├── 01_api.json        # gRPC API для управления xray на лету
│   ├── 02_dns.json        # DNS серверы для резолвинга доменов
│   ├── 03_routing.json    # Правила маршрутизации трафика
│   ├── 04_policy.json     # Таймауты соединений и размер буфера
│   ├── 05_inbounds.json   # Входящий VLESS+Reality: порт, UUID, ключи, SNI
│   ├── 06_outbounds.json  # Куда направлять трафик: в интернет или в блок
│   ├── 07_transport.json  # Глобальные настройки транспорта (убраны в новых версиях)
│   ├── 08_stats.json      # Счётчики трафика по пользователям для биллинга
│   └── 09_reverse.json    # Обратное проксирование (сервер → клиент)
└── logs/
    └── .gitkeep

1. Обновление системы

sudo apt update && sudo apt upgrade -y

2. Установка Docker

Официальные инструкции по установке Docker для твоей системы:


3. Скачать образ Xray

docker pull ghcr.io/xtls/xray-core:latest

Проверить версию ядра:

docker run --rm ghcr.io/xtls/xray-core:latest version

Актуальную версию смотри в пакетах репозитория.


4. Включить BBR

BBR — алгоритм управления перегрузкой TCP от Google. Увеличивает скорость, особенно на каналах с потерями пакетов. Применяется на уровне ядра хоста, контейнер подхватывает автоматически.

cat > /etc/sysctl.d/99-bbr.conf << 'EOF'
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF
sysctl -p /etc/sysctl.d/99-bbr.conf

Проверить:

sysctl net.ipv4.tcp_congestion_control
# → net.ipv4.tcp_congestion_control = bbr

5. Подобрать SNI

SNI (Server Name Indication) — домен под который маскируется трафик. Reality делает TLS handshake неотличимым от обращения к этому домену.

Важно: сканер запускай локально на своём компе. Запуск с VPS может привести к бану сервера хостером.

Скачать сканер

Страница релизов: https://github.com/XTLS/RealiTLScanner/releases/latest

Windows: скачай RealiTLScanner-windows-64.exe

Linux/Mac: скачай RealiTLScanner-linux-64, затем:

chmod +x RealiTLScanner-linux-64

Запустить сканирование

IP своего VPS смотри в личном кабинете хостера. Сканируй подсеть /16 — например, для VPS с адресом 195.66.24.43 это 195.66.0.0/16:

Windows:

RealiTLScanner-windows-64.exe -addr 195.66.0.0/16 -thread 10 -timeout 5

Linux/Mac:

./RealiTLScanner-linux-64 -addr 195.66.0.0/16 -thread 10 -timeout 5

Результаты сохранятся в out.csv. Нужны строки где feasible=true и TLS версия 1.3.

Из найденных доменов открой несколько в браузере — убедись что сайт реально работает и отдаёт HTTPS. Этот домен вставляешь в dest и serverNames в конфиге.


6. Скачать репозиторий

git clone https://github.com/wild-paws/xray.git /opt/xray
cd /opt/xray
chmod 777 logs

7. Сгенерировать UUID и ключи

UUID — идентификатор пользователя:

docker run --rm ghcr.io/xtls/xray-core:latest uuid

Пример:

0cbfd2e0-7368-4afb-a7e0-4ea78a2fa382

X25519 ключи — для шифрования Reality:

docker run --rm ghcr.io/xtls/xray-core:latest x25519

Пример:

Private key: YFOdjBK73yxpsyoSEJJmUaND6BFq65gv41OXfwERwkQ
Public key:  Ers1clRrYxF_eXQKPXvMmo4J6bhrkxB_F18UU9OghyA

Приватный ключ идёт в конфиг сервера, публичный — в ссылку для клиента.


8. Заполнить конфиг

В репозитории 05_inbounds.json содержит три входящих подключения — можно использовать все сразу или оставить только нужные.

Протоколы

VLESS + TCP + Reality (порт 443) — основной и самый совместимый. Трафик неотличим от обычного TLS к легитимному сайту. Работает на всех клиентах.

VLESS + XHTTP + Reality (порт 8443) — продвинутый вариант. XHTTP разделяет upload и download на два отдельных HTTP-соединения — это сильно затрудняет анализ трафика DPI по сравнению с TCP. Может работать через CDN. Минус — поддерживают только xray-based клиенты: v2rayTun, Happ, v2rayN, v2rayNG. Sing-box клиенты не поддерживают.

Shadowsocks 2022 (порт 54321) — простой и быстрый протокол. Менее стелсовый чем Reality, но полезен как запасной вход или для устройств где VLESS не поддерживается.

Открыть конфиг

nano /opt/xray/config/05_inbounds.json

Что куда вставить

Поле Что вставить
id UUID из шага 7 — одинаковый для TCP и XHTTP
dest и serverNames SNI домен из шага 5, например github.com
privateKey Приватный ключ из шага 7 — одинаковый для TCP и XHTTP
shortIds Произвольная hex-строка 2-16 символов, например 0a1b2c3d
path в xhttpSettings Произвольный путь, например /mypath2024 — должен совпадать в клиенте
password Пароль для Shadowsocks — см. ниже

Сгенерировать пароль для Shadowsocks

Метод 2022-blake3-aes-128-gcm требует ровно 16 байт в base64:

openssl rand -base64 16

Пример вывода:

zMpozIQdHJsSteIJfWGkDA==

Этот пароль вставляешь в поле password и используешь в клиенте.

Открыть порты для XHTTP и Shadowsocks

Если используешь дополнительные протоколы — открой их порты в UFW:

ufw allow 8443/tcp
ufw allow 54321/tcp
ufw allow 54321/udp

9. Маршрутизация трафика

Правила в 03_routing.json обрабатываются сверху вниз — первое совпадение побеждает.

Блок рекламы — режет рекламные домены до того как запрос уйдёт куда-либо:

{ "type": "field", "domain": ["geosite:category-ads-all"], "outboundTag": "block" }

Блок торрентов — xray распознаёт BitTorrent на уровне протокола и режет соединение:

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

Важно про split tunneling. Если хочешь чтобы российские сайты шли напрямую с устройства, минуя VPS — это настраивается на клиенте, не на сервере. direct на сервере означает лишь «не перенаправлять на следующий прокси», но запрос всё равно уходит с немецкого IP. Настрой правила маршрутизации в самом приложении (Happ, v2rayTun и др.) — там добавь geoip:ru, geosite:category-ru с тегом direct.


10. Настройка логов

Если логи не нужны — отключи их совсем:

nano /opt/xray/config/00_log.json
{
  "log": {
    "loglevel": "none",
    "access": "none",
    "error": "none"
  }
}

Если логи нужны

По умолчанию в конфиге уже стоит info — пишется каждое соединение с IP и доменом. Пути /var/log/xray/ внутри контейнера монтируются в /opt/xray/logs/ на хосте через команду запуска из шага 10.

Уровни логирования (каждый включает все уровни выше):

Уровень Что пишется
debug Всё подряд, только для отладки
info Каждое соединение с IP и доменом
warning Только проблемы
error Только критические ошибки
none Ничего

Ротация логов

Без ротации файлы будут расти бесконечно. Настраиваем автоматическое удаление когда файл достиг 1MB:

cat > /etc/logrotate.d/xray << 'EOF'
/opt/xray/logs/*.log {
    size 1M
    rotate 1
    missingok
    notifempty
    compress
    copytruncate
}
EOF
chmod 644 /etc/logrotate.d/xray

Проверить что конфиг написан без ошибок:

logrotate -v /etc/logrotate.d/xray

Если всё хорошо — в выводе не будет слова error. Если конфиг сломан, увидишь строку вида error: /etc/logrotate.d/xray:8 unexpected text.

Применить вручную прямо сейчас:

logrotate -f /etc/logrotate.d/xray

Logrotate без флагов запускается автоматически раз в сутки через cron — больше ничего настраивать не нужно.


11. Запустить контейнер

Открыть порты

Устанавливаем UFW если нет:

apt install ufw -y

Настраиваем правила — закрываем все входящие, кроме SSH и 443:

ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw allow 443/tcp
ufw enable

Проверить:

ufw status

Порт 443 выбран не случайно — это стандартный HTTPS. Трафик на 443 не вызывает подозрений у DPI и не блокируется провайдерами.

Запустить образ

docker run -d \
  -p 443:443 \
  -p 8443:8443 \
  -p 54321:54321 \
  -p 54321:54321/udp \
  --name xray --restart=always \
  -v /opt/xray/config:/usr/local/etc/xray \
  -v /opt/xray/logs:/var/log/xray \
  ghcr.io/xtls/xray-core:latest

Если используешь только VLESS+TCP — оставь только -p 443:443.

Проверить что запустился без ошибок:

docker logs xray

В логах должны быть строки Reading config: для каждого файла и отсутствие Failed to start.


12. Управление контейнером

Посмотреть логи:

docker logs xray

Перезапустить (например после изменений конфига):

docker restart xray

Остановить:

docker stop xray

Удалить контейнер:

docker rm -f xray

Удалить образ:

docker rmi ghcr.io/xtls/xray-core:latest

Полностью удалить всё — контейнер, образ, файлы, ротацию логов и BBR:

docker rm -f xray
docker rmi ghcr.io/xtls/xray-core:latest
rm -rf /opt/xray
rm -f /etc/logrotate.d/xray
rm -f /etc/sysctl.d/99-bbr.conf
sysctl -p

13. Собрать ссылку для клиента

VLESS + TCP + Reality

vless://UUID@IP_СЕРВЕРА:443?type=tcp&security=reality&pbk=ПУБЛИЧНЫЙ_КЛЮЧ&fp=FINGERPRINT&sni=SNI_ДОМЕН&sid=SHORT_ID&flow=xtls-rprx-vision&packetEncoding=xudp#НАЗВАНИЕ

Пример:

vless://0cbfd2e0-7368-4afb-a7e0-4ea78a2fa382@195.66.24.43:443?type=tcp&security=reality&pbk=Ers1clRrYxF_eXQKPXvMmo4J6bhrkxB_F18UU9OghyA&fp=ios&sni=github.com&sid=0a1b2c3d&flow=xtls-rprx-vision&packetEncoding=xudp#myserver-tcp

VLESS + XHTTP + Reality

vless://UUID@IP_СЕРВЕРА:8443?type=xhttp&security=reality&pbk=ПУБЛИЧНЫЙ_КЛЮЧ&fp=FINGERPRINT&sni=SNI_ДОМЕН&sid=SHORT_ID&path=%2Fapi%2Fv1%2Fstream&packetEncoding=xudp#НАЗВАНИЕ

Пример:

vless://0cbfd2e0-7368-4afb-a7e0-4ea78a2fa382@195.66.24.43:8443?type=xhttp&security=reality&pbk=Ers1clRrYxF_eXQKPXvMmo4J6bhrkxB_F18UU9OghyA&fp=ios&sni=github.com&sid=0a1b2c3d&path=%2Fapi%2Fv1%2Fstream&packetEncoding=xudp#myserver-xhttp

Про path: XHTTP маскирует трафик под обычные HTTP-запросы к веб-серверу. path — это URL-путь этих запросов. Он должен выглядеть как настоящий API-эндпоинт или статический файл, а не как /proxy или /vpn. В конфиге сервера и в ссылке клиента путь должен совпадать. В URL / кодируется как %2F.

Примеры хороших путей: /api/v1/stream, /cdn/assets/bundle, /static/js/app

XHTTP поддерживают только xray-based клиенты: v2rayTun и Happ. В Hiddify и Sing-box не работает.


Параметры

Параметр Значение
UUID Из шага 7
IP_СЕРВЕРА Внешний IP твоего VPS
pbk Публичный ключ из шага 7 (не приватный!)
fp Fingerprint браузера — см. таблицу ниже
sni SNI домен из шага 5
sid shortId из конфига
packetEncoding=xudp Обязательно для голосовых звонков в WhatsApp и Telegram
#НАЗВАНИЕ Отображаемое имя сервера в клиенте, например #myserver

Fingerprint — имитация конкретного браузера. Выбирай под устройство клиента:

fp Устройство
ios iPhone, iPad
android Android
chrome Chrome на Windows/Linux
firefox Firefox
edge Microsoft Edge

Ссылку вставляй в клиент через «Добавить по ссылке» или QR-код.


Клиенты

v2rayTun — iOS, Android, Windows, macOS. Быстрый, простой, бесплатный. Поддерживает все три протокола из этого конфига.

Happ — iOS, Android, Windows, macOS, Linux, tvOS, Android TV. Гибкие правила маршрутизации, зашифрованные подписки. Поддерживает все три протокола из этого конфига.

About

Self-hosted VLESS + Reality proxy on Docker. No panels, no bullshit — just bare Xray-core with split config files.

Topics

Resources

Stars

Watchers

Forks

Contributors