3X-UI: Shadowsocks-2022 & XRay (XTLS) сервер с простой настройкой и приятным интерфейсом

Это уже даже более чем традиция - нейрокартинка для отвлечения внимания

Это уже даже более чем традиция — нейрокартинка для отвлечения внимания

В серии предыдущих статей я описывал, почему повсеместно используемые VPN- и прокси-протоколы такие как OpenVPN и L2TP очень уязвимы к выявлению и могут быть легко заблокированы цензорами при желании, обозревал существующие гораздо более надежные протоколы обхода блокировок,  клиенты для них, а также описывал настройку сервера двух видов для всего этого.

Многим читателям, однако, ручная настройка показалась сложной и неудобной — хотелось иметь понятный легко устанавливаемый графический интерфейс без необходимости ручного редактирования конфигов и вероятности допустить ошибки, а еще мы не поговорили про механизм «подписок», позволяющих клиентам автоматически подключать список новых серверов с настройками подключений.

Поэтому сегодня мы поговорим об установке и использовании графической панели 3X-UI для сервера X-Ray с поддержкой всего того, что умеет X-Ray: Shadowsocks-2022, VLESS с XTLS и т.д.

Почему 3X-UI? Существует, на самом деле, довольно много панелей для V2Ray/XRay: оригинальный X-UI, Marzban, Libertea, Hiddify. Проблема в том, что в процессе экспериментов у меня и ряда других хабраюзеров заставить их нормально работать с пол-пинка не получилось. Например, одним из требований была установка в Docker (чтобы не создавать бардак в системе и не запускать непонятные bash-скрипты на хосте вне контейнера), и на этом этапе отвалились уже многие панели: у каких-то установка падала еще на этапе разворачивания docker-контейнера из-за ошибок в скриптах, какие-то устанавливались, но не могли нормально запуститься (фронтенд говорил, что не может подключиться к бэкенду), какие-то в итоге запускались, и после получаса тыканья везде в попытках переключить язык с китайского или фарси хотя бы на английский выяснялось что что-то глючит или не работает.

3X-UI, который является доработанным форком оригинального X-UI, в сравнении со всем вышеописанным, почти идеален: легко устанавливается в Docker, сразу на английском с возможностью переключения на русский, имеет в себе все что надо — и главное, работает! Пара багов, конечно, тоже нашлась, но они не критичны и о них будет чуть позже.

Установка

Официальный репозиторий 3X-UI: https://github.com/MHSanaei/3x-ui

Итак, дано: VPS с IPv4 (неплохо бы иметь еще IPv6, но не обязательно) и Debian либо Ubuntu Linux (на других дистрибутивах суть будет примерно та же самая). И установленные Docker и docker-compose (если вдруг нет — следуйте инструкциям для вашего дистрибутива, у меня без проблем установилось простым «apt install docker.io docker-compose»). Ну и git в придачу.

Сначала клонируем исходники. Лучше всего использовать последнюю стабильную версию, на сегодняшний день это 1.4.6, можно проверить в «Releases» на гитхабе:

git clone https://github.com/MHSanaei/3x-ui.git
cd 3x-ui
git checkout v1.4.6

Запускаем docker-compose:

 docker-compose up -d

Готово! Вы восхитительны! Я серьезно, все, панель установлена и работает.

Дело осталось за малым — настроить ее:

Идем браузером по адресу http://yourserverip:2053/panel/, где yourserverip — IP-адрес вашего сервера или доменное имя, если оно у вас есть и настроено (обратите внимание, протокол http://, а не https://).

Логинимся под стандартными реквизитами admin/admin и видим нашу прекрасную панель управления:

a80283a46d9e0cfc1fdc2d2e0c03a922.png

