wiki(nl-vds-3xui): new NL 3x-UI node + Reality PQ×dest root-cause
Reality 443 inbound silently fails: ML-DSA-65 (post-quantum) ClientHello key-share X25519MLKEM768 relayed to dest www.intel.com (Akamai) -> HRR -> borrowed-TLS handshake never completes. Plain VLESS 32030 unaffected. Isolated via replica xray pair (matrix: intel+PQ is the only failing cell). Fix (NOT applied, awaiting user): switch dest/SNI -> www.microsoft.com (PQ-capable, verified) on both inbound and client profile. - new entities/nl-vds-3xui.md - new concepts/reality-pq-mldsa65-dest-incompatibility.md - index.md + log.md updated - creds saved to pass nl-vds-3xui/full-env (not in repo) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
73
.wiki/concepts/reality-pq-mldsa65-dest-incompatibility.md
Normal file
73
.wiki/concepts/reality-pq-mldsa65-dest-incompatibility.md
Normal file
@@ -0,0 +1,73 @@
|
||||
---
|
||||
title: REALITY ML-DSA-65 (PQ) × Akamai-dest несовместимость
|
||||
type: concept
|
||||
tags: [reality, xray, vless, post-quantum, mldsa65, x25519mlkem768, troubleshooting, 3x-ui]
|
||||
sources: []
|
||||
updated: 2026-06-05
|
||||
---
|
||||
|
||||
# REALITY + ML-DSA-65 (post-quantum) ломается с не-PQ dest (напр. www.intel.com)
|
||||
|
||||
## Симптом
|
||||
|
||||
Свежий 3x-UI / Xray-инбаунд VLESS+Reality **не коннектится** (клиент молча висит до таймаута, никакой
|
||||
ошибки в GUI), при этом **обычный VLESS на другом порту работает**. На сервере (при debug-логе):
|
||||
|
||||
```
|
||||
transport/internet/tcp: REALITY: processed invalid connection from <ip>: handshake did not complete successfully
|
||||
```
|
||||
|
||||
Клиент крутит ретраи и сдаётся: `proxy/vless/outbound: failed to find an available destination > [EOF]`.
|
||||
|
||||
## Root cause
|
||||
|
||||
Современный 3x-UI (Xray ≥ 25.x, здесь 26.6.1) для нового Reality-инбаунда **по умолчанию включает
|
||||
пост-квантовый режим ML-DSA-65** (`realitySettings.mldsa65Seed` на сервере + `mldsa65Verify` у клиента).
|
||||
В этом режиме ClientHello несёт пост-квантовый key-share **`X25519MLKEM768`** (~1.2 КБ).
|
||||
|
||||
REALITY-сервер релеит ClientHello на `dest`/`target`, чтобы «позаимствовать» его TLS-рукопожатие. Если dest
|
||||
**не поддерживает PQ-группу обмена ключами**, он отвечает **HelloRetryRequest** (просит другую группу) —
|
||||
а borrowed-TLS поток REALITY этого не переживает → хендшейк не достраивается. `www.intel.com` за **Akamai**
|
||||
именно такой: PQ-обмен не поддерживает.
|
||||
|
||||
Ключевой нюанс диагностики: **неаутентифицированный** гость (обычный `openssl s_client`) идёт по
|
||||
fallback-пути REALITY (прозрачный релей на dest) и получает настоящий сертификат intel — поэтому сервер
|
||||
кажется «живым». Ломается только **аутентифицированный** путь, и только в связке с PQ.
|
||||
|
||||
## Изоляционная матрица (replica-пара, Xray 26.6.1 ↔ 26.6.1, debug)
|
||||
|
||||
Полностью подконтрольная пара (свой сервер-инбаунд на 8443 + клиент на socks 10888, ключи выведены из seed):
|
||||
|
||||
| dest/SNI | ML-DSA-65 | Результат |
|
||||
|---|---|---|
|
||||
| `www.intel.com` | **вкл** | ❌ `handshake did not complete` |
|
||||
| `www.intel.com` | выкл | ✅ HTTP 204 |
|
||||
| `www.microsoft.com` | выкл | ✅ 204 |
|
||||
| `www.microsoft.com` | **вкл** | ✅ 204 |
|
||||
| `www.yahoo.com` | выкл | ✅ 204 |
|
||||
|
||||
→ Падает **только** `intel + PQ`. Порознь оба компонента исправны. Версии ядер, X25519-ключи, shortId, flow,
|
||||
UUID, seed↔verify, часы — всё проверено и совпадает; ни один из них не виноват.
|
||||
|
||||
## Fix
|
||||
|
||||
Два варианта (рекомендация — первый):
|
||||
|
||||
1. **Сменить dest на PQ-совместимый** (сохраняет пост-квантовую защиту). На сервере в инбаунде:
|
||||
`realitySettings.target` → `www.microsoft.com:443`, `serverNames` → `["www.microsoft.com"]`; в клиенте —
|
||||
SNI → `www.microsoft.com`. Менять **симметрично** обе стороны. PQ-совместимость dest проверяется
|
||||
тестом из матрицы выше (или: dest должен уметь TLS1.3 hybrid PQ key-exchange `X25519MLKEM768` —
|
||||
Cloudflare/Google/Microsoft умеют, Akamai-фронт обычно нет).
|
||||
2. **Выключить ML-DSA-65** на инбаунде (убрать `mldsa65Seed` / пересоздать инбаунд без PQ) — тогда `intel`
|
||||
работает. Проще, но теряется пост-квантовая стойкость. Брать только если PQ не нужен.
|
||||
|
||||
## Как воспроизвести/проверить dest на PQ (read-only)
|
||||
|
||||
Поднять временную replica-пару `xray run -c` на localhost-портах с `loglevel:debug` и `curl -x socks5h://…`
|
||||
через тоннель — НЕ трогая боевой инбаунд (см. методику в [`nl-vds-3xui`](../entities/nl-vds-3xui.md)).
|
||||
Признак PQ-несовместимого dest: сервер логирует `REALITY: ... handshake did not complete` **только** при
|
||||
включённом seed.
|
||||
|
||||
## Где встречалось
|
||||
|
||||
- [`nl-vds-3xui`](../entities/nl-vds-3xui.md) — инбаунд 443, обнаружено 2026-06-05.
|
||||
72
.wiki/entities/nl-vds-3xui.md
Normal file
72
.wiki/entities/nl-vds-3xui.md
Normal file
@@ -0,0 +1,72 @@
|
||||
---
|
||||
title: NL VDS — 3x-UI VLESS/Reality node
|
||||
type: entity
|
||||
tags: [vds, cloud, netherlands, vpn, vless, reality, xray, 3x-ui, proxy]
|
||||
sources: []
|
||||
updated: 2026-06-05
|
||||
---
|
||||
|
||||
# NL VDS — 3x-UI
|
||||
|
||||
Арендованный облачный VDS в Нидерландах, активирован 2026-06-05. Назначение — личный VLESS/Reality
|
||||
прокси-узел под управлением 3x-UI (x-ui panel). Через него ведётся рабочее соединение.
|
||||
|
||||
## Hardware / tariff
|
||||
|
||||
- **Локация:** Нидерланды
|
||||
- **Public IP:** `213.176.64.253`
|
||||
- **vCPU:** 1
|
||||
- **RAM:** 2 GiB
|
||||
- **Disk:** 30 GiB NVMe
|
||||
- **OS:** Ubuntu 24.04
|
||||
- **PTR:** `square-white.ptr.network`
|
||||
|
||||
## Доступ
|
||||
|
||||
- **SSH:** `root@213.176.64.253` (password auth включён). Host-key (ed25519): `SHA256:XR2+0PCVUoEMrFHOoIu7IPXb4xP2JnYkqFr1uqs8YrA`.
|
||||
- С Windows non-interactive: `plink -ssh -batch -hostkey "SHA256:XR2+0PCVUoEMrFHOoIu7IPXb4xP2JnYkqFr1uqs8YrA" -pw <pass> root@213.176.64.253 "<cmd>"`. PowerShell-пайп `y` в `plink` для приёма host-key **не работает** (plink читает промпт с консоли, не stdin) — передавать `-hostkey` явно.
|
||||
- **Панель 3x-UI:** `https://213.176.64.253:49251/aTKt95PPgt9y2dUHi8` (port 49251, webBasePath `aTKt95PPgt9y2dUHi8`, sub-port 2096).
|
||||
- **Креды:** `pass show nl-vds-3xui/full-env` (root SSH pass, panel user/pass, API token, все UUID/ключи/seed Reality-инбаунда).
|
||||
|
||||
## Software stack
|
||||
|
||||
| Слой | Компонент | Версия |
|
||||
|---|---|---|
|
||||
| OS | Ubuntu | 24.04 |
|
||||
| Panel | 3x-UI (x-ui) | 3.2.7 |
|
||||
| Core | Xray | 26.6.1 |
|
||||
| DB | SQLite | `/etc/x-ui/x-ui.db` |
|
||||
| Firewall | ufw | inactive (iptables policy ACCEPT) |
|
||||
|
||||
`x-ui` — нативный systemd-сервис (не docker). Сгенерированный конфиг ядра: `/usr/local/x-ui/bin/config.json`,
|
||||
бинарь xray: `/usr/local/x-ui/bin/xray-linux-amd64`.
|
||||
|
||||
## Inbounds
|
||||
|
||||
| Tag | Порт | Протокол | Security | Статус |
|
||||
|---|---|---|---|---|
|
||||
| `in-32030-tcp` | 32030 | VLESS / tcp | none | 🟢 работает (рабочее соединение) |
|
||||
| `in-443-tcp` | 443 | VLESS / tcp | **Reality + ML-DSA-65 (PQ)**, flow `xtls-rprx-vision` | 🔴 не коннектится |
|
||||
|
||||
- **32030 (plain VLESS):** uuid `a6fa7965-…` (email `sx9l9csam3`). Без TLS — поэтому работает даже когда Reality лежит.
|
||||
- **443 (Reality, PQ):** два клиента — `5da48418-…`/`pqmkayaxo2` (flow vision, его использует v2rayN) и `7941887a-…`/`0h5rzrsex3`.
|
||||
publicKey `zWTp-3dPfB78…`, shortId (клиент) `795fc9`, mldsa65Seed `E9zFSoOd…`. dest/SNI `www.intel.com`.
|
||||
|
||||
## ⚠️ Открытый дефект: Reality 443 не работает
|
||||
|
||||
Reality-инбаунд на 443 включает **пост-квантовый ML-DSA-65** с dest/SNI `www.intel.com`. Эта комбинация
|
||||
несовместима: Akamai-фронтящий `www.intel.com` не поддерживает PQ-обмен ключами (`X25519MLKEM768`) и шлёт
|
||||
HelloRetryRequest → borrowed-TLS рукопожатие REALITY не достраивается → `REALITY: handshake did not complete`.
|
||||
Plain VLESS на 32030 не затронут (там нет TLS). Полный разбор + изоляционная матрица +
|
||||
fix — [`reality-pq-mldsa65-dest-incompatibility`](../concepts/reality-pq-mldsa65-dest-incompatibility.md).
|
||||
|
||||
**Fix (НЕ применён, ждёт команды user):** сменить dest/`target` + `serverNames` инбаунда и SNI клиентского
|
||||
профиля `www.intel.com` → `www.microsoft.com` (PQ-совместим, проверен 2026-06-05). ML-DSA-65 сохраняется.
|
||||
|
||||
## Заметки по диагностике (read-only методология)
|
||||
|
||||
- Дамп инбаундов: `python3` + `sqlite3 file:/etc/x-ui/x-ui.db?mode=ro` (read-only, sqlite3-CLI на сервере нет).
|
||||
- Изолированный тест клиента/сервера: поднять временный `xray run -c <tmp>` на отдельном localhost-порту
|
||||
(socks 10888/10999) + `curl -x socks5h://…` — воспроизводит хендшейк, не трогая активный инбаунд.
|
||||
- Часы сервера синхронны (Reality time-skew исключён). publicKey выводится из privateKey через
|
||||
`xray x25519 -i <priv>`; verify — из seed через `xray mldsa65 -i <seed>`.
|
||||
@@ -11,6 +11,7 @@ Catalog of all wiki pages. One line per page, organized by type. Updated on ever
|
||||
- [books-vds](entities/books-vds.md) — Books VDS (89.253.255.133 — host4g.ru, client server hosting books app + shared mongo/minio/elasticsearch)
|
||||
- [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 работает
|
||||
- [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)
|
||||
@@ -35,6 +36,7 @@ Catalog of all wiki pages. One line per page, organized by type. Updated on ever
|
||||
- [portainer-2.21-admin-password-regression](concepts/portainer-2.21-admin-password-regression.md) — Portainer 2.21 `--admin-password` regression + min 12-char policy
|
||||
- [portainer-stack-management-books-vds](concepts/portainer-stack-management-books-vds.md) — Portainer-managed stacks на books VDS — pattern application + migration log 2026-05-25
|
||||
- [portainer-stack-management-vds](concepts/portainer-stack-management-vds.md) — Portainer-managed stacks на VDS — canonical pattern + migration script + gotchas
|
||||
- [reality-pq-mldsa65-dest-incompatibility](concepts/reality-pq-mldsa65-dest-incompatibility.md) — REALITY+ML-DSA-65 (PQ) не работает с не-PQ dest (Akamai/intel шлёт HRR); fix = PQ-совместимый dest или выключить PQ
|
||||
- [recovery-architecture-snapshot](concepts/recovery-architecture-snapshot.md) — текущая recovery architecture (2026-05-19/21, attempt 2)
|
||||
- [registry-gc-mount-and-modify-flag](concepts/registry-gc-mount-and-modify-flag.md) — Docker Registry GC mount layout + `-m` flag
|
||||
- [rusonyx-vps-onboarding-quirks](concepts/rusonyx-vps-onboarding-quirks.md) — Rusonyx VPS onboarding quirks (Astra Облако / myvm.rusonyx.ru)
|
||||
|
||||
@@ -31,3 +31,8 @@ Append-only log of wiki operations (ingests, promotions, lints, migrations).
|
||||
## [2026-05-28] update | vds-kzntsv DHCP outage post-resolution — после reset хостером в 13:52 MSK выяснилось что root cause — конфликт двух сетевых стеков (netplan+networkd поверх ожидаемого provider's ifupdown). Их `start/ipadd` ожидает чистый ifupdown, не мог auto-recover при разрыве DHCP binding. Resolution: mask netplan+systemd-networkd, reboot, provider положил `/etc/network/interfaces.d/ifcfg-eth0` с /18 netmask. UPDATE concepts/vds-kzntsv-dhcp-outage-2026-05-28 (revised RCA + permanent-fix § + anti-pattern + revised lessons-learned) + UPDATE sources/vds-kzntsv-incident-2026-05-28 (timeline до 14:00 + final config) + UPDATE entities/vds-kzntsv (mask /18, ifupdown stack, kernel cmdline net.ifnames=0) + UPDATE concepts/rusonyx-vps-onboarding-quirks (quirk #9 переписан про /18, quirk #10 NEW про ifupdown vs netplan stack). Memory `vds-kzntsv-rusonyx-network-recovery` переписан с новыми фактами.
|
||||
|
||||
## [2026-05-29] update | ES destructive-delete RECURRENCE — true root cause найден, диагноз сменился. UPDATE concepts/es-destructive-delete-incident-2026-05-26 (correction-блок + Hypothesis помечена ОПРОВЕРГНУТА + новая секция «Рецидив 2026-05-29 — true root cause»: ransom-бот через открытый `0.0.0.0:9200` мимо traefik+basicAuth, ES 7.10 free без auth; `read_me`=BTC-выкуп; снос by-name мимо Control #1; accessLog пуст т.к. бот шёл прямо в :9200; firewalld bypass docker-publish; Control #3 = убрать публикацию host-порта via Portainer PUT stack 33; restore из daily-2026-05-25; exposure-audit таблица — mongo/books-db/bookva-db/minio/bookva-minio тоже exposed но credentialed). bookva не пострадал (bookva-es порт не публикует). Live incident response session.
|
||||
|
||||
## [2026-06-05] ingest | NL VDS 3x-UI node + Reality PQ×dest root-cause
|
||||
- new entities/nl-vds-3xui.md (213.176.64.253, Ubuntu 24.04, 3x-UI 3.2.7 / Xray 26.6.1); creds -> pass nl-vds-3xui/full-env
|
||||
- new concepts/reality-pq-mldsa65-dest-incompatibility.md (root cause: ML-DSA-65 PQ ClientHello X25519MLKEM768 + Akamai dest www.intel.com -> HRR -> handshake fail; fix = PQ-capable dest e.g. www.microsoft.com, verified via isolation matrix)
|
||||
- index.md updated (entity + concept). Fix NOT applied — awaiting user command.
|
||||
|
||||
Reference in New Issue
Block a user