Pridajte pravidlo politiky pomocou ip rule a funguje, kým linka nezmizne; v tej chvíli jednoducho nie je. Nič nahlas nezlyhalo: stav jadra sa zmenil a žiadny vlastník konfigurácie nevedel, že pravidlo má existovať. To je celý rozdiel medzi pravidlom, ktoré prežije, a takým, ktoré nie. Na hostiteľovi so systemd-networkd je riešením dať pravidlu vlastníka, nie spúšťať príkaz znova po každom pripojení.

Pravidlo existuje len vtedy, keď ho niekto vlastní

Smerovacia politika jadra je stav, nie konfigurácia. Žije v bežiacom systéme a čokoľvek, čo strhne rozhranie, od ktorého závisí, ho môže vziať so sebou. Príkaz v shelli tento stav mení a nezanecháva žiadny záznam o zámere.

Správcovia siete pracujú opačne: čítajú konfiguráciu, aplikujú ju a znova ju aplikujú, keď udalosť linky zneplatní predchádzajúci stav. Pravidlo deklarované v ich konfigurácii sa znova vytvorí, kým pravidlo pridané vedľa nich je cudzí objekt bez vlastníka.

Tento rozdiel má v networkd meno a stojí za prečítanie, skôr než čokoľvek zapnete. Cudzie pravidlá sa v novších verziách predvolene odstraňujú, čo prekvapí tých, ktorí čakali, že ich ručné záznamy vydržia.

Prečítajte si verziu, kým nastaveniu uveríte

Správanie vlastníctva riadi nastavenie v networkd.conf a toto nastavenie v starších vydaniach systemd neexistuje. Overte nainštalovanú verziu, kým okolo neho budete navrhovať, pretože starší hostiteľ sa správa inak ako dokumentácia, ktorú čítate.

Na dvoch hodnotách záleží. Jedna určuje, či sa odstraňujú pravidlá nedeklarované v konfigurácii networkd, druhá robí to isté pre trasy. Obe sa týkajú vlastníctva, nie obsahu politiky, a obe predvolene na súčasných vydaniach volia prísnejšie správanie. Vypnutie oboch globálne udrží každé cudzie pravidlo živé, čo je oveľa širšie rozhodnutie než deklarovať jednu zamýšľanú politiku VPN.

systemctl --version | head -1
networkctl --version | head -1
grep -R "ManageForeign" /etc/systemd/ /usr/lib/systemd/ 2>/dev/null

Tento grep vám povie, čo je nastavené lokálne a aká je predvolená hodnota dodávateľa. Neprítomnosť je tiež informácia, pretože znamená, že platí skompilovaná predvolená hodnota. Zapíšte si ju do poznámok, aby ju budúci človek nemusel znova objavovať.

Deklarujte pravidlo a tabuľku, na ktorú ukazuje

Pravidlo v súbore .network pomenuje tabuľku a to je všetko, čo meno robí. Nevytvára trasy v tejto tabuľke a nekontroluje, či dávajú zmysel. Deklarácia pravidla bez trás vytvorí politiku, ktorá prevádzku priradí a potom ju zahodí.

Deklarujte trasy v tom istom súbore, s dosiahnuteľnými nasledujúcimi skokmi a správnou tabuľkou. Ponechajte prioritu v deklarovanom pravidle, aby sa v zoradenom zozname umiestnilo tam, kde očakávate. Pravidlo, ktoré dosiahne nesprávnu tabuľku skôr, než bolo zamýšľané, mení viac prevádzky než služba, ktorú ste chceli opraviť. Čítajte fragment nižšie ako tvar, nie ako úplný súbor, pretože vlastníctvo rozhrania a zvyšok spojenia tam stále musia byť.

[RoutingPolicyRule]
Family=ipv4
IPProtocol=tcp
SourcePort=443
Table=100
Priority=1000

[Route]
Destination=10.80.0.0/24
Gateway=10.80.0.1
Table=100

Potom znova načítajte a prečítajte stav jadra, nie súbor. Konfigurácia, ktorá sa čisto naparsovala, môže napriek tomu vytvoriť pravidlo, ktoré ste nezamýšľali, a oba pohľady sa zhodujú len vtedy, keď bola deklarácia úplná.

Vyberte jedného vlastníka rozhrania

Dvaja správcovia na jednom tuneli vyvolajú spor, ktorý vyzerá ako chyba v oboch. Import existujúceho nastavenia wg-quick do networkd je migrácia, nie pridanie, a beh oboch necháva rozhranie a jeho pravidlá pod dvoma vlastníkmi.

Vykonajte migráciu naraz: zastavte starú jednotku, zakážte ju, deklarujte rozhranie a jeho trasy v networkd, potom znova načítajte. Overte, že stará jednotka nemôže pri štarte ožiť. Zvyšková jednotka, ktorá sa po reštarte znova aktivuje, prepíše stav, ktorý ste práve deklarovali. Ponechajte starý konfiguračný súbor, kým nový neprežije opätovné pripojenie, a potom ho vyraďte.

Vlastníctvo značky si zaslúži rovnakú starostlivosť: ak pravidlo zodpovedá značke firewallu, niekto musí tú značku nastaviť. Pravidlo odkazujúce na značku, ktorú nikto nenastavuje, je mŕtva konfigurácia, ktorá vyzerá zámerne.

Nacvičte udalosti životného cyklu

Konfigurácia je len taká dobrá, aké dobré je jej správanie naprieč udalosťami. Zhodte linku, zdvihnite ju, reštartujte službu a obnovte adresu. Po každej z nich prečítajte zoznam pravidiel a obsah tabuľky.

sudo networkctl reload
ip rule show
ip route show table 100
sudo systemctl restart systemd-networkd

Zamýšľaným výsledkom je tá istá politika s vlastníkom znova vytvorená a zastaraný stav vyradený, čo je trvácnejšie než znova pridávať pravidlo zo shellu po každom pripojení. Ponechajte v zázname zmien jeden riadok, ktorý pomenuje súbor vlastniaci pravidlo a verziu, ktorá ho podporuje. Potom ďalší inžinier nájde politiku bez hľadania v histórii shellu. Pravidlo, ktoré nikto nevlastní, je pravidlo, ktoré sa znova stratí.

Súvisiace články