Первым делом я советую сделать несколько вещей. Перейти в «Settings» (настройки) и там:

  1. Изменить порт на котором работает панель со стандартного 2053 на какой-нибудь другой (лучше всего где-нибудь в верхнем конце диапазона, до 65535);

  2. Изменить корневой путь URL-адреса панели с / на что-то типа /mysecretpanelroot/;

  3. При желании переключить язык на русский (но имейте в виду, в русском переводе есть некоторые неточности сбивающие с толку);

  4. На второй вкладке «Настройки безопасности» изменить стандартный админский пароль на свой;

  5. После чего сохраняем настройки и рестартуем панель. Нужно будет изменить URL с учетом нового порта и пути, заданных в настройках.

0a53b531fcb97b45018e8852dc5b6d4b.pngbda25bd7e245d68ff2ecc2ea49b1a997.png

Все вышеперечисленное необходимо для защиты от тупых скрипткиддисов залетных кулхакеров, которые случайно могут наткнуться на вашу панельку при массовом сканировании адресов. Другие советы по повышению безопасности я приведу в конце статьи.

Создаем подключения

Идем в раздел меню Inbounds (в русском переводе он почему-то называется «Пользователи», это неправильно и сбивает с толку). Нажимаем «Add Inbound» («Добавить пользователя»):

e3a13240ddc81c45d2e2c897cadb3cf0.png

Появляется милое окошо. Сначала добавим возможность подключаться через Shadowsocks-2022.
«Remark» (Примечание) — ввести что угодно, это просто человекочитаемое название;
«Протокол» выбираем shadowsocks;
«Listening IP» (в русском переводе называется «Порт IP», и это тоже неправильно и запутывает) можно оставить пустым, тогда сервер будет слушать на всех IP-адресах, либо можно явно указать требуемый;
«Порт» — панель выберет рандомный.

Далее настраиваем пользователя (в момент создания inbound’а создается один, других при желании можно добавить позже):
Поле «Email» на самом деле не обязательно должно содержать емайл, может быть любой текст (имя пользователя) — панель генерирует рандомный набор символов, если вы хотите создавать несколько разных пользователей (например, раздать аккаунты друзьям, смотреть кто сколько накачал и при желании блокировать доступ), то лучше вбить сюда что-то человекочитаемое и понятное;
«Subscription» — пока что можно вбить тот же самый юзернейм (о подписках я расскажу чуть позже).

Дальше снова идут настройки протокола:
«Шифрование» — выбираем что-нибудь что начинается с »2022», вариант по умолчанию вполне неплох;
«Пароль» (ключ) панель сгенерирует автоматически с правильной длиной для выбранного метода шифрования.

Нажимаем «Создать» и на этом настройка для Shadowsocks закончена, им уже можно пользоваться.

16e37f73c04f56b9805aa5c2ebd2e4c6.png

Теперь переходим к настройке VLESS с XTLS-Reality. Тут все будет чуточку сложнее, но в целом так же просто.

«Remark» (Примечание) — любое название;
«Протокол» — «vless»,
«Listening IP» («Порт IP», который на самом деле не порт, а адрес) — оставляем пустым, либо задаем вручную если надо;
«Порт» — вместо рандомного ставим 443;

24bdd197e359fb064b283c848b767af4.png

Далее переходим к настройкам клиента.
«Email» — как в и в прошлом пункте, лучше указать что-то человекочитаемое и понятное. Важно: пользователи разных подключений не могут иметь один и тот же емайл (например, наш новый VLESS и старый Shadowsocks созданный в предыдущем пункте), поэтому можно добавить какой-нибудь префикс (например user1vl) для избежания конфликтов.
«Subscription» — тут наоборот, лучше будет если текст в этом поле будет совпадать с тем, что вы задали для Shadowsocks (подробности ниже)
«Flow» — надо выбрать «xtls-rprx-vision». Обратите внимание, поле Flow (см. скриншот) появится только после того, как чуть ниже вы поставите галочку на пункте «Reality». То есть лучше всего настривать так: сначала ставите галочку Reality, а потом заполняете поля с настройками пользователя.

