# easy-xray *XRay - это просто* [(EN)](README.md) [(CN(todo))](README.cn.md) [XRay (aka ProjectX)](https://xtls.github.io/en/) - современное решение для обхода интернет-цензуры. Он - как прокси - позволяет проводить трафик через сервер (VPS) за пределами региона с цензурой, при этом подключение к серверу XRay выглядит как подключение к обычному сайту. Попытки обнаружения VPN, такие как активное зондирование [(active probing)](https://ensa.fi/active-probing/) или блокировка по правилу «блокируем все протоколы, кроме https», для XRay не страшны. Кроме того, сервер XRay можно настроить на открытие только "зарубежных" веб-сайтов, что предотвращает попытки обнаружения туннеля сайтами "домашнего" региона. XRay (в случае использования протокола VLESS-Reality) не шифрует уже зашифрованный https-трафик, поэтому нагрузка на процессор невелика. XRay не нужно поддерживать соединение, и пользователям не нужно время от времени повторно подключаться к нему вручную. При правильной настройке клиента пользователям не нужно отключаться от сервера, чтобы перейти на большинство веб-сайтов "домашнего" региона. ![схема: трафик до зарубежных сайтов идёт через сервер, а до домашних сайтов - напрямую с ПК](figs/xray-schematic.png) Помимо плюсов, у XRay есть и недостатки - например, сложная настройка и администрирование, что стало мотивацией для создания этого репозитория и скрипта `ex.sh`. Этот скрипт поможет - установить/обновить/удалить XRay - генерировать учетные данные и конфигурации сервера/клиента - добавлять/удалять пользователей - и т. д. ### Как использовать на VPS #### Linux Для начала нужно арендовать VPS сервер вне региона с цензурой (или попросить друзей заграницей сделать это). После на сервер нужно установить [jq](https://jqlang.github.io/jq/) и `openssl` - их можно найти в репозиторияx практически всех популярных Linux дистрибутивов. Затем скачайте `easy-xray` (всю директорию целиком), сделайте исполняемым файл `ex.sh` и запустите нужную команду. Используйте `./ex.sh help` для получения списка всех команд и короткой справки по ним. Для установки и настройки xray используйте `./ex.sh install` - эта команда предложит вам ввести ip-адрес вашего сервера, адрес сайта, под который ваш сервер будет маскироваться, и имена пользователей. ``` chmod +x ex.sh ./ex.sh help sudo ./ex.sh install ``` В результате у вас появится директория `conf` с серверным конфигом, основным клиентским конфигом и конфигами пользователей. Серверный конфиг будет должным образом установлен, а xray - запущен с ним. Настало время раздать конфиги пользователям! Для многих графических клиентов удобно использовать конфиги в виде ссылок, которые можно сгенерировать командой `./ex.sh link user_config_file.json`. #### Docker Скрипт `ex.sh` написан прежде всего для использования в системе с systemd, однако может быть использован и в Docker. Для этого скачайте директорию `easy-xray` (из ветки main) и соберите образ Docker, используя файл `Dockerfile`; ключ -t задаёт тег, например `ximage`: ``` curl -L https://codeload.github.com/EvgenyNerush/easy-xray/tar.gz/main | tar -xz cd easy-xray-main # обратите внимание на `-main` !! docker build -t ximage ./ ``` Обычно пользовательские приложения не могут использовать порты ниже 1024, однако для того, чтобы замаскировать xray сервер под обычный вебсайт, мы должны использовать порты 80 и 443. Поэтому для начала на хосте нужно разрешить пользовательским приложениям использовать порты, начиная с 80-го (эту команду, возможно, придётся выполнять после каждой перезагрузки системы): ``` sudo sysctl -w net.ipv4.ip_unprivileged_port_start=80 ``` Также нужно разрешить не-залогиненному пользователю выполнять долгоживущие сервисы. Иначе после выхода пользователя с сервера контейнер может перестать работать: ``` sudo loginctl enable-linger your_username ``` Теперь можно запустить docker контейнер в интерактивном режиме (флаги `-i -t`), пробрасывая порты 80 и 443 от хоста к контейнеру: ``` docker run -it --name xcontainer -p 80:80 -p 443:443 ximage ``` В интерактивном режиме можно установить и сконфигурировать xray так же, как и в обычной системе, кроме последнего шага - копировать серверный конфиг в директорию xray и перезапускать xray через systemctl нет смысла. Сообщения об отсутствии systemd можно просто проигнорировать. Xray можно запустить с серверным конфигом вручную: ``` ./ex.sh install xray -c conf/config_server.json ``` После запуска xray можно отсоединиться от контейнера, используя *Ctrl+p затем Ctrl+q*. Если нужно снова присоединиться к контейнеру, можно использовать `docker attach xcontainer` (после этого нужно нажать *Ctrl+c*, чтобы завершить работающий xray), или можно воспользоваться командой `docker exec -it xcontainer bash` для запуска ещё одной сессии. Для того, чтобы скопировать конфиг-файлы из контейнера на хост, сначала нужно узнать Id контейнера: ``` docker ps -a docker cp 123abc456def:/easy-xray/conf ./ ``` Команду `./ex.sh link conf_file` можно использовать на любом компьютере с Linux, если на нём хранятся конфиг-файлы. Работающий xray для этой команды не нужен. ### Клиенты #### Linux Для подключения к XRay-серверу существуют клиенты с графическим интерфейсом (Nekoray, v2rayA,..), но о них чуть позже. На Linux удобно использовать сам XRay в качестве клиента. XRay можно установить вручную, используя [официальный скрипт](https://github.com/XTLS/Xray-install), после чего скопировать `customgeo.dat` в `/usr/local/share/xray/`. Другой вариант установить XRay и `customgeo.dat` - воспользоваться командой `sudo ./ex.sh install`. Затем нужно скопировать клиентский конфиг с сервера и выполнить ``` sudo cp config_client_username.json /usr/local/etc/xray/config.json sudo systemctl start xray ``` или ``` sudo xray run -c config_client_username.json ``` XRay с текущим клиентским конфигом создаёт локальные http/https и socks5 прокси, которые могут быть прописаны в настройки Телеграма или браузера примерно так: ![прокси в браузере: http/https прокси 127.0.0.1 порт 801, socks5 хост 127.0.0.1 порт 800](figs/browser-proxy-settings.png) Чтобы проверить, что трафик до "зарубежных" и "домашних" сайтов идёт разными путями, зайдите на [whatismyip.com](https://www.whatismyip.com/) и [2ip.ru](https://2ip.ru/). Они должны показать разные ip-адреса и локации. #### Windows На Windows обычно используют клиенты с графическим интерфейсом - *v2rayN*, *v2rayA* и *nekoray (nekobox)*. Инструкции для них доступны по ссылкам: [v2rayN](V2RayN.ru.md) [v2rayA](V2RayA.ru.md) [nekoray](Nekoray.ru.md). #### MacOS Используйте сам XRay: ``` brew install xray cp customgeo.dat /usr/local/share/xray/ # not yet tested sudo xray -config=config_client_username.json ``` В качестве альтернативы можно использовать *v2rayA*. Это приложение имеет веб интерфейс, доступный в браузере по адресу localhost:2017. Детальные инструкции для v2rayA можно найти [здесь](V2RayA.ru.md). #### Android Для многих мобильных клиентов вся настройка заключается в том, что нужно вставить конфиг-ссылку из буфера обмена, а после добавить сайты из customgeo в подходящей форме (см. директорию `misc`) в "прямые" маршруты (в `Settings/Routing/Custom rules/Direct URL` или что-то подобное). Приложения, которые были протестированы, перечислены ниже. Скачайте из Google Play [V2RayNG](https://play.google.com/store/apps/details?id=com.v2ray.ang&pcampaignid=web_share), [HiddifyNG](https://play.google.com/store/apps/details?id=ang.hiddify.com&pcampaignid=web_share) или [Hiddify Next](https://play.google.com/store/apps/details?id=app.hiddify.com&pcampaignid=web_share). Они очень похожи друг на друга, здесь есть инструкции для [V2RayNG](V2RayNG.ru.md) и [HiddifyNG (EN)](HiddifyNG.en.md). #### iOS Используйте [Streisand](https://apps.apple.com/us/app/streisand/id6450534064). Конфигурирование аналогично тому, что описано для V2Ray или Hiddify, здесь [инструкция для Streisand](Streisand.ru.md). #### OpenWRT Используйте *v2rayA*. Инструкция [здесь](V2RayA.ru.md). #### Другие [Здесь](https://github.com/xtls/xray-core) можно найти дополнительный список клиентов. ### Tor В случае использования XRay в качестве клиента с текущей конфигурацией не должно возникнуть проблем. Однако большинство графических клиентов, хотя в качестве ядра используют xray, не дают полного доступа к его конфигурации. Из-за этого [Torbrowser](https://www.torproject.org/download/) не всегда может работать "из коробки". Если подключиться к сети Tor не удаётся, попробуйте использовать встроенный в Торбраузер obfs4 мост (специальный промежуточный сервер между вами и сетью Tor) - его можно найти в разделе Настройки/Соединение. ### Bittorrent Bittorent протокол блокируется в текущих настройках - использование bittorrent может привести к бану со стороны VPS провайдера. ### Что ещё? #### Советы Для того, чтобы выбрать сайт, который будет видеть на вашем сервере цензор в случае атаки active probing (`serverName` в конфигах), можно воспользоваться утилитой [RealiTLScanner](https://github.com/XTLS/RealiTLScanner). Она может просканировать адреса, близкие к вашему серверу (делайте это с домашнего компьютера, а не с сервера!), и показать имена сайтов на них. С помощью команды `nmap -T4 hostname` можно проверить, что на выбранном вами сервере открыты только порты 80 и 443 (как в настройках xray здесь). Также неплохо выбрать далёкий порт для ssh вместо 22-го, если на выбранном вами сайте этот порт не открыт. Дважды проверьте, что по выбранному вами порту ssh вы можете зайти на сервер - только после этого закрывайте порт 22. ``` #Port 22 Port 43210 ``` #### Ссылки Шаблонные конфиг-файлы для сервера и клиента (`template_config_*.json`) содержат много комментариев, которые могут помочь в создании своей собственной конфигурации клиента и сервера. Шаблонные конфиги сделаны на основе этих [двух](https://github.com/XTLS/Xray-examples/tree/main/VLESS-gRPC-REALITY) [примеров](https://github.com/XTLS/Xray-examples/tree/main/VLESS-TCP-XTLS-Vision-REALITY). [Описание всех возможных полей XRay конфигов (EN)](https://xtls.github.io/en/config/) очень подробное и хорошо помогает. [Здесь](https://github.com/EvgenyNerush/coherence-grabber) детали того, как собраны сайты для доступа напрямую, прописанные в `customgeo`. [Эта статья](https://habr.com/ru/articles/731608/) помогла мне установить XRay в первый раз. [Чат проекта](https://t.me/eXRay_chat) в Телеграм.