Co to znamená
Deklarace říká, kdo se smí propojit; firewall hosta říká, co vůbec dosáhne socketu, a nic obojí nespojovalo. Dne 2026-10-08 lundra, deklarovaný rendezvous hub, běžela s ufw s výchozím zákazem a bez pravidla pro port 8791 nebo multicastovou skupinu: jádro zahazovalo každou registraci i každou inzerci z LAN — 187 řádků [UFW BLOCK] za týden — zatímco mesh doctor hlásil, že všechny kontroly platí, protože každá kontrola, kterou provedl, byla faktem procesu a žádná faktem hosta. Toto tvrzení říká, že přijetí se odvozuje z deklarace, vypisuje se s příkazy, které ho zajistí, pozoruje se proti slovu samotného firewallu a hlasitě selže, když host zahazuje to, co deklarace slibuje.
Princip
apps/majordomus-cli/src/mesh/firewall.rs je čisté, kde to jde. plan je funkcí deklarace, adres rozhraní tohoto stroje a portu serveru: port multicastové skupiny, když je multicast zapnut, broadcastový port, když je povoleným záložním řešením, každá položka rendezvous.endpoints, jejíž adresa je adresou tohoto stroje, a port serveru, je-li zadán; zdrojové sítě jsou obklopující soukromé rozsahy každé adresy, kterou deklarace jmenuje (huby, seedy), nebo vlastní rozsahy tohoto stroje, když žádnou nejmenuje, a veřejná adresa nic neodvozuje. detect je funkcí platformy a toho, co je v cestě (ufw před nft na Linuxu; aplikační firewall na macOS; jinde nic). render je funkcí obou: jedno ufw allow in nebo nft add rule na pravidlo a zdroj, každé s komentářem majordomus mesh: …, nebo spustitelný soubor serveru povolený na macOS. judge_ufw, judge_nft a judge_application_firewall jsou funkcemi vlastního textu firewallu a count_blocks logu jádra. Hosta se dotýkají jen observe, kernel_blocks a apply: první dva řeknou, kdy nemohly (čtení ufw a nft vyžaduje root; log jádra se čte bez něj pro uživatele ve adm), a apply bez rootu nebo bez backendu odmítne a nespustí nic, zaznamená každý příkaz s jeho kódem a výstupem a znovu se zeptá firewallu, takže verdikt potom je verdiktem firewallu.
Modul schopností promítá mesh.firewall (CLI, GET /api/v1/mesh/firewall, majordomus_mesh_firewall) a mesh.firewall.apply (jen CLI — spouští privilegovaný nástroj hostitele a vlastní test modulu drží, že žádný jiný příkaz není nikde přes HTTP neposkytován). Doctor (apps/majordomus-cli/src/mesh/doctor.rs) spouští report jako svou kontrolu firewall, mezi kontrolami procesu a verdiktem serveru runtime, a selže přesně tehdy, když selže report: pozorované chybějící pravidlo nebo zahozený paket zalogovaný v pětiminutovém okně.
Jak to vidět
majordomus mesh firewall # the plan, backend, commands, observation, drops, verdict
majordomus mesh firewall --format json # the same, for scripts; exit 10 when the host does not admit the mesh
sudo majordomus mesh firewall apply # admit it; refuses without root
majordomus mesh doctor # the `firewall` line
bash test/run.sh 495_the_firewall_admits_the_mesh
cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib -- mesh::firewall
Na lundra, 2026-10-08, jako vlastník: unobservable s 81 a 28 zahozenými pakety v okně; jako root: missing, obě pravidla; po apply (Rule added, Rule added, Rule updated): present, žádný zahozený paket, a mesh nodes hubu, který dosud nevypsal nikoho, vypsal oba Macy v LAN jako přítomné a důvěryhodné. test/cases/495_the_firewall_admits_the_mesh.sh drží odvození nad deklarací tohoto repozitáře a nad fixturami (žádná deklarace, tento stroj jako hub, port serveru jednou), kontrolu doctoru, odmítnutí bez roota a nástroj MCP a nikdy nic nepoužije; unit testy a doctesty crate drží plán, vykreslení a každé posouzení.
Co nepokrývá
Není to správce firewallu: povoluje porty mesh ze soukromých sítí flotily, nedotýká se žádného jiného pravidla, nikdy nerozšíří zdroj na veřejný rozsah a nic neodstraňuje. Nepozoruje firewall, který nemůže číst — ufw a nftables potřebují root a bez něj kontrola drží jako absence, pokud log jádra neukazuje zahozené pakety. Neběží nikde jinde než v příkazové řádce pro apply, takže firewall, na kterém nikdo příkaz nespustí, nic nepovolí. Na macOS aplikační firewall povoluje executable, ne port, takže nový executable je nové povolení. A nezpřístupní hub, jehož deklarovaná adresa je zastaralá; to je řádek deklarace k opravě.
Proč existuje
Hub, u kterého se registrují všechny ostatní stroje a který nevypisuje nikoho, je mesh v nejvíce zavádějící podobě: každá vlastní kontrola prochází, server je aktivní a flotila je pořád sama. Z přijetí hostitelem jako odvozeného požadavku s verdiktem se „hub celý týden nikoho neslyšel“ stává jedním selhaným řádkem, který vypíše první mesh doctor.