Еще один вариант прорыва цифровой блокады
На новостях о том что скоро запретят инструкции по запуску собственных впн на арендованных серверах и прочее, решил прыгнуть в последний вагон и написать скрипт который поможет легко развернуть свой собственный впн сервер и настроить клиентские подключения.
Последние месяц многие пользователи Wireguard и OpenVPN столкнулись с переодической блокировкой этих протоколов со стороны провайдеров. В основном отличились операторы мобильной связи, но и некоторые провайдеры проводной связи так же поучаствовали. Блокировки все еще продолжаются, то здесь то там у людей WireGuard и OpenVPN на какое-то время работать перестают, потом начинают. По всей видимости операторы тестируют блокировки в разных сегментах сетей.
Естественно многие начали искать выход и нашли его при помощи Outline или AmneziaVPN, но обсуждать мы их сегодня не будем, т.к. первые как детище гугла страдают сбором телеметрии, а вторым просто респект, молодцы, но о WireGuard over ss, все таки стоит подумать, потому что OpenVPN over cloak хоть и не заблокировано но прямо совсем не быстро.
А говорить мы сегодня будет об установке X-Ray, графической панели 3X-UI для него и настройке одного из самых стойких к блокировке соединений на сегодняшний день.
X-Ray - это форк V2Fly, который форк V2Ray, который был придуман что бы как раз обходить dpi и другие штуки которыми государства пытаются навести цензуру в интернете. Если которотко то главный разработчик V2Ray перестал выходить на связь, и остальным разработчикам пришлось форкнуться, и так появился V2Fly, потом у разработчиков начались разногласия и часть из них форкнулась уже в X-Ray. И на данный момент разработчики X-Ray выглядят немного впереди планеты всей в плане улучшений протокла для снижения детектируемости и стойкости к блокировке.
3X-UI - это одна из многих web панелей для создания и управления X-Ray. А от многих ее отличает то что она поддерживает весь функционал сервера X-Ray, крайне легко и стабильно устанавливается, ну и поддерживает русский язык.
Установить 3X-UI и X-Ray можно в докер, можно на чистый сервер скриптом автор 3X-UI подготовил простой и понятный установщик подходящий для Centos 8 и выше, Ubuntu 20 и выше, Debian 10 и соответственно выше, а так же для Fedora 36 и ArchLinux, подробности об установке можно посмотреть в официальном гитхабе проекта.
Я в свою очередь подготовил скрипт обертку для Ubuntu 20 который дополнительно настроит firewall, установит вебсервер caddy для реверспроксирования, т.к. панель по умолчанию работает на http, с автоматическим получением и продлением ssl сертификата если у вас есть домен/сабдомен для сервера, либо с автоматическим выпуском самоподписанного сертификата если работать без домена. Дополнительно для повышения безопасности, что бы ни кто перебором дефолтных портов не наткнулся на адрес веб интерфейса в скрипте реализован запуск вебсервера на рандомном порту.
И так, нам понадоибится сервер на Ubuntu 20, и доступ пользователем root по ssh
С использованием windows cmd, PuTTy(последнее время многие рапортуют что оно тупит и не всегда верно передает пароль серверу, в результате чего не может авторизоваться), BitVise или то что вы предпочитаете и подключаетесь к вашему серверу и выполняете команду:
Скрипт не задвая лишних вопросов в течении 1-2 минут должен выполнится и в конце, если все прошло хорошо, вы увидите:
x-ui installation finished, it is running now...
###############################################
username: admin
password: admin
###############################################
The panel is available at https://X.X.X.X:51379
###############################################
Первым делом, нам нужно сменить хост на котором слушает сама панель по http, с внешнего адреса на внутренний 127.0.0.1, а так же дефолтный пароль.
Открываем браузер и заходим по адресу который в конце нам выдал скрипт установщик. Если вы уже привязали к серверу какой-либо домен то можно сразу идти на домен.
Авторизуемся, заходим в настройки, и сразу указываем в качестве IP адреса панели адрес 127.0.0.1, сохраняем перезапускаем
Это нужно для того что бы панель перестала светить протоколом http наружу, и к сожалению эта настройка доступна только через веб интерфейс, настроить это через консольные команды у меня не получилось.
После перезапуска панели веб страница попытается перенаправить вас на тот порт и адрес что указаны у нее в настройках и страница перестанет быть доступна, но нужно всего лишь перезайти по IP адресу сервера и порту на который заходили первоначально.
Далее меняем пароль в настройках безопасности
После подтверждения панель сделает автоматичесский logout, что бы вы могли авторизоваться с новым паролем.
Теперь можно переходить к настройке первого подключения. Подключения -> добавить подключение.
Для удобства разобью настройку подключения и первого клиента на три части, сначала настроим протоколы а затем первого клиента.
Примечание - название подключения
Протокол - vless
Порт IP - оставляем пустым, панель автоматически заполнит это поле
Порт - 443, т.к. мы хотим маскироваться под реальный https трафик
Далее проматываем вниз и включаем Reality, появится дополнительные поля
uTLS - я выбираю chrome, т.к. это основной мой браузер, но большая часть рекомендаций сходятся на том что нужно указывать firefox
Домен - панель заполнит автоматически
Dest и Server Names - рекомендуется указывать сайт за пределами РФ, не заблокированный РКН, без редиректов, очень хорошо если сайт имеет айпишник принадлежащий тому же хостеру где работает прокси. Подойдут сайты крупных технологических компаний, Microsoft, Samsung, Asus и т.д.
Private Key и Public Key - генерируем нажатием кнопки Get New Key
Возвращаемся к настройкам первого клиента
Email - здесь не обязательно должен быть email, указываем что-нибудь что поможет в будущем идентифицировать клиента и протокол
Subscription - Поле оставляем пустым, вообще вешь полезная, но по умолчанию так же работает на http, о том как ее включить и настроить на https и прочее расскажу в следующий раз.
Flow - надо выбрать "xtls-rprx-vision", данное поле появится только после того как Reality будет включен.
Ждем Создать. И видим в списке подключенией что-то подобное:
Список пользователей можно открыть по плюсику рядом с ID подключения, по кнопке меню можно добавить новых пользователей, как по одному так и массово.
Напротив каждого клиента видим кнопки QR-кода который достаточно отсканировать мобильным устройством и подключение на нем будет создано, если включена подписка то будет показано два кода, один для подключения, другой для подписки.
Кнопка изменения и кнопка информации, под которой можно посмотреть ссылку на подключение, и ссылку подписки по которой эту настройку сможет скачать клиент, а так же другие параметры подключения для пользователя если настраиваете клиент вручную.
На даный момент один из самых удобных и работающих клиентов это Nekobox/Nekoray
Есть сборки для Windows, Linux, MacOS, он же есть под Android.
Для iOS хорошо показал себя FoXray.
Для Windows и Linux качаем https://github.com/MatsuriDayo/nekoray/releases новые релизы выходят один раз в одну две недели.
Для Android https://github.com/MatsuriDayo/NekoBoxForAndroid/releases или из официального магазина, но там он платный.
Для iOS ищем FoXray в официальном магазине.
Сначала настроим клиент на ПК, я делаю на Linux, на Windows и Mac все аналогично.
Открываем информацию о пользователе и копируем URL. Запускаем Nekoray, при первом запуске он предложит выбрать ядро, выбираем sing-box. Сразу включаем Tun mode.
URL подключения мы уже скопировали, идем в Server, Add profile from clipboard, или просто нажимаем Ctrl+V в интерфейсе и наше подключение сразу добавляется в клиенте.
Нажимаем enter или правой кнопкой по подключению и выбираем start. После появления галочки идем проверять на какой-нибудь 2ip.ru, если видим там IP адрес вашего сервера то все хорошо, прокси/VPN работает.
Для iOS устанавливаем ForXray, открываем, выбираем сканировать QR, сканируем
Подключение сразу появляется в клиенте, запускаем и проверяем браузером
Для Android идем на гитхаб https://github.com/MatsuriDayo/NekoBoxForAndroid/releases и скачиваем apk последнего релиза для архитектуры arm64
Устанавливаем на телефон, и запускаем. У меня на Xiaomi с MiUI установилось без лишних вопросов. Далее нажимаем на плюсик в правом верхнем углу
Выбираем Отсканировать QR-код.
Тапом выделяем появившееся подключение и нажимаем запуск
Телефон скорее всего попросит разрешения на запуск впн подключений, их естественно нужно разрешить. И сразу будет видно запущенное и активное подключение плюс появится значок в трее.
На этом собственно все, мы молодцы.
А если когда-нибудь статью удалят по планируемому закону, то вот вам ссылка на телеграм канал где так же будут появлятся гайды и обновления по этой теме
Для тех кто дочитал до конца и решил попробовать вот промокод SEPTEMBER2023 на покупку сервера у компании VEESP по моей реферальной ссылке https://secure.veesp.com/?affid=860
Спасибо @KawaiiMonster за важное уточнение и дополнение в каментах:
Пару месяцев назад, Microsoft из-за наплыва людей, которые использовали на своих серверах резервный домен microsoft.com поменяли настройки TLS и в один момент у всех перестал этот Reality работать. Так как всё делали просто по гайдам, понимания того, что произошло небыло. Потом конечно всё стало понятно и люди переключился на другие домены, например Yahoo. Но сама суть Reality в том, чтобы маскировать вас под обычный сайт и довольно странно, что при переходе по вашему ip (при active probing) открывался сайт майкрософт или яху с совсем другим ip, от другого хостера с другой сети. Поэтому лучше всего использовать домен, который ведёт на ip из той же сети, что и ваш сервер с прокси. Но вот как найти такой домен, ещё и с tls 1.3 никто не говорит.
Есть инструмент, RealiTLScanner, который можно скачать или себе на компьютер с виндой, либо себе на vps сервер с Linux и запустить сканирование. На винде команда примерно такая ".\RealiTLScanner-windows-64.exe -addr 1.1.1.1 -port 443 -thread 100 -timeOut 5"
Где 1.1.1.1 это адрес вашего сервера. Нужно дать секунд 5 - 10 посканировать и нажать Ctrl - c, выбрать домен с поддержкой tls 1. 3 и h2, например как на скрине.
Так же была рекомендация отключить ICMP на сервере, нужно это для того что бы не работала функция обнаружения анонимайзеров на некоторых сайтах. Для убунту 20 это можно сделать так:
1. Подключаемся к серверу по SSH
2. Выполняем команды
- sudo sed -i '/ufw-before-input.*icmp/s/ACCEPT/DROP/g' /etc/ufw/before.rules
- sudo ufw reload
Спасибо @Telepuzo911 за наводку