Bëje rregullën ip të mbijetojë një rilidhje me systemd-networkd
Një rregull ip e krijuar në shell zhduket në ngjarjen e radhës të lidhjes. Deklaro rregullën, tabelën dhe rrugët e saj në systemd-networkd që politika të rikrijohet.
Shto një rregull politike me ip rule dhe funksionon derisa lidhja të zhduket; në atë moment thjesht nuk është më. Asgjë nuk dështoi me zë: gjendja e kernelit ndryshoi dhe asnjë pronar konfigurimi nuk e dinte se rregulla duhej të ekzistonte. Kjo është e gjithë ndryshimi midis një rregulle që mbijeton dhe një që nuk mbijeton. Në një host me systemd-networkd, zgjidhja është t'i japësh rregullës një pronar, jo të riekzekutosh komandën pas çdo rilidhjeje.
Një rregull ekziston vetëm nëse dikush e zotëron
Politika e rrugëtimit të kernelit është gjendje, jo konfigurim. Jeton në sistemin që punon dhe çdo gjë që shemb ndërfaqen nga e cila varet mund ta marrë me vete. Një komandë në shell ndryshon atë gjendje dhe nuk lë asnjë regjistrim të qëllimit.
Menaxherët e rrjetit punojnë kundër: lexojnë konfigurimin, e zbatojnë dhe e zbatojnë përsëri kur një ngjarje lidhjeje e bën të pavlefshme gjendjen e mëparshme. Një rregull i deklaruar në konfigurimin e tyre rikrijohet, ndërsa një rregull i shtuar pranë tyre është një objekt i huaj pa pronar.
Ky dallim ka një emër në networkd dhe ia vlen të lexohet përpara se të aktivizosh gjë. Rregullat e huaja hiqen si parazgjedhje në versionet e reja, gjë që i befasoi ata që prisnin që shënimet e tyre manuale të mbeteshin.
Lexo versionin përpara se t'i besosh një cilësimi
Sjellja e pronësisë kontrollohet nga një cilësim në networkd.conf dhe ai cilësim nuk ekziston në versionet e vjetra të systemd. Kontrollo versionin e instaluar përpara se të projektoysh rreth tij, sepse një host më i vjetër sillet ndryshe nga dokumentacioni që po lexon.
Dy vlera kanë rëndësi. Njëra vendos nëse rregullat e padeklaruara në konfigurimin e networkd hiqen, tjetra bën të njëjtën gjë për rrugët. Të dyja kanë të bëjnë me pronësinë dhe jo me përmbajtjen e politikës, dhe të dyja si parazgjedhje zgjedhin sjelljen më të rreptë në versionet aktuale. Çaktivizimi i tyre globalisht mban gjallë çdo rregull të huaj, gjë që është një vendim shumë më i gjerë sesa deklarimi i një politike të vetme VPN.
systemctl --version | head -1
networkctl --version | head -1
grep -R "ManageForeign" /etc/systemd/ /usr/lib/systemd/ 2>/dev/null
Ai grep të tregon çfarë është vendosur lokalisht dhe cila është parazgjedhja e furnizuesit. Edhe mungesa është informacion, sepse do të thotë se zbatohet vlera e kompiluar. Shkruaje parazgjedhjen në shënimet e tua, që personi tjetër të mos e zbulojë përsëri.
Deklaro rregullën dhe tabelën ku ajo tregon
Një rregull në një skedar .network emërton një tabelë dhe kaq bën një emër. Nuk i krijon rrugët brenda asaj tabele dhe nuk kontrollon nëse kanë kuptim. Deklarimi i rregullës pa rrugët prodhon një politikë që përputh trafikun dhe pastaj e hedh.
Deklaro rrugët në të njëjtin skedar, me kërcime të radhës të arritshme dhe tabelën e duhur. Mbaj përparësinë në rregullën e deklaruar që të ulet aty ku e pret në listën e renditur. Një rregull që arrin tabelën e gabuar më herët sesa synohej ndryshon më shumë trafik sesa shërbimi që doje të rregulloje. Lexo fragmentin më poshtë si formë dhe jo si skedar të plotë, sepse pronësia e ndërfaqes dhe pjesa tjetër e lidhjes duhet të jenë ende të pranishme.
[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
Pastaj ringarko dhe lexo gjendjen e kernelit në vend të skedarit. Një konfigurim i analizuar pastër mund të prodhojë gjithsesi një rregull që nuk e synoje, dhe të dyja pamjet përputhen vetëm kur deklarimi ishte i plotë.
Zgjidh një pronar të vetëm për ndërfaqen
Dy menaxherë në një tunel prodhojnë një përplasje që duket si defekt në të dyja. Importimi i një konfigurimi wg-quick ekzistues në networkd është migrim dhe jo shtesë, dhe ekzekutimi i të dyjave lë ndërfaqen dhe rregullat e saj nën dy pronarë.
Bëje migrimin me një kalim: ndal njësinë e vjetër, çaktivizoje, deklaro ndërfaqen dhe rrugët e saj në networkd, pastaj ringarko. Kontrollo që njësia e vjetër nuk mund të kthehet në nisje. Një njësi e mbetur që riaktivizohet pas një rindezjeje mbishkruan gjendjen që sapo deklarove. Mbaj skedarin e vjetër të konfigurimit derisa ai i ri të mbijetojë një rilidhje, pastaj tërhiqe.
Pronësia e shenjës meriton të njëjtin kujdes: nëse një rregull përputhet me një shenjë muri zjarri, diçka duhet ta vendosë atë shenjë. Një rregull që i referohet një shenje që askush nuk e vendos është konfigurim i vdekur që duket i qëllimshëm.
Ushtro ngjarjet e ciklit të jetës
Konfigurimi vlen aq sa sjellja e tij ndër ngjarje. Ule lidhjen, ngrije, rindiz shërbimin dhe përtëri adresën. Pas secilës, lexo listën e rregullave dhe përmbajtjen e tabelës.
sudo networkctl reload
ip rule show
ip route show table 100
sudo systemctl restart systemd-networkd
Rezultati i synuar është e njëjta politikë me pronar e rikrijuar dhe gjendja e vjetruar e tërhequr, gjë që është më e qëndrueshme sesa të shtohet përsëri një rregull shell pas çdo rilidhjeje. Mbaj një rresht në regjistrin e ndryshimeve që emërton skedarin pronar të rregullës dhe versionin që e mbështet. Atëherë inxhinieri tjetër mund ta gjejë politikën pa kërkuar në një histori shell. Një rregull që askush nuk e zotëron është një rregull që do të humbasë përsëri.