Дальше у нас идут настройки транспорта:
«Reality» — как уже сказано выше, должно быть активно;
«XTLS» — наоборот, должно быть неактивно (это немного запутывает, не смотря на то, что Reality тоже относится к XTLS, здесь под XTLS подразумеваются только устаревшие версии протокола, и галочки «XTLS» и «Reality» в панели являются взаимоисключающими);
«uTLS» — по умолчанию «firefox», я обычно выбираю «chrome», по факту особо без разницы (главное чтобы не «android», могут быть проблемы с клиентами);
«Домен» — на самом деле это не домен, а адрес для подключения к вашему серверу. Можно оставить пустым, тогда панель автоматически подставит IP-адрес или домен, по которому вы обращаетесь в панели на сервере.
«ShortIds» — панель сгенерирует рандомный ID;
«Public Key», «Private Key» — можно кликнуть на «Get new keys», и панель сама сгенерирует новые для вас;
«Dest» и «Server names» — вот это самое интересное, это домен, под который вы будете маскироваться. По умолчанию панель предлагает маскировку под yahoo.com и www.yahoo.com с переадресацией на yahoo.com:443, но лучше выбрать какой-нибудь другой домен, как описано в предыдущей статье;

524938f6e52c34c0ef374436e120c05f.png

Сохраняем введенную форму, и — всё! Настройка завершена.

После этого на странице видим примерно вот это:

17ce87d3053f7c1f002f37b1e646dc06.png

Если тыкнуть на кнопочку «Меню» соответствующую нужному протоколу, можно его активировать/деактивировать, сбросить счетчики трафика, добавить пользователей (в том числе сгенерировать разом N аккаунтов по шаблону), и самое главное — раскрыв (плюсиком) список пользователей, можно посмотреть настройки подключения для вбивания в клиенты для этого пользователя.

Нажав на значок QR-кода, панель покажет QR-код, который можно отсканировать камерой в мобильных клиентах (v2rayNG или Nekobox на Android, Wings X или Shadowrocket на iOS). Подробнее о клиентах читайте в этой статье.

ремарочка

Обратите внимание, v2rayNG и Nekobox из сторов основаны на старой версии XRay и еще не поддерживают Reality, нужно переключиться на бета-канал или устанавливать APK с гитхаба.

0dbe6c3ffdeb6655d9614dcbbe9347f1.png

Нажав на иконку информации (с буквой «i») можно посмотреть настройки для вбивания в десктопные клиенты, в том числе и URL, который можно скопировать и вставить.

Под дестоп я рекомендую Nekobox (есть под Windows, Linux и билды от сообщества для MacOS). Подробнее о клиентах читайте в этой статье.

a72958a7978fd9dc4092e0a0a39218b7.pngкраткая настройка Nekobox

Если вы раньше им не пользовались, нужно переключить его на использование движка sing-box, Preferences → Basic Settings → Core.

Далее копируем URL подключения в буфер обмена, в Nekobox нажимаем Server → Add profile from clipboard — вжух, и у нас в списке добавилось новое подключение!

Сохраняем, кликаем правой кнопкой мыши на новый сервер в списке, жмем Start, и проверяем подключение выбрав там же Current Select → URL test.

Если все нормально, то галочками «VPN Mode» или «System proxy» можно завернуть трафик всех приложений на прокси.

Там же вы можете найти «subscription URL». Это — специальным образом сгенерированный список подключений для клиентов. Помните, вы указывали «Subscription» при создании пользователя? При запросе по такому subscription URL, сервер выдаст список настроек (сервера, ключи) для всех подключений с этим ID в поле subscription. Многие клиенты (включая v2rayNG, v2rayN, Nekobox, и другие) умеют автоматически либо по запросу скачивать настройки с таких URL и добавлять их к себе — таким образом, если вы добавили какие-то новые протоколы или решили поменять конфигурацию, пользователи могут легко получить новые параметры с вашего сервера.

Дополнительные настройки

