├── opensslcert └── Readme.md /opensslcert: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ip=$(timeout 3 curl -4 -s icanhazip.com) 3 | openssl genrsa -out secret.key 2048 4 | openssl req -key secret.key -new -out cert.csr -nodes \ 5 | -subj "/C=AU/ST=StateName/L=CityName/O=CompanyName/OU=CompanySectionName/CN=$ip" \ 6 | -addext "subjectAltName=DNS:$ip,DNS:*.$ip,IP:$ip" 7 | openssl x509 -signkey secret.key -in cert.csr -req -days 3650 -out cert.crt 8 | 9 | 10 | place=$(pwd) 11 | echo -e "\033[32mПуть к файлу публичного ключа сертификата панели:\033[32m" 12 | echo -e "\033[31m$place/cert.crt\033[31m" 13 | 14 | echo -e "\033[32mПуть к файлу приватного ключа сертификата панели:\033[32m" 15 | echo -e "\033[31m$place/secret.key\033[31m" -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | # Создание VPN Vless (Reality) с транспортом XHTTP через панель 3x-ui 2 | 3 | XHTTP — это современный транспорт для протокола Vless, который позволяет передавать данные с помощью HTTP-запросов. Ключевой особенностью этой технологии является возможность использования CDN-серверов между клиентом и сервером. В этом уроке я покажу, как можно создать свой собственный VPN с помощью панели 3x-ui, используя технологию XHTTP. 4 | 5 | ## VPS для панели 6 | 7 | Для установки панели нам понадобится VPS-сервер. Приобрести его можно в [ishosting](https://bit.ly/3rOqvPE). 8 | В сервисе доступны более 36 локаций. Если вам не нужна какая-то конкретная страна, выбирайте ту, что ближе к вам. 9 | 10 | ## Системные требования 11 | 12 | - 1 CPU 13 | - 1 GB RAM 14 | - 10 GB диска 15 | - ОС Ubuntu 24 x64 16 | 17 | ## Подготовка 18 | 19 | Первое, что нужно сделать, — сменить пароль сервера, который пришёл в письме. Для этого можно использовать генераторы паролей или придумать собственный пароль. Я не рекомендую использовать собственные пароли, потому что, как правило, они ненадёжные. Лучше всего сгенерировать случайный набор символов с помощью команды: 20 | ```sh 21 | openssl rand -base64 32 22 | ``` 23 | Эта команда просто сгенерирует случайный набор символов, но не сменит пароль. Чтобы сменить пароль, введите команду: 24 | ```sh 25 | passwd 26 | ``` 27 | Введите пароль, повторите ввод пароля и нажмите Enter. Для того чтобы проверить, что всё корректно работает, не закрывая текущую вкладку терминала, откройте новую вкладку и подключитесь к серверу. Если после ввода нового пароля подключение прошло успешно, то всё хорошо, можно продолжать. Не забудьте сохранить пароль в надёжном месте. 28 | 29 | Далее обновляем списки репозиториев и установленные пакеты. Если в процессе появляются какие-то окна, просто жмём Enter: 30 | ```sh 31 | sudo apt update 32 | sudo apt upgrade -y 33 | ``` 34 | И перезагружаем сервер: 35 | ```sh 36 | sudo reboot 37 | ``` 38 | Так как сервер ушёл в перезагрузку, соединение пропадёт. Спустя пару минут можно подключиться к серверу заново. 39 | 40 | ## Установка 3x-ui и создание самоподписанного TLS-сертификата 41 | 42 | Для начала нужно установить панель 3x-ui. Сделать это можно с помощью этой команды: 43 | ```sh 44 | bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) 45 | ``` 46 | 47 | В процессе установки скрипт спросит, нужно ли установить свой порт: **"Would you like to customize the Panel Port settings? (If not, a random port will be applied) [y/n]:"**. Можете нажать `y` и ввести порт, который хотите, но я рекомендую просто нажать Enter, тогда порт и все остальные настройки зададутся случайно. После этого вы получите адрес и логин-пароль для доступа к панели. Сохраните эти данные в надёжном месте. 48 | 49 | Введите его в браузер и залогиньтесь в панели. Красная плашка информирует нас о том, что соединение не зашифровано, и надо создать TLS-сертификат. Его можно создать двумя способами: подключить домен и выпустить сертификат через меню x-ui или создать самоподписанный сертификат. Мы создадим самоподписанный сертификат. 50 | 51 | Для этого вводим следующие команды: 52 | ```sh 53 | mkdir cert 54 | cd cert 55 | wget -qO- https://raw.githubusercontent.com/ServerTechnologies/3x-ui-with-xhttp/refs/heads/main/opensslcert | bash 56 | ``` 57 | 58 | После того как скрипт сработает, вы увидите несколько строчек с адресами файлов сертификатов. Откройте панель, в левом меню выберите **Настройки → Сертификаты**. Вставьте пути до файлов в соответствующие поля. Нажмите "Сохранить" и "Перезапуск панели". Панель перезапустится и вы увидите предупреждение о безопасности. Всё в порядке — браузер ругается, потому что мы используем самоподписанный сертификат. Просто нажимаем соответствующую кнопку и подключаемся к панели. 59 | При последующем вводе адреса панели в браузер не забывайте менять протокол с `http` на `https`. 60 | 61 | ## Настройка инбаунда в 3x-ui 62 | 63 | ### Создание подключения. Простой способ. XHTTP Vless Reality 64 | 65 | Технология XHTTP может использоваться как совместно с CDN-сервисами, так и отдельно — примерно так же, как обычный Vless Reality с TLS. Для этого в панели 3x-ui в правом меню выбираем **Инбаунды → Создать инбаунд**: 66 | - Протокол: Vless 67 | - Порт: 443 68 | - Транспорт: XHTTP 69 | - Безопасность: Reality 70 | - В **Dest** и **SNI** указываем любой незаблокированный иностранный сайт 71 | - Нажимаем **Get New Cert** и **Get New Seed** 72 | - Внизу нажимаем "Создать" 73 | 74 | Подключение создано. Также создан один клиент. Можно добавить ещё несколько клиентов. Теперь передайте ссылку для подключения на устройство или отсканируйте QR-код — и можно пользоваться. 75 | 76 | ### Создание подключения. XHTTP через CDN 77 | 78 | CDN (Content Delivery Network) — это сеть серверов, распределённых по разным регионам, которая помогает доставлять контент пользователям быстрее и надёжнее. В контексте XHTTP — это просто промежуточный сервер между клиентом и сервером, на котором установлена панель. Это немного замедляет скорость, но при этом позволяет скрыть IP-адрес вашего сервера за IP-адресом сервера CDN. 79 | 80 | Можно использовать практически любой сервис CDN, но на данный момент Cloudflare предоставляет возможность использовать свою инфраструктуру бесплатно, тогда как другие сервисы стоят денег. Поэтому именно на примере Cloudflare я покажу, как создать подобное подключение. 81 | 82 | Нам понадобится домен — его можно купить прямо в Cloudflare. Этот домен надо направить на ваш VPN-сервер. 83 | 84 | **Настройки подключения в 3x-ui**: 85 | - Создать инбаунд 86 | - Протокол: Vless 87 | - Порт: любой, кроме 80, 443, 22 88 | - Транспорт: XHTTP 89 | - Хост: добавляем домен 90 | - Путь: что угодно 91 | - Безопасность: пусто 92 | - Sniffing: выключено 93 | 94 | **Настройки в Cloudflare**: 95 | - В левом меню **SSL/TLS** → выбрать **Flexible** 96 | - В левом меню **SSL/TLS → Edge Certificates**: выключить TLS 1.3 97 | - В левом меню **Network**: включить gRPC 98 | - В левом меню **Rules → Overview**: 99 | - Кнопка **Create rule → Origin rule** 100 | - Rule name: что угодно 101 | - Поле "When incoming requests match…": 102 | - Field: Hostname 103 | - Operator: equals 104 | - Value: вставляем домен или поддомен 105 | - Destination Port: выбрать "Rewrite to…" и вставить туда порт из инбаунда 106 | 107 | **Настройка клиента**: 108 | - Добавляем ключ как обычно 109 | - Адрес меняем на наш домен/поддомен 110 | - Порт: 443 111 | - Безопасность: TLS 112 | - SNI: наш домен/поддомен 113 | - Сохранить 114 | 115 | ## Клиенты для разных операционных систем 116 | 117 | Так как эта технология относительно новая, ещё далеко не все клиенты поддерживают её. В этом списке клиенты, которые точно поддерживают этот транспорт. 118 | 119 | **Windows и Linux**: 120 | - [v2rayN](https://github.com/2dust/v2rayN) 121 | 122 | **Android**: 123 | - [v2rayNG](https://github.com/2dust/v2rayNG) 124 | 125 | **iOS & macOS arm64**: 126 | - [Streisand](https://apps.apple.com/app/streisand/id6450534064) 127 | --------------------------------------------------------------------------------