Master proxy
Voliteľné. Sprístupní zariadenie z internetu bez toho, aby ste museli doma otvárať port.
Edge (VPS)
Importujte výstup flaku nixosModules.edge do konfigurácie VPS a nastavte
losos.edge.*:
losos.edge.publicDomainje doména, pod ktorou sa zariadenia sprístupňujú.losos.edge.tenantsje zoznam povolených zariadení, každé s názvom hostiteľa a súborom s tokenom. Registrar vytvára trasy a certifikáty iba pre identifikátory, ktoré sú uvedené tu.losos.edge.cluster.enablenavyše spúšťa riadiacu vrstvu mesh, server rke2 s Longhornom. Proxy funguje aj bez nej.
losos-registrar udržiava dynamickú konfiguráciu Traefiku a serverovú
konfiguráciu rathole v súlade s registrovanými zariadeniami.
Zariadenie
Nastavte losos.proxy.enable = true a voľby losos.proxy.*
(registrarUrl, edgeRatholeEndpoint, hostname, applianceId,
tokenFile).
Šifrovanie tunela
rathole používa svoj transport Noise. Edge si pri prvom štarte vygeneruje pár
kľúčov. Každé zariadenie si pri prvom spustení stiahne verejný kľúč z
registrara a uloží ho do losos.proxy.noisePublicKeyFile. Ak chcete kľúč
pripnúť mimo tohto kanála, vložte súbor na to miesto vopred; zariadenie ho
nikdy neprepíše. Nastavenie ktorejkoľvek z dvoch kľúčových volieb na null
prepne späť na obyčajné TCP. Nerobte to.
Administrátorské UI zostáva len v LAN
Prevádzka z tunela prichádza do nginx z 127.0.0.1, preto administrátorské
trasy odmietajú loopback. Nepridávajte k nim allow 127.0.0.1, inak bude
administrátorské UI dostupné z internetu.
Edge v tej istej LAN
Edge nemusí byť VPS. S losos.edge.lan.advertise = true sa navyše ohlasuje
cez mDNS ako _losos-edge._tcp, s URL registrara v zázname url=
(losos.edge.lan.url, predvolene http://<edge>.local:8443). API registrara
naviaže mimo loopbacku a otvorí jeho port. Zariadenie v tej istej sieti ho potom
nájde bez akejkoľvek konfigurácie a môže cez neho zdieľať úložisko, pozri
Mesh. Takto vyzerá nasadenie on-premises: jeden
stále zapnutý stroj vo firemnej sieti, na ktorom beží nixosModules.edge, a
vedľa neho zariadenia nainštalované zo štandardného ISO.
# the edge machine's configuration
imports = [ losos.nixosModules.edge ];
losos.edge = {
enable = true;
acmeEmail = "ops@example.com"; # a public name gets a certificate as usual
lan.advertise = true; # announce on the LAN, bind the API off-loopback
tenants.<id>.tokenFile = "/run/secrets/tenant-<id>";
};
Zariadenia nepotrebujú nič. ISO nainštaluje zverejnenú konfiguráciu install,
panel Mesh ukáže "Okrajový proxy server nájdený: … V tejto sieti", len čo edge
odpovie, a zdieľanie sa dá zapnúť.
Takto si úložisko spája aj LAN bez internetu. Zariadenie si zväčší vlastný disk aj
bez akéhokoľvek edge (losos-ctl grow, režim Local). Spájanie naprieč
zariadeniami je však mesh a riadiaca vrstva meshu (server rke2, Longhorn,
registrar) beží na stroji s edge. Edge na PC v LAN je teda to, vďaka čomu
funguje lokalita offline. WAN môžete odpojiť, keďže zariadenia ho hľadajú výlučne
cez mDNS. Dnes platia dve obmedzenia:
- Adresa tunela na registráciu (
losos.proxy.registrarUrl) je voľba zostavenia, ktorá predvolene stále ukazuje na verejný edge. Lokalita, ktorá chce, aby tunel končil na jej vlastnom edge, ju nastaví vo svojom flaku. - Ohlásenie ide cez mDNS, takže edge a zariadenia musia zdieľať jednu broadcastovú doménu (jednu VLAN).
demo/edge-lan/run.sh postaví celé toto usporiadanie na jednom stroji ako
VM na virtuálnom prepínači: edge, ktorý je zároveň routerom LAN, a dve zariadenia
nainštalované z ISO. Prejde overovací kontrolný zoznam
(demo/edge-lan/CHECKLIST.md). Bez edge obe zariadenia odmietnu. Edge sa objaví,
obe ho nájdu a povolia zdieľanie. Edge zmizne, znova odmietnu, a potom sa
vráti. Jeho README hovorí, ktoré časti čo zastupujú v skutočnej lokalite a
čo ešte potrebujú kroky so spoločným úložiskom.
Viac edge: federácia
Edge hostovaný používateľom môže preposielať svoje zariadenia cez oficiálny edge,
takže dve lokality, každá za vlastným lokálnym edge, sa navzájom dosiahnu cez
internet, a zariadenie uprednostní svoj lokálny edge, prepne sa na oficiálny a keď
neodpovedá ani jeden, vypne svoje funkcie závislé od edge. Návrh, atribút
tenanta na strane hubu (relayZone), losos.edge.uplink.* na strane spoke,
otvorená registrácia v LAN a obraz VM brány sú na stránke
Federácia edge.
Oficiálne edge
Každý edge sa dá nájsť a môže preposielať úložisko. Iba edge, ktoré prevádzkuje LosOS, smú spracúvať P2P obchodovanie s úložiskom a výpočtovým výkonom (trh). Zariadenie si to overuje samo, pri každom skenovaní, a vlastný edge firmy dostane všetko okrem trhu.
Overenie je identita Ed25519:
- Koreňový kľúč LosOS. Jeden pár kľúčov. Verejná polovica je súbor,
ktorý má každé zariadenie,
keys/official-edge-root.pubv tomto repozitári (losos.proxy.officialRootKeyFile). Súkromnú polovicu drží vlastník projektu offline. Nikdy sa nedostane do repozitára ani do žiadneho zariadenia a podpisuje certifikáty edge a nič iné. Kým niekto nezapíše verejný kľúč do tohto súboru, žiadny edge nie je oficiálny a trh je vypnutý na každom zariadení zostavenom zo stromu. Predvolené nastavenie zlyháva do zatvoreného stavu. - Certifikát edge. Každý oficiálny edge má vlastný pár kľúčov a malý
JSON certifikát
{name, url, public_key, not_after, signature}podpísaný koreňom. Registrar odpovedá naGET /identity?nonce=<hex>certifikátom a podpisom nonce kľúčom edge. - Overenie na zariadení (
backend/src/edge.rs) beží pre každý edge, ktorého/healthodpovedal. Koreň podpísal certifikát, certifikát uvádza URL, s ktorou zariadenie hovorí, neexpiroval a kľúč edge podpísal nonce, ktorý si zariadenie práve vymyslelo. Prejdú všetky štyri, inak edge nie je oficiálny. Výsledok jeofficialpre každý edge vGET /api/edgea značka pri názve každého edge v paneli Mesh: fajka pri oficiálnom edge, varovanie pri každom inom, s tooltipom, ktorý vymenúva, čo pre zariadenie daný edge nedokáže. Zariadenie môže mať v dosahu viac edge. Zdieľanie funguje cez ktorýkoľvek z nich, obchodovanie iba cez oficiálny. Kým nie je v dosahu žiadny oficiálny edge, relay trhu odpovedá{available: false, reason: "noOfficialEdge"}a každú akciu odmietne s 409officialEdgeRequired. Nič neopustí zariadenie.
Edge si pri prvom spustení vytvorí vlastný kľúč identity
(losos.edge.identity.keyFile, predvolene
/var/lib/losos-registrar/identity.key) a súkromná polovica nikdy neopustí
edge. Pre oficiálny edge podpíše LosOS koreňom certifikát a nainštaluje ho
tam; edge ho zapíše vedľa kľúča (losos.edge.identity.certFile). Kým
certifikát nepríde, edge odpovedá na /identity kódom 404 a nie je
oficiálny. Tak vyzerá vlastný edge firmy, vrátane toho, ktorý spúšťa
demo/edge-lan/. Edge s oboma voľbami nastavenými na null neposkytuje
žiadnu identitu.
Čo to chráni: firma, ktorá prevádzkuje vlastný edge, dostane funkčné nasadenie on-premises, ale nemôže cez neho zúčtovávať obchody. Cudzí, kto postaví edge, tiež nemôže prinútiť zariadenia obchodovať cez neho, pretože edge robí oficiálnym iba súkromný kľúč koreňa. Čo to nechráni: protokol trhu nie je skrytý a súkromný kľúč koreňa je celé tajomstvo. Jeho strata znamená vydať release, ktorý vymení kotvu dôvery každého zariadenia.
DNS zóna a vlastné domény
Oficiálny edge môže poskytovať vlastnú DNS zónu a smerovať domény, ktoré
vlastníci zariadení už majú. Je vypnutý, kým nie je nastavené
losos.edge.dns.enable.
losos.edge.dns = {
enable = true;
zone = "boxes.losos.dasmat.us"; # default: "boxes.${publicDomain}"
ipv4 = [ "203.0.113.7" ]; # the edge's public addresses; one family at least
ipv6 = [ "2001:db8::7" ];
# nameservers defaults to [ "ns1.<zone>" ], served with glue from ipv4/ipv6.
};
Registrar vykreslí zónový súbor pri každom zosúladení a Knot ho poskytuje na porte 53, ktorý modul otvorí. Path unit znovu načíta Knot, keď sa súbor zmení. Zóna obsahuje SOA, NS a glue, každý názov hostiteľa tenanta, ktorý spadá do zóny, a jeden názov pre každé zariadenie, ktorého účet Stripe je overený: 16 hexadecimálnych znakov z SHA-256 UUID zariadenia. Každý názov sa prekladá na edge, pretože tam sú Traefik a tunel. Vlastná adresa zariadenia sa nikdy neobjaví vo verejnom DNS a rovnako ani id účtu Stripe či UUID. Sériové číslo je unixový čas zmeny, alebo o jedno viac ako predchádzajúce sériové číslo, ak je väčšie.
Operátor deleguje zónu raz, u registrátora nadradenej domény:
boxes.losos.dasmat.us. NS ns1.boxes.losos.dasmat.us.
ns1.boxes.losos.dasmat.us. A 203.0.113.7
ns1.boxes.losos.dasmat.us. AAAA 2001:db8::7
Nič sa neprideľuje, kým edge nemá neexpirovaný certifikát identity
(Oficiálne edge). Dovtedy zónu tvoria iba SOA, NS a
glue a /domains/* odpovedá 503.
Vlastné domény
Zariadenie pridá doménu cez POST /domains/add (overené jeho tokenom tunela,
preposlané cez lososd z Nastavenia → Sieť). Edge ju prijme iba vtedy, keď
je pripojený účet Stripe zariadenia pripravený a nesie UUID zariadenia, čo je tá istá
kontrola, akú robí trh pred výplatou. Potom vlastník zverejní dva záznamy:
_losos-challenge.<domain> TXT "losos-domain-v1=<32 hex>", kde hex je SHA-256 z domény, UUID zariadenia a id účtu Stripe. Dokazuje kontrolu nad doménou a viaže ju na to zariadenie a ten účet. Záznam, ktorý tam nechal predchádzajúci vlastník, nedokazuje nič.<domain> CNAME <label>.<zone>, alebo záznamy A/AAAA s adresami edge na vrchole zóny.
Registrar si oba vyhľadá cez DNS-over-HTTPS (losos.edge.dns.checkUrl,
predvolene JSON API Cloudflaru), najviac 16 na jeden prechod, každých 30 s,
kým nárok čaká, a každú hodinu, keď je aktívny. Až keď sú oba záznamy
správne, dostane doména router Traefiku s Let's Encrypt, smerovaný cez
tunel zariadenia. Čakanie aj na CNAME bráni tomu, aby Traefik žiadal Let's
Encrypt o názov, ktorý nevedie na edge. Aktívna doména zanikne po troch
neúspešných opätovných kontrolách za sebou, alebo okamžite, keď účet Stripe
prestane byť pripravený. Zariadenie môže mať päť domén, doména patrí jednému zariadeniu a
neoverený nárok sa po siedmich dňoch zahodí. Nároky sú uložené v
/var/lib/losos-registrar/domains.json.
Na zariadení lososd udržiava aktívne domény v
/var/lib/losos-public-names/domains.json. Súbor obnovuje každé dve
minúty a vždy, keď o to požiada panel Sieť. Pod Nextcloudu pripája tento
adresár len na čítanie, pri každej požiadavke pridá názvy do
trusted_domains a použije vlastnú doménu požiadavky pre overwritehost,
ak je jednou z nich. Robí to iba režim kontajnera. LosOS Git si ponecháva
svoj ROOT_URL s názvom edge.
Zariadenie za lokálnym edge dostane svoje domény smerované tiež, cez ten lokálny
edge, len čo sa za lokálny edge zaručilo relay passom a pripojilo sa k meshu
tohto edge. Registrar si tieto trasy uchováva sám, v relay-routes.json
vedľa svojho registra. Federácia
edge obsahuje
podrobnosti a losos.edge.dns.relayRoutes.
tests/edge-dns.nix (losos-edge-dns) spustí edge a klienta a pýta sa
Knotu cez UDP aj TCP. backend-registrar/tests/domains.rs prevedie tok
nárokov proti skutočnému registraru a falošnému serveru DNS-over-HTTPS.
Demo nasadenie na Verceli
edge-vercel/ spúšťa API registrara, ten istý router a tú istú kontrolu
tokenu, ako Vercel Function na https://losos-edge.dasmat.us, čo je
predvolená hodnota losos.proxy.registrarUrl. Register je uložený v Neon
Postgres a stavová stránka na / ukazuje registrované zariadenia a konfiguráciu
Traefiku, ktorú by pre ne edge zapísal. Je to iba riadiaca vrstva. Tunel
rathole, TLS Traefiku, mesh a trh nemôžu bežať na serverless hostiteľovi,
takže dátová cesta, teda dosiahnutie zariadenia cez jeho verejný názov hostiteľa,
stále potrebuje VPS. Stránka navyše ukazuje id a názvy hostiteľov
komukoľvek, kto má URL. Je to demonštračný hostiteľ, nie edge. Kroky
nasadenia a premenné prostredia sú v
edge-vercel/README.md.