Files
spidernet/documentation/ideen/architektur.md
T

141 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Architektur
Von unten (Physik) nach oben (Inhalte). Der AKI-Node ist das Herzstück —
eine kleine Box im Wohnungsregal, die zu Hause sitzt und das Viertel verbindet.
## Übersicht
```mermaid
flowchart TD
subgraph HausA[Haus A]
GA[Geräte A] --> NA[AKI-Node A]
end
subgraph HausB[Haus B]
GB[Geräte B] --> NB[AKI-Node B]
end
subgraph HausC[Haus C]
GC[Geräte C] --> NC[AKI-Node C]
end
NA <-->|"Glasfaser (bzw. Funk-Fallback)"| NB
NB <-->|"Glasfaser"| NC
NA -->|"ISP-Uplink A"| WA((Internet))
NB -->|"ISP-Uplink B"| WA
NC -->|"ISP-Uplink C"| WA
```
Entscheidend: **jeder Haushalt behält seinen eigenen Uplink**. Es gibt keinen
zentralen Exit (anders als klassische Community-Meshes mit einem Supernode),
sondern viele — das verteilt nicht nur Last, sondern auch Risiko und Zensur-
Angriffsfläche.
## Schicht 0 — Physik (Nachbarschaftsglasfaser)
- **Bevorzugt:** Glasfaser Haus-zu-Haus (z. B. 2-Faser-Duplex G.657A2, LC-
Stecker), Medienwandler bzw. SFP-Port direkt im Node. Innenrohr entlang
der Fassade, kurze Gräben im Garten, Kabelkanal.
- **Pragmatisch für den Start:** was da ist — existierendes LAN-Kabel im
Mehrfamilienhaus (bis 100 m), Richtfunk 60-GHz-PTP (5–15 Gbit/s,
Sichtlinie nötig) als Überbrückung.
- **Topologie:** anfangs Stern/Ring (2–5 Häuser), später vermascht. Jede
Faser ist ein separates Link; Redundanz schlägt Eleganz.
## Schicht 1 — Routing (Overlay über alle Haushalte)
Kandidaten (Auswahl offen, Kriterium: simpel, wartbar, verschlüsselt):
| Kandidat | Pro | Con |
|---|---|---|
| **Yggdrasil** | Out-of-the-box e2e-verschlüsseltes IPv6-Overlay, null Konfiguration, self-contained | experimentell, Performance über wenige Gbit/s hinaus |
| Babel + WireGuard | bewährt (Althea-Ansatz), Router-Hardware tauglich | mehr Konfigurationsaufwand |
| cjdns | Battle-tested in Hyperboria | ältere Codebasis |
Empfehlung für den PoC: **Yggdrasil**. Jeder AKI-Node peert über die
Glasfaser-Links mit seinen Nachbarn; Geräte der Haushalte hängen per NAT/
Firewall getrennt dahinter (Home-LAN ≠ Mesh-LAN).
## Schicht 2 — Bandbreiten-Pooling (der eigentliche Kern)
### Exit-Pool
Jeder Haushalt bietet seinem Node an, wie viel Uplink er "spendiert"
(Kontingent, standardmäßig fair-share). Der Exit-Pool ist die aggregierte
Kapazität. Exit ist **opt-in pro Haushalt und jederzeit widerruflich**.
### Segmentierter Multi-Exit-Download (`aki-fetch`)
```mermaid
sequenceDiagram
participant User
participant Node (HAUS)
participant Exits (alle Haushalte)
participant Origin (Origin-Server)
User->>Node: GET bigfile.iso
Node->>Node: Plan (Dateigröße, Range-Splits, Exit-Kontingente)
par parallel über alle Exits
Node->>Exits: Range 0–25%
Node->>Exits: Range 25–50%
Node->>Exits: Range 50–75%
Node->>Exits: Range 75–100%
end
Exits->>Origin: (je ein GET mit Range)
Origin-->>Exits: Daten
Exits-->>Node: Segmente (verschlüsselt über Mesh)
Node-->>User: Datei (Hash-verifiziert, reassembliert)
```
- HTTP Range Splits + Shadow-Verifizierung (Content-Hash)
- Fallback: entfällt ein Exit, übernimmt ein anderer das Segment
- Für nicht-rangefähige Quellen: klassische Proxy-Rotation
### Generischer Traffic (alles andere)
VPN-artiges Overlay: pro Gerät ein verschlüsselter Tunnel zu *einem*
gewählten Exit, Exit-Wahl rotiert; Browsing/Video-Calls laufen über einen
Exit, große Transfers über alle. Video-Calls werden explizit auf einen
Exit gepinnt (kein Splitting).
### Fairness-Scheduler (`aki-fair`)
- Max-min Fairness über alle aktiven Nutzer:innen des Netzes
- Exit-Kontingente (Volumenlimit, Wartungszeit) werden respektiert
- Karma statt Bezahlung: wer dauerhaft deutlich mehr zieht als er gibt,
wird fair angesprochen (Drosselung als letztes Mittel, nie als Strafe
für Berechtigte mit Bedarf)
### Nachbarschafts-Cache (`aki-cache`)
- Transparenter Shared-Cache (lancache-Prinzip): große, popluläre Objekte
(Steam, Konsolen-Updates, OS-Images, Software-Pakete) kommen aus dem
Viertel statt aus dem Internet
- DNS-basiert, pro Haushalt kleine Cache-Slots; gemeinsam sind sie groß
## Schicht 3 — Inhalte & Apps (Freenet)
- `freenet-core` (Rust, AGPL-3.0) läuft als Sidecar auf ausgewählten Nodes
und stellt verteilte Inhalte/Apps im Viertel bereit: Nachbarschafts-Wiki,
Microblogging, lokale Services — ohne zentralen Server, auch offline
erreichbar.
- Freenet ist **keine Anonymitätslösung** (siehe FAQ) und wird auch nicht
als solche beworben.
- Unsere Software nutzt Freenet über `freenet-stdlib` bzw. die
WebSocket-API (nicht-derivativ), unsere eigene Codebasis bleibt AGPL-3.0.
## Sicherheit und Vertrauen
- Nodes authentifizieren sich gegenseitig per Keypair; Onboarding im
persönlichen Gespräch (Nachbar:innen sind der Trust-Anchor, nicht PKI).
- Strikte Netz-Trennung: Mesh-LAN hat keinen Zugriff auf Home-LAN der
Teilnehmer (Client-Isolation).
- Kill-Switch: jeder Haushalt kann seine Faser physisch/softwareseitig
abklemmen; der Node fällt auf "nur eigener Anschluss" zurück.
- Minimale Logs (DSGVO, siehe [recht.md](recht.md)).
## Offene Fragen
- DSLite/Carrier-NAT-Haushalte: Synchrone Exits gehen, aber
Konfigurationsaufwand pro Router-Modell prüfen.
- ISP-AGB: Weitergabe an "Dritte" kann verboten sein (per ISP prüfen,
siehe recht.md).
- Wie viel Cache lohnt sich real bei 3–10 Haushalten? (Messung in Phase 2)