Proč naše VPN servery běží jen z paměti a co se stane při zabavení.
Stav k 19. 10. 2026: Pevnost je v soukromé betě. První server prg1 v Hluboké nad Vltavou (datacentrum WEDOS) běží od 18. října; první krátký test naměřil kolem 300 Mbit/s. Každý nový účet má dvě hodiny zdarma (jedna zkouška na připojení, jedno zařízení), pak 120 Kč za 30 dní nebo 1 200 Kč za rok. Platit jde Bitcoinem on-chain (preferujeme), kartou přes Stripe nebo převodem; Lightning plánujeme, Monero se chystá. Aplikace pro Windows 0.3.1 beta, pro Android 0.1.0 beta. Naposledy revidováno 19. 10. 2026.
Věta „naše VPN servery běží jen z paměti“ se píše snadno. Tento článek vysvětluje, co přesně znamená na našem prvním uzlu prg1 v datacentru WEDOS v Hluboké nad Vltavou: jak startuje, co má na disku, odkud bere klíče, co dokazuje a nedokazuje hash na stavové stránce a co by vydalo zabavení. Model hrozeb, ze kterého návrh vychází, rozebírá článek co skutečně vydá zabavený VPN server; tady jde o to, jak je to postavené.
Jak uzel startuje
Zavaděč na disku nahraje jádro, initramfs a komprimovaný obraz souborového systému o velikosti kolem 260 MB, sestavený z Debianu. Parametr toram zkopíruje celý obraz do paměti; kořenový souborový systém včetně zapisovatelné vrstvy žije v RAM. Od té chvíle systém disk nepotřebuje a nic na něj nezapisuje. Uzel nemá swap, systémový žurnál je jen v paměti, náš DNS resolver nevede log dotazů, neběží žádný SSH server a účet root je zamčený.
Prakticky to znamená, že po restartu je stroj přesně ve stavu, v jakém byl obraz sestaven. Nic, co se dělo za běhu, do dalšího startu nepřenese: žádné soubory, žádné logy, žádné dočasné záznamy, které by na disku zapomněl nějaký program.
Co je na disku
Zavaděč, jádro, initramfs a obraz. A poctivě ještě jedna věc: malý nosný systém z původní instalace serveru, který spouštíme jen při výměně obrazu. Při běžném provozu neběží, nemá žádné klíče VPN ani data zákazníků a jeho vlastní systémové záznamy se týkají jen naší údržby. Odstranit ho plánujeme, jakmile budeme umět obraz vyměnit jinak.
Na disk uzel zapisuje v jediném případě: když sami spustíme výměnu obrazu, nastaví jednorázový příznak v prostředí zavaděče, aby další start šel do nosného systému. Nic jiného se na disk za běhu nedostane.
Odkud se berou klíče
Obraz neobsahuje žádná tajemství, jen veřejné klíče našeho řídicího serveru, jeho certifikační autoritu a adresy. Cokoli z něj si tedy může přečíst kdokoli a nic tím nezíská.
Po startu si uzel v paměti vytvoří dočasný správcovský klíč, zaregistruje se u řídicího serveru, který běží v jiném datacentru, a ohlásí, jaký obraz nabootoval. My ho ručně schválíme, a to po každém jednotlivém startu. Teprve potom dostane svůj klíč WireGuard a seznam veřejných klíčů zařízení. Žádost o schválení, kterou jsme nečekali, je incident, ne restart: neschválíme ji a uzel bez klíčů žádný provoz nenese. Kdo by stroj odnesl a zapnul jinde, dostane krabici, která čeká na schválení, jež nepřijde.
Zveřejněný hash a jeho meze
Na stavové stránce, která se obnovuje každých pět minut, je vidět, které uzly jsou online, a ID a SHA‑256 zveřejněného obrazu. Každá výměna obrazu se tam projeví novým hashem. Počty účtů a zařízení stránka ukazuje jen v hrubých pásmech, aby z ní nešlo nic vyčíst o jednotlivcích.
Co to dokazuje: který build podle nás běží, a že ho nemůžeme potichu vyměnit, aniž by se stránka změnila. Co to nedokazuje: že stroj v racku běží přesně tenhle build. To dnes zvenčí ověřit nejde. V plánu jsou reprodukovatelná sestavení, díky kterým si hash spočítáte sami ze zdrojů, a na vlastním hardwaru vzdálená atestace přes TPM, kdy za to, co nabootovalo, ručí sám hardware a řídicí server bez ní klíče nevydá. Do té doby je hash veřejný závazek, ne důkaz. Říkáme to raději sami, než aby to za nás musel napsat někdo jiný.
Co si můžete zkontrolovat sami
- Hash v čase. Podívejte se na stavovou stránku občas znovu. Hash by se měl měnit jen při ohlášené výměně obrazu, ne potichu mezi dvěma návštěvami.
- Klíč serveru. V konfiguračním souboru je v sekci
[Peer]veřejný klíč našeho serveru. Pokud se při stažení nové konfigurace nečekaně změní, aniž bychom výměnu klíče oznámili, napište nám; buď jsme udělali chybu, nebo se děje něco, o čem chceme vědět. - Co uzel prozrazuje navenek. Uzel nemá žádný otevřený TCP port, tedy ani SSH, ani webovou správu. Zvenčí přijímá jen ping a UDP pro WireGuard, který na neověřené pakety mlčí. Ověří to libovolný skener portů.
Co se stane při zabavení
Vypnutý stroj
Disk s veřejným obrazem a nosným systémem. Paměť ztratí obsah během sekund až minut po odpojení napájení. O minulých relacích nezůstane nic. Po zapnutí jinde uzel požádá o schválení, nedostane ho a klíč nikdy neobdrží.
Běžící stroj
V paměti je klíč serveru, veřejné klíče zařízení s adresami v tunelu a u každého právě připojeného zařízení jeho aktuální adresa a čas posledního handshaku. Připravený útočník by mohl zkusit útok cold boot: paměť zchladit a vyčíst. Náš pronajatý hardware šifrování paměti nemá; AMD SME/TSME nebo ekvivalent plánujeme na vlastních strojích. Takový útok by prozradil okamžik, kdo byl připojen právě teď, ne historii.
Naše reakce
Pokud bychom měli podezření, že někdo četl paměť běžícího uzlu, vyměníme klíč serveru. Naše aplikace si stáhnou nový podepsaný seznam serverů; s oficiální aplikací WireGuard si stáhnete nový konfigurační soubor ze stránky účtu.
Soudní příkaz vůči nám vrátí krátký seznam ze zásad ochrany dat: ID účtu, datum expirace, veřejné klíče zařízení, záznam o platbě a souhrnné zatížení. A datacentrum, jako každý operátor, vidí, které adresy se k uzlu připojují, a může vzorkovat toky. To žádný návrh běžící z paměti nezmění; víc v článku co uvidí váš operátor.
Proč se s tím namáhat
„Slibujeme, že nelogujeme“ závisí na našem chování. „Stroj nemá kam log uložit“ závisí na jeho návrhu, o kterém si můžete přečíst a částečně ho ověřit. Raději dáme práci sem a řekneme vám, kde ověřování končí. Servery bez disků provozuje i Mullvad a další poskytovatelé, nejsme v tom sami; co přidáváme, je krátký seznam toho, co existuje, a otevřenost o částech, které zatím dokázat neumíme. Srovnání s většími službami je v článku Pevnost vs Mullvad vs Proton VPN.