1.1.1: kit check и kit fix, заголовки Happ, безопасная загрузка ядра, инструкция XKeen

- kit check и kit fix: проверка служб, сертификата, подписки, сайта маскировки, прав на файлы; безопасная починка
- kit-sub: пропускает заголовки Happ (Routing и др.) до клиентов
- ядро Xray: запасная загрузка через зеркало только с проверкой SHA256, tools/release.sh сверяет суммы с официальными
- установка со своим доменом: при отказе Let's Encrypt предлагается самоподписанный сертификат
- README: инструкция XKeen, команды kit, новый баннер; правки инструкций и changelog

Co-authored-by: xlok1e <124461726+xlok1e@users.noreply.github.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
maxdmitrov
2026-10-03 16:47:12 +03:00
co-authored by xlok1e Claude Sonnet 5.5
parent 49b27f380a
commit 099117c2a7
14 changed files with 594 additions and 300 deletions
+29 -11
View File
@@ -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 пока в разработке. Сейчас копия нужна как страховка:
храните её отдельно от сервера.
Храните копию отдельно от сервера.
## Параметры
+20 -22
View File
@@ -1,26 +1,24 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="300" viewBox="0 0 1200 300" role="img" aria-label="3X-UI KIT: свой VPN-сервер, все протоколы, один порт, одна подписка"><title>3X-UI KIT: свой VPN-сервер, все протоколы, один порт, одна подписка</title>
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="300" viewBox="0 0 1200 300" role="img" aria-label="3X-UI KIT: установка сервера одной командой"><title>3X-UI KIT: установка сервера одной командой</title>
<defs><clipPath id="r"><rect width="1200" height="300" rx="20"/></clipPath></defs>
<g clip-path="url(#r)"><rect width="1200" height="300" fill="#1a1411"/><path d="M60 0V300" stroke="#1d1713" stroke-width="2"/><path d="M156 0V300" stroke="#1d1713" stroke-width="2"/><path d="M252 0V300" stroke="#1d1713" stroke-width="2"/><path d="M348 0V300" stroke="#1d1713" stroke-width="2"/><path d="M444 0V300" stroke="#1d1713" stroke-width="2"/><path d="M540 0V300" stroke="#1d1713" stroke-width="2"/><path d="M636 0V300" stroke="#1d1713" stroke-width="2"/><path d="M732 0V300" stroke="#1d1713" stroke-width="2"/><path d="M828 0V300" stroke="#1d1713" stroke-width="2"/><path d="M924 0V300" stroke="#1d1713" stroke-width="2"/><path d="M1020 0V300" stroke="#1d1713" stroke-width="2"/><path d="M1116 0V300" stroke="#1d1713" stroke-width="2"/>
<rect y="262" width="1200" height="38" fill="#120e0c"/></g>
<g clip-path="url(#r)"><rect width="1200" height="300" fill="#1a1411"/><path d="M60 0V300" stroke="#1d1713" stroke-width="2"/><path d="M156 0V300" stroke="#1d1713" stroke-width="2"/><path d="M252 0V300" stroke="#1d1713" stroke-width="2"/><path d="M348 0V300" stroke="#1d1713" stroke-width="2"/><path d="M444 0V300" stroke="#1d1713" stroke-width="2"/><path d="M540 0V300" stroke="#1d1713" stroke-width="2"/><path d="M636 0V300" stroke="#1d1713" stroke-width="2"/><path d="M732 0V300" stroke="#1d1713" stroke-width="2"/><path d="M828 0V300" stroke="#1d1713" stroke-width="2"/><path d="M924 0V300" stroke="#1d1713" stroke-width="2"/><path d="M1020 0V300" stroke="#1d1713" stroke-width="2"/><path d="M1116 0V300" stroke="#1d1713" stroke-width="2"/><rect y="268" width="1200" height="32" fill="#120e0c"/></g>
<rect x="1.5" y="1.5" width="1197" height="297" rx="19" fill="none" stroke="#15110F" stroke-width="3"/>
<g font-family="Rubik,'Arial Black','Helvetica Neue',Arial,system-ui,sans-serif" font-weight="900" font-size="66" letter-spacing="1">
<text x="80" y="108" fill="#15110F" stroke="#15110F" stroke-width="14" stroke-linejoin="round">3X-UI KIT</text>
<text x="80" y="108" fill="#FBF6EC" style="paint-order:stroke">3X-UI KIT</text></g>
<g font-family="Rubik,'Arial Black','Helvetica Neue',Arial,system-ui,sans-serif" font-weight="900" font-size="42" letter-spacing="1">
<text x="82" y="164" fill="#8A66C4" stroke="#15110F" stroke-width="10" stroke-linejoin="round" transform="translate(3 4)">СВОЙ VPN ЗА МИНУТЫ</text>
<text x="82" y="164" fill="#93E06F" stroke="#15110F" stroke-width="8" stroke-linejoin="round" style="paint-order:stroke">СВОЙ VPN ЗА МИНУТЫ</text></g>
<text x="82" y="204" font-family="Rubik,'Arial Black','Helvetica Neue',Arial,system-ui,sans-serif" font-size="19" font-weight="500" fill="#CBBFA9">11 протоколов, один порт 443, одна подписка на все приложения</text>
<g><rect x="77" y="228" width="115" height="38" rx="10" fill="#15110F"/><rect x="74" y="225" width="115" height="38" rx="10" fill="#2C231D" stroke="#15110F" stroke-width="3"/><circle cx="90" cy="244" r="4.5" fill="#93E06F"/><text x="102" y="250" font-family="Rubik,'Arial Black','Helvetica Neue',Arial,system-ui,sans-serif" font-weight="800" font-size="15" fill="#FBF6EC">REALITY</text></g><g><rect x="204" y="228" width="135" height="38" rx="10" fill="#15110F"/><rect x="201" y="225" width="135" height="38" rx="10" fill="#2C231D" stroke="#15110F" stroke-width="3"/><circle cx="217" cy="244" r="4.5" fill="#93E06F"/><text x="229" y="250" font-family="Rubik,'Arial Black','Helvetica Neue',Arial,system-ui,sans-serif" font-weight="800" font-size="15" fill="#FBF6EC">Hysteria2</text></g><g><rect x="351" y="228" width="135" height="38" rx="10" fill="#15110F"/><rect x="348" y="225" width="135" height="38" rx="10" fill="#2C231D" stroke="#15110F" stroke-width="3"/><circle cx="364" cy="244" r="4.5" fill="#93E06F"/><text x="376" y="250" font-family="Rubik,'Arial Black','Helvetica Neue',Arial,system-ui,sans-serif" font-weight="800" font-size="15" fill="#FBF6EC">AmneziaWG</text></g><g><rect x="498" y="228" width="95" height="38" rx="10" fill="#15110F"/><rect x="495" y="225" width="95" height="38" rx="10" fill="#2C231D" stroke="#15110F" stroke-width="3"/><circle cx="511" cy="244" r="4.5" fill="#93E06F"/><text x="523" y="250" font-family="Rubik,'Arial Black','Helvetica Neue',Arial,system-ui,sans-serif" font-weight="800" font-size="15" fill="#FBF6EC">XHTTP</text></g><g><rect x="605" y="228" width="84" height="38" rx="10" fill="#15110F"/><rect x="602" y="225" width="84" height="38" rx="10" fill="#2C231D" stroke="#15110F" stroke-width="3"/><circle cx="618" cy="244" r="4.5" fill="#93E06F"/><text x="630" y="250" font-family="Rubik,'Arial Black','Helvetica Neue',Arial,system-ui,sans-serif" font-weight="800" font-size="15" fill="#FBF6EC">TUIC</text></g><g><rect x="701" y="228" width="84" height="38" rx="10" fill="#15110F"/><rect x="698" y="225" width="84" height="38" rx="10" fill="#2C231D" stroke="#15110F" stroke-width="3"/><circle cx="714" cy="244" r="4.5" fill="#93E06F"/><text x="726" y="250" font-family="Rubik,'Arial Black','Helvetica Neue',Arial,system-ui,sans-serif" font-weight="800" font-size="15" fill="#FBF6EC">:443</text></g>
<g transform="rotate(2 940 130)"><rect x="763" y="54" width="360" height="156" rx="14" fill="#15110F"/>
<rect x="758" y="48" width="360" height="156" rx="14" fill="#221B17" stroke="#15110F" stroke-width="4"/>
<circle cx="780" cy="68" r="6" fill="#ff5f57"/><circle cx="800" cy="68" r="6" fill="#febc2e"/><circle cx="820" cy="68" r="6" fill="#28c840"/>
<text x="778" y="108" font-family="'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace" font-weight="700" font-size="14" fill="#CBBFA9">$ bash 3x-ui.sh</text>
<text x="778" y="136" font-family="'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace" font-weight="800" font-size="14" fill="#93E06F">Готово! 3X-UI работает:</text>
<text x="778" y="158" font-family="'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace" font-weight="800" font-size="14" fill="#93E06F">11 протоколов.</text>
<text x="778" y="186" font-family="'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace" font-weight="700" font-size="13" fill="#CBBFA9">https://IP/sub/…</text></g>
<g transform="rotate(-5 1000 236)"><rect x="880" y="222" width="236" height="46" rx="6" fill="#15110F" transform="translate(4 5)"/>
<rect x="880" y="222" width="236" height="46" rx="6" fill="#F2E8D2" stroke="#15110F" stroke-width="3"/>
<circle cx="893" cy="235" r="3.2" fill="#15110F"/><circle cx="1103" cy="235" r="3.2" fill="#15110F"/>
<text x="998" y="253" text-anchor="middle" font-family="Rubik,'Arial Black','Helvetica Neue',Arial,system-ui,sans-serif" font-weight="900" font-size="20" fill="#15110F" letter-spacing=".5">БЕЗ ДОМЕНА</text></g>
<text x="1176" y="288" text-anchor="end" font-family="Rubik,'Arial Black','Helvetica Neue',Arial,system-ui,sans-serif" font-size="13" font-weight="500" fill="#CBBFA9" font-style="italic">it's not Kubrick. it's just a VPN.</text>
<text x="80" y="104" fill="#15110F" stroke="#15110F" stroke-width="14" stroke-linejoin="round">3X-UI KIT</text>
<text x="80" y="104" fill="#FBF6EC" style="paint-order:stroke">3X-UI KIT</text></g>
<g font-family="Rubik,'Arial Black','Helvetica Neue',Arial,system-ui,sans-serif" font-weight="900" font-size="35" letter-spacing="1">
<text x="82" y="156" fill="#8A66C4" stroke="#15110F" stroke-width="10" stroke-linejoin="round" transform="translate(3 4)">УСТАНОВКА ОДНОЙ КОМАНДОЙ</text>
<text x="82" y="156" fill="#93E06F" stroke="#15110F" stroke-width="8" stroke-linejoin="round" style="paint-order:stroke">УСТАНОВКА ОДНОЙ КОМАНДОЙ</text></g>
<g><rect x="77" y="190" width="130" height="38" rx="10" fill="#15110F"/><rect x="74" y="186" width="130" height="38" rx="10" fill="#2C231D" stroke="#15110F" stroke-width="3"/><circle cx="91" cy="205" r="4.5" fill="#93E06F"/><text x="104" y="211" font-family="Rubik,'Arial Black','Helvetica Neue',Arial,system-ui,sans-serif" font-weight="800" font-size="16" fill="#FBF6EC">Порт 443</text></g><g><rect x="219" y="190" width="183" height="38" rx="10" fill="#15110F"/><rect x="216" y="186" width="183" height="38" rx="10" fill="#2C231D" stroke="#15110F" stroke-width="3"/><circle cx="233" cy="205" r="4.5" fill="#93E06F"/><text x="246" y="211" font-family="Rubik,'Arial Black','Helvetica Neue',Arial,system-ui,sans-serif" font-weight="800" font-size="16" fill="#FBF6EC">Одна подписка</text></g><g><rect x="414" y="190" width="205" height="38" rx="10" fill="#15110F"/><rect x="411" y="186" width="205" height="38" rx="10" fill="#2C231D" stroke="#15110F" stroke-width="3"/><circle cx="428" cy="205" r="4.5" fill="#93E06F"/><text x="441" y="211" font-family="Rubik,'Arial Black','Helvetica Neue',Arial,system-ui,sans-serif" font-weight="800" font-size="16" fill="#FBF6EC">С доменом и без</text></g><g><rect x="77" y="238" width="141" height="38" rx="10" fill="#15110F"/><rect x="74" y="234" width="141" height="38" rx="10" fill="#2C231D" stroke="#15110F" stroke-width="3"/><circle cx="91" cy="253" r="4.5" fill="#93E06F"/><text x="104" y="259" font-family="Rubik,'Arial Black','Helvetica Neue',Arial,system-ui,sans-serif" font-weight="800" font-size="16" fill="#FBF6EC">kit check</text></g><g><rect x="230" y="238" width="194" height="38" rx="10" fill="#15110F"/><rect x="227" y="234" width="194" height="38" rx="10" fill="#2C231D" stroke="#15110F" stroke-width="3"/><circle cx="244" cy="253" r="4.5" fill="#93E06F"/><text x="257" y="259" font-family="Rubik,'Arial Black','Helvetica Neue',Arial,system-ui,sans-serif" font-weight="800" font-size="16" fill="#FBF6EC">Автообновление</text></g><g><rect x="436" y="238" width="236" height="38" rx="10" fill="#15110F"/><rect x="433" y="234" width="236" height="38" rx="10" fill="#2C231D" stroke="#15110F" stroke-width="3"/><circle cx="450" cy="253" r="4.5" fill="#93E06F"/><text x="463" y="259" font-family="Rubik,'Arial Black','Helvetica Neue',Arial,system-ui,sans-serif" font-weight="800" font-size="16" fill="#FBF6EC">Keenetic и OpenWrt</text></g>
<g transform="rotate(2 940 110)"><rect x="783" y="40" width="360" height="140" rx="14" fill="#15110F"/>
<rect x="778" y="34" width="360" height="140" rx="14" fill="#221B17" stroke="#15110F" stroke-width="4"/>
<circle cx="800" cy="54" r="6" fill="#ff5f57"/><circle cx="820" cy="54" r="6" fill="#febc2e"/><circle cx="840" cy="54" r="6" fill="#28c840"/>
<text x="798" y="92" font-family="'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace" font-weight="700" font-size="14" fill="#CBBFA9">$ bash 3x-ui.sh</text>
<text x="798" y="116" font-family="'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace" font-weight="700" font-size="13" fill="#CBBFA9">==&gt; Ставлю 3X-UI…</text>
<text x="798" y="142" font-family="'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace" font-weight="800" font-size="14" fill="#93E06F">Готово! 3X-UI работает.</text>
<text x="798" y="164" font-family="'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace" font-weight="700" font-size="13" fill="#CBBFA9">https://IP/sub/…</text></g>
<g transform="rotate(-4 1000 222)"><rect x="868" y="206" width="262" height="52" rx="6" fill="#15110F" transform="translate(4 5)"/>
<rect x="868" y="206" width="262" height="52" rx="6" fill="#F2E8D2" stroke="#15110F" stroke-width="3"/>
<circle cx="881" cy="219" r="3.2" fill="#15110F"/><circle cx="1117" cy="219" r="3.2" fill="#15110F"/>
<text x="999" y="241" text-anchor="middle" font-family="Rubik,'Arial Black','Helvetica Neue',Arial,system-ui,sans-serif" font-weight="900" font-size="26" fill="#15110F" letter-spacing=".5">11 ПРОТОКОЛОВ</text></g>
<text x="1176" y="290" text-anchor="end" font-family="Rubik,'Arial Black','Helvetica Neue',Arial,system-ui,sans-serif" font-size="13" font-weight="500" fill="#CBBFA9" font-style="italic">it's not Kubrick. it's just a VPN.</text>
</svg>

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB