Lai ip rule izturētu atkārtotu savienojumu ar systemd-networkd
No čaulas pievienots ip noteikums pazūd nākamajā saites notikumā. Deklarējiet noteikumu, tā tabulu un maršrutus systemd-networkd, lai politika tiktu izveidota no jauna.
Pievienojiet politikas noteikumu ar ip rule, un tas darbojas, līdz saite pazūd; tajā brīdī tā vienkārši vairs nav. Nekas skaļi neizgāzās: kodola stāvoklis mainījās, un neviens konfigurācijas īpašnieks nezināja, ka noteikumam jābūt. Tā ir visa atšķirība starp noteikumu, kas iztur, un tādu, kas neiztur. Uz resursdatora ar systemd-networkd risinājums ir dot noteikumam īpašnieku, nevis atkārtoti palaist komandu pēc katras atkārtotas savienošanas.
Noteikums pastāv tikai tad, ja kādam tas pieder
Kodola maršrutēšanas politika ir stāvoklis, nevis konfigurācija. Tā dzīvo darbojošā sistēmā, un viss, kas sagrauj saskarni, no kuras tā atkarīga, var to aiznest līdzi. Čaulas komanda maina šo stāvokli un neatstāj nekādu nodoma ierakstu.
Tīkla pārvaldnieki strādā otrādi: tie lasa konfigurāciju, piemēro to un piemēro vēlreiz, kad saites notikums padara iepriekšējo stāvokli nederīgu. Viņu konfigurācijā deklarētais noteikums tiek izveidots no jauna, bet viņu blakus pievienotais noteikums ir svešs objekts bez īpašnieka.
Šai atšķirībai networkd ir nosaukums, un to ir vērts izlasīt pirms kaut kā iespējošanas. Jaunākajās versijās svešie noteikumi pēc noklusējuma tiek noņemti, kas pārsteidz tos, kuri gaidīja, ka viņu manuālie ieraksti paliks.
Izlasiet versiju, pirms uzticaties iestatījumam
Īpašnieka uzvedību kontrolē iestatījums networkd.conf, un šis iestatījums vecākās systemd versijās nav. Pārbaudiet instalēto versiju, pirms projektējat ap to, jo vecāks resursdators uzvedas citādi nekā dokumentācija, ko lasāt.
Divi lielumi ir svarīgi. Viens nosaka, vai tiek noņemti noteikumi, kas nav deklarēti networkd konfigurācijā, bet otrs dara to pašu maršrutiem. Abi attiecas uz īpašumtiesībām, nevis uz politikas saturu, un abi pašreizējās versijās pēc noklusējuma izvēlas stingrāku uzvedību. To izslēgšana visur saglabā dzīvu katru svešo noteikumu, kas ir daudz plašāks lēmums nekā deklarēt vienu vēlamu VPN politiku.
systemctl --version | head -1
networkctl --version | head -1
grep -R "ManageForeign" /etc/systemd/ /usr/lib/systemd/ 2>/dev/null
Šis grep pasaka, kas ir iestatīts lokāli un kāda ir piegādātāja noklusējuma vērtība. Arī neesamība ir informācija, jo tā nozīmē, ka darbojas kompilētā noklusējuma vērtība. Pierakstiet to savās piezīmēs, lai nākamajai personai tā nav jāatklāj no jauna.
Deklarējiet noteikumu un tabulu, uz kuru tas norāda
Noteikums .network failā nosauc tabulu, un tas ir viss, ko dara nosaukums. Tas neveido maršrutus šajā tabulā un nepārbauda, vai tiem ir jēga. Deklarējot noteikumu bez maršrutiem, tiek iegūta politika, kas saskaņo trafiku un pēc tam to nomet.
Deklarējiet maršrutus tajā pašā failā, ar sasniedzamiem nākamajiem lēcieniem un pareizo tabulu. Saglabājiet prioritāti deklarētajā noteikumā, lai tas nonāktu tur, kur gaidāt sakārtotajā sarakstā. Noteikums, kas sasniedz nepareizo tabulu agrāk nekā paredzēts, maina vairāk trafika nekā pakalpojums, ko gribējāt salabot. Lasiet zemāk esošo fragmentu kā formu, nevis kā pilnu failu, jo saskarnes īpašumtiesībām un pārējam savienojumam joprojām jābūt.
[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
Pēc tam ielādējiet no jauna un lasiet kodola stāvokli, nevis failu. Kārtīgi parsēta konfigurācija joprojām var radīt noteikumu, kuru neplānojāt, un abi skati sakrīt tikai tad, kad deklarācija bija pilnīga.
Izvēlieties vienu saskarnes īpašnieku
Divi pārvaldnieki vienā tunelī rada strīdu, kas abos izskatās kā kļūda. Esošas wg-quick konfigurācijas importēšana networkd ir migrācija, nevis papildinājums, un abu darbināšana atstāj saskarni un tās noteikumus divu īpašnieku varā.
Veiciet migrāciju vienā piegājienā: apturiet veco vienību, atspējojiet to, deklarējiet saskarni un tās maršrutus networkd, pēc tam ielādējiet no jauna. Pārbaudiet, vai vecā vienība nevar atgriezties startēšanas laikā. Palikusī vienība, kas pēc pārstartēšanas atkal aktivizējas, pārraksta stāvokli, kuru tikko deklarējāt. Saglabājiet veco konfigurācijas failu, līdz jaunais iztur atkārtotu savienojumu, un pēc tam atsakieties no tā.
Atzīmes īpašumtiesības ir pelnījušas tādu pašu rūpību: ja noteikums atbilst ugunsmūra atzīmei, kaut kam šī atzīme ir jāiestata. Noteikums, kas atsaucas uz atzīmi, kuru neviens neiestata, ir mirusi konfigurācija, kas izskatās tīši veidota.
Praktizējiet dzīves cikla notikumus
Konfigurācija ir tik laba, cik laba ir tās uzvedība notikumu gaitā. Nolaidiet saiti, paceliet to, restartējiet pakalpojumu un atjaunojiet adresi. Pēc katra izlasiet noteikumu sarakstu un tabulas saturu.
sudo networkctl reload
ip rule show
ip route show table 100
sudo systemctl restart systemd-networkd
Vēlamais rezultāts ir tā pati politika ar īpašnieku, izveidota no jauna, un novecojis stāvoklis, no kura atsakās, un tas ir noturīgāk nekā pēc katras atkārtotas savienošanas atkal pievienot čaulas noteikumu. Saglabājiet vienu rindu izmaiņu žurnālā, kurā nosaukts noteikumu īpašošais fails un to atbalstošā versija. Tad nākamais inženieris varēs atrast politiku, nemeklējot čaulas vēsturē. Noteikums, kas nevienam nepieder, ir noteikums, kas atkal tiks pazaudēts.