sources/de-vds-3xui-setup-2026-07-14.md (new) — session chronicle capturing
the 3x-ui 3.5.0 troubleshooting: login 403 = CSRFMiddleware (X-CSRF-Token,
GET {BP}csrf-token), direct DB insert into inbounds no longer renders
(client model split across clients/client_inbounds/client_traffics → use
panel API add with stringified settings), wrapper `x-ui setting` doesn't
persist creds (binary only). Reference JSON lifted from working nl-vds 32030.
Entity sources: bound. +index.md sources line, +log.md ingest entry.
gitignore: .tmp/ (cred-bearing local throwaway, like .scratch/) and
.tasks/.lock (runtime). .tmp/ removed from disk.
Co-Authored-By: Claude <noreply@anthropic.com>
80 lines
8.6 KiB
Markdown
80 lines
8.6 KiB
Markdown
---
|
||
title: DE VDS — 3x-UI VLESS node
|
||
type: entity
|
||
tags: [vds, cloud, germany, vpn, vless, xray, 3x-ui, proxy, fornex]
|
||
sources: [../sources/de-vds-3xui-setup-2026-07-14.md]
|
||
updated: 2026-07-14
|
||
---
|
||
|
||
# DE VDS — 3x-UI
|
||
|
||
Личный прокси-VDS в Германии, активирован 2026-07-14, под управлением 3x-UI 3.5.0 / Xray 26.7.11.
|
||
Назначение — обход блокировок для себя и раздача доступа друзьям. Аналог [[nl-vds-3xui]] (NL/Aeza), поднятый по тем же урокам: повторён **только проверенный plain VLESS**, маскированные протоколы (Reality/MTProto/SOCKS5) НЕ поднимались (на NL у боевых клиентов из РФ не заработали).
|
||
|
||
> Не путать с [[nl-vds-3xui]] (`213.176.64.253`, Aeza) и [[vdsina-outline-3xui]] (`46.151.25.64`, VDSina Amsterdam) — это два NL-узла. Этот — Fornex `130.17.17.158`, Германия.
|
||
|
||
## Hardware
|
||
|
||
- **Локация:** Германия (провайдер **Fornex**, `335555.fornex.cloud`)
|
||
- **Public IP:** `130.17.17.158` ; **IPv6:** `2a02:6b40:2000:3505::1`
|
||
- **vCPU / RAM / Disk:** 1 / 2 GiB / 20 GiB NVMe ; **swap 0** ; 300 Мбит/с
|
||
- **OS:** Ubuntu 24.04.4 LTS (kernel 6.8) ; ufw inactive, iptables ACCEPT
|
||
|
||
## Доступ
|
||
|
||
- **SSH:** `root@130.17.17.158` (password auth). Host-key (ed25519): `SHA256:1AQ5jyJDE7iunqZe7skV3B+8fpDhPmC4CRFwfrRcmdE`.
|
||
- С Windows non-interactive: `plink -ssh -batch -hostkey "SHA256:1AQ5...mdE" -pw <pass> root@... -m <script>`. Инлайн-команды с кавычками PowerShell корёжит → скрипт через `-m` (тот же урок, что на [[nl-vds-3xui]]).
|
||
- **Панель 3x-UI:** `http://130.17.17.158:37601/e2l5qBmNRkJ8Xw9CtM/` (port 37601, http — БЕЗ TLS; random path единственный барьер от сканеров; fail2ban `3x-ipl` active).
|
||
- **Sub:** `http://130.17.17.158:2096/sub/`.
|
||
- **Креды:** `pass show de-vds-3xui/full-env`. Креды панель user/pass заданы вручную (install автосгенерил `jclyRE8LrK` + bcrypt, plaintext был недоступен). `settings.secret` (JWT) НЕ ротирован (не светился).
|
||
|
||
## Software stack
|
||
|
||
| Слой | Компонент | Версия |
|
||
|---|---|---|
|
||
| OS | Ubuntu | 24.04.4 LTS |
|
||
| Panel | 3x-UI (нативный systemd `x-ui.service`, enabled) | **3.5.0** |
|
||
| Core | Xray (`/usr/local/x-ui/bin/xray-linux-amd64`) | 26.7.11 |
|
||
| DB | SQLite `/etc/x-ui/x-ui.db` (бэкапы `/etc/x-ui/x-ui.db.bak.*`) | — |
|
||
| Firewall/IPS | ufw inactive; fail2ban jail `3x-ipl` (поставился вместе с 3x-ui) | — |
|
||
|
||
## Текущее состояние (2026-07-14)
|
||
|
||
🟢 Работает. **Единственный инбаунд — plain VLESS 32030** (`security=none`, tcp). xray слушает `*:32030`, в `config.json` персистентно (inbounds=2: api-tunnel + 32030). Server-side e2e (xray-клиент на сервере → 32030 → exit) подтверждён: трафик выходит с сервера (IPv4 `130.17.17.158` / IPv6 `2a02:6b40:2000:3505::1`).
|
||
|
||
| Порт | Протокол | Статус |
|
||
|---|---|---|
|
||
| **32030** | VLESS / tcp, `security=none` | 🟢 сервер-сайд работает. uuid `f3a0dda0-…` (email `vitya`). DPI-детектируем (как и на NL), но живой. |
|
||
| 37601 | 3x-UI panel (http) | 🟢 |
|
||
| 2096 | sub server | 🟢 |
|
||
| 22 | ssh | 🟢 |
|
||
|
||
Reality / MTProto / SOCKS5 **намеренно НЕ подняты** — на [[nl-vds-3xui]] у боевых клиентов из РФ они не заработали (см. [`nl-vds-3xui-setup-2026-06-05`](../sources/nl-vds-3xui-setup-2026-06-05.md)); порты зря торчать не должны.
|
||
|
||
## Клиент для друзей
|
||
|
||
Hiddify / v2rayN / v2rayNG — импорт `vless://f3a0dda0-947b-4a11-b3f5-ca973640f843@130.17.17.158:32030?type=tcp&security=none&encryption=none#de-vless-32030`. При включённом VPN в Telegram прокси не настраивать (моб. «отключить прокси», десктоп «системный»). Полная ссылка/QR — `pass de-vds-3xui/full-env`.
|
||
|
||
## Подводные камни (3x-ui 3.5.0 — NEW vs NL-сессии 3.2.7)
|
||
|
||
Установка на Germany оказалась нетривиальной из-за новой версии 3x-ui — на NL стояла 3.2.7, тут 3.5.0, и API/DB-модель поменялась. Зафиксировать, чтобы не повторяться:
|
||
|
||
- **CSRF на ВСЕХ panel POST.** `CSRFMiddleware` → без валидного `X-CSRF-Token` (header) → `403 Forbidden` с пустым телом + CSP-nonce. Логин-хендлер тут ни при чём (он отдаёт 200+JSON даже при неудаче). Токен: `GET {webBasePath}csrf-token` (публичный, кладёт токен в session-cookie) → вернуть тем же заголовком. Сначала это выглядело как «битые креды» — на деле 403 = отсутствие CSRF-токена.
|
||
- **login route:** `POST {webBasePath}login`, JSON-тело `{"username","password"}` (form-encoded ≠). 404 на `/login` (роут только под basePath), 403 на `{BP}login` без CSRF.
|
||
- **Прямой INSERT в `inbounds` НЕ рендерит инбаунд в xray-config в 3.5.0.** Клиентская модель разнесена по таблицам `clients` / `client_inbounds` / `client_traffics`; эти записи заполняются только сервисом `AddInbound` (через panel API/UI), а не raw-SQL. Я дважды вставлял инбаунд в `inbounds` (даже с эталонным JSON, скопированным с рабочего nl-vds 32030) — x-ui видел «Normalized sub_sort_index on 1 inbound(s)», но в `config.json` инбаунд не попадал, xray не слушал. **Лекарство — panel API**, не БД.
|
||
- **stream_settings naming:** `"tcpSettings"` (не `"tcp"`), с `"header":{"type":"none"}`; `sniffing` = `{"enabled":false}`; vless `settings` = `{clients, decryption:"none", encryption:"none", testseed:[900,500,900,256]}`. Эталон снят с рабочего инбаунда [[nl-vds-3xui]] 32030.
|
||
- **API add endpoint:** `POST {BP}panel/api/inbounds/add`, body = `model.Inbound` (camelCase: `remark,enable,port,protocol,listen,tag,settings,streamSettings,sniffing,shareAddrStrategy,...`); `settings`/`streamSettings`/`sniffing` — **stringified JSON** (строки, не вложенные объекты).
|
||
- **`x-ui setting` через wrapper НЕ применяет** `-username/-password` (команда печатает меню, но users-таблицу не меняет). Надо дёргать бинарник напрямую: `systemctl stop x-ui; /usr/local/x-ui/x-ui setting -username … -password …; systemctl start x-ui` → «Username and password updated successfully». Иначе логин сбросит «Invalid username or password».
|
||
- **3.5.0 hot-applies** новые инбаунды к работающему xray (xray начинал слушать 32030 ещё до rewrite `config.json`); после `x-ui restart` config.json переписывается из БД и инбаунд персистентен.
|
||
- Install v3.5.0 **автогенерит** рандомные panel user/pass/port/webBasePath (`hasDefaultCredential:false`) + ставит fail2ban — лучше старых версий, но plaintext пароля недоступен (bcrypt) → всё равно перевыставлять через бинарник.
|
||
|
||
## Проверено / не проверено
|
||
|
||
- ✅ Сервер-сайд: xray слушает 32030, локальный xray-клиент через тоннель выходит с сервера.
|
||
- ✅ **Реальный клиент из РФ — подтверждён 2026-07-14.** User подключён через этот узел прямо сейчас (сессия идёт через 32030). Plain VLESS снова оправдал «единственный proven-working» статус.
|
||
|
||
## Открытые хвосты
|
||
|
||
- Per-friend UUID (сейчас один — `vitya`). Заводить через панель при раздаче.
|
||
- panel на http:3637601 — рассмотреть SSH-tunnel-only или LE-сертификат (опция 20 меню), пока компенсирует random path + fail2ban.
|
||
- Бэкап `x-ui.db` в pipeline (как на [[backup-inventory-2026-06]] для nl-vds `x-ui.db`) — не заведён. |