docs(deployment): reflect v2 state — resolved limitations + remaining ones
§5: TCP/443 fallback now described as real outer TLS-443 (was the lighter HTTP/1.1 masquerade in v1). §6 rewritten "Честные ограничения v1" -> "v2 — что устранено и что остаётся": - Resolved: UDP multi-client demux, server IP pool + per-client routing, OS-level split-tunnel (no more send_direct stub), real TLS-443, auto-NAT, privilege drop, Windows admin named pipe, daily protocol-mask rotation at 05:00 MSK. - Remaining honest limits: TUN creation still needs root (privilege drop shrinks the window), IPv6 in OS routes / iptables not yet, Windows OS routes stubbed, CRL still out-of-band (in-band push deferred), native phone client via sing-box still a plan, no auto-detect of egress iface. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+55
-21
@@ -337,8 +337,9 @@ aura status
|
||||
- `0x01` HS — рукопожатие с надёжным DTLS-подобным слоем поверх (повторы, ack, упорядочивание);
|
||||
- `0x02` DATA — датаграммы данных с explicit-nonce AEAD; обфускация = паддинг до «корзин»
|
||||
HTTPS (`[64, 128, 256, 512, 1024, 1280, 1460]`).
|
||||
- **Fallback TCP/443**: то же рукопожатие поверх TCP. Опциональная HTTP/1.1-преамбула как лёгкая
|
||||
маскировка (`masquerade = true`).
|
||||
- **Fallback TCP/443**: настоящий **outer TLS-443** (rustls) поверх TCP — на проводе неотличимо
|
||||
от валидного HTTPS, ALPN `[h2, http/1.1]`. Внутри TLS — тот же Aura-handshake. Клиент
|
||||
использует `AcceptAnyServerCert` (security гарантирует только внутренний Aura-handshake).
|
||||
- **Fallback QUIC**: внешний TLS-камуфляж под HTTP/3 + внутреннее Aura-рукопожатие.
|
||||
- Клиент пробует транспорты по `order`, переключается при отказе или таймауте подключения
|
||||
(по умолчанию 8 с). Сервер слушает все включённые транспорты одновременно (`MultiServer`).
|
||||
@@ -347,23 +348,56 @@ aura status
|
||||
|
||||
---
|
||||
|
||||
## 6. Честные ограничения v1
|
||||
## 6. v2 — что устранено и что остаётся
|
||||
|
||||
- **TUN требует root.** И клиент, и сервер создают TUN; на macOS имя интерфейса (`utunN`)
|
||||
назначается системой.
|
||||
- **NAT/IP-форвардинг на сервере настраивается вручную.** Бинарь Aura сам ничего не правит в
|
||||
netfilter/sysctl.
|
||||
- **Сервер v1 — это один общий TUN.** UDP-транспорт обслуживает **одного пира на `accept`**: первый
|
||||
HS-датаграмма фиксирует адрес источника, и дальнейшая сессия привязывается к нему. Для нескольких
|
||||
клиентов одновременно лучше использовать TCP или QUIC (`MultiServer` принимает соединения из
|
||||
любого включённого транспорта).
|
||||
- **`send_direct` — заглушка.** Пакеты с действием `DIRECT` пишутся в trace-лог и отбрасываются;
|
||||
настоящего raw-socket egress в v1 нет (см. [`split-tunnel.md`](split-tunnel.md)).
|
||||
- **TCP-маскировка лёгкая.** Это минимальная HTTP/1.1-преамбула, а не полноценный TLS-443
|
||||
(полноценный план — в дорожной карте).
|
||||
- **Нативного Go-модуля sing-box ещё нет.** В качестве моста — Option A из
|
||||
[`sing-box.md`](sing-box.md) (process bridge через `aura client`). Нативный Go-outbound
|
||||
(Option B) — план.
|
||||
- **CRL не подписан** (плоское множество идентификаторов на диске) и распространяется вне
|
||||
протокола; автоматической ротации листов нет (срок действия 365 дней, см. [`pki.md`](pki.md)).
|
||||
- **Admin-сокет — только под Unix.** На Windows — `cfg`-заглушка.
|
||||
### Устранено в v2 (по сравнению с v1)
|
||||
|
||||
- ✓ **Мульти-клиент UDP-сервер.** `UdpServer` теперь демультиплексирует датаграммы по адресу
|
||||
пира: один сокет обслуживает много клиентов параллельно, каждый со своим `ReliableHsAdapter` и
|
||||
своим `UdpConnection`. `MultiServer::accept` выдаёт по соединению на каждого нового клиента
|
||||
(в любом из включённых транспортов).
|
||||
- ✓ **IP-пул + per-client маршрутизация на сервере.** Новая секция `[server.pool]`
|
||||
(`cidr`, `strategy`, `static`) выдаёт каждому клиенту IP при accept; `ServerRouter` держит
|
||||
карту `client_ip → Arc<dyn PacketConnection>`, читает с TUN, диспатчит пакеты по `dst_ip` в
|
||||
нужное подключение, а параллельные per-conn-задачи пишут входящий трафик обратно в TUN.
|
||||
- ✓ **`send_direct` устранён.** Новое `[tunnel.os_routes]` (по умолчанию `enabled = true`)
|
||||
программирует **системную таблицу маршрутов**: DIRECT-цели идут мимо TUN через изначальный
|
||||
default-gateway, через TUN попадает только VPN-трафик. RAII-guard откатывает все добавленные
|
||||
маршруты при остановке клиента.
|
||||
- ✓ **Настоящий TLS-443 в TCP-транспорте.** Вместо лёгкой HTTP/1.1-преамбулы — полный outer
|
||||
rustls handshake (ALPN `[h2, http/1.1]`); клиент с `AcceptAnyServerCert`, поэтому SNI на
|
||||
внешнем слое не верифицируется (это камуфляж), а вся реальная аутентификация — внутри
|
||||
Aura-рукопожатия. На проводе неотличимо от валидного HTTPS.
|
||||
- ✓ **Авто-NAT на сервере.** `[server.nat] {auto, egress_iface, dry_run}` поднимает
|
||||
IP-форвардинг + MASQUERADE на старте (Linux: `sysctl ip_forward` + `iptables -t nat
|
||||
MASQUERADE`; macOS: `sysctl ip.forwarding` + `pfctl`). RAII-guard откатывает изменения при
|
||||
остановке. Опциональный `dry_run = true` логирует команды без выполнения — для отладки.
|
||||
- ✓ **Privilege drop.** `[server]/[client] run_as = "nobody"` — после поднятия TUN и
|
||||
привилегированных портов euid/gid сбрасываются в нерутового пользователя (Linux:
|
||||
`setresuid/setresgid`; macOS: `setgid` + `setuid` permanent drop). Минимизирует время
|
||||
процесса под root.
|
||||
- ✓ **Admin-сокет на Windows.** Cfg-gated транспорт: на Unix — Unix socket
|
||||
(`/tmp/aura-admin.sock`), на Windows — Tokio named pipe (`\\.\pipe\aura-admin`).
|
||||
JSON-протокол и команды (`route add/list/remove`, `status`) идентичны.
|
||||
- ✓ **НОВОЕ: ежедневная ротация масок в 05:00 МСК.** Внешний фингерпринт (SNI/UA/Server-
|
||||
header/UDP padding-профиль) детерминированно меняется раз в сутки. И сервер, и клиент
|
||||
выводят одинаковый `MaskSet` из общего seed (SHA-256 от CA-сертификата) + UTC-даты через
|
||||
HKDF-SHA256, без сетевой координации. Конфиг: `[transport.masks] enabled = true` (по
|
||||
умолчанию). Новые подключения берут текущую маску; уже установленные остаются на своих.
|
||||
Палитры: 16 SNI, 10 User-Agent, 5 Server-headers, 4 padding-профиля; профиль 0 байт-в-байт
|
||||
совместим с v1-паддингом (бэк-совместимость).
|
||||
|
||||
### Остающиеся честные ограничения v2
|
||||
|
||||
- **TUN всё ещё требует root** для **создания** интерфейса (это OS-уровень). Privilege drop
|
||||
минимизирует окно работы под root, но саму операцию обойти нельзя.
|
||||
- **IPv6 в OS-маршрутах и iptables MASQUERADE** не реализован — только IPv4 (план v3).
|
||||
- **Windows OS-маршруты** — заглушка с лог-warning (план v3). Windows admin pipe **работает**.
|
||||
- **CRL** пока распространяется out-of-band (плоский файл `revoked.crl` на сервере и клиенте);
|
||||
in-band пуш сервером → клиенту запланирован (отдельная v2-задача, не реализована в этом
|
||||
раунде).
|
||||
- **Нативного Go-клиента для телефона нет** — через sing-box (Option B нативный Go-outbound,
|
||||
по `protocol.md` + KAT из Rust, см. [`sing-box.md`](sing-box.md)). Сейчас доступен только
|
||||
десктоп-клиент / process-bridge.
|
||||
- **Автоопределение egress-интерфейса** для NAT не реализовано: `[server.nat] egress_iface`
|
||||
обязательно задавать вручную, если `auto = true` (план v3).
|
||||
|
||||
Reference in New Issue
Block a user