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>
138 lines
8.0 KiB
Markdown
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.
|