1.1: --restore отложен до 1.2; без сертификата Let's Encrypt на IP установка не врёт про «Готово»
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5.5
parent
4a631ce701
commit
942c2bf9a7
+1
-1
@@ -5,7 +5,7 @@
|
||||
**Новое**
|
||||
|
||||
* Обновления приходят сами. Раз в сутки ночью сервер проверяет подпись автора и обновляет `kit`, а пользователи и ссылки остаются прежними. «Мам, удали старый VPN, вот новый» больше не нужно. Подпись не сошлась или подписка замолчала – откат. Не любите сюрпризы: `kit update --manual`.
|
||||
* Переезд за 5 минут. `kit backup` складывает сервер в один файл, `--restore` поднимает его на новом VPS. Хостер поднял цены или IP попал в немилость? Клиенты на домене даже не заметят.
|
||||
* Копия сервера одной командой. `kit backup` складывает подключения, ключи и пользователей в один файл. Восстановление из него придёт в 1.2: решили выпускать только то, что успели проверить на настоящем сервере, а не то, что «вроде работает».
|
||||
* Маскировка на выбор. Установщик спрашивает: стандартный чужой сайт (работает сразу) или свой домен (надёжнее: настоящая страница и сертификат Let's Encrypt). Без вопросов: `--domain vpn.example.com`. Теперь «под кого косим» решаете вы, а не скрипт за вас.
|
||||
* Заглушка с характером. На случайный заход сервер показывает кофейню, фотографа или блог про Linux. Тысячи серверов 3X-UI KIT больше не выглядят как близнецы.
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
> [!TIP]
|
||||
> **Вышла версия 1.1:** исправления по аудиту безопасности, автообновление только подписанных
|
||||
> релизов, резервная копия и переезд. [Что нового](CHANGELOG.md) · сервер на 1.0 обновляется
|
||||
> релизов, выбор маскировки (свой домен). [Что нового](CHANGELOG.md) · сервер на 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
|
||||
@@ -41,8 +41,8 @@
|
||||
получают свой формат и только те протоколы, которые умеют.
|
||||
- 👥 **Дополнительные пользователи одной командой** – `kit user add` добавляет пользователя
|
||||
сразу во все протоколы с общим лимитом трафика, сроком и числом устройств.
|
||||
- 🔄 **Обновляется сам, но только подписанными релизами**, а `kit backup` переносит сервер
|
||||
на новый VPS вместе с пользователями и ключами.
|
||||
- 🔄 **Обновляется сам, но только подписанными релизами**, а `kit backup` сохраняет
|
||||
копию сервера с пользователями и ключами (восстановление придёт в 1.2).
|
||||
- 🔒 **Сертификат Let's Encrypt на IP** выпускается и продлевается сам, панель скрыта на
|
||||
случайном пути со случайными логином и паролем.
|
||||
- ✅ **Проверено настоящими клиентами** – каждый протокол на ядрах Xray, Mihomo и sing-box,
|
||||
|
||||
+1
-2
@@ -18,8 +18,7 @@
|
||||
`SHA256SUMS` релиза подписан ключом автора (`ssh-keygen -Y sign`), версия внутри подписи
|
||||
совпадает, а каждый файл сошёлся с подписанным SHA256. Закрытый ключ не хранится на GitHub.
|
||||
Откат на старую версию запрещён, после обновления проверяется подписка, при сбое – возврат.
|
||||
- Резервная копия `kit backup` доступна только root (права 600); `--restore` принимает только
|
||||
локальный файл и отклоняет архивы с лишними файлами, ссылками и путями вида `../`.
|
||||
- Резервная копия `kit backup` доступна только root (права 600).
|
||||
- Подписка `kit-sub` работает без прав root: systemd `DynamicUser` и `LoadCredential`.
|
||||
- Все данные, которые попадают в файлы настроек, проверяются и экранируются.
|
||||
- Генераторы конфигов для роутеров работают только в браузере и никуда не отправляют ваши ссылки.
|
||||
|
||||
+5
-18
@@ -138,7 +138,7 @@ 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 backup
|
||||
@@ -152,21 +152,8 @@ kit backup
|
||||
scp root@IP:/root/kit-backup-ДАТА.tar.gz .
|
||||
```
|
||||
|
||||
Переезд на новый VPS: скопируйте файл на новый сервер и запустите установщик с `--restore`:
|
||||
|
||||
```bash
|
||||
scp kit-backup-ДАТА.tar.gz root@НОВЫЙ_IP:
|
||||
bash <(curl -fsSL https://raw.githubusercontent.com/itsnotkubrick/3X-UI_KIT/main/scripts/3x-ui.sh) --restore kit-backup-ДАТА.tar.gz
|
||||
```
|
||||
|
||||
Скрипт поставит ту же версию 3X-UI и вернёт всё из копии, логин и пароль панели остаются
|
||||
прежними. Копию он берёт только из локального файла и сначала проверяет: лишние файлы или
|
||||
странные пути внутри архива, и восстановление не начнётся.
|
||||
|
||||
- **Сервер на домене** (`--cert`, `--key`, `--host`): переключите A-запись домена на новый IP,
|
||||
и клиенты ничего не заметят.
|
||||
- **Сервер на IP:** скрипт сам поменяет адрес в подключениях, но старые подписки указывают на
|
||||
старый IP. Клиентам нужно один раз добавить подписку заново: `kit user link имя`.
|
||||
Восстановление из копии на новом VPS появится в версии 1.2. Пока копия нужна как страховка:
|
||||
храните её отдельно от сервера.
|
||||
|
||||
## Параметры
|
||||
|
||||
@@ -175,10 +162,10 @@ bash <(curl -fsSL https://raw.githubusercontent.com/itsnotkubrick/3X-UI_KIT/main
|
||||
| `--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 |
|
||||
| `--sni www.samsung.com` | чужой сайт для маскировки REALITY |
|
||||
| `--domain vpn.example.com` | свой домен для маскировки (A-запись на IP сервера, свободный порт 80) |
|
||||
| `--no-ufw` | не трогать файрвол |
|
||||
| `--multi-port` | прежняя схема: у каждого протокола свой порт, без nginx |
|
||||
| `--restore файл` | поднять сервер из резервной копии `kit backup` |
|
||||
|
||||
## Как устроена подписка
|
||||
|
||||
|
||||
+12
-6
@@ -291,11 +291,8 @@ main() {
|
||||
esac
|
||||
done
|
||||
[[ $PORT =~ ^[0-9]+$ ]] && ((PORT > 0 && PORT < 65536)) || die "Неверный порт: $PORT"
|
||||
if [[ -n $restore ]]; then
|
||||
[[ -z $HOST || $HOST =~ ^[0-9]{1,3}(\.[0-9]{1,3}){3}$ ]] || die "--host при восстановлении: IP нового сервера"
|
||||
restore_main "$restore"
|
||||
return
|
||||
fi
|
||||
# Восстановление из копии (restore_main) отключено до версии 1.2: его ещё не проверили на настоящем сервере.
|
||||
[[ -z $restore ]] || die "Восстановление из копии появится в версии 1.2. Пока доступна только резервная копия: kit backup."
|
||||
local re_host='^([A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z]{2,63}$'
|
||||
[[ -z $SNI || $SNI =~ $re_host ]] || die "--sni: нужно имя сайта, например dl.google.com"
|
||||
[[ -z $DOMAIN || $DOMAIN =~ $re_host ]] || die "--domain: нужно имя вашего домена, например vpn.example.com"
|
||||
@@ -398,6 +395,16 @@ main() {
|
||||
wait_panel
|
||||
fi
|
||||
|
||||
# Установщик 3X-UI мог не получить сертификат на IP (порт 80 закрыт у хостера, лимит
|
||||
# Let's Encrypt, сбой). Без него панель осталась бы без TLS, а nginx проксирует её по https:
|
||||
# получился бы сервер, который говорит «Готово», а панель не открывается.
|
||||
if [[ $PANEL_SSL == ip && ! -s /root/cert/ip/fullchain.pem ]]; then
|
||||
[[ -z $DOMAIN ]] || die "Let's Encrypt не выдал сертификат на IP $HOST, а свой домен без него не работает. Частые причины: порт 80 закрыт у хостера, лимит Let's Encrypt (5 выпусков на один IP за неделю), сбой у Let's Encrypt. Лог: /var/log/3x-ui-install.log"
|
||||
warn "Let's Encrypt не выдал сертификат на IP $HOST (порт 80 закрыт у хостера, лимит выпусков или сбой). Ставлю без него: панель будет доступна только через SSH-туннель."
|
||||
PANEL_SSL=none
|
||||
TRUSTED=no
|
||||
fi
|
||||
|
||||
# Без сертификата панель и подписки не должны торчать наружу по HTTP.
|
||||
if [[ $PANEL_SSL == none ]]; then
|
||||
say "Панель без сертификата – открываю её только для SSH-туннеля (127.0.0.1)"
|
||||
@@ -1487,7 +1494,6 @@ usage() {
|
||||
--user admin имя первого клиента
|
||||
--host 1.2.3.4 адрес в ссылке, если IP определился неверно
|
||||
--no-ufw не трогать файрвол
|
||||
--restore файл поднять сервер из резервной копии kit backup (на чистом VPS)
|
||||
-y не задавать вопросов
|
||||
EOF
|
||||
}
|
||||
|
||||
+1
-2
@@ -527,8 +527,7 @@ PY
|
||||
echo "В ней ключи и пароли от сервера, храните её как пароль. Скачать к себе (на компьютере):"
|
||||
echo " ${B}scp root@$HOST:$out .${N}"
|
||||
echo
|
||||
echo "Поднять сервер из копии на новом VPS:"
|
||||
echo " ${B}bash <(curl -fsSL https://raw.githubusercontent.com/itsnotkubrick/3X-UI_KIT/main/scripts/3x-ui.sh) --restore ${out##*/}${N}"
|
||||
echo "${D}Восстановление из копии на новом VPS появится в версии 1.2.${N}"
|
||||
}
|
||||
|
||||
usage() {
|
||||
|
||||
Reference in New Issue
Block a user