Files
UmbrelApps/Docs/Plannen/Masterplannen/Bereikbaarheid.PLAN.md
T
HarmenandClaude Opus 5 c80d587100 Wat een relay ziet, en waarom het risico niet vertrouwelijkheid is
De gebruiker vroeg of iemand met kennis van de API zijn labels kan opvragen zodra
de relay op een domein staat. Nee, en de reden is scherper dan "het is
versleuteld". Uit een OwnerSecret worden met SLIP-21 drie onafhankelijke waarden
afgeleid: een publieke OwnerId, een encryptiesleutel en een rotatable write key.
Alleen de eerste gaat naar de relay.

Het aardige is dat de OwnerId expres niet geheim is. De beveiliging leunt er niet
op dat je adres onbekend blijft, en dat is het tegenovergestelde van een systeem
waar een onraadbare URL de grens vormt. Daarom kan deze relay bij een onbekende
partij staan.

Twee dingen expres niet gladgestreken. Of iemand die een OwnerId kent de
versleutelde blobs kan ophalen staat nergens gedocumenteerd; kan het, dan lekt dat
bestaan, activiteit en bij benadering omvang, niet inhoud. En onraadbaarheid van
de OwnerId beschermt tegen het aflopen van een relay, niet tegen lezen.

Dat verschuift waar Bereikbaarheid over gaat. Het risico van een open eindpunt is
misbruik als gratis versleutelde opslag: een kale relay kent geen accounts en kan
per definitie niet weten van wie de data is. Dat is met terugwerkende kracht de
tweede functie van Trezor's quota-manager, naast facturering, en die haalden wij
eruit.

Het voorstel van de gebruiker voor een eigen quota-manager met een allowlist van
OwnerId's staat erin, met drie uitvoeringen en hun prijs. De netste is createRelay
uit @evolu/nodejs, dat auth expliciet als reden noemt om die API te gebruiken,
maar dan bouw je weer een eigen image en verlies je de winst van de gepubliceerde.
Met een detail dat het lastiger maakt dan het klinkt: je moet je eigen OwnerId
kennen om hem te vlaggen, en Suite toont die waarschijnlijk nergens. Uitweg is niet
laten typen maar laten leren: de eerste eigenaar die verbindt wordt toegelaten.

Meegenomen uit de vorige bevinding: open punt 2 is beantwoord, Suite eist geen TLS.

Tests: niet gedraaid, dit raakt alleen documentatie.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-26 07:51:52 +02:00

138 lines
8.0 KiB
Markdown

