# 【Глава 8】Настройка Xray на клиенте ## 8.1 Как работает Xray: краткое описание Чтобы правильно настраивать и использовать `Xray`, важно понимать принципы его работы. Новичкам поможет упрощённая схема, на которой не показаны некоторые сложные моменты: ![Поток данных в Xray](./ch08-img01-flow.png) Ключевые моменты: 1. Приложение должно самостоятельно или с помощью стороннего инструмента перенаправить трафик на **входящее подключение** (`inbounds`) клиента `Xray`. 2. Поступивший на клиент трафик обрабатывается **модулем маршрутизации** (`routing`) в соответствии с заданными правилами и перенаправляется на разные **исходящие подключения** (`outbounds`) клиента `Xray`, например: - Трафик на китайские ресурсы — напрямую (`direct`) - Трафик на зарубежные ресурсы — через VPS (`proxy`) - Рекламный трафик — блокируется (`block`) 3. Трафик на зарубежные ресурсы, перенаправленный на VPS, проходит через Великий Китайский Файрвол и попадает на **входящее подключение** (`inbounds`) сервера `Xray`. 4. Как и на клиенте, трафик, поступивший на сервер, обрабатывается **модулем маршрутизации** (`routing`) в соответствии с заданными правилами и перенаправляется на разные **исходящие подключения** (`outbounds`): - Поскольку сервер находится за пределами Китая, трафик по умолчанию идёт напрямую, что позволяет получить доступ к заблокированным ресурсам (`direct`). - При необходимости можно настроить перенаправление трафика на другие VPS (`proxy`). - На сервере также можно блокировать нежелательный трафик, например, рекламу или торренты (`block`). :::warning Внимание! Важно помнить, что маршрутизация в `Xray` очень гибкая, и описанный выше сценарий — лишь один из множества возможных. Используя файлы `geosite.dat` и `geoip.dat`, можно очень гибко управлять маршрутизацией трафика по доменным именам и IP-адресам. Это гораздо удобнее, чем устаревший `GFWList`, поскольку позволяет очень точно настроить правила: например, можно разрешить прямое подключение к доменам Apple, перенаправить трафик на домены Amazon через прокси-сервер, блокировать доступ к доменам Baidu и т. д. Более подробно о маршрутизации в Xray читайте в статье [«Разбор функции маршрутизации (routing)»](../level-1/routing-lv1-part1.md). Советую сначала дочитать эту главу и настроить базовый клиент, а потом уже углубляться в тонкости маршрутизации. ::: ## 8.2 Подключение клиента к серверу Теперь, когда вы понимаете принципы работы `Xray`, настройка клиента сводится к тому, чтобы **сообщить ему, как подключиться к вашему VPS**. Это как настроить `PuTTY` для подключения к серверу, только в случае с Xray параметров подключения больше, чем IP-адрес, порт, имя пользователя и пароль. Набор параметров подключения в `Xray` зависит от используемого [протокола](../../config/inbounds/). В главе 7 мы настроили сервер на использование протокола `VLESS` с шифрованием `XTLS`. Посмотрим на файл конфигурации сервера, чтобы узнать, какие параметры нужны для подключения: - **Адрес сервера**: `sub.yourdomain.com` - **Порт сервера**: `443` - **Протокол**: `vless` - **Поток**: `xtls-rprx-vision` (режим `vision` подходит для всех платформ) - **Идентификатор**: `uuiduuid-uuid-uuid-uuid-uuiduuiduuid` - **Безопасность**: `"allowInsecure": false` Ниже приведен список популярных клиентов Xray для мобильных и настольных устройств. Каждый клиент имеет свой собственный интерфейс, поэтому я не буду делать скриншоты для каждого из них. Внимательно изучите документацию к выбранному клиенту и укажите нужные параметры подключения. :::warning Внимание! Многие клиенты поддерживают как `xray-core`, так и `v2fly-core`. Но по умолчанию может использоваться не тот, который вам нужен. Убедитесь, что вы выбрали нужный инструмент! ::: - **v2rayN - для Windows** - Скачайте последнюю версию из [репозитория на GitHub](https://github.com/2dust/v2rayN/releases) - Настройте клиент в соответствии с документацией - **v2rayNG - для Android** - Скачайте последнюю версию из [репозитория на GitHub](https://github.com/2dust/v2rayNG/releases) - Настройте клиент в соответствии с документацией - **Shadowrocket - для iOS, macOS на базе Apple M1** - Создайте учётную запись iCloud **не** в китайском регионе - Купите приложение в App Store - Настройте клиент в соответствии с документацией - **Qv2ray - кроссплатформенный графический интерфейс для Linux, Windows, macOS** - Скачайте последнюю версию из [репозитория на GitHub](https://github.com/Qv2ray/Qv2ray/releases) (или более новую версию из раздела [сборок на GitHub](https://github.com/Qv2ray/Qv2ray/actions)) - Изучите документацию на [сайте проекта](https://qv2ray.net/) - Настройте клиент в соответствии с документацией - **V2RayXS - клиент для macOS, основанный на V2RayX и использующий xray-core** - Скачайте последнюю версию из [репозитория на GitHub](https://github.com/tzmax/v2rayXS/releases) - Поддерживает импорт ссылок на конфигурации VLESS / VMessAEAD по стандарту, предложенному в [этой задаче](https://github.com/XTLS/Xray-core/issues/91) - Настройте клиент в соответствии с документацией На этом этапе ваша система готова к работе! ## 8.3 Дополнительное задание 1: настройка `xray-core` на ПК вручную Хотя на предыдущем шаге мы уже всё настроили, любознательным и обладающим хорошей памятью читателям наверняка вспомнятся мои слова из предыдущей главы о том, что `xray-core` можно запускать как на сервере, так и на клиенте. Так как же использовать `xray-core` в качестве клиента? Чтобы ответить на этот вопрос, я добавил этот раздел с дополнительным заданием. Оно немного выходит за рамки основного материала и может показаться сложным, но у него есть свои преимущества: - Вы всегда будете использовать самую последнюю версию `xray-core`, не дожидаясь, пока разработчики клиентов выпустят обновления. - Вы получите максимальную гибкость в настройке маршрутизации (хотя стоит отметить, что Qv2ray имеет мощный редактор маршрутизации, который позволяет настраивать все функции `xray-core`). - Вы сэкономите системные ресурсы (графические клиенты всегда потребляют больше ресурсов, чем консольные). Недостаток этого способа заключается в том, что вам придётся **настраивать клиент вручную, редактируя файл конфигурации**. Но ведь на сервере вы уже делали это, так что ничего сложного здесь нет. Давайте разберёмся по шагам: 1. Скачайте последнюю версию `xray-core` для вашей платформы из [репозитория на GitHub](https://github.com/XTLS/Xray-core/releases) и распакуйте архив в удобное место. 2. Создайте пустой файл конфигурации `config.json` в той же папке (думаю, с этим проблем не возникнет). 3. Что значит "удобное место"? Это зависит от платформы. 4. Заполните файл конфигурации. - Я написал пример конфигурации, основанный на схеме из раздела 8.1 (прямое подключение к китайским ресурсам, проксирование трафика на зарубежные ресурсы через VPS, блокировка рекламы) и параметрах подключения из раздела 8.2. - Замените `uuid` на идентификатор из вашей конфигурации сервера. - Замените `address` на доменное имя вашего сервера. - Замените `serverName` на доменное имя вашего сервера. - Я добавил подробные комментарии к каждому разделу конфигурации. ```json // ССЫЛКИ: // https://github.com/XTLS/Xray-examples // https://xtls.github.io/config/ // Типичный конфигурационный файл, как для сервера, так и для клиента, состоит из 5 основных частей. Разберём их по полочкам: // ┌─ 1_log Настройки логирования - что и куда писать в лог (чтобы было проще искать ошибки) // ├─ 2_dns Настройки DNS - как выполнять DNS-запросы (защита от DNS-спуфинга, защита от слежки, предотвращение маршрутизации трафика на китайские серверы и т. д.) // ├─ 3_routing Настройки маршрутизации - как обрабатывать трафик (фильтрация рекламы, разделение трафика для разных стран) // ├─ 4_inbounds Настройки входящих подключений - какой трафик может поступать на Xray // └─ 5_outbounds Настройки исходящих подключений - куда направлять трафик, исходящий от Xray { // 1_Настройки логирования // В этом примере я закомментировал настройки файлов логов, потому что в Windows, macOS и Linux используются разные пути. Укажите свои пути. "log": { // "access": "/home/local/xray_log/access.log", // Файл для записи логов доступа // "error": "/home/local/xray_log/error.log", // Файл для записи логов ошибок "loglevel": "warning" // Уровень детализации логов: "none", "error", "warning", "info", "debug" (от меньшего к большему) }, // 2_Настройки DNS "dns": { "servers": [ // 2.1 Запросы к зарубежным доменам отправляем на зарубежный DNS-сервер { "address": "1.1.1.1", "domains": ["geosite:geolocation-!cn"] }, // 2.2 Запросы к китайским доменам отправляем на китайский DNS-сервер и ожидаем получить китайский IP-адрес. Если адрес не китайский, используем следующий DNS-сервер { "address": "223.5.5.5", "domains": ["geosite:cn"], "expectIPs": ["geoip:cn"] }, // 2.3 Резервный китайский DNS-сервер { "address": "114.114.114.114", "domains": ["geosite:cn"] }, // 2.4 Если все предыдущие DNS-серверы не ответили, используем локальный DNS-сервер "localhost" ] }, // 3_Настройки маршрутизации // Маршрутизация позволяет перенаправлять трафик, соответствующий определённым условиям, на определённое исходящее подключение (см. раздел 5). "routing": { "domainStrategy": "IPIfNonMatch", "rules": [ // 3.1 Блокировка рекламных доменов { "type": "field", "domain": ["geosite:category-ads-all"], "outboundTag": "block" }, // 3.2 Прямое подключение к китайским доменам { "type": "field", "domain": ["geosite:cn"], "outboundTag": "direct" }, // 3.3 Проксирование трафика на зарубежные домены { "type": "field", "domain": ["geosite:geolocation-!cn"], "outboundTag": "proxy" }, // 3.4 Трафик, который идёт на DNS-сервер 223.5.5.5, отправляем напрямую { "type": "field", "ip": ["223.5.5.5"], "outboundTag": "direct" }, // 3.5 Прямое подключение к китайским IP-адресам { "type": "field", "ip": ["geoip:cn", "geoip:private"], "outboundTag": "direct" } // 3.6 Правило по умолчанию // В Xray любой трафик, который не соответствует ни одному из правил маршрутизации, отправляется на первое исходящее подключение (см. раздел 5.1). Поэтому важно разместить настройки прокси-сервера на первом месте. ] }, // 4_Настройки входящих подключений "inbounds": [ // 4.1 Обычно используется протокол SOCKS5 для локального перенаправления трафика { "tag": "socks-in", "protocol": "socks", "listen": "127.0.0.1", // Адрес, на котором будет слушать SOCKS5-сервер "port": 10800, // Порт, на котором будет слушать SOCKS5-сервер "settings": { "udp": true } }, // 4.2 Некоторые приложения не поддерживают SOCKS. Для них можно использовать HTTP-прокси { "tag": "http-in", "protocol": "http", "listen": "127.0.0.1", // Адрес, на котором будет слушать HTTP-сервер "port": 10801 // Порт, на котором будет слушать HTTP-сервер } ], // 5_Настройки исходящих подключений "outbounds": [ // 5.1 Настройки прокси-сервера // Этот раздел должен быть первым, как уже было сказано в разделе 3.6. Все правила по умолчанию будут использовать эти настройки. { "tag": "proxy", "protocol": "vless", "settings": { "vnext": [ { "address": "sub.yourdomain.com", // Замените на доменное имя вашего сервера "port": 443, "users": [ { "id": "uuiduuid-uuid-uuid-uuid-uuiduuiduuid", // Должен совпадать с идентификатором на сервере "flow": "xtls-rprx-vision", "encryption": "none", "level": 0 } ] } ] }, "streamSettings": { "network": "tcp", "security": "tls", "tlsSettings": { "serverName": "sub.yourdomain.com", // Замените на доменное имя вашего сервера "allowInsecure": false, // Запретить использование недоверенных сертификатов "fingerprint": "chrome" // Использовать uTLS для подмены отпечатка браузера Chrome / Firefox / Safari или случайный отпечаток } } }, // 5.2 Прямое подключение // Используется, если в настройках маршрутизации указан тег "direct" { "tag": "direct", "protocol": "freedom" }, // 5.3 Блокировка трафика // Используется, если в настройках маршрутизации указан тег "block" { "tag": "block", "protocol": "blackhole" } ] } ``` ## 8.4 Дополнительное задание 2: запуск `xray-core` на ПК Итак, мы создали файл конфигурации. Как теперь запустить `xray-core`? Двойной клик по файлу не работает! Во-первых, вам нужно открыть **командную строку**. 1. Пользователи Linux и macOS наверняка знают, как это сделать. Просто найдите приложение **«Терминал»**. 2. В Windows используйте **«Командную строку»** или **PowerShell** (пользователи WSL, можете использовать привычный вам **«Терминал»**). Во-вторых, нам нужно **указать `xray` путь к файлу конфигурации `config.json` и запустить его**. 1. В Windows, если файл `xray.exe` находится в папке `C:\Xray-windows-64\`, а файл `config.json` — в той же папке, то команда запуска будет выглядеть так: ```shell C:\Xray-windows-64\xray.exe -c C:\Xray-windows-64\config.json ``` :::tip Параметр `-c` указывает путь к файлу конфигурации. ::: 2. Аналогично, в Linux и macOS, если файл `xray` находится в папке `/usr/local/bin/`, а файл `config.json` — в папке `/usr/local/etc/xray/`, то команда запуска будет выглядеть так: ```shell /usr/local/bin/xray -c /usr/local/etc/xray/config.json ``` :::tip В каждом системе есть переменные окружения, которые хранят пути к часто используемым папкам. Поэтому указывать полный путь к файлу `xray` не обязательно. Но я всё же указал его для надёжности. ::: ## 8.5 Дополнительное задание 3: автозапуск `xray-core` на ПК Если вы попробовали запускать `xray-core` вручную, то наверняка заметили следующие недостатки: 1. При каждом запуске `Xray` открывается чёрное окно консоли, что не очень красиво. 2. `Xray` не запускается автоматически при загрузке системы, поэтому его приходится запускать вручную каждый раз. Спешу вас обрадовать: **эти проблемы решаемы!** Но как именно их решить, я оставлю вам в качестве домашнего задания (подсказка: загляните в раздел FAQ на сайте документации). ## 8.6 Финишная прямая! Уверен, что те, кто дочитал до этого места, — это любознательные и целеустремлённые люди, которые готовы учиться новому! Я от всей души поздравляю вас, ведь вы **самостоятельно, начиная с самых азов, настроили сервер VPS и клиент Xray!** Это огромная победа! Надеюсь, теперь вы больше не боитесь `Linux` и разобрались с тем, как работает `Xray`. **На этом наше повествование завершается!** > ⬛⬛⬛⬛⬛⬛⬛⬛ 100% ## 8.7 В бесконечность и далее! **Но это ещё не всё, что может Xray.** `Xray` — это мощный и многофункциональный инструмент, который можно использовать для решения самых разных задач. В этом руководстве мы лишь поверхностно рассмотрели **самые простые** и **наглядные** варианты его настройки. Если вам достаточно и этого, то наслаждайтесь свободой в интернете! Но если ваш пытливый ум жаждет новых знаний, то продолжайте изучать безграничные возможности `Xray`! Дополнительную информацию можно найти здесь: 1. [xtls.github.io](https://xtls.github.io/) — официальная документация 2. [Официальная группа в Telegram](https://t.me/projectXray) — активное и дружелюбное сообщество ![В бесконечность и далее!](./ch08-img02-buzz.png) :::tip Вместо послесловия Надеюсь, это небольшое путешествие, в которое я вас отправил, поможет вам сделать интернет лучше. Конечно, со временем информация из этого руководства устареет. Но вы будете расти и развиваться, и, возможно, когда-нибудь, вспоминая это руководство и те цели, которые я ставил перед собой, создавая его, вы передадите свои знания другим, чтобы эта эстафета помощи новичкам не прекращалась. Мы живём в мире, где царят тьма и цензура. Люди бродят в одиночестве в поисках лучика света. И если мы не будем помогать друг другу и поддерживать друг друга на этом пути, то в конце концов нас ждёт лишь печальная картина запустения. :::