diff --git a/docs/architecture/data_flow.md b/docs/architecture/data_flow.md new file mode 100644 index 0000000..fbff544 --- /dev/null +++ b/docs/architecture/data_flow.md @@ -0,0 +1,22 @@ +# Packet Flow & Allocation Handling + +## Komponenten +- **UDP Listener** (`udp_reader_loop`): Empfängt STUN/TURN Nachrichten auf `bind` Adresse. +- **AllocationManager**: Verwaltet Relay-Sockets je Client (`allocate_for`). +- **TLS Listener** (`tls::serve_tls`): Optional, Wrappt dieselbe Logik über TCP/TLS. + +## Ablauf (UDP) +1. `UdpSocket::recv_from` liest Paket, `parse_message` prüft STUN-Header. +2. Enthält `MESSAGE-INTEGRITY` → Username wird aus CredentialStore geladen und verifiziert. +3. Bei `ALLOCATE` → `AllocationManager` erstellt Relay-Port, sendet `XOR-RELAYED-ADDRESS` zurück. +4. Ohne gültige Credentials → Antwort `401 Unauthorized` mit `NONCE`. + +## Ablauf (Relay) +- Für jedes Allocation wird ein Task gespawnt, der Pakete vom Relay-Socket liest und sie zurück zum Client sendet. +- TODO: Channel-Bindings und PeerData-Handling implementieren. + +## TODOs +- Allocation Timeout & Refresh Requests. +- Permission Handling (CreatePermission). +- Bandbreitenlimits, Statistik (Prometheus). +- Shared Secret Mechanismus für Long-Term Credentials (RFC 5389/5766). diff --git a/docs/config/runtime.md b/docs/config/runtime.md new file mode 100644 index 0000000..23ede01 --- /dev/null +++ b/docs/config/runtime.md @@ -0,0 +1,29 @@ +# Runtime Configuration + +## Dateien +- `appsettings.example.json`: Beispiel mit Server-Bind und Test-Credentials. +- `appsettings.json`: Produktiverstellung (bind, TLS, Credentials). + +## Struktur +``` +Config { + server: ServerOptions { + bind: String, + tls_cert: Option, + tls_key: Option, + }, + credentials: Vec { + username: String, + password: String, + } +} +``` + +## Default-Fallbacks (siehe `main.rs`) +- Bind: `0.0.0.0:3478` +- Single Test Credential: `testuser` / `secretpassword` + +## TODOs +- Shared Secret / REST API zur Credential-Verwaltung. +- Konfigurierbare TLS-Bind-Adresse (`turns` Standard 5349). +- Health-Port (HTTP) für Monitoring. diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..f234b3c --- /dev/null +++ b/docs/index.md @@ -0,0 +1,11 @@ +# niom-turn Docs + +Dokumentationsübersicht für den TURN/STUN-Server. + +- [`architecture/data_flow.md`](architecture/data_flow.md) – UDP/TLS-Loop, Allocation Manager. +- [`config/runtime.md`](config/runtime.md) – Appsettings & Credentials. +- Bereits vorhanden: `deploy_tls_lxc.md`, RFC-Referenzen (STUN/TURN Specs). + +## Zielsetzung +- Production-ready TURN mit Authentifizierung, Lebenszeitverwaltung und Monitoring. +- Optionales TLS (TURN over TLS) für restriktive Netzwerke.