В менюшках панели можно найти много интересностей, например, можно запретить клиентам качать торренты (если у вас на сервере не слишком широкий канал или есть лимит трафика), добавить фильтр доменов рекламных сервисов, запретить доступ к порносайтам (ума не приложу, кому вообще в жизни может понадобиться такая ужасная функция).

555ce4d83e3d854a022ebdd5c2de84fd.png

А еще можно заблокировать доступ через сервер к IP-адресам и доменам Ирана, Китая и России (Россия здесь в отличной компании, не правда ли?) — это нужно если вы по ряду соображений настроили на клиентах доступ к российским сайтам напрямую, и хотите заблокировать их на сервере чтобы случайно не вылезти в рунет через него из-за ошибок в настройках.

95f85867dbb799ed01164ed5f5c9c6c2.png

Улучшения и баги

Сначала о паре багов.

При установке в Docker не получается посмотреть логи Xray, панель выплевывает ошибку. Иногда что-то подсмотреть и понять можно используя команду «docker logs 3x-ui», но там логи довольно куцые. Будем надеяться, что в следущих версиях это исправят (зарепортите им там кто-нибудь, а?).

Второй баг — не удается создать несколько inbounds с одним и тем же портом, но разными listening IP — панель ругается. Из-за этого, например, нельзя реализовать классическую схему с XTLS-Reality слушающем на 443 порту на IPv4-адресе, и VLESS+Websockets или VLESS+gRPC для работы через CDN (как запасной вариант) на IPv6 адресе. Опять же, будем надется, что авторы это когда-нибудь пофиксят.

И да, если по каким-то причинам вам не подходит вариант с Reality, черканите в комментариях, расскажу как настроить 3X-UI для обычного VLESS+XTLS-Vision (опционально с вебсокетами и gRPC).

Из того, что можно улучшить при конфигурации — по умолчанию панель слушает на чистом HTTP, без шифрования. Вариантов решения несколько:

  1. Если у вас есть домен (даже бесплатный от no-ip, freenom, dynu), то можно установить certbot от letsencrypt, запросить сертификат для своего домена, положить его в папку ./certs (внутри директории, куда вы склонировали 3x-ui) или сделать туда симлинки, и указать путь к ключам в панели в виде /root/cert/privkey.pem и /root/cert/public.crt. Не забудьте добавить post-update hook для рестарта контейнера;

  1. Другой вариант — поменять в настройках listen IP для панели на 127.0.0.1 — после этого панель станет недоступна «снаружи», но на нее всегда можно будет зайти с помощью SSH:
    «ssh -L 8080: localhost:2053 your_server_ip» — тогда вбивая в браузере http://localhost:8080, подключение через SSH пойдет на локальный порт 2053 сервера, где и слушает ваша панель;

  2. Третий вариант — повесить на сетевой интерфейс на сервере еще один «виртуальный» IP-адрес: прописать в /etc/network/interfaces что-то типа
    iface lo:1 inet static
    address 192.88.99.1
    network 192.88.99.0
    netmask 255.255.255.0
    и настроить панель, чтобы она слушала только на нем. Тогда «снаружи» панель будет недоступна, но при подключении через Shadowsocks/VLESS-прокси вы сможете до нее достучаться по этому адресу.

Telegram

И занимательное на последок. Панель может работать как Telegram-бот :)

Снаала обращаемся к боту BotFather и просим его зарегистрировать нового бота:

bafc451eb6edaf9ae1b4eade2206cacd.png

Он сгенерирует для вас API-токен. Его надо вставить в настройки панели, и там же указать ваш ID как админа (его можно запросить у бота userinfobot):

e5c9054bd31ed73154497d8a44b021ba.png

После этого можно разговаривать с панелью через Telegram — смотреть статистику, делать бэкапы конфигурации, и т.д.

000a7a77380c5e95398ffc2fdf48e2e5.png

Habrahabr.ru прочитано 66488 раз