NMSState: A Declarative Networking Configuration Tool


De Linux Ökosystem bitt vill Weeër fir d'Netzwierk ze konfiguréieren, dorënner de populäre nmtui GUI Utility. Dëse Guide stellt nach en anert Netzwierk Konfiguratiounsinstrument vir bekannt als NMSate

NMSate ass en deklarativen Netzwierkmanager fir Netzwierker op Linux Hosten ze konfiguréieren. Et ass eng Bibliothéik déi e Kommandozeilentool ubitt deen Hostnetz-Astellunge geréiert. Et geréiert Hostnetzwierk duerch eng nërdlech deklarativ API. Zu der Zäit vum Schreiwen vun dësem Guide ass den NetworkManager Daemon deen eenzegen Provider deen vum NMSState ënnerstëtzt gëtt.

An dësem Guide kucke mir e puer Beispiller vum NMSState Tool. Fir dëse Guide wäerte mir dëst mat Fedora Linux demonstréieren.

Network Management kann zwou Approche huelen - Imperativ an deklarativ. An der imperativer Approche definéiert Dir explizit den Netzwierkzoustand vun enger Interface andeems Dir Kommandoen um Terminal leeft. De Fokus ass op de 'wéi'.

Zum Beispill, fir en Netzwierk mat der imperativer Approche erofzebréngen, fuert de Kommando:

$ sudo ifconfig enp0s3 down

Op der anerer Säit benotzt déi deklarativ Approche eng YAML Datei fir d'Ännerungen op eng Konfiguratioun anzesetzen. Déi meescht DevOps Orchestratiounsinstrumenter wéi Kubernetes benotzen dës Approche fir Pods Uwendungen mat enger YAML Datei z'installéieren.

Dës Approche bitt wat allgemeng als Infrastructure as Code (IaC) an DevOps Kreesser bezeechent gëtt. Dëst verbessert d'Automatiséierung vun der Netzkonfiguratioun am Host a bitt e séieren a méi zouverléissege Wee fir verschidde Ännerunge vun enger Netzwierkinterface mat minimale Feeler ze maachen.

Elo, loosst eis Gears wiesselen a kucken wéi Dir den NMSState Konfiguratiounstool benotze kënnt fir Är Netzwierkschnëttplazen a Linux ze konfiguréieren.

Schrëtt 1: Installéiert NMSState Networking Config Tool

Mir wäerten de Ball rullen andeems Dir den Nmstate installéiert. Als éischt, kontrolléiert d'Disponibilitéit vum Package vu Fedora Repositories wéi follegt:

$ sudo dnf search nmstate

Vun der Ausgab kënne mir gesinn datt den Netzwierkmanager op den offiziellen Repositories verfügbar ass.

Als nächst, installéiert NMstate wéi follegt. Dëst funktionnéiert op Fedora 31 a spéider Versiounen.

$ sudo dnf install nmstate

De Kommando installéiert den NMSState Network Manager API niewent anere Python Ofhängegkeeten.

Wann d'Installatioun fäerdeg ass, kontrolléiert datt den nmstate Package installéiert ass wéi follegt.

$ rpm -qi nmstate

Fir RHEL-baséiert Linux, aktivéiert de Copr Repository als éischt.

$ sudo dnf copr enable nmstate/nmstate-stable

Installéiert dann NMstate wéi follegt.

$ sudo dnf install nmstate

Kuckt zousätzlech Instruktiounen iwwer wéi Dir NMSState vun der Quell installéiere wëllt.

Eemol installéiert, kënnt Dir d'Versioun vum NMstate kontrolléieren wéi follegt installéiert ass.

$ nmstatectl version

1.0.2

Benotzt NMSState Configuration Tool a Linux

Mat NMstate installéiert, loosst eis op d'Knitty-Gritten erofkommen wéi Dir dat Bescht aus der Network Manager API maache kënnt.

Fir déi aktuell Netzwierkkonfiguratioun vun Ärem Netz-Interface ze gesinn, fuert de folgende Kommando. Hei ass d'Konfiguratioun vun Ärem enp0s3 Interface.

$ nmstatectl show enp0s3

D'Ausgab ass a 4 verschidde Sektiounen opgedeelt:

  • dns-resolver: Dës Sektioun enthält d'Nameserver Konfiguratioun fir déi speziell Interface.
  • Routeregelen: Dëst stellt d'Routingregelen fest.
  • routen: Dëst beinhalt souwuel dynamesch wéi statesch Strecken.
  • Interfaces: Dës Sektioun spezifizéiert souwuel d'ipv4 an d'ipv6 Astellungen.

Änneren Netzwierkkonfiguratioun am Linux

Dir kënnt den NMSState Konfiguratiounsinstrument benotze fir Är Hosten op de gewënschten Zoustand ze konfiguréieren andeems Dir entweder interaktiv oder Datei-baséiert Modi benotzt.

  • Interaktiv: Dëst ännert en Netzwierk-Interface mam nmstatectl edit Kommando. Dëse Kommando mécht en Texteditor op deen vun der EDITOR Ëmfeldvariabel definéiert ass. Wann d'Ännerunge gespäichert sinn, gëlt NMSstate déi nei Konfiguratioun direkt un, ausser Syntaxfehler entdeckt goufen.
  • Dateibaséiert: Am Datei-baséierte Modus gëtt d'Interfacekonfiguratioun mat engem YAML- oder JSON-Datei applizéiert mat dem nmstatectl-applikéieren Kommando.

