From 000701608a68c71094f7bc7dc1b05dee9e1f69af Mon Sep 17 00:00:00 2001 From: Evgeny Nerush <eugene.nerush@gmail.com> Date: Mon, 11 Nov 2024 23:06:58 +0300 Subject: [PATCH] add CDN instruction --- CDN.ru.md | 75 ++++++++++++++++++++++-------------------- README.ru.md | 10 +++--- misc/init0.sh | 11 ++++--- misc/init1.sh | 3 ++ template_site4cdn.conf | 2 +- 5 files changed, 56 insertions(+), 45 deletions(-) diff --git a/CDN.ru.md b/CDN.ru.md index f18164c..0f44c98 100644 --- a/CDN.ru.md +++ b/CDN.ru.md @@ -1,8 +1,8 @@ #### Первоначальная настройка VPS Xray нельзя поставить на "голый" сервер - нужна предварительная подготовка. Нужно создать пользователя, добавить его в группу sudo, -настроить фаервол и перенести порт ssh. Эти действия можно автоматизировать. Для redhat-based дистрибутивов можно использовать -скрипты [init0.sh](misc/init0.sh) и [init1.sh](misc/init1.sh). Скопируйте их на сервер +настроить фаервол и перенести порт ssh. Эти действия можно автоматизировать. Для redhat-based дистрибутивов можно использовать скрипты +[init0.sh](misc/init0.sh) и [init1.sh](misc/init1.sh). Скопируйте их на сервер ``` curl -L https://github.com/EvgenyNerush/easy-xray/blob/test/misc/init0.sh @@ -16,62 +16,65 @@ curl -L https://github.com/EvgenyNerush/easy-xray/blob/test/misc/init1.sh #### Cloudflare CDN Помимо прямого доступа (для которого достаточно одного IPv4-адреса), можно настроить доступ через сеть доставки контента (content delivery -networn, CDN) от Cloudflare. В этом случае проксировать трафик через xray, даже если IP-адрес вашего сервера заблокирован. -Для настройки прокси через CDN нужно: +networn, CDN) от Cloudflare. В этом случае можно проксировать трафик через xray, даже если IP-адрес вашего сервера заблокирован. Для +настройки прокси через CDN нужно: - завести бесплатный аккаунт на [cloudflare.com](https://www.cloudflare.com/), - оплатить серверу второй IP-адрес (IPv6 подойдёт, они обычно дешевле), - купить доменное имя (наподобие example.com, не важно, где вы его купите). -Доменное имя отдаётся под управление Cloudflare (Websites -> Add a domain), затем -добавляется IPv6-адрес вашего сервера (в разделе Websites дважды кликните на доменное имя, перейдите в DNS/Records и нажмите Add a record). -Для IPv6 адреса создавайте запись типа AAAA, если для доменного имени example.com создать запись с именем name, то name.example.com будет -вести на указанный вами IPv6-адрес. +Доменное имя отдаётся под управление Cloudflare (Websites -> Add a domain), затем добавляется IPv6-адрес вашего сервера (в разделе Websites +кликните на доменное имя, перейдите в DNS/Records и нажмите Add a record). Для IPv6 адреса создавайте запись типа AAAA, если для доменного +имени example.com создать запись с именем name, то name.example.com будет вести на указанный вами IPv6-адрес. ![cloudflare, раздел DNS/Records](figs/cloudflare-records.png) В настройках Network нужно включить поддержку gRPC - именно этот протокол позволит использовать xray через CDN. На странице SSL/TLS/Origin Server создайте сертификаты для связи вашего сервера с сетью CDN (файлы `cert.pem` и `cert.key`). **До запуска установки xray** скопируйте -ваши сертификаты Cloudflare в директорию со скриптом `ex.sh`! +ваши сертификаты `cert.pem` и `cert.key` в директорию `easy-xray`! Как работает доступ через CDN? Сети доставки контента задуманы для кеширования больших файлов: если большому числу пользователей в России -хочется посмотреть одно и то же видео с котятами, которое есть на сервере в США, гораздо выгоднее один раз скачать это видео на сервер в -России (кеш), и отдавать пользователям с него, чем много раз скачивать его из США. Нам ничего кешировать не нужно, мы просто пользуемся -возможностью бесплатно доставлять трафик через сервера Cloudflare. Важно, что в такой схеме ваше доменное имя резолвится в IP-адрес сервера -Cloudflare, через который может идти трафик большого количества других сайтов. Поэтому РКН, оценивая сопутствующий ущерб, может не решиться -на блокировку вашего xray сервера, даже если будет о нём знать. Чтобы лучше понять общую концепцию работы xray через CDN, прочитайте [вот -эту статью](https://habr.com/ru/articles/761798/). +хочется посмотреть одно и то же видео, которое есть на сервере в США, гораздо выгоднее один раз скачать это видео на сервер в России (кеш), +и отдавать пользователям с него, чем много раз скачивать из США. В то же время для обхода цензуры нам ничего кешировать не нужно, мы просто +пользуемся возможностью бесплатно доставлять трафик через сервера Cloudflare. Важно, что в такой схеме ваше доменное имя резолвится в +IP-адрес сервера Cloudflare, через который может идти трафик большого количества других сайтов. Поэтому РКН, оценивая сопутствующий ущерб, +может не решиться на блокировку вашего xray сервера, даже если будет о нём знать. Чтобы лучше понять общую концепцию работы xray через CDN, +прочитайте [вот эту статью](https://habr.com/ru/articles/761798/). +#### Easy-xray - - -Если вы делитесь доступом к своему серверу с другими людьми, рано или поздно IP-адрес вашего сервера может утечь к РКН, который добавит его -в список блокируемых сайтов, доступ к серверу при этом пропадёт. Если же сервер работает через сеть доставки контента (content delivery -network, CDN), то для доступа используется не IP-адрес, а доменное имя. Для того, чтобы заблокировать сервер в этом случае нужно будет -заблокировать один из серверов доменных имён CDN-провайдера (на котором "резолвится" ваше доменное имя). На этом сервере имён может -резолвиться большое число других сайтов (в том числе российских), и в случае блокировки они тоже перестанут работать. Так что, возможно, РКН -не станет идти на такие риски и не будет блокировать ваш сервер даже в случае обнаружения. - -CDN от Cloudflare позволяет бесплатно транспортировать grpc-трафик, однако вам потребуется купить какое-либо доменное имя. Чтобы понять -общую концепцию работы xray через CDN, прочитайте [вот эту статью](https://habr.com/ru/articles/761798/). - -**До запуска установки xray** скопируйте ваши сертификаты Cloudflare `cert.pem` и `cert.key` в директорию со скриптом `ex.sh`! - -Vless не может быть сконфигурирован с fallback при использовании grpc, соответственно, не может противостоять атаке active-probing. Поэтому -помимо xray нужно установить веб-сервер **nginx**, который будет обеспечивать перенаправление на сайт-заглушку. Easy-xray сгенерирует -"сайт" для nginx, который слушает IPv6 адрес и перенаправляет реальных пользователей на xray-сервер, слушающий на 127.0.0.1:50051. При -настройке easy-xray (при выполнении команды `sudo ./ex.sh install` или `./ex.sh conf`) укажите ваше доменное имя, и следуйте дальнейшим -инструкциям. После установки нужно проверить конфигурацию nginx и запустить его с помощью команд +После проделанной подготовки установка и настройка xray происходит как обычно, с помощью запуска `sudo ./ex.sh install`. Vless не может +быть сконфигурирован с fallback при использовании grpc, соответственно, не может противостоять атаке active-probing. Поэтому для +использования CDN скрипт `init0.sh` установит веб-сервер **nginx** - он обеспечит перенаправление на сайт-заглушку. Если вы не использовали +`init0.sh`, установите nginx вручную. Easy-xray сгенерирует "сайт" для nginx, который слушает IPv6 адрес и перенаправляет реальных +пользователей на xray-сервер, слушающий на 127.0.0.1:50051. Проверить конфигурацию nginx и запустить его можно с помощью команд ``` sudo nginx -t +sudo systemctl enable nginx sudo systemctl start nginx ``` -Если при попытке зайти на ваш "сайт" из браузера редирект (fallback) на сайт-заглушку не происходит (error 502, bad gateway), возможно, -политики SELinux запрещают nginx выполнять сетевые соединения. Чтобы это исправить, выполните команду +#### Возможные проблемы и их решения + +Если при попытке зайти по доменному имент на ваш "сайт" редирект (fallback) на сайт-заглушку не происходит (error 502, bad gateway), +возможно, политики SELinux запрещают nginx выполнять сетевые соединения. Чтобы это исправить, выполните команду ``` sudo setsebool -P httpd_can_network_connect 1 ``` +Чтобы посмотреть, какие порты не закрыты фаерволом, можно выполнить + +``` +sudo firewall-cmd --list-ports +``` + +Если фаервол закрывает 80 и 443 порты, слудует их открыть: + +``` +firewall-cmd --permanent --add-port=80/tcp +firewall-cmd --permanent --add-port=443/tcp +firewall-cmd --reload +``` + diff --git a/README.ru.md b/README.ru.md index 4d55bd9..cca9054 100644 --- a/README.ru.md +++ b/README.ru.md @@ -31,8 +31,11 @@ _Краткая инструкция_ Для начала нужно арендовать VPS сервер вне региона с цензурой (или попросить друзей за границей сделать это). После на сервер нужно установить [jq](https://jqlang.github.io/jq/) и `openssl` - их можно найти в репозиторияx практически всех популярных Linux дистрибутивов. -Создайте обычного пользователя с возможностью выполнять sudo - не устанавливайте easy-xray из-под рута, в такой конфигурации он не будет -работать! Из-под обычного пользователя скачайте `easy-xray` (всю директорию целиком), сделайте исполняемым файл `ex.sh` и запустите нужную +Создайте обычного пользователя с возможностью выполнять sudo - **не устанавливайте easy-xray из-под рута**, в такой конфигурации он не будет +работать! Для упрощения первоначальной настройки redhat-based дистрибутивов можно воспользоваться скриптами [init0.sh](misc/init0.sh) и +[init1.sh](misc/init1.sh). + +Из-под обычного пользователя скачайте `easy-xray` (всю директорию целиком), сделайте исполняемым файл `ex.sh` и запустите нужную команду. Используйте `./ex.sh help` для получения списка всех команд и короткой справки по ним. Для установки и настройки xray используйте `./ex.sh install` - эта команда предложит вам ввести ip-адрес вашего сервера, адрес сайта, под который ваш сервер будет маскироваться, и имена пользователей. Не используйте easy-xray для пользователя root, используйте обычного пользователя и sudo! @@ -50,8 +53,7 @@ sudo ./ex.sh install _Подробная инструкция, включая Cloudflare CDN_ Если у вашего VPS сервера есть два IP-адреса (IPv4 и IPv6), easy-xray может быть сконфигурирован так, чтобы IPv4-адрес использовался для -доступа напрямую, а IPv6-адрес использовался для доступа через сеть CDN от Cloudflare. Смотрите [полную -пошаговую инструкцию](CDN.ru.md). +доступа напрямую, а IPv6-адрес использовался для доступа через сеть CDN от Cloudflare. Смотрите [полную инструкцию](CDN.ru.md). #### Docker diff --git a/misc/init0.sh b/misc/init0.sh index 939a86f..8557436 100755 --- a/misc/init0.sh +++ b/misc/init0.sh @@ -9,8 +9,11 @@ fi dnf update --assumeyes -# - vim is a cool text editor -# - iproute is needed for `ss` command, to see which ports are already in use -# - you need podman if plan to use Cloudflare CDN # - jq and openssl are needed for easy-xray -dnf install --assumeyes podman openssl jq vim iproute +# - you need nginx if plan to use Cloudflare CDN +# - iproute is needed for `ss` command, to see which ports are already in use +# - vim is a cool text editor +dnf install --assumeyes jq openssl nginx iproute vim + +echo -e "Finished. Time to reboot! +" diff --git a/misc/init1.sh b/misc/init1.sh index 9762fc1..94646e7 100755 --- a/misc/init1.sh +++ b/misc/init1.sh @@ -105,3 +105,6 @@ echo -e "Then you are ready to log out from the server, then log in as ${usernam with new ssh port ${ssh_port}. " +echo -e "If you encouner problems, try to reboot server first, to restart services. +" + diff --git a/template_site4cdn.conf b/template_site4cdn.conf index e00f5c8..56c57c4 100644 --- a/template_site4cdn.conf +++ b/template_site4cdn.conf @@ -7,7 +7,7 @@ server { # fallback: proxy_pass redirects request to another server location / { - proxy_pass https://www.youtube.com; + proxy_pass https://duckduckgo.com; }