Naj pravilo ip preživi ponovno povezavo s systemd-networkd
Pravilo ip iz lupine izgine ob naslednjem dogodku povezave. Deklarirajte pravilo, njegovo tabelo in poti v systemd-networkd, da se bo politika znova ustvarila.
Dodajte pravilo politike z ip rule in deluje, dokler povezava ne izgine; v tistem trenutku ga preprosto ni več. Nič ni glasno spodletelo: stanje jedra se je spremenilo in noben lastnik konfiguracije ni vedel, da naj bi pravilo obstajalo. To je vsa razlika med pravilom, ki preživi, in takim, ki ne. Na gostitelju s systemd-networkd je rešitev, da pravilu daste lastnika, namesto da bi ukaz znova zagnali po vsaki ponovni povezavi.
Pravilo obstaja le, če ga nekdo ima v lasti
Usmerjevalna politika jedra je stanje, ne konfiguracija. Živi v delujočem sistemu in vse, kar poruši vmesnik, od katerega je odvisna, jo lahko odnese s seboj. Ukaz v lupini spremeni to stanje in ne pusti nobenega zapisa o nameri.
Upravitelji omrežja delujejo obratno: berejo konfiguracijo, jo uporabijo in jo znova uporabijo, ko dogodek povezave razveljavi prejšnje stanje. Pravilo, deklarirano v njihovi konfiguraciji, se znova ustvari, medtem ko je pravilo, dodano ob njih, tuj predmet brez lastnika.
Ta razlika ima ime v networkd in vredno jo je prebrati, preden karkoli omogočite. Tuja pravila se v novejših različicah privzeto odstranijo, kar preseneti tiste, ki so pričakovali, da bodo njihovi ročni vnosi ostali.
Preberite različico, preden zaupate nastavitvi
Vedenje lastništva nadzoruje nastavitev v networkd.conf in te nastavitve v starejših izdajah systemd ni. Preverite nameščeno različico, preden oblikujete okoli nje, ker se starejši gostitelj obnaša drugače kot dokumentacija, ki jo berete.
Pomembni sta dve vrednosti. Ena odloča, ali se odstranijo pravila, ki niso deklarirana v konfiguraciji networkd, druga pa enako stori za poti. Obe se nanašata na lastništvo in ne na vsebino politike, obe pa v trenutnih izdajah privzeto izbereta strožje vedenje. Če ju globalno izklopite, ostane vsako tuje pravilo živo, kar je veliko širša odločitev kot deklarirati eno želeno politiko VPN.
systemctl --version | head -1
networkctl --version | head -1
grep -R "ManageForeign" /etc/systemd/ /usr/lib/systemd/ 2>/dev/null
Ta grep vam pove, kaj je nastavljeno lokalno in kakšna je privzeta vrednost ponudnika. Tudi odsotnost je informacija, ker pomeni, da velja prevedena privzeta vrednost. Zapišite jo v svoje zapiske, da je naslednja oseba ne bo morala znova odkriti.
Deklarirajte pravilo in tabelo, na katero kaže
Pravilo v datoteki .network poimenuje tabelo in to je vse, kar ime naredi. Ne ustvari poti v tej tabeli in ne preveri, ali imajo smisel. Če pravilo deklarirate brez poti, dobite politiko, ki promet ujame in ga nato zavrže.
Deklarirajte poti v isti datoteki, z dosegljivimi naslednjimi skoki in pravo tabelo. Obdržite prioriteto v deklariranem pravilu, da pristane tam, kjer pričakujete na urejenem seznamu. Pravilo, ki doseže napačno tabelo prej, kot je bilo predvideno, spremeni več prometa kot storitev, ki ste jo hoteli popraviti. Spodnji odlomek berite kot obliko in ne kot celotno datoteko, ker morata biti lastništvo vmesnika in preostanek povezave še vedno prisotna.
[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
Nato znova naložite in preberite stanje jedra namesto datoteke. Konfiguracija, ki se je čisto razčlenila, lahko še vedno ustvari pravilo, ki ga niste nameravali, in oba pogleda se ujemata le, kadar je bila deklaracija popolna.
Izberite enega lastnika vmesnika
Dva upravitelja na enem tunelu ustvarita spor, ki je videti kot napaka v obeh. Uvoz obstoječe nastavitve wg-quick v networkd je selitev in ne dodatek, in če tečeta oba, ostaneta vmesnik in njegova pravila pod dvema lastnikoma.
Selitev opravite v enem prehodu: ustavite staro enoto, jo onemogočite, deklarirajte vmesnik in njegove poti v networkd ter nato znova naložite. Preverite, da se stara enota ob zagonu ne more vrniti. Preostala enota, ki se po ponovnem zagonu znova aktivira, prepiše stanje, ki ste ga pravkar deklarirali. Ohranite staro konfiguracijsko datoteko, dokler nova ne preživi ponovne povezave, nato jo upokojite.
Lastništvo oznake si zasluži enako skrb: če se pravilo ujema z oznako požarnega zidu, mora nekaj to oznako nastaviti. Pravilo, ki se sklicuje na oznako, ki je nihče ne nastavi, je mrtva konfiguracija, ki je videti namerna.
Vadite dogodke življenjskega cikla
Konfiguracija je vredna toliko, kolikor je vredno njeno vedenje skozi dogodke. Spustite povezavo, jo dvignite, znova zaženite storitev in obnovite naslov. Po vsakem od tega preberite seznam pravil in vsebino tabele.
sudo networkctl reload
ip rule show
ip route show table 100
sudo systemctl restart systemd-networkd
Predvideni rezultat je ista politika z lastnikom, znova ustvarjena, in zastarelo stanje, upokojeno, kar je trajnejše od ponovnega dodajanja pravila iz lupine po vsaki povezavi. V dnevniku sprememb ohranite eno vrstico, ki poimenuje datoteko, ki ima pravilo v lasti, in različico, ki ga podpira. Takrat bo naslednji inženir našel politiko, ne da bi brskal po zgodovini lupine. Pravilo, ki ga nihče nima v lasti, je pravilo, ki bo znova izgubljeno.