# Bereikbaarheid - masterplan
> **App: Evolu Relay.** Status: nog niet actief. Dit is één bestand en dat is bewust: er wordt nog niet
> aan gewerkt. Bij
> promotie naar `Plannen/Actief/NNN-Bereikbaarheid/` worden de paragrafen hieronder over de vier
> bestanden verdeeld; zie `HomeGit/Docs/Werkproces.md` §1b.
>
> Afhankelijk van: **Umbrelapp**. Er valt niets bereikbaar te maken zolang er niets draait. Eén bevinding
> uit **Proefopstelling** stuurt dit plan wel al: accepteert Trezor Suite een `http://`-adres, of eist het
> TLS?
## 1. Doel
Trezor Suite ook buiten het thuisnetwerk laten synchroniseren met de eigen relay, zonder dat daarvoor een
poort op de router open hoeft.
## 2. Afbakening
De weg van een apparaat onderweg naar de relay op de Umbrel, en wat daarvoor op de Umbrel en op het
apparaat geregeld moet worden. Inclusief de vraag wat er gebeurt als die weg wegvalt: een client die
buiten het netwerk niets kan synchroniseren, moet dat binnen het netwerk nog wel gewoon doen.
## 3. Niet-doelen
- **Geen poort openzetten op de router als het te vermijden is.** Een sync-relay die rechtstreeks aan het
internet hangt is een ander soort ding dan een relay op je eigen netwerk, en niets in dit project vraagt
erom.
- **Geen eigen certificaatbeheer bouwen.** Bestaat dat al op deze Umbrel, dan gebruiken we het. Zo niet,
dan is dat een reden om voor de weg te kiezen die geen certificaat nodig heeft.
- **Geen dienst van derden in het datapad die het verkeer termineert.** Dat is precies wat zelf hosten
moest oplossen.
## 4. Ontwerp
### 4a. Waar het risico wél en niet zit
**Bijgewerkt 25-08-2026**, nadat de gebruiker vroeg of iedereen met kennis van de API zijn labels kan
opvragen zodra de relay op een domein staat. Dat antwoord is nee, en het verandert waar dit plan over gaat.
**Vertrouwelijkheid is geen probleem, ook niet op een open eindpunt.** Uit één `OwnerSecret` worden met
SLIP-21 drie onafhankelijke waarden afgeleid: een publieke `OwnerId`, een `OwnerEncryptionKey` die
ontsleutelt en een `OwnerWriteKey` die schrijven autoriseert. Alleen de eerste gaat naar de relay. De
beveiliging leunt er dus niet op dat je adres onbekend blijft. Uitgeschreven met bron in
[Upstream-evolu-relay.md](../../Referenties/Upstream-evolu-relay.md) §1b.
**Het echte risico is misbruik als opslag.** Een kale Evolu-relay kent geen accounts en geen
toegangscontrole. Wie hem kan bereiken, kan een eigen owner aanmaken en hem als gratis versleutelde opslag
gebruiken, en je kunt niet zien van wie het is: dat is het ontwerp en geen tekortkoming. Je schijf groeit
en er is geen knop.
**Dat is met terugwerkende kracht de tweede functie van Trezor's quota-manager**, naast facturering. Wij
haalden hem eruit omdat hij bij betaalde hosting hoort. Dat klopt, maar dan neem je de misbruikbeheersing
mee weg.
Gevolg voor dit plan: **de keuze tussen Tailscale en een reverse proxy gaat niet meer over gemak maar over
of er überhaupt een open eindpunt komt.** Zolang alleen jouw eigen apparaten erbij moeten, is een netwerk
dat vreemden buiten houdt de simpelste en beste oplossing, en is een publiek domein een risico dat niets
oplevert.
### 4b. Wil je tóch een open eindpunt, dan is er een eigenaars-allowlist nodig
Voorstel van de gebruiker op 25-08-2026: een eigen quota-manager, met een interface waarin je `OwnerId`'s
kunt vlaggen en alleen die van jezelf mag schrijven. Dat is de juiste gedachte, en er zijn drie manieren om
het te doen die sterk in prijs verschillen.
1. **De relay uitbreiden via `createRelay`.** De README van Evolu noemt de Node-bibliotheek
`@evolu/nodejs` met een `createRelay`-API, en noemt expliciet "custom logging, **auth**, or tight server
integration" als reden om die te gebruiken in plaats van de kant-en-klare image. Dat is het bedoelde
uitbreidpunt en vrijwel zeker wat Trezor gedaan heeft. Prijs: je schrijft en onderhoudt een eigen kleine
dienst, en je bouwt weer een eigen image. Dan verlies je precies de winst uit open punt 6 van
**Umbrelapp**.
2. **Terug naar de relay van Trezor**, met een eigen interface die rijen in de limietentabel zet in plaats
van hun quota-manager. De handhaving bestaat daar al (`isOwnerAllowed`). Prijs: schrijven in andermans
schema, dus breekbaar bij elke bovenstroomse wijziging, plus de Postgres en de eigen image terug.
3. **Geen allowlist, maar het netwerk.** Tailscale of een IP-beperking op de reverse proxy. Grover, want
het beperkt wie er mag verbinden en niet welke eigenaar mag schrijven. Voor één huishouden is dat
praktisch hetzelfde, en het kost geen regel code.
**Een detail dat optie 1 en 2 lastiger maakt dan ze klinken: je moet je eigen `OwnerId` kennen om hem te
kunnen vlaggen.** Trezor Suite toont die waarschijnlijk nergens. De uitweg is de allowlist niet te laten
typen maar te laten leren: **de eerste eigenaar die verbindt wordt toegelaten, de rest geweigerd**, met een
knop om die keuze te wissen. Dat is dezelfde gedachte als een sleutel die je bij de eerste verbinding
vastlegt, het vraagt geen interface om een id in te tikken, en het is precies genoeg voor het doel.
**Voorstel: doe optie 3 eerst.** Hij is gratis, hij lost het echte risico op, en hij houdt de deur open
voor optie 1 als er ooit iemand anders bij moet.
### 4c. De twee wegen naar buiten
Twee wegen, en ze sluiten elkaar niet uit.
**Tailscale.** umbrelOS heeft er een officiële app voor, en het is de weg van de minste weerstand: geen
poort open, geen certificaat, geen domein. De prijs is een account bij een derde partij en een client op
elk apparaat dat mee wil doen. Voor het datapad is dat geen bezwaar, want het verkeer loopt versleuteld
tussen de apparaten zelf en niet via die partij, maar de coördinatie loopt er wel langs.
**Een reverse proxy met een eigen domein en TLS.** Zwaarder op te zetten, maar er is één ding dat het
makkelijker maakt dan het lijkt: op deze Umbrel draait al een reverse proxy die certificaten beheert. Dat
is dezelfde die Electrum Gate gebruikt. Het nadeel blijft dat er dan wél een poort open moet.
**Voorstel: beginnen met Tailscale**, en de reverse proxy pas overwegen als er een apparaat is dat geen
Tailscale-client kan draaien.
Wat dit plan stuurt en wat hier nu nog onbekend is: **eist Trezor Suite een `https://`-adres?** Zo ja, dan
valt de kale Tailscale-route weg of moet er alsnog een certificaat bij. Dat antwoord komt uit
**Proefopstelling**, fase 4.
## 5. Het werk in grote lijnen
**Fase 1 - de keuze onderbouwen.** Vastleggen welke apparaten mee moeten doen en of Suite TLS eist.
Uitkomst: één gekozen weg, met de reden erbij.
**Fase 2 - opzetten.** De gekozen weg inrichten op de Umbrel en op één apparaat.
**Fase 3 - verifiëren onderweg.** Synchroniseren vanaf een verbinding die niet het thuisnetwerk is, en
daarna controleren dat het thuis nog steeds werkt.
## 6. Open punten
1. **Welke apparaten moeten buitenshuis kunnen synchroniseren?** Alleen een laptop is iets anders dan een
telefoon, en het bepaalt of Tailscale volstaat.
**Moment:** fase 1 · **Eigenaar:** gebruiker
2. **Eist Trezor Suite TLS?** - **nee, `http://` volstaat** (25-08-2026). Afgelezen uit de e2e-test van de
mobiele app in de broncode van Suite, die `http://10.0.2.2:4000` invult. Daarmee blijft de kale
Tailscale-route open en is een certificaat geen voorwaarde. Nog niet met de hand nagedaan, en het is
alleen gecontroleerd voor `suite-native`; de desktopversie is niet nagekeken.
3. **Komt er een eigenaars-allowlist, en zo ja welke van de drie uit §4b?**
Alleen aan de orde als er een open eindpunt komt. Bij Tailscale of een IP-beperking is de vraag niet
nodig, en dat is meteen het argument om daarmee te beginnen.
**Moment:** pas als fase 1 uitwijst dat een apparaat geen Tailscale kan draaien · **Eigenaar:** gebruiker
## 7. Verificatie
Synchroniseren vanaf een mobiel netwerk, dus niet vanaf de wifi thuis. Dat is de enige test die telt; een
test op het eigen netwerk met een externe naam kan slagen op een router die het verkeer naar binnen lust.
Daarna de tegenproef: werkt het thuis nog steeds, en werkt het nog als de gekozen weg wegvalt.