Lit ip rule in werferbining mei systemd-networkd oerlibje
In ip-regel út 'e shell ferdwynt by de folgjende linkbarren. Ferkaarje de regel, syn tabel en syn rûtes yn systemd-networkd, sadat it belied opnij oanmakke wurdt.
Foegje in beliedsregel ta mei ip rule, en hy wurket oant de link fuortgiet; op dat stuit is er gewoan fuort. Neat mislearre lûd: de kernelsteat feroare, en gjin ien konfiguraasje-eigner wist dat de regel bestean moast. Dat is it hiele ferskil tusken in regel dy't oerlibbet en ien dy't dat net docht. Op in host mei systemd-networkd is de oplossing om de regel in eigner te jaan ynstee fan it kommando nei elke werferbining op 'e nij te draaien.
In regel bestiet allinnich as immen him besit
Kernel-rûtebelied is steat, net konfiguraasje. Hy libbet yn it draaiende systeem, en alles wat de ynterface sloopt dêr't er fan ôfhinklik is, kin him meinimme. In shellkommando feroaret dy steat en lit gjin ferslach fan 'e bedoeling efter.
Netwurkbehearders wurkje oarsom: se lêze konfiguraasje, passe dy ta en passe dy opnij ta as in linkbarren de foarige steat ûnjildich makket. In regel dy't yn har konfiguraasje ferklearre is, wurdt opnij oanmakke, wylst in regel dy't njonken har tafoege is in frjemd objekt sûnder eigner is.
Dat ûnderskie hat in namme yn networkd, en it is de muoite wurdich om it te lêzen foardat jo wat ynskeakelje. Frjemde regels wurde yn resinte ferzjes standert fuortsmiten, wat minsken ferrast dy't ferwachte dat har hânmjittige ynfieringen bliuwe soene.
Lês de ferzje foardat jo in ynstelling fertrouwe
It eignerskipgedrach wurdt regele troch in ynstelling yn networkd.conf, en dy ynstelling bestiet net yn âldere systemd-útjeften. Kontrolearje de ynstallearre ferzje foardat jo dêromhinne ûntwerpe, want in âldere host gedraacht him oars as de dokumintaasje dy't jo lêze.
Twa wearden binne fan belang. Ien beslút oft regels dy't net yn 'e networkd-konfiguraasje ferklearre binne fuortsmiten wurde, en de oare docht itselde foar rûtes. Beide geane oer eignerskip en net oer de ynhâld fan it belied, en beide kieze standert it strange gedrach yn 'e hjoeddeistige útjeften. Se globaal útskeakelje hâldt elke frjemde regel libben, wat in folle breder beslút is as ien bedoeld VPN-belied ferklearje.
systemctl --version | head -1
networkctl --version | head -1
grep -R "ManageForeign" /etc/systemd/ /usr/lib/systemd/ 2>/dev/null
Dy grep fertelt jo wat lokaal set is en wat de standert fan 'e leveransier is. Ofwêzigens is ek ynformaasje, want it betsjut dat de kompilearre standert jildt. Skriuw de standert yn jo notysjes, sadat de folgjende persoan him net opnij ûntdekke hoecht.
Ferklearje de regel en de tabel dêr't er nei wiist
In regel yn in .network-bestân neamt in tabel, en dat is alles wat in namme docht. Hy makket de rûtes yn dy tabel net oan, en hy kontrolearret net oft se sin meitsje. De regel sûnder de rûtes ferklearje leveret in belied dat ferkear matcht en it dan falle lit.
Ferklearje de rûtes yn itselde bestân, mei berikbere folgjende sprongen en de goede tabel. Hâld de prioriteit yn 'e ferklearre regel, sadat er lânet dêr't jo ferwachtsje yn 'e oardere list. In regel dy't earder as bedoeld by de ferkearde tabel útkomt, feroaret mear ferkear as de tsjinst dy't jo reparearje woene. Lês it fragmint hjirûnder as in foarm en net as in folslein bestân, want ynterface-eignerskip en de rest fan 'e ferbining moatte der noch wêze.
[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
Laad dan opnij en lês de kernelsteat werom, net it bestân. In konfiguraasje dy't skjin parst is, kin dochs in regel opleverje dy't jo net bedoelden, en de beide bylden komme allinnich oerien as de ferklearring folslein wie.
Kies ien eigner foar de ynterface
Twa behearders op ien tunnel jouwe in striid dy't yn beide op in bug liket. In besteande wg-quick-opsaet yn networkd ymportearje is in migraasje en net in tafoeging, en beide draaie lit de ynterface en syn regels ûnder twa eigners.
Doch de migraasje yn ien kear: stop de âlde unit, skeakelje him út, ferklearje de ynterface en syn rûtes yn networkd, en laad dan opnij. Kontrolearje dat de âlde unit by it opstarten net weromkomme kin. In oerbliuwende unit dy't nei in werstart wer aktivearret, oerskriuwt de steat dy't jo krekt ferklearre hawwe. Hâld it âlde konfiguraasjebestân oant it nije in werferbining oerlibbe hat, en set it dan ôf.
Eignerskip fan 'e mark fertsjinnet deselde soarch: as in regel mei in firewallmark oerienkomt, moat wat dy mark sette. In regel dy't ferwiist nei in mark dy't nimmen set, is deade konfiguraasje dy't opsetlik liket.
Oefenje de libbenssyklusbarrens
Konfiguraasje is mar sa goed as syn gedrach oer barrens. Nim de link del, bring him omheech, werstart de tsjinst en fernij it adres. Lês nei elk fan dy de regellist en de ynhâld fan 'e tabel.
sudo networkctl reload
ip rule show
ip route show table 100
sudo systemctl restart systemd-networkd
It bedoelde resultaat is itselde belied mei eigner opnij oanmakke en ferâldere steat ôfset, wat duorsumer is as nei elke werferbining in shellregel wer ta te foegjen. Hâld ien rigel yn it feroaringsferslach dy't it bestân neamt dat de regel besit en de ferzje dy't him stipet. Dan kin de folgjende yngenieur it belied fine sûnder in shellskiednis te sykjen. In regel dy't nimmen besit, is in regel dy't wer ferlern giet.