NMSstate: Et deklarativt nettverkskonfigurasjonsverktøy


Linux-økosystemet gir mange måter å konfigurere nettverk på, inkludert det populære nmtui GUI-verktøyet. Denne veiledningen introduserer enda et nettverkskonfigurasjonsverktøy kjent som NMSstate

NMSstate er en deklarativ nettverksbehandler for å konfigurere nettverk på Linux-verter. Det er et bibliotek som gir et kommandolinjeverktøy som administrerer vertsnettverksinnstillinger. Den administrerer vertsnettverk gjennom en nordgående deklarativ API. På tidspunktet for skriving av denne veiledningen er NetworkManager-demonen den eneste leverandøren som støttes av NMSstate.

I denne veiledningen ser vi på noen av eksempelbrukene til NMSState-verktøyet. For denne guiden vil vi demonstrere dette ved å bruke Fedora Linux.

Nettverksadministrasjon kan ha to tilnærminger – imperativ og deklarativ. I den imperative tilnærmingen definerer du eksplisitt nettverkstilstanden til et grensesnitt ved å kjøre kommandoer på terminalen. Fokuset er på hvordan.

For å få ned et nettverk ved å bruke den imperative tilnærmingen, kjør for eksempel kommandoen:

$ sudo ifconfig enp0s3 down

På den annen side bruker den deklarative tilnærmingen en YAML-fil for å bruke endringene på en konfigurasjon. De fleste DevOps orkestreringsverktøy som Kubernetes bruker denne tilnærmingen til å distribuere pods-applikasjoner ved hjelp av en YAML-fil.

Denne tilnærmingen gir det som ofte refereres til som Infrastructure as Code (IaC) i DevOps-kretser. Dette forbedrer automatiseringen av nettverkskonfigurasjonen på verten og gir en rask og mer pålitelig måte å gjøre flere endringer i et nettverksgrensesnitt med minimale feil.

La oss nå bytte gir og se hvordan du kan bruke NMSState-konfigurasjonsverktøyet til å konfigurere nettverksgrensesnittene dine i Linux.

Trinn 1: Installer NMSState Networking Config Tool

Vi får ballen til å rulle ved å installere Nmstate. Først, sjekk tilgjengeligheten til pakken fra Fedora-depoter som følger:

$ sudo dnf search nmstate

Fra utdataene kan vi se at nettverksadministratoren er tilgjengelig på de offisielle depotene.

Installer deretter NMstate som følger. Dette fungerer på Fedora 31 og senere versjoner.

$ sudo dnf install nmstate

Kommandoen installerer NMSState Network Manager API sammen med andre Python-avhengigheter.

Når installasjonen er fullført, kontroller at nmstate-pakken er installert som følger.

$ rpm -qi nmstate

For RHEL-basert Linux, aktiver først copr-depotet.

$ sudo dnf copr enable nmstate/nmstate-stable

Installer deretter NMstate som følger.

$ sudo dnf install nmstate

Sjekk ut flere instruksjoner om hvordan du installerer NMSate fra kilden.

Når den er installert, kan du sjekke versjonen av NMstate installert som følger.

$ nmstatectl version

1.0.2

Bruker NMSState Configuration Tool i Linux

Når NMstate er installert, la oss komme ned til detaljene for hvordan du kan få mest mulig ut av Network Manager API.

For å se gjeldende nettverkskonfigurasjon av nettverksgrensesnittet, kjør følgende kommando. Her er konfigurasjonen av enp0s3-grensesnittet ditt.

$ nmstatectl show enp0s3

Utgangen er delt inn i 4 forskjellige seksjoner:

  • dns-resolver: Denne delen inneholder navneserverkonfigurasjonen for det aktuelle grensesnittet.
  • ruteregler: Dette angir rutereglene.
  • ruter: Dette inkluderer både dynamiske og statiske ruter.
  • Grensesnitt: Denne delen spesifiserer både ipv4- og ipv6-innstillingene.

Endre nettverkskonfigurasjon i Linux

Du kan bruke NMSState-konfigurasjonsverktøyet til å konfigurere vertene dine til ønsket tilstand ved å bruke enten interaktive eller filbaserte moduser.

  • Interaktiv: Dette redigerer et nettverksgrensesnitt ved å bruke nmstatectl edit-kommandoen. Denne kommandoen åpner et tekstredigeringsprogram som er definert av miljøvariabelen EDITOR. Når endringene er lagret, bruker NMSstate den nye konfigurasjonen umiddelbart med mindre syntaksfeil ble oppdaget.
  • Filbasert: I filbasert modus brukes grensesnittkonfigurasjonen ved å bruke en YAML- eller JSON-fil ved å bruke kommandoen nmstatectl application.

