mirror of
https://github.com/EvgenyNerush/easy-xray.git
synced 2024-11-21 16:25:23 +03:00
add text about CDN
This commit is contained in:
parent
d128adb290
commit
6c0478b8b5
4 changed files with 176 additions and 3 deletions
47
CDN.ru.md
47
CDN.ru.md
|
@ -1,4 +1,49 @@
|
||||||
#### Дополнительный канал связи
|
#### Первоначальная настройка VPS
|
||||||
|
|
||||||
|
Xray нельзя поставить на "голый" сервер - нужна предварительная подготовка. Нужно создать пользователя, добавить его в группу sudo,
|
||||||
|
настроить фаервол и перенести порт 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
|
||||||
|
curl -L https://github.com/EvgenyNerush/easy-xray/blob/test/misc/init1.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
затем внимательно прочитайте и исправьте по необходимости, и запустите от рута. После нужно зайти в систему от имени нового пользователя и
|
||||||
|
подготовить необходимые файлы для Cloudflare CDN - если она нужна.
|
||||||
|
|
||||||
|
|
||||||
|
#### Cloudflare CDN
|
||||||
|
|
||||||
|
Помимо прямого доступа (для которого достаточно одного IPv4-адреса), можно настроить доступ через сеть доставки контента (content delivery
|
||||||
|
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, раздел DNS/Records](figs/cloudflare-records.png)
|
||||||
|
|
||||||
|
В настройках Network нужно включить поддержку gRPC - именно этот протокол позволит использовать xray через CDN. На странице SSL/TLS/Origin
|
||||||
|
Server создайте сертификаты для связи вашего сервера с сетью CDN (файлы `cert.pem` и `cert.key`). **До запуска установки xray** скопируйте
|
||||||
|
ваши сертификаты Cloudflare в директорию со скриптом `ex.sh`!
|
||||||
|
|
||||||
|
Как работает доступ через CDN? Сети доставки контента задуманы для кеширования больших файлов: если большому числу пользователей в России
|
||||||
|
хочется посмотреть одно и то же видео с котятами, которое есть на сервере в США, гораздо выгоднее один раз скачать это видео на сервер в
|
||||||
|
России (кеш), и отдавать пользователям с него, чем много раз скачивать его из США. Нам ничего кешировать не нужно, мы просто пользуемся
|
||||||
|
возможностью бесплатно доставлять трафик через сервера Cloudflare. Важно, что в такой схеме ваше доменное имя резолвится в IP-адрес сервера
|
||||||
|
Cloudflare, через который может идти трафик большого количества других сайтов. Поэтому РКН, оценивая сопутствующий ущерб, может не решиться
|
||||||
|
на блокировку вашего xray сервера, даже если будет о нём знать. Чтобы лучше понять общую концепцию работы xray через CDN, прочитайте [вот
|
||||||
|
эту статью](https://habr.com/ru/articles/761798/).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Если вы делитесь доступом к своему серверу с другими людьми, рано или поздно IP-адрес вашего сервера может утечь к РКН, который добавит его
|
Если вы делитесь доступом к своему серверу с другими людьми, рано или поздно IP-адрес вашего сервера может утечь к РКН, который добавит его
|
||||||
в список блокируемых сайтов, доступ к серверу при этом пропадёт. Если же сервер работает через сеть доставки контента (content delivery
|
в список блокируемых сайтов, доступ к серверу при этом пропадёт. Если же сервер работает через сеть доставки контента (content delivery
|
||||||
|
|
|
@ -27,6 +27,8 @@ VLESS-Reality) не шифрует уже зашифрованный https-тр
|
||||||
|
|
||||||
#### Linux
|
#### Linux
|
||||||
|
|
||||||
|
_Краткая инструкция_
|
||||||
|
|
||||||
Для начала нужно арендовать VPS сервер вне региона с цензурой (или попросить друзей за границей сделать это). После на сервер нужно
|
Для начала нужно арендовать VPS сервер вне региона с цензурой (или попросить друзей за границей сделать это). После на сервер нужно
|
||||||
установить [jq](https://jqlang.github.io/jq/) и `openssl` - их можно найти в репозиторияx практически всех популярных Linux дистрибутивов.
|
установить [jq](https://jqlang.github.io/jq/) и `openssl` - их можно найти в репозиторияx практически всех популярных Linux дистрибутивов.
|
||||||
Создайте обычного пользователя с возможностью выполнять sudo - не устанавливайте easy-xray из-под рута, в такой конфигурации он не будет
|
Создайте обычного пользователя с возможностью выполнять sudo - не устанавливайте easy-xray из-под рута, в такой конфигурации он не будет
|
||||||
|
@ -45,8 +47,11 @@ sudo ./ex.sh install
|
||||||
будет должным образом установлен, а xray - запущен с ним. Настало время раздать конфиги пользователям! Для многих графических клиентов
|
будет должным образом установлен, а xray - запущен с ним. Настало время раздать конфиги пользователям! Для многих графических клиентов
|
||||||
удобно использовать конфиги в виде ссылок, которые можно сгенерировать командой `./ex.sh link user_config_file.json`.
|
удобно использовать конфиги в виде ссылок, которые можно сгенерировать командой `./ex.sh link user_config_file.json`.
|
||||||
|
|
||||||
Если у вашего VPS сервера есть два IP-адреса (IPv4 и IPv6), easy-xray может быть сконфигурирован так, чтобы IPv6-адрес
|
_Подробная инструкция, включая Cloudflare CDN_
|
||||||
использовался для доступа через сеть CDN от Cloudflare по протоколу grpc-tls. См. детали в [инструкции](CDN.ru.md).
|
|
||||||
|
Если у вашего VPS сервера есть два IP-адреса (IPv4 и IPv6), easy-xray может быть сконфигурирован так, чтобы IPv4-адрес использовался для
|
||||||
|
доступа напрямую, а IPv6-адрес использовался для доступа через сеть CDN от Cloudflare. Смотрите [полную
|
||||||
|
пошаговую инструкцию](CDN.ru.md).
|
||||||
|
|
||||||
|
|
||||||
#### Docker
|
#### Docker
|
||||||
|
|
16
misc/init0.sh
Executable file
16
misc/init0.sh
Executable file
|
@ -0,0 +1,16 @@
|
||||||
|
echo -e "Read carefully throughout this script and correct it for your needs.
|
||||||
|
Then run it as root. Are you ready? (y/N)"
|
||||||
|
read ready
|
||||||
|
# default answer: answer not set or it's first letter is not `y` or `Y`
|
||||||
|
if [ -v $ready ] || ([ ${ready::1} != "y" ] && [ ${ready::1} != "Y" ])
|
||||||
|
then
|
||||||
|
exit 1
|
||||||
|
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
|
107
misc/init1.sh
Executable file
107
misc/init1.sh
Executable file
|
@ -0,0 +1,107 @@
|
||||||
|
echo -e "Read carefully throughout this script and correct it for your needs.
|
||||||
|
Then run it as root. Are you ready? (y/N)"
|
||||||
|
read ready
|
||||||
|
# default answer: answer not set or it's first letter is not `y` or `Y`
|
||||||
|
if [ -v $ready ] || ([ ${ready::1} != "y" ] && [ ${ready::1} != "Y" ])
|
||||||
|
then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
## Add user to system ##
|
||||||
|
echo -e "Enter username if you want to create new user or
|
||||||
|
add existing user to 'wheel' group; enter nothing to skip"
|
||||||
|
read username
|
||||||
|
if [ ! -v $username ]
|
||||||
|
then
|
||||||
|
if ! getent passwd $username >/dev/null # user doesn't exist yet
|
||||||
|
then
|
||||||
|
useradd -m $username
|
||||||
|
password=$(openssl rand -base64 9)
|
||||||
|
echo -e "password\npassword" | passwd $username --stdin
|
||||||
|
fi
|
||||||
|
# if wheel group exists, add the user to it
|
||||||
|
if getent group wheel > /dev/null
|
||||||
|
then
|
||||||
|
usermod -aG wheel $username
|
||||||
|
else
|
||||||
|
no_wheel=true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
## Configure ssh ##
|
||||||
|
echo -e "Enter new ssh port (> 1024 and < 65535)"
|
||||||
|
read port
|
||||||
|
if [ ! -v $port ]
|
||||||
|
then
|
||||||
|
if ss -tunlp | grep :${port} > /dev/null
|
||||||
|
then
|
||||||
|
echo -e "port ${port} is already in use, aborting"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
ssh_port=$port
|
||||||
|
# sometimes port 22 is already commented in config,
|
||||||
|
# but 22 port can be needed if new port is not available
|
||||||
|
echo "Port 22" | tee -a /etc/ssh/sshd_config
|
||||||
|
echo "Port ${port}" | tee -a /etc/ssh/sshd_config
|
||||||
|
sshd -t && systemctl restart sshd
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e "sshPort not set, aborting"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
## Configure firewall ##
|
||||||
|
if [ $(command -v firewall-cmd > /dev/null) ] && [ $(firewall-cmd --state) = "running" ]
|
||||||
|
then
|
||||||
|
firewall-cmd --list-all
|
||||||
|
firewall-cmd --permanent --add-port=80/tcp
|
||||||
|
firewall-cmd --permanent --add-port=443/tcp
|
||||||
|
firewall-cmd --permanent --add-port=${ssh_port}/tcp
|
||||||
|
firewall-cmd --reload
|
||||||
|
fi
|
||||||
|
|
||||||
|
## Configure SELinux ##
|
||||||
|
command -v semanage > /dev/null && semanage port -a -t ssh_port_t -p tcp ${ssh_port}
|
||||||
|
|
||||||
|
## for podman ##
|
||||||
|
# allow user apps (including podman) use ports from 80 and above
|
||||||
|
echo "net.ipv4.ip_unprivileged_port_start=80" > /etc/sysctl.d/unprivileged-ports.conf
|
||||||
|
sysctl --system
|
||||||
|
if [ -v $username ]
|
||||||
|
then
|
||||||
|
echo -e "Enter username for which to enable long-running services"
|
||||||
|
read username
|
||||||
|
fi
|
||||||
|
# allow non-logged user to run long-running services, such as podman container
|
||||||
|
if [ ! -v $username ]
|
||||||
|
then
|
||||||
|
loginctl enable-linger $username
|
||||||
|
else
|
||||||
|
echo -e "username not set, aborting"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
## Summary ##
|
||||||
|
echo -e "
|
||||||
|
---- Summary ----
|
||||||
|
"
|
||||||
|
if [ ! -v $password ]
|
||||||
|
then
|
||||||
|
echo -e "New user ${username} is created with password:
|
||||||
|
${password}
|
||||||
|
don't forget to change it with
|
||||||
|
passwd ${username}
|
||||||
|
"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "Check that ssh is available at port ${ssh_port} then close
|
||||||
|
port 22 commenting line(s)
|
||||||
|
Port 22
|
||||||
|
in /etc/ssh/sshd_config and running
|
||||||
|
systemctl restart sshd
|
||||||
|
"
|
||||||
|
|
||||||
|
echo -e "Then you are ready to log out from the server, then log in as ${username}
|
||||||
|
with new ssh port ${ssh_port}.
|
||||||
|
"
|
||||||
|
|
Loading…
Reference in a new issue