Pidä ip rule voimassa uudelleenyhdistämisen jälkeen systemd-networkdin kanssa
Kuoressa lisätty ip-sääntö katoaa seuraavassa linkkitapahtumassa. Määrittele sääntö, sen taulu ja reitit systemd-networkdissa, jotta käytäntö luodaan uudelleen.
Lisää käytäntösääntö ip rulella, ja se toimii kunnes linkki katoaa; siinä vaiheessa se on yksinkertaisesti poissa. Mikään ei epäonnistunut äänekkäästi: ytimen tila muuttui, eikä kukaan konfiguraation omistaja tiennyt, että säännön pitäisi olla olemassa. Juuri siinä on koko ero säännön, joka säilyy, ja sellaisen, joka ei säily. systemd-networkd-isännässä ratkaisu on antaa säännölle omistaja sen sijaan, että komento ajettaisiin uudelleen jokaisen uudelleenyhdistämisen jälkeen.
Sääntö on olemassa vain, jos joku omistaa sen
Ytimen reitityskäytäntö on tilaa, ei konfiguraatiota. Se elää käynnissä olevassa järjestelmässä, ja kaikki, mikä repii sen riippuvan rajapinnan, voi viedä sen mukanaan. Kuorikomento muuttaa sitä tilaa eikä jätä mitään merkintää aikomuksesta.
Verkkohallintaohjelmat toimivat toisin päin: ne lukevat konfiguraation, soveltavat sitä ja soveltavat uudelleen, kun linkkitapahtuma tekee edellisen tilan mitättömäksi. Niiden konfiguraatiossa määritelty sääntö luodaan uudelleen, kun taas niiden viereen lisätty sääntö on vieras objekti ilman omistajaa.
Tällä erolla on nimi networkdissa, ja se kannattaa lukea ennen kuin ottaa mitään käyttöön. Vieraat säännöt poistetaan oletuksena uusimmissa versioissa, mikä yllättää ne, jotka olettivat käsinsyötettyjen merkintöjensä säilyvän.
Lue versio ennen kuin luotat asetukseen
Omistuskäyttäytymistä ohjaa networkd.confin asetus, eikä sitä asetusta ole vanhemmissa systemd-julkaisuissa. Tarkista asennettu versio ennen kuin suunnittelet sen varaan, sillä vanhempi isäntä käyttäytyy toisin kuin lukemasi dokumentaatio.
Kaksi arvoa merkitsee. Toinen päättää, poistetaanko säännöt, joita ei ole määritelty networkdin konfiguraatiossa, ja toinen tekee saman reiteille. Molemmat koskevat omistajuutta eivätkä käytännön sisältöä, ja molemmat valitsevat oletuksena tiukemman käyttäytymisen nykyisissä julkaisuissa. Niiden kytkeminen pois päältä kaikkialla pitää jokaisen vieraan säännön elossa, mikä on paljon laajempi päätös kuin yhden halutun VPN-käytännön määrittäminen.
systemctl --version | head -1
networkctl --version | head -1
grep -R "ManageForeign" /etc/systemd/ /usr/lib/systemd/ 2>/dev/null
Se grep kertoo, mitä on asetettu paikallisesti ja mikä on toimittajan oletus. Poissaolo on myös tietoa, sillä se tarkoittaa, että käännetty oletus pätee. Kirjoita oletus muistiinpanoihisi, jotta seuraavan henkilön ei tarvitse löytää sitä uudelleen.
Määrittele sääntö ja taulu, johon se osoittaa
.network-tiedostossa oleva sääntö nimeää taulun, ja se on kaikki, mitä nimi tekee. Se ei luo reittejä siihen tauluun eikä tarkista, ovatko ne järkeviä. Säännön määrittäminen ilman reittejä tuottaa käytännön, joka sovittaa liikenteen ja sitten pudottaa sen.
Määrittele reitit samassa tiedostossa, saavutettavilla seuraavilla hypyillä ja oikealla taululla. Pidä prioriteetti määritellyssä säännössä, jotta se osuu järjestetyssä luettelossa sinne, minne odotat. Sääntö, joka osuu väärään tauluun aikaisemmin kuin oli tarkoitus, muuttaa enemmän liikennettä kuin palvelu, jonka halusit korjata. Lue alla oleva katkelma muotona äläkä täydellisenä tiedostona, sillä rajapinnan omistajuuden ja yhteyden loppuosan on yhä oltava läsnä.
[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
Lataa sitten uudelleen ja lue ytimen tila tiedoston sijaan. Puhtaasti jäsennetty konfiguraatio voi silti tuottaa säännön, jota et tarkoittanut, ja molemmat näkymät vastaavat toisiaan vain, kun määrittely oli täydellinen.
Valitse rajapinnalle yksi omistaja
Kaksi hallintaohjelmaa yhdessä tunnelissa tuottavat kiistan, joka näyttää virheeltä molemmissa. Olemassa olevan wg-quick-asetuksen tuominen networkdiin on migraatio eikä lisäys, ja molempien ajaminen jättää rajapinnan ja sen säännöt kahden omistajan alle.
Tee migraatio yhdellä kertaa: pysäytä vanha yksikkö, poista se käytöstä, määrittele rajapinta ja sen reitit networkdissa ja lataa sitten uudelleen. Tarkista, ettei vanha yksikkö voi palata käynnistyksessä. Jäljelle jäänyt yksikkö, joka aktivoituu uudelleen uudelleenkäynnistyksen jälkeen, kirjoittaa yli tilan, jonka juuri määrittelit. Pidä vanha konfiguraatiotiedosto, kunnes uusi on kestänyt uudelleenyhdistämisen, ja poista se sitten käytöstä.
Merkinnän omistajuus ansaitsee saman huolen: jos sääntö vastaa palomuurin merkintää, jonkin täytyy asettaa se merkintä. Sääntö, joka viittaa merkintään, jota kukaan ei aseta, on kuollut konfiguraatio, joka näyttää tahalliselta.
Harjoittele elinkaaren tapahtumat
Konfiguraatio on vain niin hyvä kuin sen käyttäytyminen tapahtumien yli. Ota linkki alas, nosta se, käynnistä palvelu uudelleen ja uusi osoite. Lue jokaisen jälkeen sääntöluettelo ja taulun sisältö.
sudo networkctl reload
ip rule show
ip route show table 100
sudo systemctl restart systemd-networkd
Tarkoitettu tulos on sama omistettu käytäntö uudelleen luotuna ja vanhentunut tila poistettuna, mikä on kestävämpää kuin kuorisäännön lisääminen uudelleen jokaisen uudelleenyhdistämisen jälkeen. Pidä muutosrekisterissä yksi rivi, joka nimeää säännön omistavan tiedoston ja sitä tukevan version. Silloin seuraava insinööri löytää käytännön etsimättä kuorihistoriaa. Sääntö, jota kukaan ei omista, on sääntö, joka häviää taas.