You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

337 lines
26 KiB

# 【Глава 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 Вместо послесловия
Надеюсь, это небольшое путешествие, в которое я вас отправил, поможет вам сделать интернет лучше.
Конечно, со временем информация из этого руководства устареет. Но вы будете расти и развиваться, и, возможно, когда-нибудь, вспоминая это руководство и те цели, которые я ставил перед собой, создавая его, вы передадите свои знания другим, чтобы эта эстафета помощи новичкам не прекращалась.
Мы живём в мире, где царят тьма и цензура. Люди бродят в одиночестве в поисках лучика света. И если мы не будем помогать друг другу и поддерживать друг друга на этом пути, то в конце концов нас ждёт лишь печальная картина запустения.
:::