wiki: ingest de-vds-3xui (Fornex Germany VPN, plain VLESS 32030)

New entity de-vds-3xui — Germany VPS 130.17.17.158 (Fornex, Ubuntu 24.04),
3x-ui 3.5.0 / xray 26.7.11, plain VLESS 32030 security=none (analog of nl-vds-3xui;
masked protocols intentionally NOT raised). Captured 3.5.0 gotchas vs 3.2.7:
CSRF on all panel POSTs (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), wrapper `x-ui setting`
doesn't persist creds (binary only). Server-side e2e verified; real RF-client
test pending user. +index.md, +log.md.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-07-14 14:39:58 +03:00
parent 37c179601a
commit f0965cf512
3 changed files with 83 additions and 0 deletions

View File

@@ -0,0 +1,80 @@
---
title: DE VDS — 3x-UI VLESS node
type: entity
tags: [vds, cloud, germany, vpn, vless, xray, 3x-ui, proxy, fornex]
sources: []
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-клиент через тоннель выходит с сервера.
-**Реальный клиент из РФ НЕ проверен.** По уроку [`proxy-debugging-test-the-real-client`](../concepts/proxy-debugging-test-the-real-client.md) мой сервер-сайд тест — НЕ доказательство для боевого клиента. Но протокол — plain VLESS (единственный, гарантированно работавший на NL), поэтому уверенность высокая. Ждём подтверждения от user (v2rayN/Hiddify/телефон).
## Открытые хвосты
- 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`) — не заведён.

View File

@@ -12,6 +12,7 @@ Catalog of all wiki pages. One line per page, organized by type. Updated on ever
- [dead-synology-diskstation](entities/dead-synology-diskstation.md) — мёртвая Synology DiskStation (source NAS)
- [kreknin-synology](entities/kreknin-synology.md) — Kreknin Synology (backup target + DDNS)
- [nl-vds-3xui](entities/nl-vds-3xui.md) — NL VDS 3x-UI VLESS/Reality node (213.176.64.253) — Reality 443 сломан (PQ×intel), plain VLESS 32030 работает
- [de-vds-3xui](entities/de-vds-3xui.md) — DE VDS 3x-UI VLESS node (130.17.17.158, Fornex Germany) — plain VLESS 32030 security=none; 3x-ui 3.5.0 gotchas (CSRF на POST, client-tables, binary-only setting)
- [openwrt-router](entities/openwrt-router.md) — OpenWRT Router (192.168.1.1)
- [ruvds-iis-host](entities/ruvds-iis-host.md) — RUVDS IIS Host (Win Server 2025 Core, 80.64.31.36) — CMS catch-all destination
- [snolla-recovery-vm](entities/snolla-recovery-vm.md) — Snolla Recovery VM (VirtualBox, savestate'нута 2026-05-21 после 36h soak)

View File

@@ -2,6 +2,8 @@
Append-only log of wiki operations (ingests, promotions, lints, migrations).
## [2026-07-14] ingest | entities/de-vds-3xui.md (new) — поднят VPN-VDS в Германии (Fornex `130.17.17.158`, Ubuntu 24.04, 1/2G/20G), аналог [[nl-vds-3xui]]. Повторён **только proven-working plain VLESS 32030** `security=none` (на NL у боевых клиентов из РФ заработал только он); Reality/MTProto/SOCKS5 намеренно НЕ подняты. Креды → `pass de-vds-3xui/full-env`. 3x-ui тут **3.5.0** (на NL была 3.2.7) — вскрыл новые гоча, зафиксированы в entity: (1) **CSRF на всех panel POST** (`CSRFMiddleware` → 403 пустое тело+CSP-nonce без заголовка `X-CSRF-Token`; токен — `GET {BP}csrf-token`; login = `POST {BP}login` JSON); (2) **прямой INSERT в `inbounds` НЕ рендерит инбаунд в 3.5.0** — клиентская модель разнесена по `clients`/`client_inbounds`/`client_traffics`, заполняется только сервисом `AddInbound` → инбаунд надо создавать через panel API `POST {BP}panel/api/inbounds/add` (body=model.Inbound camelCase, settings/streamSettings/sniffing stringified); (3) **wrapper `x-ui setting -username/-password` НЕ применяет** — только бинарник `/usr/local/x-ui/x-ui setting` (после `systemctl stop x-ui`). Server-side e2e подтверждён (xray слушает 32030, exit=сервер); реальный РФ-клиент ждёт проверки user. +index.md.
## [2026-07-12] deploy | tandemmebel.ru in-place bump 0.42.0→0.42.1 LIVE (стек 20) — поверх cutover'а того же дня (стек уже боевой, образ `ed96b18`/0.42.0). Консюмер-бамп сделан оператором сам (тот же блокер-паттерн 0.42.0 2026-07-04 — теперь решён без запроса dev-source): пин `apps/web/package.json:12` 0.42.0→0.42.1 + `yarn install` (lock snolla 0.42.1/core 0.24.1/liquid 0.10.2/data 0.14.1) + commit `0cd9351` + push origin (ls-remote confirmed). Verdaccio: 0.42.1 published (latest). Build на VDS → `registry.kzntsv.site/tandemmebel:0cd9351` (digest f29c187f). Throwaway-staging :5020 из env живого стека, healthy. Completeness-gate С VDS: **184/184 parity** (NEW==PROD, вкл. 0.42.x sitemap-реструктуризацию), единственный 404 `/articles` идентичен прод-оракулу → benign. Operator-gated PUT стека 20 (node put-stack.js, env 8/8 preserve, prune:false pullImage:true) → контейнер 0cd9351+healthy ~8s. Live-smoke GREEN (robots/home/projects/sitemap 200, TLS-серт CN не дёрнут). 0.42.1 = order-tag Drop-field fix, инертен на блог-портфолио (без e-commerce каталога). NEW concepts/tandemmebel-vds-deploy-runbook.md + UPDATE concepts/snolla-live-prod-inplace-image-bump.md (тираж 0.42.1 = 4 in-place bump-сайта) + host-stacks/vds-kzntsv/tandemmebel.compose.yml (тег+комментарий 0.42.1) + index.md. Rollback = тег ed96b18 в registry (+ b02ca18). **Тираж snolla 0.42.1 закрыт полностью.**
## [2026-07-12] deploy | tandemmebel.ru cutover LIVE — последний из тиража snolla 0.42.x. DNS reg.ru `tandemmebel.ru`+`www`→89.253.255.94 (verify ns1/ns2.reg.ru оба), traefik Host-rule staging→боевой на стеке 20 (env 8/8 preserve, prune:false, pullImage:false — образ `ed96b18`/0.42.0 не менялся, без пересборки по решению оператора). LE-серт issued on first hit: CN=tandemmebel.ru, SAN оба, until 2026-10-10. Live-smoke С VDS GREEN: key pages 200, sitemap 184 page-locs, sharp media webp 200, robots из БД. Gotham-Pro.css 0B→4436B (латентный прод-баг починен). Rollback = revert DNS→80.64.31.36 ИЛИ PUT staging-host. UPDATE entities/ruvds-iis-host (tandemmebel→🗑 cutover VDS, биндинги оставлены как rollback) + host-stacks/vds-kzntsv/tandemmebel.compose.yml (rule боевой, заголовок live). **Тираж snolla 0.42.x полностью живой (5/5 стеков на VDS).**