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

292 lines
23 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🛡 3X-UI KIT: все протоколы одной командой
[← На главную](../README.md)
Одна команда ставит панель [3X-UI](https://github.com/MHSanaei/3x-ui), создаёт подключения
на 11 протоколах и выдаёт **одну ссылку-подписку**: приложение само получит
подходящий ему формат и нужные протоколы. Домены не нужны.
**Что делает [скрипт](../scripts/3x-ui.sh):**
- ставит официальную 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, остальное расшифровывает
и разводит по секретным путям, а на всё прочее показывает сайт-заглушку. Заглушка своя у каждого сервера:
при установке она собирается случайно (тема, название, тексты, вёрстка, цвета) и лежит в `/var/www/kit/index.html`,
её же показывает Hysteria2. Можно положить туда свою страницу. Снаружи у сервера
открыты только 443, 80 (для продления сертификата), SSH, порт Shadowsocks 8388 и UDP-порты. Настоящие IP клиентов
доходят до панели, поэтому лимит устройств работает.
> [!NOTE]
> Обычный WireGuard по умолчанию не ставится: его рукопожатие легко распознаётся сетевым
> оборудованием, из-за чего соединение нестабильно. AmneziaWG – тот же WireGuard с маскировкой –
> работает лучше. Если сервер и пользователи за границей, добавьте `wg` в `--protocols`.
## Что понадобится
- VPS с Ubuntu 22.04/24.04 или Debian 12/13, доступ root по SSH
- Свободные порты **443** и **80** – на свежем сервере они свободны
## Установка
Подключитесь к серверу по SSH и выполните:
```bash
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](assets/script-3x-ui.svg)
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-кодом:
```bash
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 автообновление не трогает.
```bash
kit update # обновить сейчас, не дожидаясь ночи
kit update --manual # выключить автообновление
kit update --auto # включить обратно
kit version # версии kit, панели и ядра, включено ли автообновление
```
Журнал ночных обновлений: `/var/log/kit-update.log`.
Сервер ставили версией 1.0? В ней команды `kit update` ещё нет, поэтому один раз:
```bash
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.
## Проверка и починка
```bash
kit check # проверить сервер, ничего не меняет
kit check --deep # то же и подключиться клиентом (REALITY, XHTTP, Hysteria2) с самого сервера
kit check --fix # исправить безопасное
```
`kit check` проверяет службы, что ядро Xray запущено и каждое включённое подключение слушает свой порт (TCP и UDP
отдельно), версии, срок сертификата, что панель не торчит наружу, права на файлы с
паролями и ключами, ответ подписки для Happ, Hiddify, v2rayN и Clash, а также что сайт маскировки отвечает по
TLS 1.3 и HTTP/2, и подсказывает, что улучшить (сайт маскировки, лишние порты). Вывод можно просто прислать в чат, если нужна помощь.
`kit check --fix` лечит только безопасное: перезапускает упавшие службы и ядро Xray, возвращает права `600`, включает
автообновление, перечитывает сертификат и снимает TLS у встроенной подписки 3X-UI (его включает команда
`x-ui cert`, и подписка перестаёт отвечать). Ничего необратимого он не делает.
> [!NOTE]
> Проверка идёт с самого сервера: доступность из вашей сети она не покажет.
## Протоколы, порты и сайт маскировки (`kit net`)
```bash
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
```
Панель меняет подключения на ходу, без перезапуска. Если ядро Xray не приняло правку и порт закрылся (так бывает с
маскировкой Hysteria2), `kit net` сам перезапускает ядро и говорит об этом: подключения прерываются на пару секунд.
Со своим доменом панель и подписка по умолчанию открываются по 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 категорий; тяжёлые и региональные – в комментариях, раскомментируйте нужные). Российские сайты в список не добавляйте: всё, чего в нём нет, и так идёт напрямую.
Правила приезжают вместе с подпиской, на телефонах и компьютерах ничего настраивать не нужно: достаточно обновить подписку в приложении.
| Приложение | Как получает правила |
|---|---|
| Clash Verge, FlClash, Mihomo Party (ядро Mihomo) | из подписки, сразу (режим «Rule», не «Global») |
| Happ | заголовком подписки (профиль «3X-UI KIT» включается сам) |
| Приложения, которые берут JSON-подписку Xray (адрес «JSON» со страницы подписки) | из конфига подписки |
| v2rayN, v2rayNG и другие с обычным списком ссылок, Karing, Hiddify, sing-box | не получают: подписка прежняя, весь трафик через VPN; раздельную маршрутизацию там настраивают в самом приложении |
```
kit net split on # создать список и включить
nano /etc/kit-sub/rules.yaml
kit net split check # проверить файл: сколько правил применится и что отброшено
kit net split apply # после правки списка: обновить профили Happ и Xray в панели (Mihomo берёт файл сам)
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 имя`.
## Резервная копия
```bash
kit backup
```
Сохранит в `/root/kit-backup-ДАТА.tar.gz` копию сервера: подключения, ключи, пользователей с их
лимитами, настройки подписки и nginx. Файл виден только root, и в нём ключи от сервера, поэтому
храните его как пароль. Скачать к себе:
```bash
scp root@IP:/root/kit-backup-ДАТА.tar.gz .
```
Храните копию отдельно от сервера.
Новый чистый сервер поднимается из копии одной командой (нужны `3x-ui.sh` и файл копии):
```bash
bash 3x-ui.sh --restore /root/kit-backup-ДАТА.tar.gz -y
```
Подключения, ключи, пользователи и их лимиты вернутся прежними. Если адрес сервера сменился, подписку клиентам нужно
добавить заново, а на домене ничего менять не придётся: достаточно переключить DNS.
Сертификат Let's Encrypt на новый IP выпускается заново. Если он не выдался (лимит – 5 сертификатов в неделю на один IP,
или закрыт входящий порт 80), скрипт скажет об этом и поставит самоподписанный сертификат с отпечатком в ссылках:
ссылки на подключения работают, а подписка в приложениях может не открыться. Если ядро Xray после восстановления
не запустилось, скрипт не скажет «Готово», а покажет, где искать причину.
Восстанавливайте только из своей копии. Архив с чужими путями, ссылками, лишними настройками или значениями
не в своём формате (порт – не число, путь со странными символами, непечатные байты в файлах настроек) скрипт не примет («Это не резервная копия 3X-UI KIT…») и ничего не изменит.
## Параметры
| Параметр | Что делает |
|---|---|
| `--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](../scripts/kit-sub.py) (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`: перезапуск, логи, обновление, удаление.
```bash
x-ui
```
---
[← На главную](../README.md)