From 8ac16d661018e4a54bba24fa809e5d6cb7ccaff9 Mon Sep 17 00:00:00 2001 From: Gabenov Stanislav Date: Wed, 25 Feb 2026 15:59:53 +0300 Subject: [PATCH] [vault-77] vault terraform init configuration --- files/selfsni.sh | 335 +++++++++++++++++++++++++++++++++++++++++++ install_vless_vpn.md | 183 +++++++++++++++++++++++ readme_deploy.md | 3 + 3 files changed, 521 insertions(+) create mode 100644 files/selfsni.sh create mode 100644 install_vless_vpn.md diff --git a/files/selfsni.sh b/files/selfsni.sh new file mode 100644 index 0000000..84db4a0 --- /dev/null +++ b/files/selfsni.sh @@ -0,0 +1,335 @@ +#!/bin/bash +# Перед запуском скрипта задайте переменную с именем вашего домена +# Замените vstavit-domen на ваш домен +# export domain=vstavit-domen +apt update +apt install curl wget nginx qrencode jq -y + +# Получаем сертификат +wget -O - https://get.acme.sh | sh +~/.acme.sh/acme.sh --upgrade --auto-upgrade +~/.acme.sh/acme.sh --issue --server letsencrypt -d $domain -w /var/www/html --keylength ec-256 --force +~/.acme.sh/acme.sh --installcert -d $domain --cert-file ~/.acme.sh/acme.sh/$domain_ecc/$domain.cer --key-file ~/.acme.sh/acme.sh/$domain_ecc/$domain.key --fullchain-file ~/.acme.sh/acme.sh/$domain_ecc/fullchain.cer --ecc + +# Копируем сертификаты в другую папку для Xray +mkdir -p /usr/local/etc/xray/xray_cert/ +~/.acme.sh/acme.sh --install-cert -d $domain --ecc \ + --fullchain-file /usr/local/etc/xray/xray_cert/xray.crt \ + --key-file /usr/local/etc/xray/xray_cert/xray.key +chmod +r /usr/local/etc/xray/xray_cert/xray.key + +# Создаем файл установки в папку обновленного сертификата +# Проверить добавление выполнения этого скрипта в cron: +# 0 1 1 * * bash /usr/local/etc/xray/xray_cert/xray-cert-renew + +touch /usr/local/etc/xray/xray_cert/xray-cert-renew +cat << EOF > /usr/local/etc/xray/xray_cert/xray-cert-renew +#!/bin/bash +$PWD/.acme.sh --install-cert -d $domain --ecc --fullchain-file /usr/local/etc/xray/xray_cert/xray.crt --key-file /usr/local/etc/xray/xray_cert/xray.key +chmod +r /usr/local/etc/xray/xray_cert/xray.key +sudo systemctl restart xray +EOF + +chmod +x /usr/local/etc/xray/xray_cert/xray-cert-renew + +crontab -l | grep -q "xray-cert-renew" || (crontab -l; echo "0 1 1 * * bash /usr/local/etc/xray/xray_cert/xray-cert-renew") | crontab - + + + +# Включаем bbr +bbr=$(sysctl -a | grep net.ipv4.tcp_congestion_control) +if [ "$bbr" = "net.ipv4.tcp_congestion_control = bbr" ]; then +echo "bbr уже включен" +else +echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf +echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf +sysctl -p +echo "bbr включен" +fi + +# Устанавливаем ядро Xray +bash -c "$(curl -4 -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install +[ -f /usr/local/etc/xray/.keys ] && rm /usr/local/etc/xray/.keys +touch /usr/local/etc/xray/.keys +echo "shortsid: $(openssl rand -hex 8)" >> /usr/local/etc/xray/.keys +echo "uuid: $(xray uuid)" >> /usr/local/etc/xray/.keys +echo "domain: $domain" >> /usr/local/etc/xray/.keys + +export uuid=$(cat /usr/local/etc/xray/.keys | awk -F': ' '/uuid/ {print $2}') + +# Создаем файл конфигурации Xray +touch /usr/local/etc/xray/config.json +cat << EOF > /usr/local/etc/xray/config.json +{ + "dns": { + "servers": [ + "https+local://1.1.1.1/dns-query", + "localhost" + ] + }, + "routing": { + "domainStrategy": "IPIfNonMatch", + "rules": [ + { + "type": "field", + "domain": [ + "geosite:category-ads-all" + ], + "outboundTag": "block" + } + ] + }, + "inbounds": [ + { + "port": 443, + "protocol": "vless", + "settings": { + "clients": [ + { + "email": "main", + "id": "$uuid", + "flow": "xtls-rprx-vision", + "level": 0 + } + ], + "decryption": "none", + "fallbacks": [ + { + "dest": 8080 + } + ] + }, + "streamSettings": { + "network": "tcp", + "security": "tls", + "tlsSettings": { + "fingerprint": "chrome", + "alpn": "http/1.1", + "certificates": [ + { + "certificateFile": "/usr/local/etc/xray/xray_cert/xray.crt", + "keyFile": "/usr/local/etc/xray/xray_cert/xray.key" + } + ] + } + } + } + ], + "outbounds": [ + { + "protocol": "freedom", + "tag": "direct" + }, + { + "protocol": "blackhole", + "tag": "block" + } + ] +} +EOF + +# Исполняемый файл для списка клиентов +touch /usr/local/bin/userlist +cat << 'EOF' > /usr/local/bin/userlist +#!/bin/bash +emails=($(jq -r '.inbounds[0].settings.clients[].email' "/usr/local/etc/xray/config.json")) + +if [[ ${#emails[@]} -eq 0 ]]; then + echo "Список клиентов пуст" + exit 1 +fi + +echo "Список клиентов:" +for i in "${!emails[@]}"; do + echo "$((i+1)). ${emails[$i]}" +done +EOF +chmod +x /usr/local/bin/userlist + +# исполняемый файл для ссылки основного пользователя +touch /usr/local/bin/mainuser +cat << 'EOF' > /usr/local/bin/mainuser +#!/bin/bash +protocol=$(jq -r '.inbounds[0].protocol' /usr/local/etc/xray/config.json) +port=$(jq -r '.inbounds[0].port' /usr/local/etc/xray/config.json) +uuid=$(cat /usr/local/etc/xray/.keys | awk -F': ' '/uuid/ {print $2}') +domain=$(cat /usr/local/etc/xray/.keys | awk -F': ' '/domain/ {print $2}') +fp=$(jq -r '.inbounds[0].streamSettings.tlsSettings.fingerprint' /usr/local/etc/xray/config.json) +link="$protocol://$uuid@$domain:$port?security=tls&alpn=http%2F1.1&fp=$fp&spx=/&type=tcp&flow=xtls-rprx-vision&headerType=none&encryption=none#mainuser" +echo "" +echo "Ссылка для подключения": +echo "$link" +echo "" +echo "QR-код:" +echo ${link} | qrencode -t ansiutf8 +EOF +chmod +x /usr/local/bin/mainuser + +# Исполняемый файл для создания новых клиентов +# Добавить сюда "level": 0, +touch /usr/local/bin/newuser +cat << 'EOF' > /usr/local/bin/newuser +#!/bin/bash +read -p "Введите имя пользователя (email): " email + + if [[ -z "$email" || "$email" == *" "* ]]; then + echo "Имя пользователя не может быть пустым или содержать пробелы. Попробуйте снова." + exit 1 + fi +user_json=$(jq --arg email "$email" '.inbounds[0].settings.clients[] | select(.email == $email)' /usr/local/etc/xray/config.json) + +if [[ -z "$user_json" ]]; then +uuid=$(xray uuid) +jq --arg email "$email" --arg uuid "$uuid" '.inbounds[0].settings.clients += [{"email": $email, "id": $uuid, "flow": "xtls-rprx-vision"}]' /usr/local/etc/xray/config.json > tmp.json && mv tmp.json /usr/local/etc/xray/config.json +systemctl restart xray +index=$(jq --arg email "$email" '.inbounds[0].settings.clients | to_entries[] | select(.value.email == $email) | .key' /usr/local/etc/xray/config.json) +protocol=$(jq -r '.inbounds[0].protocol' /usr/local/etc/xray/config.json) +port=$(jq -r '.inbounds[0].port' /usr/local/etc/xray/config.json) +uuid=$(jq --argjson index "$index" -r '.inbounds[0].settings.clients[$index].id' /usr/local/etc/xray/config.json) +username=$(jq --argjson index "$index" -r '.inbounds[0].settings.clients[$index].email' /usr/local/etc/xray/config.json) +domain=$(cat /usr/local/etc/xray/.keys | awk -F': ' '/domain/ {print $2}') +fp=$(jq -r '.inbounds[0].streamSettings.tlsSettings.fingerprint' /usr/local/etc/xray/config.json) +link="$protocol://$uuid@$domain:$port?security=tls&alpn=http%2F1.1&fp=$fp&spx=/&type=tcp&flow=xtls-rprx-vision&headerType=none&encryption=none#$username" +echo "" +echo "Ссылка для подключения": +echo "$link" +echo "" +echo "QR-код:" +echo ${link} | qrencode -t ansiutf8 +else +echo "Пользователь с таким именем уже существует. Попробуйте снова." +fi +EOF +chmod +x /usr/local/bin/newuser + +# Исполняемый файл для удаления клиентов +touch /usr/local/bin/rmuser +cat << 'EOF' > /usr/local/bin/rmuser +#!/bin/bash +emails=($(jq -r '.inbounds[0].settings.clients[].email' "/usr/local/etc/xray/config.json")) + +if [[ ${#emails[@]} -eq 0 ]]; then + echo "Нет клиентов для удаления." + exit 1 +fi + +echo "Список клиентов:" +for i in "${!emails[@]}"; do + echo "$((i+1)). ${emails[$i]}" +done + +read -p "Введите номер клиента для удаления: " choice + +if ! [[ "$choice" =~ ^[0-9]+$ ]] || (( choice < 1 || choice > ${#emails[@]} )); then + echo "Ошибка: номер должен быть от 1 до ${#emails[@]}" + exit 1 +fi + +selected_email="${emails[$((choice - 1))]}" + +jq --arg email "$selected_email" \ + '(.inbounds[0].settings.clients) |= map(select(.email != $email))' \ + "/usr/local/etc/xray/config.json" > tmp && mv tmp "/usr/local/etc/xray/config.json" + +systemctl restart xray + +echo "Клиент $selected_email удалён." +EOF +chmod +x /usr/local/bin/rmuser + +# Исполняемый файл для вывода списка пользователей и создания ссылкок +touch /usr/local/bin/sharelink +cat << 'EOF' > /usr/local/bin/sharelink +#!/bin/bash +emails=($(jq -r '.inbounds[0].settings.clients[].email' /usr/local/etc/xray/config.json)) + +for i in "${!emails[@]}"; do + echo "$((i + 1)). ${emails[$i]}" +done + +read -p "Выберите клиента: " client + +if ! [[ "$client" =~ ^[0-9]+$ ]] || (( client < 1 || client > ${#emails[@]} )); then + echo "Ошибка: номер должен быть от 1 до ${#emails[@]}" + exit 1 +fi + +selected_email="${emails[$((client - 1))]}" + + +index=$(jq --arg email "$selected_email" '.inbounds[0].settings.clients | to_entries[] | select(.value.email == $email) | .key' /usr/local/etc/xray/config.json) +protocol=$(jq -r '.inbounds[0].protocol' /usr/local/etc/xray/config.json) +port=$(jq -r '.inbounds[0].port' /usr/local/etc/xray/config.json) +uuid=$(jq --argjson index "$index" -r '.inbounds[0].settings.clients[$index].id' /usr/local/etc/xray/config.json) +username=$(jq --argjson index "$index" -r '.inbounds[0].settings.clients[$index].email' /usr/local/etc/xray/config.json) +sni=$(cat /usr/local/etc/xray/.keys | awk -F': ' '/domain/ {print $2}') +domain=$(cat /usr/local/etc/xray/.keys | awk -F': ' '/domain/ {print $2}') +fp=$(jq -r '.inbounds[0].streamSettings.tlsSettings.fingerprint' /usr/local/etc/xray/config.json) +link="$protocol://$uuid@$domain:$port?security=tls&alpn=http%2F1.1&fp=$fp&spx=/&type=tcp&flow=xtls-rprx-vision&headerType=none&encryption=none#$username" +echo "" +echo "Ссылка для подключения": +echo "$link" +echo "" +echo "QR-код:" +echo ${link} | qrencode -t ansiutf8 +EOF +chmod +x /usr/local/bin/sharelink + +systemctl restart xray + +echo "Xray-core успешно установлен" +mainuser + +# Создаем файл с подсказками +touch $HOME/help +cat << 'EOF' > $HOME/help + +Команды для управления пользователями Xray: + + mainuser - выводит ссылку для подключения основного пользователя + newuser - создает нового пользователя + rmuser - удаление пользователей + sharelink - выводит список пользователей и позволяет создать для них ссылки для подключения + userlist - выводит список клиентов + + + +Файл конфигурации находится по адресу: + + /usr/local/etc/xray/config.json + +Команда для перезагрузки ядра Xray: + + systemctl restart xray + +Команда для перезагрузки Nginx: + + systemctl restart nginx + +Адрес папки с сайтом + /var/www/html + +EOF + + +# Заменяем стандартный файл конфигурации nginx +cat << EOF > /etc/nginx/sites-available/default +server { + listen 80; + server_name $domain; + return 301 https://\$http_host\$request_uri; + } + + + + +server { + listen 127.0.0.1:8080; + server_name $domain; + root /var/www/html/; + index index.html; + add_header Strict-Transport-Security "max-age=63072000" always; +} +EOF +mv /var/www/html/index.nginx-debian.html /var/www/html/index.html +systemctl restart nginx \ No newline at end of file diff --git a/install_vless_vpn.md b/install_vless_vpn.md new file mode 100644 index 0000000..71a7f5b --- /dev/null +++ b/install_vless_vpn.md @@ -0,0 +1,183 @@ +### FROM: https://github.com/ServerTechnologies/xray-with-selfsni ### + +# Инструкция по созданию ВПН с маскировкой под собственный сайт на голом ядре X-Ray + +>Маскировка запросов под собственный сайт - один из самых надежных способов обезопасить свой сервер от блокировок, так как, в отличие от Vless Reality мы маскируем запросы под обращение к сайту на том же самом сервере, что и впн, а не к стороннему сайту, который может расположен на сервере с другим ip. Так же при прямом запросе по домену сервер отдает обычный сайт и понять что на сервере помимо вебсервера установлен еще и сервер ВПН будет очень сложно. + +Здесь представлена инструкция по созданию ВПН с маскировкой под собственный сайт на голом ядре, инструкция для панелей 3x-ui и Marzban находится [здесь](https://github.com/ServerTechnologies/xray-with-selfsni/blob/main/Panels.md). + +## VPS для создания ВПН +Для установки панели нам понадобится VPS-сервер. Приобрести его можно в [Fornex](https://fornex.com/c/ftsg5x/). + +## Минимальные системные требования + +- 1 CPU +- 1 GB RAM +- 10 GB диска +- ОС Ubuntu 24 x64 + +## Подготовка. +- Так как на сервере будет функционировать обычный сайт, нам обязательно нужен домен. Можно купить домен в любой зоне, можете выбрать самый дешевый, но не забудьте про прдление домена: оно может быть существенно дороже стоимости покупки. Можно купить домен на один год, через год купить другой домен и сделать все заново. +- Направьте домен на сервер, создав А запись в DNS. проверить обновление DNS записей можно командой ping <имя домена>. <имя домена> надо заменить на ваш домен. В ответ вы должны молучить ip сервера. +```sh +ping <имя домена> +``` + +### Перед началом работы с сервером +Обовление списка репозиториев и установленных пакетов +```sh +apt update && apt upgrade -y +``` + +Очистить экран терминала +```sh +clear +``` + +## Как пользоваться скриптом. Установка ядра Xray с протоколом Vless. + +Скрипт создавался и тестировался под ОС Ubuntu 22 x64 и Ubuntu 24 x64. На других ОС скрипт может работать некорректно. + +Задайте переменную с именем вашего сайта, замените "vash-domen" на ваш домен, укажите просто имя домена, не указывайте http:// или https://: +```sh +export domain=vash-domen +``` + +Скачайте и запустите скрипт, используя эту команду: + +```sh +wget -qO- https://raw.githubusercontent.com/ServerTechnologies/xray-with-selfsni/refs/heads/main/selfsni | bash +``` + +Скрипт установит веб сервер Nginx, создаст сертификаты Let's Encrypt, подключит их и в качестве сайта будет использоваться дефолтная страница веб-сервера Nginx. Если вы хотите добавить собственный сайт, то надо удалить дефолтную страницу и вместо нее разместить в папке файлы сайта. + + +## Работа с файлами сайта +Чтобы удалить дефолтную страницу +```sh +rm /var/www/html/index.html +``` + +Или можно открыть дефолтную страницу, используя консольный текстовый редактор, чтобы вставить другой текст +```sh +nano /var/www/html/index.html +``` +Чтобы сохранить документ и выйти из текстового редактора, нажмите CTRL + X Y Enter\ + +Адрес папки, куда надо закинуть файлы сайта. Главный файл сайта должен называться index.html +```sh +/var/www/html/ +``` + +Чтобы открыть папку с файлами сайта +```sh +cd /var/www/html/index.html +``` + +Установить unzip +```sh +apt install unzip +``` + +Разархивировать zip архив. Замените <имя архива.zip> на имя архива +```sh +unzip <имя архива.zip> +``` + +Скопировать файлы из папки с шаблоном в папку с сайтом. Тут я заменил "." на абсолютный путь. Замените <имя папки> на имя папки с шаблоном +```sh +cp -r <имя папки>/* /var/www/html/index.html +``` + +## Команды для управления пользователями + +**Вывести список всех клиентов:** + +```sh +userlist +``` + +**Вывести ссылку и QR-код для подключения основного пользователя:** + +```sh +mainuser +``` + +**Создать нового пользователя:** + +```sh +newuser +``` + +**Удалить пользователя:** + +```sh +rmuser +``` + +**Создать ссылку для подключения:** + +```sh +sharelink +``` + +В домашней папке пользователя будет создан файл `help` — в нём содержатся подсказки с описанием команд. Посмотреть его можно с помощью команды (нужно находиться в домашней папке пользователя): + +```sh +cat help +``` + +## Команда для обновления ядра +```sh +bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install +``` + +## Полезные ссылки + +- [GitHub проекта X-ray Core](https://github.com/XTLS/Xray-core) +- [Официальная документация на русском](https://xtls.github.io/ru/) +- [Ссылка на раздел официальной документации по созданию сайта для xray](https://xtls.github.io/ru/document/level-0/ch05-webpage.html) + +## Клиенты для подключения + +**Windows** + +- [v2rayN](https://github.com/2dust/v2rayN) +- [Furious](https://github.com/LorenEteval/Furious) +- [Invisible Man - Xray](https://github.com/InvisibleManVPN/InvisibleMan-XRayClient) + +**Android** + +- [v2rayNG](https://github.com/2dust/v2rayNG) +- [X-flutter](https://github.com/XTLS/X-flutter) +- [SaeedDev94/Xray](https://github.com/SaeedDev94/Xray) + +**iOS & macOS arm64** + +- [Streisand](https://apps.apple.com/app/streisand/id6450534064) +- [Happ](https://apps.apple.com/app/happ-proxy-utility/id6504287215) +- [OneXray](https://github.com/OneXray/OneXray) + +**macOS arm64 & x64** + +- [V2rayU](https://github.com/yanue/V2rayU) +- [V2RayXS](https://github.com/tzmax/V2RayXS) +- [Furious](https://github.com/LorenEteval/Furious) +- [OneXray](https://github.com/OneXray/OneXray) + +**Linux** + +- [Nekoray](https://github.com/MatsuriDayo/nekoray) +- [v2rayA](https://github.com/v2rayA/v2rayA) +- [Furious](https://github.com/LorenEteval/Furious) + +## Если вдруг нужно все удалить, то воспользуйтесь этими командами: +```sh +bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ remove +rm -r /usr/local/etc/xray +rm /usr/local/bin/userlist +rm /usr/local/bin/mainuser +rm /usr/local/bin/newuser +rm /usr/local/bin/rmuser +rm /usr/local/bin/sharelink +``` \ No newline at end of file diff --git a/readme_deploy.md b/readme_deploy.md index 10e2e36..f3b1ea9 100644 --- a/readme_deploy.md +++ b/readme_deploy.md @@ -5,3 +5,6 @@ # Deploy VPN https://github.com/Akiyamov/xray-vps-setup +# Инструкция для голого ядра +https://github.com/ServerTechnologies/xray-with-selfsni +