La oss nå skitne i hendene og sjekke ut hvordan du kan endre nettverkskonfigurasjonen ved å bruke NMSate.

Fedora-systemet vårt har to aktive nettverksgrensesnitt med følgende konfigurasjon:

$ ip -br -4 a
lo               UNKNOWN        127.0.0.1/8 
enp0s3           UP             192.168.2.104/24 
enp0s8           UP             192.168.2.103/24 

Vi vil bruke interaktiv modus for å endre MTU (Maximum Transmission Unit) til enp0s3 nettverksgrensesnittet. Som standard er dette satt til 1500 som vist.

$ ifconfig

Vi vil endre dette til 4000. Vi vil gjøre det ved å bruke nmstatectl edit-kommandoen som følger.

$ sudo nmstatectl edit enp0s3

Dette åpner konfigurasjonen i et tekstredigeringsprogram. For vårt tilfelle åpnes den i vim editor. Deretter blar du helt ned og finner mtu-parameteren. Vi vil endre verdien til 4000, akkurat som vi ville redigert en fil i vim. Deretter lagrer vi endringene.

Når du lagrer og avslutter filen, vil du se noe kryptert utgang på terminalen når NMstate lagrer endringene. Ingen inngripen er nødvendig, så bare sitt stille.

La oss nå bekrefte at endringen ble gjort.

$ ifconfig

Fra terminalutgangen kan vi se at vi har endret MTU til 4000 fra standardverdien 1500.

La oss nå endre konfigurasjonen ved å bruke filbasert modus. I dette eksemplet skal vi deaktivere IPv6 for nettverksgrensesnittet enp0s8. Det første trinnet er å lage en YAML-fil som spesifiserer ønsket tilstand til enp0s8-nettverksgrensesnittet.

$ sudo nmstatectl show enp0s8 > enp0s8.yml

Deretter vil vi redigere YAML-filen som følger.

$ sudo vim enp0s8.yml

Rull ned til ipv6-delen. For å deaktivere IPv6, sett den aktiverte parameteren til false og slett linjene som har blitt truffet.

Lagre konfigurasjonen og bruk den nye tilstanden ved å bruke YAML-filen som følger.

$ sudo nmstatectl apply enp0s8.yml

Kjør nå kommandoen som vises for å bekrefte at IPv6 er deaktivert. Utdataene som vises viser at IPv6 for enp0s8-nettverksgrensesnittet er tomt, noe som antyder at vi har deaktivert IPv6 på grensesnittet.

$ ip -br a 

En annen veldig nyttig funksjonalitet som NMstate gir, er muligheten til midlertidig å konfigurere en ønsket nettverkstilstand. Når du er fornøyd med konfigurasjonen, kan du fortsette og gjøre endringene permanente. Ellers vil endringene som er gjort, rulle tilbake til de opprinnelige innstillingene når tidsavbruddet utløper. Standard tidsavbrudd er 60 sekunder.

For å demonstrere dette vil vi midlertidig sette en statisk IP på enp0s3-grensesnittet og deaktivere DHCP. Nok en gang får du tilgang til filen ved hjelp av et tekstredigeringsprogram.

$ sudo vim enp0s3.yml

Rull til ipv4-delen. Spesifiser den statiske IP-en – i vårt tilfelle 192.168.2.150 og slett linjene som har blitt strøket gjennom. Pass i tillegg på å sette dhcp-parameteren til false.

Lagre filen og foreta midlertidig endringene som følger.

$ sudo nmstatectl apply --no-commit --timeout 20 enp0s3.yml

Alternativet --no-commit bruker endringene midlertidig i en periode definert av alternativet --timeout, som i dette eksemplet er 20 sekunder.

For å verifisere den tidsmessige anvendelsen av endringene, vil vi sjekke IP-konfigurasjonen i et tidsintervall på 20 sekunder.

$ ip -br a 

Fra utgangen kan du se at grensesnittets IP-konfigurasjon gikk tilbake til DHCP etter tidsintervallet på 20 sekunder. IP-adressen gikk tilbake til 192.168.2.104 fra den tidligere statisk konfigurerte IP-adressen som var 192.168.2.150.

Riktignok er NMSState-verktøyet et praktisk verktøy for å konfigurere nettverksgrensesnittene dine. Det er et deklarativt verktøy som bruker den ønskede konfigurasjonstilstanden til en verts grensesnitt ved hjelp av NetworkManager API.

Tilstanden defineres enkelt ved å bruke enten den interaktive tilnærmingen eller ved å bruke den filbaserte metoden som bruker en forhåndskonfigurert YAML-fil. Dette forbedrer automatiseringen av konfigurasjonsoppgaver og reduserer feil under konfigurasjonen.