Files
3X-UI_autoVPS/manuals/3x-ui.md
T

21 KiB
Raw Blame History

🛡 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 всех приложениях (если не подключается, попробуйте другой протокол)
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 по умолчанию не ставится: его рукопожатие легко распознаётся сетевым оборудованием, из-за чего соединение нестабильно. 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 для домена скрипт получит сам.

Через пару минут скрипт покажет всё нужное:

Результат установки 3X-UI

  1. Адрес панели – откройте его в браузере.
  2. Логин и пароль от панели.
  3. Подписка – вставьте её в приложение или отсканируйте 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:// оттуда же.

Меню kit

Команда kit без аргументов открывает меню, как у x-ui: пользователи, протоколы и порты, проверка, обновление, копия сервера. Выберите цифру, остальное kit спросит сам. Те же действия есть командами: kit user …, kit net …, kit check, kit update, kit backup, kit version (справка: kit help).

Дополнительные пользователи

Одна команда на сервере добавляет пользователя сразу во все протоколы и выдаёт его подписку с 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 | --amnezia | --telegram] (рядом с подпиской – ссылки «открыть в приложении») подписка и ссылки ещё раз: основные и запасные по группам; AmneziaVPN и Telegram – отдельными ключами
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.2/scripts/kit.sh -o /usr/local/bin/kit && chmod 755 /usr/local/bin/kit && kit update

Дальше обновления будут приходить сами.

Панель 3X-UI обновляет kit update --panel (проверенная версия, ядро и настройки сохраняются). Ядро Xray в панели не обновляйте до последней версии: с Xray 26.7 и новее Hiddify, FlClash и Clash Verge не подключаются к REALITY.

Проверка и починка

kit check            # проверить сервер, ничего не меняет
kit check --deep     # то же и подключиться клиентом (REALITY, XHTTP, Hysteria2) с самого сервера
kit check --fix      # исправить безопасное

kit check проверяет службы, версии, срок сертификата, что панель не торчит наружу, права на файлы с паролями и ключами, ответ подписки для Happ, Hiddify, v2rayN и Clash, а также что сайт маскировки отвечает по TLS 1.3 и HTTP/2, и подсказывает, что улучшить (сайт маскировки, лишние порты). Вывод можно просто прислать в чат, если нужна помощь.

kit check --fix лечит только безопасное: перезапускает упавшие службы, возвращает права 600, включает автообновление, перечитывает сертификат и снимает TLS у встроенной подписки 3X-UI (его включает команда x-ui cert, и подписка перестаёт отвечать). Ничего необратимого он не делает.

Note

Проверка идёт с самого сервера: доступность из вашей сети она не покажет.

Протоколы, порты и сайт маскировки (kit net)

kit net                     # протоколы, порты, статус, сайт маскировки и отпечаток одним экраном
kit net site                # подобрать сайт маскировки среди соседей по подсети (около минуты)
kit net site сайт.com       # или задать самому (проверю TLS 1.3 и HTTP/2)
kit net port имя порт       # сменить порт подключения: ufw и ссылки обновятся сами
kit net off vmess-ws        # выключить протокол и закрыть его порт (вернуть: kit net on vmess-ws)
kit net on reality2         # создать второй REALITY на высоком порту
kit net fp firefox          # сменить отпечаток клиента у всех подключений
kit net masq on             # Hysteria2 отвечает на чужой запрос страницей сайта
kit net panel domain        # панель и подписка открываются и по домену (только со своим доменом); kit net panel ip – как раньше
kit net split on          # через VPN только список (по умолчанию популярные иностранные сервисы), остальное напрямую; kit net split check | off

Со своим доменом панель и подписка по умолчанию открываются по IP (https://IP/путь/). Если нужен адрес с доменом (например, для Telegram-бота панели или ссылки, которая не зависит от IP), выберите «по домену» при установке (--panel-on domain) или позже: kit net panel domain. Путь у них секретный и по домену, как и по IP.

Раздельная маршрутизация (kit net split)

Если нужно, чтобы через VPN шли только выбранные сервисы, а всё остальное напрямую, включите: kit net split on. На сервере появится файл /etc/kit-sub/rules.yaml со списком иностранных сервисов (по умолчанию популярные: нейросети, видео и музыка, соцсети и мессенджеры, GitHub, Google и другие, всего около 50 категорий; тяжёлые и региональные – в комментариях, раскомментируйте нужные). Российские сайты в список не добавляйте: всё, чего в нём нет, и так идёт напрямую. Правила приезжают вместе с подпиской, на телефонах и компьютерах ничего настраивать не нужно: достаточно обновить подписку в приложении. Работает в приложениях на Mihomo (Clash Verge, FlClash, Mihomo Party); в Karing, Happ, Hiddify, v2rayN и других на ядре sing-box или Xray подписка остаётся прежней, весь трафик идёт через VPN (там раздельную маршрутизацию настраивают в самом приложении).

kit net split on       # создать список и включить
nano /etc/kit-sub/rules.yaml
kit net split check    # проверить файл: сколько правил применится и что отброшено
kit net split off      # выключить (список сохранится в rules.yaml.off)

Формат: GEOSITE,youtube (готовая категория), DOMAIN-SUFFIX,example.org, DOMAIN,api.example.org, DOMAIN-KEYWORD,слово, IP-CIDR,203.0.113.0/24. Лишнее и непонятное kit отбрасывает; если список пуст или повреждён, подписка отдаётся как обычно. Список входит в kit backup. DNS при этом не течёт: имена из списка у клиента не разрешаются, а запросы про них идут по DoH через VPN; для остального сайта используется системный DNS приложения (или адреса direct_dns из файла). Категории GEOSITE приложение один раз скачивает с GitHub.

Лучший сайт маскировки – ваш собственный домен (--domain при установке): сервер изображает ваш сайт, а сертификат и имя совпадают. Без домена установщик подбирает сайт среди соседей по подсети сервера: около 250 коротких обращений к порту 443 соседних адресов (не нужно – укажите --sni сайт или --domain). Любой протокол можно выключить командой kit net off имя и включить обратно kit net on имя.

Резервная копия

kit backup

Сохранит в /root/kit-backup-ДАТА.tar.gz копию сервера: подключения, ключи, пользователей с их лимитами, настройки подписки и nginx. Файл виден только root, и в нём ключи от сервера, поэтому храните его как пароль. Скачать к себе:

scp root@IP:/root/kit-backup-ДАТА.tar.gz .

Храните копию отдельно от сервера.

Новый чистый сервер поднимается из копии одной командой (нужны 3x-ui.sh и файл копии):

bash 3x-ui.sh --restore /root/kit-backup-ДАТА.tar.gz -y

Подключения, ключи, пользователи и их лимиты вернутся прежними. Если адрес сервера сменился, подписку клиентам нужно добавить заново, а на домене ничего менять не придётся: достаточно переключить DNS.

Параметры

Параметр Что делает
--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

← На главную · Дальше: 🚀 Hysteria2 →