13 KiB
🛡 3X-UI KIT: все протоколы одной командой
Одна команда ставит панель 3X-UI, создаёт подключения на 11 протоколах и выдаёт одну ссылку-подписку: приложение само получит подходящий ему формат и нужные протоколы. Домены не нужны.
Что делает скрипт:
- ставит официальную 3X-UI проверенной версии её собственным установщиком и ядро Xray, с которым работают все клиенты (Hiddify, Mihomo, v2rayN, Happ);
- выпускает сертификат Let's Encrypt на IP сервера и сам его продлевает;
- прячет панель на случайном порту и пути, со случайными логином и паролем;
- подбирает сайт для маскировки REALITY (с TLS 1.3 и HTTP/2) или, если хотите, использует ваш
домен (
--domain); - создаёт подключения на всех протоколах из таблицы ниже, генерирует ключи и обфускацию AmneziaWG;
- включает единую подписку с учётом приложения: Clash Verge и FlClash получают готовый конфиг Mihomo с AmneziaWG, остальные приложения – ссылки только на то, что они умеют;
- открывает в ufw только нужные порты.
Протоколы
| Протокол | Порт | Работает в |
|---|---|---|
| VLESS REALITY | 443/tcp | всех приложениях |
| Hysteria2 | 443/udp | всех приложениях |
| VLESS XHTTP + REALITY | 443/tcp | v2rayN, Happ, Clash Verge, FlClash |
| VLESS WebSocket + TLS | 443/tcp | всех приложениях |
| Trojan gRPC + TLS | 443/tcp | всех приложениях |
| VMess WebSocket + TLS | 443/tcp | всех приложениях |
| Shadowsocks 2022 | 8388/tcp+udp | всех приложениях (мобильный МТС его блокирует, по Wi-Fi работает) |
| TUIC v5 | 8444/udp | Hiddify, Clash Verge, FlClash, NekoBox |
| AmneziaWG | 51821/udp | AmneziaVPN, AmneziaWG, Clash Verge, FlClash |
| AmneziaWG 3.1 | 51822/udp | AmneziaVPN, AmneziaWG, Clash Verge, FlClash |
| MTProto | 443/tcp | прокси прямо в Telegram (если сервер сам достаёт до Telegram) |
Все TCP-протоколы, панель и подписка работают через один порт 443. Его слушает nginx: по имени сайта в запросе (SNI) он узнаёт REALITY, XHTTP и MTProto, остальное расшифровывает и разводит по секретным путям, а на всё прочее показывает сайт-заглушку. Снаружи у сервера открыты только 443, 80 (для продления сертификата), SSH, порт Shadowsocks 8388 и UDP-порты. Настоящие IP клиентов доходят до панели, поэтому лимит устройств работает.
Каждый протокол проверен настоящим подключением на ядрах Xray, Mihomo и sing-box, в том числе через интернет к серверу в России – стенд лежит в tests/matrix.
Note
Обычный WireGuard по умолчанию не ставится: в России его рукопожатие режет DPI, а попытки подключения могут привести к блокировке IP сервера. AmneziaWG – тот же WireGuard с маскировкой – проходит. Если сервер и пользователи за границей, добавьте
wgв--protocols.
Что понадобится
- VPS с Ubuntu 22.04/24.04 или Debian 12/13, доступ root по SSH
- Свободные порты 443 и 80 – на свежем сервере они свободны
Установка
Подключитесь к серверу по SSH и выполните:
bash <(curl -fsSL https://raw.githubusercontent.com/itsnotkubrick/3X-UI_KIT/main/scripts/3x-ui.sh)
Если запускаете в терминале, скрипт спросит, под какой сайт маскировать сервер. 1 (или Enter) – стандартный чужой сайт, работает сразу. 2 – свой домен: нужны его A-запись на IP сервера и свободный порт 80, а сертификат Let's Encrypt для домена скрипт получит сам.
Через пару минут скрипт покажет всё нужное:
- Адрес панели – откройте его в браузере.
- Логин и пароль от панели.
- Подписка – вставьте её в приложение или отсканируйте QR-код.
Всё это, вместе с отдельными ссылками на каждый протокол, сохраняется в /root/3x-ui.txt:
посмотреть снова – cat /root/3x-ui.txt.
Подключение
В приложении нажмите + → Импорт из буфера (или «Добавить подписку») и вставьте ссылку:
| Устройство | Приложение |
|---|---|
| iPhone, iPad | Happ, Streisand, Hiddify |
| Android | Hiddify, Happ, v2rayNG, FlClash |
| Windows, macOS, Linux | Hiddify, v2rayN, Clash Verge |
Подписка смотрит, какое приложение её запрашивает: Clash Verge и FlClash получают AmneziaWG,
а Happ, v2rayN, Karing и Hiddify – нет, потому что не умеют его. Для AmneziaVPN импортируйте
ссылки vpn:// из /root/3x-ui.txt, для Telegram – ссылку tg:// оттуда же.
Дополнительные пользователи
Одна команда на сервере добавляет пользователя сразу во все протоколы и выдаёт его подписку с QR-кодом:
kit user add sasha --gb 50 --days 30
| Команда | Что делает |
|---|---|
kit user add имя [--gb N] [--days N] [--devices N] |
добавить; лимит трафика, срок и число устройств – по желанию |
kit user list |
кто сколько израсходовал, до какого числа и когда был в сети |
kit user link имя [--all] |
подписка и QR-код ещё раз; --all – ещё ссылки vpn:// и tg:// |
kit user limit имя --gb N --days N |
изменить лимиты (0 – без ограничений) |
kit user off имя / kit user on имя |
временно выключить и включить |
kit user del имя |
удалить |
Трафик и лимиты общие на все протоколы: 50 ГБ – это 50 ГБ суммарно, через что бы пользователь ни подключался.
Обновление
Обновления kit и подписки kit-sub приходят сами: раз в сутки ночью сервер проверяет, не вышла ли новая версия 3X-UI KIT, и ставит её. Пользователи, ссылки и подписки не меняются, раздавать ничего заново не нужно.
Сервер ставит только подписанные релизы. Автор подписывает каждый релиз своим ключом, а
открытая часть ключа записана в kit на вашем сервере. Если файлы на GitHub подменят, подпись
не сойдётся и сервер откажется обновляться: одного взлома GitHub для этого мало. После
обновления сервер проверяет, что подписка отвечает, и при сбое возвращает прежнюю версию.
Панель 3X-UI и ядро Xray автообновление не трогает.
kit update # обновить сейчас, не дожидаясь ночи
kit update --manual # выключить автообновление
kit update --auto # включить обратно
kit version # версии kit, панели и ядра, включено ли автообновление
Журнал ночных обновлений: /var/log/kit-update.log.
Сервер ставили версией 1.0? В ней команды kit update ещё нет, поэтому один раз:
curl -fsSL https://raw.githubusercontent.com/itsnotkubrick/3X-UI_KIT/v1.1/scripts/kit.sh -o /usr/local/bin/kit && chmod 755 /usr/local/bin/kit && kit update
Дальше обновления будут приходить сами.
Панель 3X-UI обновляется отдельно, через x-ui. Ядро Xray в панели не обновляйте до последней
версии: с Xray 26.7 и новее Hiddify, FlClash и Clash Verge не подключаются к REALITY.
Резервная копия
kit backup
Сохранит в /root/kit-backup-ДАТА.tar.gz всё, что нужно, чтобы поднять тот же сервер в другом
месте: подключения, ключи, пользователей с их лимитами, настройки подписки и nginx. Файл виден
только root, и в нём ключи от сервера, поэтому храните его как пароль. Скачать к себе:
scp root@IP:/root/kit-backup-ДАТА.tar.gz .
Восстановление из копии на новом VPS появится в версии 1.2. Пока копия нужна как страховка: храните её отдельно от сервера.
Параметры
| Параметр | Что делает |
|---|---|
--protocols reality,hy2,ws |
только выбранные протоколы; minimal – только REALITY |
--port 8443 |
порт REALITY (TCP) и Hysteria2 (UDP) вместо 443 |
--cert fullchain.pem --key privkey.pem --host домен |
свой сертификат, например для домена |
--sni www.samsung.com |
чужой сайт для маскировки REALITY |
--domain vpn.example.com |
свой домен для маскировки (A-запись на IP сервера, свободный порт 80) |
--no-ufw |
не трогать файрвол |
--multi-port |
прежняя схема: у каждого протокола свой порт, без nginx |
Как устроена подписка
Наружу смотрит небольшой сервис kit-sub (Python, служба kit-sub),
а подписка 3X-UI работает только внутри сервера. kit-sub узнаёт приложение по User-Agent,
добавляет AmneziaWG в конфиг для Clash-приложений, убирает из заголовка «срок 0», из-за которого
приложения показывали 01.01.1970, и сам подхватывает продлённый сертификат.
Note
Если порт 80 занят или Let's Encrypt не выдал сертификат на IP (порт закрыт у хостера, исчерпан лимит выпусков, сбой), скрипт скажет об этом и сделает свой сертификат, а панель будет доступна через SSH-туннель (команду для туннеля он покажет). Подписка в этом режиме работает только изнутри сервера – используйте отдельные ссылки. Свой домен (
--domain) без сертификата на IP не работает: скрипт остановится с пояснением.
Обслуживание
Управление панелью – официальная команда x-ui: перезапуск, логи, обновление, удаление.
x-ui