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 neko posjeduje

Politika usmjeravanja kernela je stanje, a ne konfiguracija. Živi u pokrenutom sistemu, i sve što razruši interfejs 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 ponovo kada događaj na vezi poništi prethodno stanje. Pravilo deklarisano u njihovoj konfiguraciji se ponovo stvara, dok je pravilo dodano pored njih strani objekat bez vlasnika.

Ta razlika ima ime u networkd-u i vrijedi je pročitati prije nego što bilo šta uključite. Strana pravila se u novijim 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 kontroliše 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 vrijednosti su važne. Jedna odlučuje da li se uklanjaju pravila koja nisu deklarisana 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 aktuelnim izdanjima. Isključivanje obje globalno održava svako strano pravilo živim, što je mnogo šira odluka od deklarisanja 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 šta je postavljeno lokalno i šta je dobavljačev default. Odsustvo je takođe informacija, jer znači da važi kompajlirani default. Zapišite default u svoje bilješke da ga sljedeća osoba ne mora ponovo otkrivati.

Deklarišite 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. Deklarisanje pravila bez ruta daje politiku koja upari saobraćaj i zatim ga odbaci.

Deklarišite rute u istoj datoteci, s dostupnim sljedećim skokovima i ispravnom tablicom. Zadržite prioritet u deklarisanom pravilu da sleti tamo gdje očekujete u uređenoj listi. Pravilo koje dođe do pogrešne tablice ranije nego što je predviđeno mijenja više saobraćaja od usluge koju ste htjeli popraviti. Čitajte fragment ispod kao oblik, a ne kao potpunu datoteku, jer vlasništvo nad interfejsom 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 ponovo 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 pogleda se slažu samo kada je deklaracija bila potpuna.

Odaberite jednog vlasnika za interfejs

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 interfejs i njegova pravila pod dva vlasnika.

Obavite migraciju u jednom potezu: zaustavite stari unit, onemogućite ga, deklarišite interfejs i njegove rute u networkd-u, pa ponovo učitajte. Provjerite da stari unit ne može vratiti se pri podizanju. Preostali unit koji se ponovo aktivira nakon restarta prepisuje stanje koje ste upravo deklarisali. 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 firewall-a, nešto mora postaviti tu oznaku. Pravilo koje upućuje na oznaku koju niko ne postavlja je mrtva konfiguracija koja izgleda namjerno.

Vježbajte događaje životnog ciklusa

Konfiguracija vrijedi onoliko koliko vrijedi njeno ponašanje kroz događaje. Spustite vezu, podignite je, restartujte uslugu i obnovite adresu. Nakon svakog pročitajte listu pravila i sadržaj tablice.

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

Namjeravani rezultat je ista politika s vlasnikom ponovo 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 historije ljuske. Pravilo koje niko ne posjeduje je pravilo koje će se opet izgubiti.

Povezani članci