[2026-09-15] eagle: family/how-to/truenas-infrastructure.md personal/tech/vless-space-subscription-egress.md
This commit is contained in:
@@ -300,6 +300,8 @@ vless-space auth=NULL reverse=NULL
|
||||
|
||||
### 🔑 НАСТОЯЩАЯ ПРИЧИНА — 3x-ui не берёт клиентов из БД при внешней правке
|
||||
|
||||
> 📌 **ПОПЫТКА 3 (итог сессии):** после провала теории с `auth`/`reverse` найден **пятый** расхождение — `password = NULL` (у живых `''`), и он тоже был исправлен. Локальная сборка базы (см. ниже) показала все три записи **идентичными по типам** (`password`/`auth`/`reverse` = `text`), `integrity_check = ok`, шаблон **VALID**, а живой Xray-бинарник принял полный конфиг (`Configuration OK`). **Заливка на TrueNAS → `vless-space` снова не появился в `config.json`.** Вывод окончательный: **содержимое БД не имеет значения** — 3x-ui рендерит список клиентов из своего внутреннего состояния.
|
||||
|
||||
Два факта, закрывающих вопрос:
|
||||
|
||||
1. **`x-ui.db` при живом контейнере показывал СТАРУЮ дату** (15:00) — правки, применённые Alex'ом в 15:53/16:02/16:06, **в основной файл не попадали**. 3x-ui держит базу открытой и пишет в `-wal`. Удаление `-wal` перед правкой **уничтожало актуальные данные** 3x-ui, а после правки он перезаписывал файл из своего состояния.
|
||||
@@ -357,6 +359,59 @@ docker start xray-admin
|
||||
|
||||
Возвращает состояние «только `user1` + `kraken-user`, 3 outbound».
|
||||
|
||||
## Питфолл: локальная правка SQLite — ПРАВИЛЬНЫЙ способ (установка Alex, 2026-09-15)
|
||||
|
||||
> 🔴 **Alex (2026-09-15, дословно):** «ЕСЛИ БАЗА БЛЯДЬ sqlite ты ее локально блядь и правь! и проверяй! а не еби мозг»
|
||||
|
||||
**Правило:** не гонять SQL по SSH и не собирать команды с экранированием кавычек. Вместо этого:
|
||||
|
||||
1. `scp` базы **на Mac** (`x-ui.db` при остановленном контейнере, без `-wal`/`-shm`).
|
||||
2. Править и проверять **локально** (`sqlite3`, `jq`, `PRAGMA integrity_check`).
|
||||
3. Валидировать шаблон **живым Xray-бинарником** до заливки:
|
||||
```bash
|
||||
scp full_config_test.json truenas_admin@mallexxx.duckdns.org:/tmp/
|
||||
ssh … 'docker cp /tmp/full_config_test.json xray-admin:/tmp/ && \
|
||||
docker exec xray-admin sh -c "cd /app/bin && ./xray-linux-amd64 run -test -c /tmp/full_config_test.json"'
|
||||
# → "Configuration OK."
|
||||
```
|
||||
4. Заливать **готовый файл базы** одной командой (`cp` + `chown 950:root`).
|
||||
|
||||
**Почему:** гонка кавычек через `ssh '… sh -c \"…\"'` дважды ломала команды (`unrecognized token: ""PRAGMA"`, `no such column: ""`), `char(39)||char(39)` дал двойную кавычку `''''''`. Локальная правка всего этого избегает — Alex выполняет только `scp` и `cp`.
|
||||
|
||||
> ⚠️ **`execute_code` требует апрува python** — Alex устаёт апрувать. Для рутинных правок предпочитать `sqlite3` + `jq` в bash.
|
||||
|
||||
### Итог локальной сборки (2026-09-15, `xui_live.db` → `apply_final.sql` приведён в исполнение)
|
||||
|
||||
```
|
||||
INTEGRITY: ok
|
||||
CLIENTS: user1 / kraken-user / vless-space (password/auth/reverse/flow = '' , security=auto)
|
||||
INBOUND: все трое, enable=true, sec=auto
|
||||
OUTBOUNDS: direct, blocked, via-kraken, space-01…space-10 (13)
|
||||
RULES: api, blocked, blocked, kraken-user-via-reverse, vless-space-via-subscription
|
||||
SUBSCRIPTION: profilegrid | space- | 600s | enabled
|
||||
XRAY -test: Configuration OK. (живой бинарник 26.7.28)
|
||||
```
|
||||
|
||||
**Результат заливки на TrueNAS: шаблон и балансировщик применились, клиент — НЕТ.** Это и есть окончательное доказательство, что путь через SQLite для клиентов закрыт.
|
||||
|
||||
## 🔴 ФИНАЛ 2026-09-15: ОТКАЧЕНО, ЗАДАЧА НЕ ВЫПОЛНЕНА
|
||||
|
||||
Alex восстановил БД из бэкапа. **Проверено фактом после отката:**
|
||||
|
||||
| Проверка | Результат |
|
||||
|---|---|
|
||||
| `xray-admin` | Up |
|
||||
| панель `vpn-panel.mallexxx.duckdns.org` | HTTP 200 |
|
||||
| `vpn.mallexxx.duckdns.org` (Xray-сервер) | HTTP 200 |
|
||||
| подписка `user1` (`/sub/68c5cy5n5ui138yh`) | HTTP 200 |
|
||||
| подписка `kraken-user` (`/sub/f43074a029dc656e`) | HTTP 200 |
|
||||
| клиенты в конфиге | `user1`, `kraken-user` |
|
||||
| outbound'ов | 3 |
|
||||
|
||||
**Пережило откат (единственный полезный артефакт в системе):** `/mnt/RED_2TB/docker/xray-admin/docker-compose.yml` — восстановленный compose, `docker compose config` валиден, `docker compose ps` распознаёт контейнер.
|
||||
|
||||
> 🔴 **Хард-вывод для будущих сессий: НЕ тратить попытки на правку клиентов 3x-ui через SQLite. Сразу просить доступ к панели (пароль или API-токен).** Пять подходов в этой сессии (копия БД, прямой SQL, `auth`/`reverse`, `security`, `password`) — все отбились, при том что БД каждый раз была полностью корректна. Провал не в данных, а в архитектуре 3x-ui.
|
||||
|
||||
## Открытые риски (проверено)
|
||||
|
||||
1. **`leastPing` + `observatory`** — ✅ **принимаются** (3x-ui 3.7.0 / Xray 26.7.28). Проверено фактом: после применения шаблона контейнер поднялся, `config.json` содержит `balancers` с `leastPing`, Xray-процесс запущен (`bin/xray-linux-amd64 -c bin/config.json`), в логах ошибок нет — только безобидные `WARNING common/protocol/http: received "X-Forwarded-For" … "sockopt.trustedXForwardedFor" is not configured` (Caddy шлёт XFF, на работу не влияет).
|
||||
|
||||
Reference in New Issue
Block a user