{"id":34,"date":"2026-06-29T20:00:00","date_gmt":"2026-06-29T18:00:00","guid":{"rendered":"https:\/\/airex.se\/blogg\/en-fil-per-router\/"},"modified":"2026-08-02T18:31:31","modified_gmt":"2026-08-02T16:31:31","slug":"en-fil-per-router","status":"publish","type":"post","link":"https:\/\/airex.se\/blogg\/en-fil-per-router\/","title":{"rendered":"En fil per router \u2014 och pricken som aldrig kunde bli r\u00f6d"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Regeln \u00e4r enkel och obekv\u00e4m: <strong>r\u00f6r aldrig routern.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ska n\u00e5got \u00e4ndras uppdaterar man filen som beskriver hur routern ska se ut, och k\u00f6r om. Filen \u00e4r sanningen. Enheten \u00e4r bara en kopia av den, och en kopia som avviker \u00e4r per definition fel \u2014 oavsett hur bra sk\u00e4l den som \u00e4ndrade hade.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Det \u00e4r samma princip jag <a href=\"https:\/\/airex.se\/blogg\/netbox-zabbix-ordning-och-reda\/\">skrev om i vintras<\/a> f\u00f6r inventarium och \u00f6vervakning. Det h\u00e4r handlar om vad som h\u00e4nder n\u00e4r man tar den hela v\u00e4gen ut till n\u00e4tverksutrustningen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">En fil per enhet, hela tillst\u00e5ndet<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Varje router har en fil som beskriver <em>allt<\/em>: namn, gr\u00e4nssnitt, adresser, vilka tj\u00e4nster som f\u00e5r svara, tunnlar till andra platser, routningsgrannar. Inte skillnaden mot f\u00f6rra veckan \u2014 hela det \u00f6nskade tillst\u00e5ndet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Den som l\u00e4gger till en ny tunnel <em>kompletterar<\/em> filen. Playbooken \u00e4r idempotent och l\u00e4gger till det som saknas, utan att r\u00f6ra resten. K\u00f6r man den tv\u00e5 g\u00e5nger h\u00e4nder ingenting andra g\u00e5ngen, vilket \u00e4r hela po\u00e4ngen med att v\u00e5ga k\u00f6ra den ofta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vinsten m\u00e4rks f\u00f6rst vid tredje enheten. Med fem routrar g\u00e5r det att h\u00e5lla i huvudet. Med tjugo g\u00f6r det inte det, och d\u00e5 \u00e4r fr\u00e5gan &#8221;vad \u00e4r egentligen konfigurerat p\u00e5 den d\u00e4r?&#8221; antingen en fils\u00f6kning p\u00e5 tv\u00e5 sekunder eller en halvtimmes arkeologi i en levande enhet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Men den verkligt intressanta fr\u00e5gan \u00e4r inte tjugo. Den \u00e4r <strong>tusen<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Varf\u00f6r modellen h\u00e5ller n\u00e4r antalet v\u00e4xer<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">De flesta s\u00e4tt att hantera n\u00e4tverkskonfiguration fungerar utm\u00e4rkt upp till ungef\u00e4r det antal enheter en person orkar bry sig om, och kollapsar strax d\u00e4refter. Fyra egenskaper avg\u00f6r var den gr\u00e4nsen g\u00e5r.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Tillst\u00e5ndet \u00e4r per enhet, inte globalt.<\/strong> Det finns ingen central konfigurationsfil som v\u00e4xer med flottan och som alla \u00e4ndringar m\u00e5ste samsas i. Att l\u00e4gga till enhet nummer 1001 r\u00f6r inte de tusen andra \u2014 inga sammanslagningskonflikter, inget koordinerat utrullningsf\u00f6nster, ingen som v\u00e4ntar p\u00e5 n\u00e5gon annan. Antalet filer v\u00e4xer linj\u00e4rt och komplexiteten per fil g\u00f6r det inte.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Arbetet \u00e4r en k\u00f6, inte en runda.<\/strong> Varje enhet blir ett jobb. G\u00e5r det f\u00f6r l\u00e5ngsamt startar man fler arbetare \u2014 kapaciteten \u00e4r en siffra i en konfiguration, inte en omskrivning. K\u00f6erna kan dessutom h\u00e5llas lokalt per plats, s\u00e5 att trafiken mot enheterna aldrig beh\u00f6ver g\u00e5 \u00f6ver l\u00e5ngsamma f\u00f6rbindelser bara f\u00f6r att styrningen st\u00e5r n\u00e5gon annanstans. Det \u00e4r skillnaden mellan att skala ut och att skala upp, och bara det ena tar en till tusen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>J\u00e4mf\u00f6relsen \u00e4r l\u00e4sande.<\/strong> Eftersom avdriftskontrollen bara l\u00e4ser kan den k\u00f6ras kontinuerligt \u00f6ver hela flottan utan risk. Det g\u00f6r &#8221;vad \u00e4r tillst\u00e5ndet p\u00e5 v\u00e5ra tusen enheter?&#8221; till en fr\u00e5ga med ett svar i st\u00e4llet f\u00f6r ett projekt. Delvis genomf\u00f6rda k\u00f6rningar \u00e4r dessutom ofarliga \u2014 n\u00e4sta varv tar det som blev \u00f6ver.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Identiteten \u00e4r per enhet.<\/strong> Det h\u00e4r \u00e4r den som faktiskt s\u00e4tter taket, och det \u00e4r d\u00e4rf\u00f6r jag \u00e4gnar den ett eget avsnitt l\u00e4ngre ner. Delade administrat\u00f6rsuppgifter fungerar i ett labb. P\u00e5 tusen enheter betyder en enda otakt att n\u00e5gon m\u00e5ste \u00e5ka dit \u2014 och &#8221;\u00e5ka dit&#8221; \u00e4r inte en strategi som skalar.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Att j\u00e4mf\u00f6ra och att \u00e4ndra \u00e4r tv\u00e5 olika verb<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Med ett facit p\u00e5 plats blir en ny funktion m\u00f6jlig: k\u00f6r samma beskrivning i <em>torrl\u00e4ge<\/em> och rapportera skillnaderna i st\u00e4llet f\u00f6r att \u00e5tg\u00e4rda dem. En avdriftskontroll.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Det l\u00e5ter som att man bara skickar med en flagga. I praktiken visade det sig att vissa steg inte g\u00e5r att torrk\u00f6ra alls. Att l\u00e4gga upp ett certifikat p\u00e5 en enhet kr\u00e4ver att en tempor\u00e4r fil skapas \u2014 och i torrl\u00e4ge skapas ingen tempor\u00e4r fil, s\u00e5 steget kraschade och tog hela kontrollen med sig.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00e4tt svar var inte att laga tempor\u00e4rfilen utan att inse att <strong>provisionering inte \u00e4r en j\u00e4mf\u00f6relse.<\/strong> Att l\u00e4gga dit ett certifikat \u00e4r en handling, inte ett tillst\u00e5nd att kontrollera. De stegen \u00e4r nu uttryckligen undantagna fr\u00e5n torrl\u00e4get.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Skillnaden mellan &#8221;det h\u00e4r ska se ut s\u00e5 h\u00e4r&#8221; och &#8221;det h\u00e4r ska g\u00f6ras&#8221; \u00e4r v\u00e4rd att g\u00f6ra explicit i vilken automatisering som helst. Blandar man ihop dem f\u00e5r man antingen avdrift man inte kan \u00e5tg\u00e4rda eller \u00e5tg\u00e4rder som utf\u00f6rs n\u00e4r man bara t\u00e4nkte titta.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pricken som inte kunde bli r\u00f6d<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Det b\u00e4sta felet i hela projektet var ett gr\u00e4nssnittsfel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En anv\u00e4ndare k\u00f6rde en avdriftskontroll. \u00d6verst i vyn t\u00e4ndes en varning: kritiskt. I listan under lyste enheten som orsakat varningen <em>gr\u00f6n<\/em>. Rimlig fr\u00e5ga: \u00e4r det meningen?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nej. De tv\u00e5 indikatorerna m\u00e4tte helt olika saker. Varningen \u00f6verst r\u00e4knade misslyckade och on\u00e5bara kontroller den senaste timmen \u2014 en \u00e4kta signal. Den gr\u00f6na pricken bredvid enheten betydde bara att enheten <em>hade en konfigurationsfil<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Allts\u00e5: pricken kunde aldrig bli r\u00f6d. Den var gr\u00f6n fr\u00e5n det \u00f6gonblick enheten lades in och skulle f\u00f6rbli gr\u00f6n om enheten brann upp.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Det \u00e4r v\u00e4rre \u00e4n att sakna indikator. En tom plats f\u00e5r en att leta vidare. En gr\u00f6n prick f\u00e5r en att sluta leta. <strong>En indikator som bara kan ha ett v\u00e4rde \u00e4r inte neutral \u2014 den ljuger aktivt, i lugnande riktning.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nu speglar f\u00e4rgen den senaste k\u00f6rningens utfall: r\u00f6tt f\u00f6r misslyckad eller on\u00e5bar, gult f\u00f6r verklig avdrift, gr\u00f6nt f\u00f6r \u00f6verensst\u00e4mmelse, gr\u00e5tt f\u00f6r enheter utan beskrivning. Fyra tillst\u00e5nd i st\u00e4llet f\u00f6r ett, och alla fyra g\u00e5r att n\u00e5.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">L\u00f6senordet som l\u00e5ste ut oss<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L\u00e4nge kopplade automatiken upp med samma administrat\u00f6rskonto som m\u00e4nniskor anv\u00e4nder. Det fungerar tills n\u00e5gon byter l\u00f6senordet p\u00e5 enheten, eller tills automatiken byter det. D\u00e5 st\u00e5r man utanf\u00f6r sin egen router.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u00f6sningen blev ett eget konto per enhet, som bara automatiken anv\u00e4nder. Men det flyttar bara problemet ett steg: vad h\u00e4nder n\u00e4r <em>det<\/em> l\u00f6senordet hamnar i otakt?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Svaret \u00e4r den del jag \u00e4r mest n\u00f6jd med. Misslyckas inloggningen med automatikens konto faller den tillbaka p\u00e5 administrat\u00f6rskontot, <strong>s\u00e4tter om sitt eget l\u00f6senord<\/strong> till det den f\u00f6rv\u00e4ntar sig, och n\u00e4sta k\u00f6rning fungerar. Systemet reparerar sin egen \u00e5tkomst.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Det g\u00f6r tv\u00e5 saker m\u00f6jliga som annars aldrig blir av. \u00d6verg\u00e5ngen fr\u00e5n delade uppgifter till egna kan g\u00f6ras utan en manuell runda p\u00e5 varje enhet. Och rotation blir ofarlig \u2014 det finns en v\u00e4g tillbaka om n\u00e5got g\u00e5r snett mitt i.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Det \u00e4r d\u00e4rf\u00f6r l\u00f6senord s\u00e4llan roteras i verkligheten: inte f\u00f6r att n\u00e5gon tycker det \u00e4r on\u00f6digt, utan f\u00f6r att alla vet vad som h\u00e4nder om det g\u00e5r fel klockan halv fem p\u00e5 en fredag. Bygg \u00e5terh\u00e4mtningen f\u00f6rst, s\u00e5 blir rutinen m\u00f6jlig.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">P\u00e5 flottniv\u00e5 \u00e4r det h\u00e4r skillnaden mellan en policy och en powerpoint. Rotation sker inom ett tidsf\u00f6nster i st\u00e4llet f\u00f6r samtidigt, s\u00e5 att tusen enheter inte byter uppgifter i samma sekund \u2014 och varje enhet som \u00e4nd\u00e5 hamnar snett reparerar sig sj\u00e4lv vid n\u00e4sta k\u00f6rning i st\u00e4llet f\u00f6r att bli ett \u00e4rende. En s\u00e4kerhetsrutin som kr\u00e4ver m\u00e4nsklig handp\u00e5l\u00e4ggning per enhet \u00e4r i praktiken avst\u00e4ngd s\u00e5 fort enheterna blir fler \u00e4n en eftermiddag.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Det som inte gick att bygga blint<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ursprungsplanen var certifikat eller nycklar i st\u00e4llet f\u00f6r l\u00f6senord. Det blev ett unikt l\u00f6senord per enhet \u00e4nd\u00e5.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sk\u00e4let \u00e4r v\u00e4rt att erk\u00e4nna: syntaxen f\u00f6r certifikatbaserad inloggning p\u00e5 en av plattformarna var f\u00f6r invecklad f\u00f6r att skriva utan att sitta framf\u00f6r en riktig enhet och prova. Att bygga den blint hade gett kod som ser rimlig ut och l\u00e5ser ute mig.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ett unikt l\u00f6senord per enhet \u00e4r s\u00e4mre \u00e4n ett certifikat och o\u00e4ndligt mycket b\u00e4ttre \u00e4n ett delat administrat\u00f6rskonto. Att ta \u00e5ttio procent nu och resten n\u00e4r man kan verifiera p\u00e5 riktigt \u00e4r ofta r\u00e4tt beslut \u2014 s\u00e4rskilt n\u00e4r felet i alternativet \u00e4r att f\u00f6rlora \u00e5tkomsten till infrastrukturen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vad labbet bevisar, och vad det inte g\u00f6r<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c4rlighet \u00e4r p\u00e5 sin plats: min egen upps\u00e4ttning \u00e4r en handfull virtuella routrar plus en enhet fr\u00e5n en annan tillverkare. Den bevisar att modellen fungerar och att den \u00e4r korrekt \u2014 inte att den h\u00e5ller vid tusen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Det som \u00e5terst\u00e5r att visa i den storleken \u00e4r m\u00e4tbart och odramatiskt: hur l\u00e5ng tid en fullst\u00e4ndig j\u00e4mf\u00f6relse \u00f6ver hela flottan tar, hur djup k\u00f6n blir vid en bred f\u00f6r\u00e4ndring, och hur mycket historik per enhet som \u00e4r v\u00e4rd att spara. Alla tre \u00e4r kapacitetsfr\u00e5gor med siffror som svar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Och s\u00e5 det som folk underskattar: <strong>vid tusen enheter \u00e4r antalet s\u00e4llan det sv\u00e5ra. Antalet dialekter \u00e4r det.<\/strong> Varje tillverkare har sin egen syntax, sina egna egenheter kring vad som g\u00e5r att \u00e4ndra utan omstart, och sina egna s\u00e4tt att svara ov\u00e4ntat. Tusen enheter av samma modell \u00e4r ett skript. Tusen enheter av tolv modeller \u00e4r ett produktarbete \u2014 och det \u00e4r d\u00e4r kostnaden faktiskt ligger.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">S\u00e5 vet du att det funkar<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u00c4ndra n\u00e5got direkt p\u00e5 en enhet, med flit.<\/strong> K\u00f6r sedan avdriftskontrollen. Syns \u00e4ndringen som gul, fungerar facitet. Syns den inte kontrollerar du inte det du tror.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>K\u00f6r om samma beskrivning tv\u00e5 g\u00e5nger.<\/strong> Andra k\u00f6rningen ska rapportera noll \u00e4ndringar. G\u00f6r den inte det \u00e4r beskrivningen inte idempotent, och d\u00e5 kan den inte k\u00f6ras ofta \u2014 och det som inte k\u00f6rs ofta k\u00f6rs aldrig.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sabotera \u00e5tkomsten.<\/strong> \u00c4ndra automatikens l\u00f6senord p\u00e5 enheten och k\u00f6r igen. Reparerar den sig sj\u00e4lv \u00e4r rotationen ofarlig. G\u00f6r den inte det kommer ingen att v\u00e5ga rotera, och funktionen \u00e4r i praktiken avst\u00e4ngd.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vad jag tar med mig<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ett facit \u00e4r billigt att inf\u00f6ra och dyrt att inf\u00f6ra halvv\u00e4gs. Halvv\u00e4gs betyder att vissa \u00e4ndringar g\u00e5r genom filen och andra direkt p\u00e5 enheten, och d\u00e5 blir filen ett dokument som beskriver hur det s\u00e5g ut ungef\u00e4r \u2014 vilket \u00e4r v\u00e4rre \u00e4n inget, eftersom man litar p\u00e5 det.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Och den bredare l\u00e4xan, som g\u00e4ller varje instrumentpanel jag byggt sedan dess: <strong>fr\u00e5ga alltid vilka v\u00e4rden en indikator kan anta.<\/strong> Kan den bara bli gr\u00f6n \u00e4r den inte en indikator. Den \u00e4r en dekoration som ser ut som ett besked.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>R\u00f6r aldrig routern \u2014 \u00e4ndra filen och k\u00f6r om. Om facit f\u00f6r n\u00e4tverkskonfiguration, de fyra egenskaper som avg\u00f6r om modellen h\u00e5ller vid tusen enheter, och en statusprick som lj\u00f6g i lugnande riktning.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-34","post","type-post","status-publish","format-standard","hentry","category-nat-och-sakerhet"],"_links":{"self":[{"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/posts\/34","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/comments?post=34"}],"version-history":[{"count":1,"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/posts\/34\/revisions"}],"predecessor-version":[{"id":35,"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/posts\/34\/revisions\/35"}],"wp:attachment":[{"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/media?parent=34"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/categories?post=34"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/tags?post=34"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}