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-адрес вашего сервера может утечь к РКН, который добавит его
|
||||
в список блокируемых сайтов, доступ к серверу при этом пропадёт. Если же сервер работает через сеть доставки контента (content delivery
|
||||
|
|
|
@ -27,6 +27,8 @@ VLESS-Reality) не шифрует уже зашифрованный https-тр
|
|||
|
||||
#### Linux
|
||||
|
||||
_Краткая инструкция_
|
||||
|
||||
Для начала нужно арендовать VPS сервер вне региона с цензурой (или попросить друзей за границей сделать это). После на сервер нужно
|
||||
установить [jq](https://jqlang.github.io/jq/) и `openssl` - их можно найти в репозиторияx практически всех популярных Linux дистрибутивов.
|
||||
Создайте обычного пользователя с возможностью выполнять sudo - не устанавливайте easy-xray из-под рута, в такой конфигурации он не будет
|
||||
|
@ -45,8 +47,11 @@ sudo ./ex.sh install
|
|||
будет должным образом установлен, а xray - запущен с ним. Настало время раздать конфиги пользователям! Для многих графических клиентов
|
||||
удобно использовать конфиги в виде ссылок, которые можно сгенерировать командой `./ex.sh link user_config_file.json`.
|
||||
|
||||
Если у вашего VPS сервера есть два IP-адреса (IPv4 и IPv6), easy-xray может быть сконфигурирован так, чтобы IPv6-адрес
|
||||
использовался для доступа через сеть CDN от Cloudflare по протоколу grpc-tls. См. детали в [инструкции](CDN.ru.md).
|
||||
_Подробная инструкция, включая Cloudflare CDN_
|
||||
|
||||
Если у вашего VPS сервера есть два IP-адреса (IPv4 и IPv6), easy-xray может быть сконфигурирован так, чтобы IPv4-адрес использовался для
|
||||
доступа напрямую, а IPv6-адрес использовался для доступа через сеть CDN от Cloudflare. Смотрите [полную
|
||||
пошаговую инструкцию](CDN.ru.md).
|
||||
|
||||
|
||||
#### 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