Aldonu politikan regulon per ip rule, kaj ĝi funkcias ĝis la ligilo malaperos; en tiu momento ĝi simple ne plu ekzistas. Nenio malsukcesis laŭte: la stataĵo de la kerno ŝanĝiĝis, kaj neniu posedanto de agordo sciis, ke la regulo devus ekzisti. Tio estas la tuta diferenco inter regulo, kiu postvivas, kaj unu, kiu ne. Ĉe gastiganto kun systemd-networkd, la solvo estas doni al la regulo posedanton anstataŭ reruli la komandon post ĉiu rekonekto.

Regulo ekzistas nur se iu posedas ĝin

La enkursiga politiko de la kerno estas stato, ne agordo. Ĝi vivas en la kuranta sistemo, kaj ĉio, kio malkonstruas la interfacon, de kiu ĝi dependas, povas forpreni ĝin kun si. Ŝela komando ŝanĝas tiun staton kaj lasas neniun registron pri la intenco.

Retadministriloj laboras la alian vojon: ili legas agordon, aplikas ĝin kaj reapplikas ĝin, kiam ligila evento malvalidigas la antaŭan staton. Regulo deklarata en ilia agordo estas rekreiata, dum regulo aldonita apud ili estas fremda objekto sen posedanto.

Tiu distingo havas nomon en networkd, kaj indas legi ĝin antaŭ ol ŝalti ion ajn. Fremdaj reguloj estas forigataj defaŭlte en lastatempaj versioj, kio surprizas tiujn, kiuj atendis, ke iliaj permanaj enskriboj restos.

Legu la version antaŭ ol fidi agordon

La posedkonduto estas regata de agordo en networkd.conf, kaj tiu agordo ne ekzistas en pli malnovaj eldonoj de systemd. Kontrolu la instalitan version antaŭ ol projektado ĉirkaŭ ĝi, ĉar pli malnova gastiganto kondutas sin alie ol la dokumentaro, kiun vi legas.

Du valoroj gravas. Unu decidas, ĉu reguloj ne deklaritaj en la networkd-agordo estas forigataj, kaj la alia faras la samon por itineroj. Ambaŭ temas pri posedado, ne pri la enhavo de la politiko, kaj ambaŭ defaŭlte elektas la pli rigoran konduton en nunaj eldonoj. Malŝalti ilin tutmonde konservas vivaj ĉiujn fremdajn regulojn, kio estas multe pli vasta decido ol deklari unu celitan VPN-politikon.

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

Tiu grep diras al vi, kio estas agordita loke kaj kio estas la defaŭlto de la vendisto. Ankaŭ foresto estas informo, ĉar ĝi signifas, ke validas la kompilita defaŭlto. Skribu la defaŭlton en viajn notojn, por ke la sekva persono ne devu retrovigi ĝin.

Deklaru la regulon kaj la tabelon, kiun ĝi montras

Regulo en .network-dosiero nomas tabelon, kaj tio estas ĉio, kion nomo faras. Ĝi ne kreas la itinerojn en tiu tabelo kaj ne kontrolas, ĉu ili havas sencon. Deklari la regulon sen la itineroj produktas politikon, kiu kongruigas trafikon kaj poste forĵetas ĝin.

Deklaru la itinerojn en la sama dosiero, kun atingeblaj sekvaj saltoj kaj la ĝusta tabelo. Konservu la prioritaton en la deklarita regulo, por ke ĝi alteriĝu tie, kie vi atendas, en la ordigita listo. Regulo, kiu atingas la malĝustan tabelon pli frue ol celite, ŝanĝas pli da trafiko ol la servo, kiun vi volis ripari. Legu la fragmenton sube kiel formon, ne kiel kompletan dosieron, ĉar la posedado de la interfaco kaj la resto de la konekto ankoraŭ devas ĉeesti.

[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

Poste reŝargu kaj relegu la staton de la kerno anstataŭ la dosieron. Agordo, kiu analiziĝis pure, ankoraŭ povas produkti regulon, kiun vi ne intencis, kaj la du vidpunktoj kongruas nur kiam la deklaro estis kompleta.

Elektu unu posedanton por la interfaco

Du administriloj sur unu tunelo produktas disputon, kiu aspektas kiel cimo en ambaŭ. Enporti ekzistantan wg-quick-agordon en networkd estas migrado, ne aldono, kaj ruli ambaŭ lasas la interfacon kaj ĝiajn regulojn sub du posedantoj.

Faru la migradon en unu fojo: haltigu la malnovan unuon, malŝaltu ĝin, deklaru la interfacon kaj ĝiajn itinerojn en networkd, poste reŝargu. Kontrolu, ke la malnova unuo ne povas reveni ĉe la lanĉo. Restinta unuo, kiu reaktiviĝas post restartigo, anstataŭigas la staton, kiun vi ĵus deklaris. Konservu la malnovan agordan dosieron ĝis la nova postvivos rekonekton, poste emeritigu ĝin.

La posedado de la marko meritas la saman zorgon: se regulo kongruas kun fajroŝirma marko, io devas agordi tiun markon. Regulo, kiu referencas markon, kiun neniu agordas, estas morta agordo, kiu aspektas intenca.

Ekzercu la vivciklajn eventoj

Agordo valoras tiom, kiom ĝia konduto tra eventoj. Mallevu la ligilon, relevu ĝin, restartigu la servon kaj renovigu la adreson. Post ĉiu el ili, legu la reguloliston kaj la enhavon de la tabelo.

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

La celita rezulto estas la sama posedata politiko rekreiata kaj la malaktuala stato emeritigita, kio estas pli daŭra ol realdoni ŝelan regulon post ĉiu rekonekto. Konservu unu linion en la ŝanĝprotokolo, kiu nomas la dosieron posedantan la regulon kaj la version, kiu subtenas ĝin. Tiam la sekva inĝeniero povas trovi la politikon sen serĉi ŝelan historion. Regulo, kiun neniu posedas, estas regulo, kiu denove perdiĝos.

Rilataj artikoloj