Loosst eis elo d'Hänn dreckeg maachen a kucken wéi Dir d'Netzkonfiguratioun mat NMSState änneren kënnt.

Eise Fedora System huet zwee aktiv Netzwierkschnëttplazen mat der folgender Konfiguratioun:

$ 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 

Mir benotzen den interaktive Modus fir d'MTU (Maximum Transmission Unit) vun der enp0s3 Netzwierk Interface z'änneren. Par défaut ass dëst op 1500 gesat wéi gewisen.

$ ifconfig

Mir wäerten dat änneren op 4000. Mir maachen dat mat der nmstatectl edit Kommando wéi follegt.

$ sudo nmstatectl edit enp0s3

Dëst mécht d'Konfiguratioun an engem Texteditor op. Fir eise Fall mécht et am vim Editor op. Als nächst, scrollt de ganze Wee erof a lokaliséiert de mtu Parameter. Mir änneren de Wäert op 4000, sou wéi mir eng Datei am vim änneren. Da späichere mir d'Ännerungen.

Wann Dir d'Datei späichert an erausgeet, gesitt Dir e verréckten Output um Terminal wéi NMstate d'Ännerunge späichert. Keng Interventioun ass erfuerderlech also, sëtzt einfach roueg.

Loosst eis elo bestätegen datt d'Ännerung gemaach gouf.

$ ifconfig

Vun der Terminalausgang kënne mir gesinn datt mir d'MTU erfollegräich op 4000 vum Standardwäert 1500 geännert hunn.

Loosst eis elo d'Konfiguratioun mam Datei-baséierte Modus änneren. An dësem Beispill wäerte mir IPv6 fir d'enp0s8 Netzwierkschnitt auszeschalten. Den éischte Schrëtt ass eng YAML Datei ze kreéieren déi de gewënschten Zoustand vun der enp0s8 Netzwierk Interface spezifizéieren.

$ sudo nmstatectl show enp0s8 > enp0s8.yml

Als nächst wäerte mir d'YAML Datei änneren wéi follegt.

$ sudo vim enp0s8.yml

Scroll down op d'ipv6 Sektioun. Fir IPv6 auszeschalten, setzt den aktivéierten Parameter op falsch a läscht d'Zeilen déi duerchgeschloe goufen.

Späichert d'Konfiguratioun an applizéiert den neie Staat mat der YAML Datei wéi follegt.

$ sudo nmstatectl apply enp0s8.yml

Elo lafen de Kommando gewisen fir z'iwwerpréiwen datt IPv6 ausgeschalt gouf. Den ugewisenen Output weist datt den IPv6 fir den enp0s8 Netzwierkinterface eidel ass, wat implizéiert datt mir IPv6 op der Interface erfollegräich deaktivéiert hunn.

$ ip -br a 

Eng aner wierklech praktesch Funktionalitéit déi NMstate ubitt ass d'Fäegkeet fir e gewënschten Netzwierkzoustand temporär ze konfiguréieren. Wann Dir mat der Konfiguratioun zefridden sidd, kënnt Dir weidergoen an d'Ännerunge permanent maachen. Soss ginn d'Ännerungen, déi gemaach goufen, zréck an déi initial Astellunge soubal den Timeout ofleeft. De Standard Timeout ass 60 Sekonnen.

Fir dëst ze demonstréieren, wäerte mir temporär eng statesch IP op der enp0s3 Interface setzen an DHCP deaktivéieren. Nach eng Kéier, Zougang zu der Datei mat engem Texteditor.

$ sudo vim enp0s3.yml

Scroll op d'ipv4 Sektioun. Spezifizéiert déi statesch IP - an eisem Fall 192.168.2.150 a läscht d'Zeilen, déi duerchgeschloen goufen. Zousätzlech, gitt sécher den dhcp-Parameter op falsch ze setzen.

Späichert d'Datei a verpflicht d'Ännerungen temporär wéi follegt.

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

D'Optioun --no-commit gëlt temporär d'Ännerunge fir eng Period definéiert duerch d'Optioun --Timeout, déi an dësem Beispill 20 Sekonnen ass.

Fir d'temporär Uwendung vun den Ännerungen z'iwwerpréiwen, wäerte mir d'IP Konfiguratioun an engem Zäitintervall vun 20 Sekonnen iwwerpréiwen.

$ ip -br a 

Vun der Ausgab kënnt Dir gesinn datt d'Interface IP Konfiguratioun zréck op DHCP no der Zäitintervall vun 20 Sekonnen. D'IP Adress ass zréck op 192.168.2.104 vun der fréierer statesch konfiguréierter IP, déi 192.168.2.150 war.

Natierlech ass den NMSState Tool e praktescht Tool fir Är Netzwierkschnëttplazen ze konfiguréieren. Et ass en deklarativ Tool dat de gewënschten Konfiguratiounszoustand vun engem Host-Interface applizéiert mat der NetworkManager API.

De Staat ass einfach definéiert entweder mat der interaktiver Approche oder mat der Datei-baséiert Method déi eng pre-konfiguréiert YAML Datei benotzt. Dëst verbessert d'Automatiséierung vun Konfiguratiounsaufgaben an d'Reduktioun vu Feeler während der Konfiguratioun.