Zadržite ip pravilo nakon ponovnog povezivanja sa systemd-networkd
ip pravilo dodano iz ljuske nestaje pri sljedećem događaju na vezi. Deklarirajte pravilo, njegovu tablicu i rute u systemd-networkd-u da bi se politika ponovno stvorila.
Dodajte pravilo politike naredbom ip rule i ono radi dok veza ne nestane, a u tom trenutku ga jednostavno nema. Ništa nije glasno palo: stanje kernela se promijenilo, a nijedan vlasnik konfiguracije nije znao da pravilo treba postojati. To je cijela razlika između pravila koje preživi i onoga koje ne. Na hostu sa systemd-networkd rješenje je dati pravilu vlasnika, a ne ponavljati naredbu nakon svakog povezivanja.
Pravilo postoji samo ako ga netko posjeduje
Politika usmjeravanja kernela je stanje, a ne konfiguracija. Živi u pokrenutom sustavu, i sve što razruši sučelje o kojem ovisi može ga ponijeti sa sobom. Naredba u ljusci mijenja to stanje i ne ostavlja zapis o namjeri.
Mrežni menadžeri rade obrnuto: čitaju konfiguraciju, primjenjuju je i primjenjuju je ponovno kada događaj na vezi poništi prethodno stanje. Pravilo deklarirano u njihovoj konfiguraciji ponovno se stvara, dok je pravilo dodano pokraj njih strani objekt bez vlasnika.
Ta razlika ima ime u networkd-u i vrijedi je pročitati prije nego što bilo što uključite. Strana pravila u novijim se verzijama podrazumijevano uklanjaju, što iznenadi one koji su očekivali da će njihovi ručni unosi ostati.
Pročitajte verziju prije nego što se pouzdate u postavku
Ponašanje vlasništva kontrolira postavka u networkd.conf, a ta postavka ne postoji u starijim izdanjima systemd-a. Provjerite instaliranu verziju prije nego što pravite dizajn oko nje, jer se stariji host ponaša drukčije od dokumentacije koju čitate.
Dvije su vrijednosti važne. Jedna odlučuje uklanjaju li se pravila koja nisu deklarirana u networkd konfiguraciji, a druga radi isto za rute. Obje se tiču vlasništva, a ne sadržaja politike, i obje podrazumijevano daju strože ponašanje u aktualnim izdanjima. Isključivanje obje globalno održava svako strano pravilo živim, što je mnogo šira odluka od deklariranja jedne željene VPN politike.
systemctl --version | head -1
networkctl --version | head -1
grep -R "ManageForeign" /etc/systemd/ /usr/lib/systemd/ 2>/dev/null
Taj grep vam kaže što je postavljeno lokalno i što je dobavljačev default. Odsutnost je također informacija, jer znači da vrijedi kompilirani default. Zapišite default u svoje bilješke da ga sljedeća osoba ne mora ponovno otkrivati.
Deklarirajte pravilo i tablicu na koju upućuje
Pravilo u .network datoteci imenuje tablicu i to je sve što ime čini. Ono ne stvara rute unutar te tablice i ne provjerava imaju li smisla. Deklariranje pravila bez ruta daje politiku koja upari promet i zatim ga odbaci.
Deklarirajte rute u istoj datoteci, s dostupnim sljedećim skokovima i ispravnom tablicom. Zadržite prioritet u deklariranom pravilu da sleti tamo gdje očekujete u uređenom popisu. Pravilo koje dođe do pogrešne tablice ranije nego što je predviđeno mijenja više prometa od usluge koju ste htjeli popraviti. Čitajte fragment ispod kao oblik, a ne kao potpunu datoteku, jer vlasništvo nad sučeljem i ostatak veze još moraju biti prisutni.
[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
Zatim ponovno učitajte i očitajte stanje kernela, a ne datoteku. Konfiguracija koja se čisto parsirala ipak može dati pravilo koje niste namjeravali, a dva se pogleda slažu samo kada je deklaracija bila potpuna.
Odaberite jednog vlasnika za sučelje
Dva menadžera na jednom tunelu proizvode sukob koji izgleda kao greška u oba. Uvoz postojećeg wg-quick setupa u networkd je migracija, a ne dodatak, i pokretanje oba ostavlja sučelje i njegova pravila pod dva vlasnika.
Obavite migraciju u jednom potezu: zaustavite stari unit, onemogućite ga, deklarirajte sučelje i njegove rute u networkd-u, pa ponovno učitajte. Provjerite da se stari unit ne može vratiti pri podizanju. Preostali unit koji se ponovno aktivira nakon restarta prepisuje stanje koje ste upravo deklarirali. Držite staru konfiguracijsku datoteku dok nova ne preživi ponovno povezivanje, pa je povucite iz upotrebe.
Vlasništvo nad oznakom zaslužuje istu pažnju: ako pravilo odgovara oznaci vatrozida, nešto mora postaviti tu oznaku. Pravilo koje upućuje na oznaku koju nitko ne postavlja mrtva je konfiguracija koja izgleda namjerno.
Vježbajte događaje životnog ciklusa
Konfiguracija vrijedi onoliko koliko vrijedi njezino ponašanje kroz događaje. Spustite vezu, podignite je, restartajte uslugu i obnovite adresu. Nakon svakog pročitajte popis pravila i sadržaj tablice.
sudo networkctl reload
ip rule show
ip route show table 100
sudo systemctl restart systemd-networkd
Namjeravani je rezultat ista politika s vlasnikom ponovno stvorena i zastarjelo stanje povučeno, što je trajnije od ponovnog dodavanja pravila iz ljuske nakon svakog povezivanja. Držite jedan red u zapisu promjena koji imenuje datoteku koja posjeduje pravilo i verziju koja ga podržava. Tada sljedeći inženjer može naći politiku bez pretraživanja povijesti ljuske. Pravilo koje nitko ne posjeduje pravilo je koje će se opet izgubiti.