diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e43b0f9
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.DS_Store
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 073432c..db239cd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,20 +1,36 @@
# Что нового
+## v1.1.1: kit check и kit fix, исправления для Happ и скачивания ядра
+
+**Новое**
+
+* `kit check` и `kit fix`. Завёл для сервера врача. `kit check` осматривает службы, сертификат, подписку, права на файлы и сайт маскировки и честно говорит, что болит, а `kit fix` лечит только то, что безопасно лечить: перезапустит упавшее, вернёт права, включит автообновление. Никаких операций без наркоза. Заодно он спасает подписку, которая молча умирала после `x-ui cert`: она вела себя как кот, который делает вид, что вас не знает.
+* Инструкция для XKeen прямо в README. Восемь шагов от компонентов роутера до проверки, со скриншотами, чтобы не собирать её по десяти вкладкам. Автору XKeen огромное спасибо: всю тяжёлую работу сделал он, я только собрал шпаргалку.
+
+**Исправлено**
+
+* Маршрутизация Happ доходит до клиентов. `kit-sub` пропускал только свой короткий список заголовков, поэтому профиль в Happ просто не появлялся. Спасибо [xlok1e](https://github.com/xlok1e): он нашёл причину и прислал исправление, мне осталось только вежливо принять его и проверить.
+* Ядро Xray ставится, даже когда GitHub тормозит или молчит. Запасной путь идёт через зеркало, но только с проверкой SHA256: чужой бинарник не пройдёт, зеркалу я не верю ни на слово.
+* Установка со своим доменом больше не обрывается, если Let's Encrypt отказал в сертификате на IP (лимит выдачи, закрытый порт 80, сбой). Я объясню причины, спрошу «продолжить с самоподписанным сертификатом? [Y/n]» и честно предупрежу: ссылки на подключения работают, а подписка в приложениях может не открыться. Без драмы.
+* Подтянул мелочи по итогам проверки: права на ключ запасного сертификата, ожидание замка `dpkg` при установке `unzip` и защиту заголовков подписки от лишних символов.
+
+Если у вас 1.1, сервер обновится сам этой ночью. Хотите сразу: `kit update`.
+
## v1.1: безопасность, автообновление и новый генератор для роутера
**Новое**
-* Обновления приходят сами. Раз в сутки ночью сервер проверяет подпись автора и обновляет `kit`, а пользователи и ссылки остаются прежними. «Мам, удали старый VPN, вот новый» больше не нужно. Подпись не сошлась или подписка замолчала – откат. Не любите сюрпризы: `kit update --manual`.
-* Копия сервера одной командой. `kit backup` складывает подключения, ключи и пользователей в один файл. Восстановление из него придёт в 1.2: решили выпускать только то, что успели проверить на настоящем сервере, а не то, что «вроде работает».
-* Маскировка на выбор. Установщик спрашивает: стандартный чужой сайт (работает сразу) или свой домен (надёжнее: настоящая страница и сертификат Let's Encrypt). Без вопросов: `--domain vpn.example.com`. Теперь «под кого косим» решаете вы, а не скрипт за вас.
+* Обновления приходят сами. Раз в сутки ночью сервер проверяет мою подпись и обновляет `kit`, а пользователи и ссылки остаются прежними. «Мам, удали старый VPN, вот новый» больше не нужно. Подпись не сошлась или подписка замолчала: откат. Не любите сюрпризы? `kit update --manual`.
+* Копия сервера одной командой. `kit backup` складывает подключения, ключи и пользователей в один файл.
+* Маскировка на выбор. Установщик спрашивает: стандартный чужой сайт (работает сразу) или свой домен (надёжнее: настоящая страница и сертификат Let's Encrypt). Без вопросов: `--domain vpn.example.com`. Под какой сайт будет выглядеть сервер, теперь решаете вы, а не скрипт за вас.
* Заглушка с характером. На случайный заход сервер показывает кофейню, фотографа или блог про Linux. Тысячи серверов 3X-UI KIT больше не выглядят как близнецы.
* Один генератор для роутера вместо двух. Выбираете Keenetic или OpenWrt, ядро Xray или Mihomo, вставляете ссылки и получаете конфиг плюс команду, которая сама положит его на роутер. Меньше вкладок, меньше «а я точно там нажал?». Старые адреса генераторов продолжают работать.
-* OpenWrt через Nikki (бета). Генератор собирает профиль Mihomo и команду, которая включит его и перезапустит Nikki. Xray на OpenWrt не предлагаем: Nikki работает только на Mihomo, и мы не даём нажать то, что не заработает.
+* OpenWrt через Nikki (бета). Генератор собирает профиль Mihomo и команду, которая включит его и перезапустит Nikki. Xray на OpenWrt я не предлагаю: Nikki работает только на Mihomo, а кнопку, которая не заработает, лучше не рисовать.
**Исправлено**
-* Установщик 3X-UI сверяется по SHA256. Если его кто-то подменит, скрипт посмотрит на него как на незнакомца в чате с «выгодным предложением» и запускать не станет. Файлы теперь берём из тега версии, а не из `main`.
-* Hysteria больше не проверяется по справке, которую сама же принесла. Контрольная сумма записана в скрипте. Проверять человека по его же рекомендательному письму – так себе идея.
+* Установщик 3X-UI сверяется по SHA256. Если его кто-то подменит, скрипт посмотрит на него как на незнакомца в чате с «выгодным предложением» и запускать не станет. Файлы я теперь беру из тега версии, а не из `main`.
+* Hysteria больше не проверяется по справке, которую сама же принесла. Контрольная сумма записана прямо в скрипте. Проверять человека по его же рекомендательному письму – так себе идея.
* Hysteria2 перестала исполнять почту. Особо изобретательный адрес раньше мог выполниться как команда. Теперь `me@gmail.com;rm -rf` получит вежливый отказ.
* Подписка больше не root. Даже если `kit-sub` взломают, ключей от сервера у него нет. Пусть попробует открыть хоть одну дверь.
diff --git a/README.md b/README.md
index a6435f4..dad81de 100644
--- a/README.md
+++ b/README.md
@@ -2,26 +2,31 @@
-**Свой VPN-сервер одной командой: 11 протоколов, один порт 443, одна подписка на всё**
+**Установка 3X-UI одной командой: 11 протоколов, один порт 443, одна подписка на всё**
[](manuals/3x-ui.md#протоколы)
[](https://github.com/MHSanaei/3x-ui)
[](https://github.com/itsnotkubrick/3X-UI_KIT/commits)
-[Возможности](#возможности) · [Установка](#установка) · [Генератор](#генератор-конфигов-для-роутера) · [Полезное](#полезное) · [Поддержать](#поддержать-проект)
+[Возможности](#возможности) · [Установка](#установка) · [Команды](#команды-kit) · [Роутер](#vpn-на-роутере) · [Генератор](#генератор-конфигов-для-роутера) · [Полезное](#полезное) · [Поддержать](#поддержать-проект)
---
> [!TIP]
-> **Вышла версия 1.1:** исправления по аудиту безопасности, автообновление только подписанных
-> релизов, выбор маскировки (свой домен). [Что нового](https://github.com/itsnotkubrick/3X-UI_KIT/releases/tag/v1.1) ·
-> сервер на 1.0 обновляется одной командой:
+> **Вышла версия 1.1.1:** `kit check` и `kit fix`, исправления для Happ и скачивания ядра, инструкции для XKeen.
+> [Что нового](https://github.com/itsnotkubrick/3X-UI_KIT/releases/tag/v1.1.1) ·
+> сервер на 1.1 обновится сам этой ночью, а на 1.0 одной командой:
> ```bash
-> 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
+> curl -fsSL https://raw.githubusercontent.com/itsnotkubrick/3X-UI_KIT/v1.1.1/scripts/kit.sh -o /usr/local/bin/kit && chmod 755 /usr/local/bin/kit && kit update
> ```
+> [!NOTE]
+> **Проект – набор скриптов с открытым кодом.** Он не оказывает услуг связи и не предоставляет доступ
+> к серверам. Вы ставите его на собственный сервер и сами отвечаете за соблюдение законодательства
+> своей страны.
+
**3X-UI KIT** превращает чистый VPS в готовый VPN-сервер за несколько минут. Скрипт ставит
официальную панель [3X-UI](https://github.com/MHSanaei/3x-ui), настраивает все популярные
протоколы, сертификат и файрвол и выдаёт одну ссылку-подписку. Её можно вставить в любое
@@ -46,13 +51,16 @@
- 🔒 **Сертификат Let's Encrypt на IP** выпускается и продлевается сам, панель скрыта на
случайном пути со случайными логином и паролем.
- ✅ **Проверено настоящими клиентами** – каждый протокол на ядрах Xray, Mihomo и sing-box,
- в том числе с сервером в России: [tests/matrix](tests/matrix/).
+ в том числе через интернет к удалённому серверу: [tests/matrix](tests/matrix/).
## Что понадобится
- VPS с **Ubuntu 22.04/24.04** или **Debian 12/13** и доступом root по SSH
- Свободные порты **443** и **80** – на свежем сервере они свободны
+Нужен VPS? Я сам использую **[IS Hosting](https://ishosting.io/affiliate/NTg4MiM4)** и рекомендую его
+(реферальная ссылка).
+
## Установка
Подключитесь к серверу по SSH и выполните:
@@ -71,12 +79,158 @@ bash <(curl -fsSL https://raw.githubusercontent.com/itsnotkubrick/3X-UI_KIT/main
> Проект создан в образовательных целях. Убедитесь, что ваши действия
> соответствуют законодательству вашей страны.
+## Команды kit
+
+После установки на сервере появляется команда `kit`. Подробности – в [инструкции](manuals/3x-ui.md).
+
+| Команда | Что делает |
+|---|---|
+| `kit user add имя [--gb 50] [--days 30] [--devices 3]` | добавить пользователя во все протоколы и показать его подписку с QR-кодом |
+| `kit user list` | кто сколько израсходовал, до какого числа и когда был в сети |
+| `kit user link имя [--all]` | показать подписку ещё раз; `--all` добавляет ссылки `vpn://` и `tg://` |
+| `kit user limit имя [--gb N] [--days N] [--devices N]` | изменить лимиты (`0` – без ограничений) |
+| `kit user off имя` / `kit user on имя` | временно выключить и включить пользователя |
+| `kit user del имя` | удалить пользователя |
+| `kit check` | проверить сервер: службы, сертификат, подписку, сайт маскировки, права на файлы (ничего не меняет) |
+| `kit fix [--dry-run]` | исправить безопасное: перезапустить службы, вернуть права, включить автообновление |
+| `kit update [--manual \| --auto]` | обновить сейчас; `--manual` выключает автообновление, `--auto` включает |
+| `kit backup` | сохранить копию сервера (подключения, ключи, пользователи) |
+| `kit version` | версии `kit`, панели и ядра, состояние автообновления |
+
+Для отдельного сервера Hysteria2 есть команда `hy2` (`hy2 add`, `hy2 del`, `hy2 list`, `hy2 link`, `hy2 status`,
+`hy2 restart`, `hy2 update`, `hy2 uninstall`), подробнее – в [инструкции по Hysteria2](manuals/hysteria2.md).
+Панелью 3X-UI управляет команда `x-ui`.
+
+## VPN на роутере
+
+Через прокси идут только нужные сервисы и выбранные устройства, остальное работает напрямую.
+Порядок: **1.** установить программу на роутер → **2.** собрать конфиг в [генераторе](#генератор-конфигов-для-роутера) →
+**3.** вставить команду из генератора.
+
+> [!NOTE]
+> **🙏 Спасибо автору XKeen.** На роутере работает не моя программа: я только собрал инструкцию
+> и генератор конфигов, а всю сложную работу сделал **jameszeroX**.
+>
+> **[XKeen](https://github.com/jameszeroX/XKeen)** – прокси на Keenetic (Xray и Mihomo, политики для устройств).
+> [Репозиторий](https://github.com/jameszeroX/XKeen) · [Вики](https://github.com/jameszeroX/XKeen/wiki) · ⭐ [Поставить звезду](https://github.com/jameszeroX/XKeen)
+>
+> Вопросы по самой программе задавайте в её репозитории: так автор узнаёт об ошибках. Если что-то не так
+> с моей инструкцией или генератором, пишите мне.
+
+
+📶 Keenetic: XKeen (jameszeroX) · 8 шагов, 20–30 минут
+
+Нужны роутер **Keenetic** или **Netcraze** с USB-портом, USB-флешка в формате **ext4** и свой сервер с VLESS
+(например, из [этой инструкции](manuals/3x-ui.md)).
+
+
+1. Компоненты KeeneticOS
+
+В веб-интерфейсе: **Управление → Общие настройки → Изменить набор компонентов**. Отметьте компоненты
+с галочками на картинке и установите. Роутер обновится и перезагрузится.
+
+
+
+
+
+
+2. Entware на флешку
+
+1. Отформатируйте флешку в **ext4** и вставьте её в роутер.
+2. Откройте её по сети (`\\192.168.x.x\`), создайте папку `install` и положите туда установщик под процессор роутера:
+ [mipsel](https://bin.entware.net/mipselsf-k3.4/installer/mipsel-installer.tar.gz),
+ [mips](https://bin.entware.net/mipssf-k3.4/installer/mips-installer.tar.gz) или
+ [aarch64](https://bin.entware.net/aarch64-k3.10/installer/aarch64-installer.tar.gz).
+ Не знаете, какой нужен? Модель роутера – в характеристиках на сайте Keenetic.
+
+
+
+3. **Управление → OPKG**: выберите флешку и сохраните. Установка займёт несколько минут.
+
+
+
+
+
+
+3. Подключение по SSH
+
+```bash
+ssh root@192.168.x.x -p 222
+```
+
+Пароль по умолчанию `keenetic`. **Сразу смените его** командой `passwd`.
+
+
+
+
+4. Шифрованный DNS
+
+Пропишите шифрованные DNS-серверы (DoT или DoH) по
+[инструкции Keenetic](https://support.keenetic.ru/ultra/kn-1811/ru/31543-dot-and-doh-proxy-servers-for-dns-requests-encryption.html):
+без этого XKeen работает неправильно.
+
+
+
+
+5. Токен для KeeneticOS 5.2 и новее
+
+XKeen нужен токен доступа к роутеру. Создайте его в разделе **Пользователи и доступ**, вставьте в
+[шаблон xkeen.json](https://github.com/jameszeroX/XKeen/releases/download/2.0.1_Beta/xkeen.json) и положите файл на роутер
+по пути `/opt/etc/xkeen/xkeen.json`. Подробнее – в [вики XKeen](https://github.com/jameszeroX/XKeen/wiki/Порядок-установки).
+
+
+
+
+6. Установка XKeen
+
+Подключитесь по SSH и выполните:
+
+```bash
+opkg update && opkg upgrade && opkg install curl tar && cd /tmp
+sh -c "$(curl -sSL https://raw.githubusercontent.com/jameszeroX/XKeen/main/install.sh)"
+```
+
+Если GitHub недоступен, замените адрес на `https://cdn.jsdelivr.net/gh/jameszeroX/XKeen@main/install.sh`.
+Установщик спросит ядро (Xray или Mihomo), геобазы и автозагрузку.
+
+Затем соберите конфиг в [генераторе](#генератор-конфигов-для-роутера) (роутер Keenetic, нужное ядро), вставьте команду в SSH-консоль
+и нажмите Enter: файлы запишутся, XKeen перезапустится.
+
+
+
+
+
+
+7. Какие устройства через прокси
+
+В веб-интерфейсе откройте **Приоритеты подключений → Политики доступа в Интернет**, создайте политику
+с именем **`xkeen`** и перенесите в неё нужные устройства.
+
+> [!WARNING]
+> Без политики `xkeen` через прокси пойдёт трафик **всех** устройств в сети.
+
+
+
+
+8. Проверка
+
+- На роутере: `xkeen -status` – XKeen должен быть запущен.
+- На устройстве из политики `xkeen` откройте сайт, показывающий IP-адрес: он должен совпасть с адресом вашего сервера,
+ а на остальных устройствах остаться прежним.
+- Удобнее управлять настройками из браузера через [XKeen UI](https://github.com/zxc-rv/XKeen-UI).
+
+
+
+Подробная версия с теми же шагами: [инструкция для Keenetic](manuals/xkeen-keenetic.md).
+
+
+
## Генератор конфигов для роутера
Вставьте ссылку на сервер или подписку, выберите роутер и ядро, отметьте нужные сервисы –
и получите готовый конфиг и одну команду, которая сама положит его на роутер.
Всё считается в браузере, ссылки никуда не отправляются.
-Как поставить XKeen на роутер – в [инструкции для Keenetic](manuals/xkeen-keenetic.md).
+Как поставить XKeen на роутер – в разделе [VPN на роутере](#vpn-на-роутере).
| Роутер | Ядро | Что получится | Генератор |
|---|---|---|---|
diff --git a/VERSION b/VERSION
index 9459d4b..524cb55 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.1
+1.1.1
diff --git a/manuals/3x-ui.md b/manuals/3x-ui.md
index d05e094..7d9d893 100644
--- a/manuals/3x-ui.md
+++ b/manuals/3x-ui.md
@@ -30,7 +30,7 @@
| VLESS WebSocket + TLS | 443/tcp | всех приложениях |
| Trojan gRPC + TLS | 443/tcp | всех приложениях |
| VMess WebSocket + TLS | 443/tcp | всех приложениях |
-| Shadowsocks 2022 | 8388/tcp+udp | всех приложениях (мобильный МТС его блокирует, по Wi-Fi работает) |
+| 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 |
@@ -43,12 +43,12 @@
доходят до панели, поэтому лимит устройств работает.
Каждый протокол проверен настоящим подключением на ядрах Xray, Mihomo и sing-box,
-в том числе через интернет к серверу в России – стенд лежит в [tests/matrix](../tests/matrix/).
+в том числе через интернет к удалённому серверу – стенд лежит в [tests/matrix](../tests/matrix/).
> [!NOTE]
-> Обычный WireGuard по умолчанию не ставится: в России его рукопожатие режет DPI,
-> а попытки подключения могут привести к блокировке IP сервера. AmneziaWG – тот же WireGuard
-> с маскировкой – проходит. Если сервер и пользователи за границей, добавьте `wg` в `--protocols`.
+> Обычный WireGuard по умолчанию не ставится: его рукопожатие легко распознаётся сетевым
+> оборудованием, из-за чего соединение нестабильно. AmneziaWG – тот же WireGuard с маскировкой –
+> работает лучше. Если сервер и пользователи за границей, добавьте `wg` в `--protocols`.
## Что понадобится
@@ -135,7 +135,7 @@ kit version # версии kit, панели и ядра, включе
Сервер ставили версией 1.0? В ней команды `kit update` ещё нет, поэтому один раз:
```bash
-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
+curl -fsSL https://raw.githubusercontent.com/itsnotkubrick/3X-UI_KIT/v1.1.1/scripts/kit.sh -o /usr/local/bin/kit && chmod 755 /usr/local/bin/kit && kit update
```
Дальше обновления будут приходить сами.
@@ -143,22 +143,40 @@ curl -fsSL https://raw.githubusercontent.com/itsnotkubrick/3X-UI_KIT/v1.1/script
Панель 3X-UI обновляется отдельно, через `x-ui`. Ядро Xray в панели не обновляйте до последней
версии: с Xray 26.7 и новее Hiddify, FlClash и Clash Verge не подключаются к REALITY.
+## Проверка и починка
+
+```bash
+kit check # проверить сервер, ничего не меняет
+kit fix --dry-run # показать, что будет исправлено
+kit fix # исправить безопасное
+```
+
+`kit check` проверяет службы, версии, срок сертификата, что панель не торчит наружу, права на файлы с
+паролями и ключами, ответ подписки для Happ, Hiddify, v2rayN и Clash, а также что сайт маскировки отвечает по
+TLS 1.3 и HTTP/2. Вывод можно просто прислать в чат, если нужна помощь.
+
+`kit fix` лечит только безопасное: перезапускает упавшие службы, возвращает права `600`, включает
+автообновление, перечитывает сертификат и снимает TLS у встроенной подписки 3X-UI (его включает команда
+`x-ui cert`, и подписка перестаёт отвечать). Ничего необратимого он не делает.
+
+> [!NOTE]
+> Проверка сайта маскировки идёт с самого сервера: доступность из вашей сети она не покажет.
+
## Резервная копия
```bash
kit backup
```
-Сохранит в `/root/kit-backup-ДАТА.tar.gz` всё, что нужно, чтобы поднять тот же сервер в другом
-месте: подключения, ключи, пользователей с их лимитами, настройки подписки и nginx. Файл виден
-только root, и в нём ключи от сервера, поэтому храните его как пароль. Скачать к себе:
+Сохранит в `/root/kit-backup-ДАТА.tar.gz` копию сервера: подключения, ключи, пользователей с их
+лимитами, настройки подписки и nginx. Файл виден только root, и в нём ключи от сервера, поэтому
+храните его как пароль. Скачать к себе:
```bash
scp root@IP:/root/kit-backup-ДАТА.tar.gz .
```
-Восстановление из копии на новом VPS пока в разработке. Сейчас копия нужна как страховка:
-храните её отдельно от сервера.
+Храните копию отдельно от сервера.
## Параметры
diff --git a/manuals/assets/banner.svg b/manuals/assets/banner.svg
index 4bb8f2f..e0a52d8 100644
--- a/manuals/assets/banner.svg
+++ b/manuals/assets/banner.svg
@@ -1,26 +1,24 @@
-