Pridėkite politikos taisyklę su ip rule ir ji veikia tol, kol sąsaja dingsta; tuo metu jos tiesiog nėra. Niekas garsiai nesugedo: branduolio būsena pasikeitė, ir nė vienas konfigūracijos savininkas nežinojo, kad taisyklė turėtų egzistuoti. Tai ir yra visas skirtumas tarp taisyklės, kuri išlieka, ir tokios, kuri neišlieka. Hoste su systemd-networkd sprendimas yra duoti taisyklei savininką, o ne kartoti komandą po kiekvieno prisijungimo iš naujo.

Taisyklė egzistuoja tik tada, kai kas nors ją valdo

Branduolio maršrutizavimo politika yra būsena, o ne konfigūracija. Ji gyvena veikiančioje sistemoje, ir viskas, kas sugriauna sąsają, nuo kurios ji priklauso, gali ją pasiimti su savimi. Apvalkalo komanda pakeičia tą būseną ir nepalieka jokio ketinimo įrašo.

Tinklo tvarkyklės dirba atvirkščiai: jos skaito konfigūraciją, taiko ją ir taiko dar kartą, kai saitų įvykis padaro ankstesnę būseną negaliojančią. Jų konfigūracijoje deklaruota taisyklė sukuriama iš naujo, o šalia jų pridėta taisyklė yra svetimas objektas be savininko.

Šis skirtumas networkd turi vardą, ir verta jį perskaityti prieš ką nors įjungiant. Naujesnėse versijose svetimos taisyklės pašalinamos pagal numatytuosius nustatymus, o tai nustebina tuos, kurie tikėjosi, kad jų rankiniai įrašai liks.

Perskaitykite versiją prieš pasitikėdami nustatymu

Savininko elgsena valdoma nustatymu networkd.conf, ir to nustatymo senesnėse systemd versijose nėra. Patikrinkite įdiegtą versiją prieš projektuodami pagal jį, nes senesnis hostas elgiasi kitaip nei dokumentacija, kurią skaitote.

Du reikšmės svarbios. Viena nusprendžia, ar šalinamos taisyklės, nedeklaruotos networkd konfigūracijoje, o kita tą patį daro maršrutams. Abi yra apie nuosavybę, o ne apie politikos turinį, ir abi pagal numatytuosius nustatymus dabartinėse versijose pasirenka griežtesnį elgesį. Išjungus jas visur, kiekviena svetima taisyklė išlieka gyva, o tai yra daug platesnis sprendimas nei deklaruoti vieną pageidaujamą VPN politiką.

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

Tas grep pasako, kas nustatyta vietoje ir kokia yra tiekėjo numatytoji reikšmė. Nebuvimas taip pat yra informacija, nes reiškia, kad galioja sukompiliuota numatytoji reikšmė. Užsirašykite ją savo pastabose, kad kitam žmogui nereikėtų jos vėl atrasti.

Deklaruokite taisyklę ir lentelę, į kurią ji rodo

Taisyklė .network faile įvardija lentelę, ir tai yra viskas, ką daro vardas. Ji nesukuria maršrutų toje lentelėje ir netikrina, ar jie prasmingi. Deklaravus taisyklę be maršrutų gaunama politika, kuri suderina srautą ir tada jį numeta.

Deklaruokite maršrutus tame pačiame faile, su pasiekiamais kitais šuoliais ir tinkama lentele. Išlaikykite prioritetą deklaruotoje taisyklėje, kad ji atsidurtų ten, kur tikitės, surikiuotame sąraše. Taisyklė, kuri pasiekia netinkamą lentelę anksčiau nei numatyta, pakeičia daugiau srauto nei paslauga, kurią norėjote sutvarkyti. Skaitykite žemiau esantį fragmentą kaip formą, o ne kaip pilną failą, nes sąsajos nuosavybė ir likusi jungties dalis dar turi būti.

[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

Tada įkelkite iš naujo ir skaitykite branduolio būseną, o ne failą. Tvarkingai išanalizuota konfigūracija vis tiek gali sukurti taisyklę, kurios nenorėjote, ir abu vaizdai sutampa tik tada, kai deklaracija buvo pilna.

Pasirinkite vieną sąsajos savininką

Du tvarkyklės viename tune sukelia ginčą, kuris abiejose atrodo kaip klaida. Importuoti esamą wg-quick sąranką į networkd yra migracija, o ne papildymas, ir abiem veikiant sąsaja bei jos taisyklės lieka dviejų savininkų valdžioje.

Atlikite migraciją vienu kartu: sustabdykite seną unit, išjunkite jį, deklaruokite sąsają ir jos maršrutus networkd, tada įkelkite iš naujo. Patikrinkite, kad senas unit negali grįžti įkrovimo metu. Likęs unit, kuris po perkrovimo vėl aktyvuojasi, perrašo būseną, kurią ką tik deklaravote. Laikykite seną konfigūracijos failą, kol naujasis išgyvens prisijungimą iš naujo, tada atsisakykite jo.

Žymos nuosavybė nusipelno to paties rūpesčio: jei taisyklė atitinka ugniasienės žymą, kažkas turi tą žymą nustatyti. Taisyklė, kuri nurodo žymą, kurios niekas nenustato, yra negyva konfigūracija, atrodanti tyčinė.

Praktikuokite gyvavimo ciklo įvykius

Konfigūracija verta tiek, kiek vertas jos elgesys per įvykius. Nuleiskite saitą, pakelkite jį, paleiskite paslaugą iš naujo ir atnaujinkite adresą. Po kiekvieno perskaitykite taisyklių sąrašą ir lentelės turinį.

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

Norimas rezultatas yra ta pati valdoma politika, sukurta iš naujo, ir pasenusi būsena, kurios atsisakoma, o tai yra patvariau nei po kiekvieno prisijungimo iš naujo vėl pridėti apvalkalo taisyklę. Laikykite vieną eilutę pakeitimų žurnale, nurodančią failą, kuris valdo taisyklę, ir ją palaikančią versiją. Tada kitas inžinierius galės rasti politiką neieškodamas apvalkalo istorijoje. Taisyklė, kurios niekas nevaldo, yra taisyklė, kuri vėl bus prarasta.

Susiję straipsniai