Voeg 'n beleidsreël met ip rule by, en dit werk tot die skakel weggaan; op daardie punt is dit eenvoudig weg. Niks het hardop gefaal nie: die kerntoestand het verander, en geen konfigurasie-eienaar het geweet die reël moes bestaan nie. Dit is die hele verskil tussen 'n reël wat oorleef en een wat nie. Op 'n systemd-networkd-gasheer is die oplossing om die reël 'n eienaar te gee eerder as om die opdrag ná elke herverbinding weer te loop.

'n Reël bestaan net as iemand dit besit

Kernroeteringbeleid is toestand, nie konfigurasie nie. Dit leef in die lopende stelsel, en enigiets wat die koppelvlak afbreek waarvan dit afhang, kan dit saamneem. 'n Doplopdrag verander daardie toestand en laat geen rekord van bedoeling nie.

Netwerkbestuurders werk omgekeerd: hulle lees konfigurasie, pas dit toe en pas dit weer toe wanneer 'n skakelgebeurtenis die vorige toestand ongeldig maak. 'n Reël wat in hulle konfigurasie verklaar word, word herskep, terwyl 'n reël wat langs hulle bygevoeg word 'n vreemde voorwerp sonder eienaar is.

Daardie onderskeid het 'n naam in networkd, en dit is die moeite werd om dit te lees voordat jy enigiets aktiveer. Vreemde reëls word op onlangse weergawes by verstek verwyder, wat mense verras wat verwag het dat hul handmatige inskrywings sou bly.

Lees die weergawe voordat jy 'n instelling vertrou

Die eienaarskapgedrag word deur 'n instelling in networkd.conf beheer, en daardie instelling bestaan nie in ouer systemd-vrystellings nie. Kontroleer die geïnstalleerde weergawe voordat jy daaromheen ontwerp, want 'n ouer gasheer gedra hom anders as die dokumentasie wat jy lees.

Twee waardes maak saak. Een besluit of reëls wat nie in die networkd-konfigurasie verklaar is nie, verwyder word, en die ander doen dieselfde vir roetes. Albei gaan oor eienaarskap eerder as oor beleidsinhoud, en albei is by verstek die strenger gedrag op huidige vrystellings. Om hulle wêreldwyd af te skakel hou elke vreemde reël lewendig, wat 'n baie breër besluit is as om een bedoelde VPN-beleid te verklaar.

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

Daardie grep vertel jou wat plaaslik gestel is en wat die verskaffer se verstek is. Afwesigheid is ook inligting, want dit beteken die saamgestelde verstek geld. Skryf die verstek in jou notas neer sodat die volgende persoon dit nie weer hoef te ontdek nie.

Verklaar die reël en die tabel waarna dit wys

'n Reël in 'n .network-lêer noem 'n tabel, en dit is al wat 'n naam doen. Dit skep nie die roetes in daardie tabel nie, en dit kontroleer nie of hulle sin maak nie. Om die reël sonder die roetes te verklaar lewer 'n beleid wat verkeer pasmaak en dit dan laat val.

Verklaar die roetes in dieselfde lêer, met bereikbare volgende spronge en die regte tabel. Hou die prioriteit in die verklaarde reël sodat dit beland waar jy verwag in die geordende lys. 'n Reël wat die verkeerde tabel vroeër as bedoel bereik, verander meer verkeer as die diens wat jy wou regmaak. Lees die fragment hieronder as 'n vorm, nie as 'n volledige lêer nie, want koppelvlak-eienaarskap en die res van die verbinding moet steeds daar wees.

[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

Laai dan weer en lees die kerntoestand terug, nie die lêer nie. 'n Konfigurasie wat skoon geparseer het, kan steeds 'n reël lewer wat jy nie bedoel het nie, en die twee sienings stem net ooreen wanneer die verklaring volledig was.

Kies een eienaar vir die koppelvlak

Twee bestuurders op een tonnel veroorsaak 'n stryd wat soos 'n fout in albei lyk. Om 'n bestaande wg-quick-opstelling in networkd in te voer is 'n migrasie, nie 'n byvoeging nie, en om albei te laat loop, laat die koppelvlak en sy reëls onder twee eienaars.

Doen die migrasie in een slag: stop die ou eenheid, deaktiveer dit, verklaar die koppelvlak en sy roetes in networkd, laai dan weer. Kontroleer dat die ou eenheid nie by die selflaai kan terugkom nie. 'n Oorblywende eenheid wat ná 'n herlaai heraktiveer, oorskryf die toestand wat jy pas verklaar het. Hou die ou konfigurasielêer totdat die nuwe een 'n herverbinding oorleef het, en trek dit dan terug.

Eienaarskap van die merk verdien dieselfde sorg: as 'n reël aan 'n brandmuurmerk voldoen, moet iets daardie merk stel. 'n Reël wat na 'n merk verwys wat niemand stel nie, is dooie konfigurasie wat opsetlik lyk.

Oefen die lewensiklusgebeurtenisse

Konfigurasie is net so goed soos sy gedrag oor gebeurtenisse. Neem die skakel af, bring dit op, herbegin die diens en hernu die adres. Lees ná elkeen die reëllys en die tabel se inhoud.

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

Die bedoelde resultaat is dieselfde beleid met 'n eienaar wat herskep word en verouderde toestand wat aftree, wat duursamer is as om ná elke herverbinding 'n dopreël weer by te voeg. Hou een reël in die veranderingsrekord wat die lêer noem wat die reël besit en die weergawe wat dit ondersteun. Dan kan die volgende ingenieur die beleid vind sonder om 'n dopgeskiedenis te deursoek. 'n Reël wat niemand besit nie, is 'n reël wat weer verlore sal gaan.

Verwante artikels