NMState: deklarativni alat za konfiguraciju mreže
Linux ekosistem pruža brojne načine konfigurisanja umrežavanja uključujući popularni Network Manager demon i alate komandne linije kao što su nmcli i nmtui GUI uslužni program. Ovaj vodič predstavlja još jedan alat za konfiguraciju mreže poznat kao NMState
NMState je deklarativni mrežni menadžer za konfiguriranje umrežavanja na Linux hostovima. To je biblioteka koja pruža alat naredbenog retka koji upravlja postavkama mreže domaćina. Upravlja umrežavanjem domaćina preko deklarativnog API-ja na sjeveru. U vrijeme pisanja ovog vodiča, NetworkManager demon je jedini provajder kojeg podržava NMState.
U ovom vodiču ćemo pogledati neke od primjera korištenja alata NMState. Za ovaj vodič, to ćemo demonstrirati koristeći Fedora Linux.
Imperativ protiv deklarativnih pristupa
Upravljanje mrežom može imati dva pristupa – imperativni i deklarativni. U imperativnom pristupu, vi eksplicitno definirate mrežno stanje interfejsa pokretanjem komandi na terminalu. Fokus je na "kako".
Na primjer, da srušite mrežu koristeći imperativni pristup, pokrenite naredbu:
sudo ifconfig enp0s3 down
S druge strane, deklarativni pristup koristi YAML datoteku za primjenu promjena na konfiguraciju. Većina DevOps alata za orkestraciju kao što je Kubernetes koristi ovaj pristup za implementaciju pods aplikacija koristeći YAML datoteku.
Ovaj pristup pruža ono što se u DevOps krugovima obično naziva infrastruktura kao kod (IaC). Ovo poboljšava automatizaciju mrežne konfiguracije na hostu i pruža brz i pouzdaniji način za višestruke promjene mrežnog interfejsa uz minimalne greške.
Sada, hajde da promijenimo brzinu i vidimo kako možete koristiti NMState alat za konfiguraciju da konfigurirate svoja mrežna sučelja u Linuxu.
Korak 1: Instalirajte NMState Networking Config Tool
Pokrenut ćemo loptu instaliranjem Nmstate. Prvo provjerite dostupnost paketa iz Fedora spremišta na sljedeći način:
sudo dnf search nmstate
Iz izlaza možemo vidjeti da je upravitelj mreže dostupan u službenim spremištima.
Zatim instalirajte NMstate na sljedeći način. Ovo radi na Fedora 31 i novijim verzijama.
sudo dnf install nmstate
Naredba instalira NMState API mrežnog menadžera zajedno s drugim Python ovisnostima.
Kada se instalacija završi, provjerite je li paket nmstate instaliran na sljedeći način.
rpm -qi nmstate
Za Linux baziran na RHEL-u, prvo omogućite repozitorij copr.
sudo dnf copr enable nmstate/nmstate-stable
Zatim instalirajte NMstate na sljedeći način.
sudo dnf install nmstate
Pogledajte dodatna uputstva o tome kako da instalirate NMState iz izvora.
Nakon instalacije, možete provjeriti instaliranu verziju NMstate na sljedeći način.
nmstatectl version
1.0.2
Korištenje alata za konfiguraciju NMState u Linuxu
Sa instaliranim NMstate, hajde da se pozabavimo detaljima o tome kako možete maksimalno iskoristiti API za upravljanje mrežom.
Da vidite trenutnu mrežnu konfiguraciju vašeg mrežnog sučelja, pokrenite sljedeću naredbu. Ovdje je konfiguracija vašeg enp0s3 interfejsa.
nmstatectl show enp0s3
Izlaz je podijeljen u 4 odvojena dijela:
- dns-resolver: Ovaj odjeljak sadrži konfiguraciju poslužitelja imena za određeni interfejs.
- rute-rules: Ovo određuje pravila rutiranja.
- Rute: Ovo uključuje i dinamičke i statičke rute.
- Interfejsi: Ovaj odjeljak specificira i ipv4 i ipv6 postavke.
Promjena mrežne konfiguracije u Linuxu
Možete koristiti NMState alat za konfiguraciju da konfigurišete svoje hostove u željeno stanje koristeći bilo interaktivni ili način rada zasnovan na fajlovima.
- Interaktivno: Ovo uređuje mrežni interfejs pomoću naredbe nmstatectl edit. Ova naredba otvara uređivač teksta koji je definiran varijablom okruženja EDITOR. Kada se promene sačuvaju, NMState odmah primenjuje novu konfiguraciju osim ako nisu otkrivene sintaksičke greške.
- Zasnovano na fajlu: U načinu rada zasnovanom na fajlu, konfiguracija interfejsa se primjenjuje pomoću YAML ili JSON datoteke pomoću naredbe nmstatectl apply.
Hajde da sad uprljamo ruke i provjerimo kako možete izmijeniti mrežnu konfiguraciju koristeći NMState.
Naš Fedora sistem ima dva aktivna mrežna sučelja sa sljedećom konfiguracijom:
ip -br -4 a
Sample Output
lo UNKNOWN 127.0.0.1/8
enp0s3 UP 192.168.2.104/24
enp0s8 UP 192.168.2.103/24
Primjer interaktivnog načina konfiguracije
Koristit ćemo interaktivni način za promjenu MTU (Maksimalna jedinica prijenosa) mrežnog interfejsa enp0s3. Podrazumevano, ovo je postavljeno na 1500 kao što je prikazano.
ifconfig
Promijenit ćemo ovo na 4000. To ćemo učiniti pomoću naredbe nmstatectl edit kako slijedi.
sudo nmstatectl edit enp0s3
Ovo otvara konfiguraciju u uređivaču teksta. U našem slučaju, otvara se u vim editoru. Zatim, skrolujte do kraja i pronađite parametar mtu. Promijenit ćemo vrijednost u 4000, baš kao što bismo uređivali datoteku u vim-u. Zatim ćemo sačuvati promjene.
Kada sačuvate i izađete iz datoteke, vidjet ćete neki kodirani izlaz na terminalu dok NMstate sprema promjene. Nije potrebna intervencija, samo sjedite mirno.
Potvrdimo sada da je promjena napravljena.
ifconfig
Iz izlaza terminala, možemo vidjeti da smo uspješno promijenili MTU na 4000 sa zadane vrijednosti 1500.
Primjer načina konfiguracije zasnovanog na fajlu
Hajde da sada izmenimo konfiguraciju koristeći režim zasnovan na fajlovima. U ovom primjeru ćemo onemogućiti IPv6 za enp0s8 mrežni interfejs. Prvi korak je kreiranje YAML datoteke koja će specificirati željeno stanje enp0s8 mrežnog interfejsa.
sudo nmstatectl show enp0s8 > enp0s8.yml
Zatim ćemo urediti YAML datoteku na sljedeći način.
sudo vim enp0s8.yml
Pomaknite se prema dolje do odjeljka ipv6. Da biste onemogućili IPv6, postavite omogućeni parametar na false i izbrišite linije koje su precrtane.
Sačuvajte konfiguraciju i primenite novo stanje koristeći YAML datoteku na sledeći način.
sudo nmstatectl apply enp0s8.yml
Sada pokrenite prikazanu naredbu kako biste provjerili je li IPv6 onemogućen. Prikazani izlaz pokazuje da je IPv6 za enp0s8 mrežni interfejs prazan, što implicira da smo uspješno onemogućili IPv6 na interfejsu.
ip -br a
Privremena primjena mrežnih promjena
Još jedna zaista zgodna funkcionalnost koju NMstate pruža je mogućnost da se privremeno konfiguriše željeno stanje mreže. Kada budete zadovoljni konfiguracijom, možete nastaviti i učiniti promjene trajnim. U suprotnom, izvršene promjene će se vratiti na početne postavke kada istekne vremensko ograničenje. Podrazumevano vremensko ograničenje je 60 sekundi.
Da bismo to demonstrirali, privremeno ćemo postaviti statičku IP adresu na interfejsu enp0s3 i onemogućiti DHCP. Još jednom, pristupite datoteci pomoću uređivača teksta.
sudo vim enp0s3.yml
Pomaknite se do odjeljka ipv4. Navedite statičku IP adresu – u našem slučaju 192.168.2.150 i izbrišite linije koje su precrtane. Osim toga, obavezno postavite parametar dhcp na false.
Sačuvajte datoteku i privremeno urezujte promjene na sljedeći način.
sudo nmstatectl apply --no-commit --timeout 20 enp0s3.yml
Opcija --no-commit
privremeno primjenjuje promjene na period definiran opcijom --timeout
koji, u ovom primjeru, iznosi 20 sekundi.
Da bismo provjerili privremenu primjenu promjena, provjerit ćemo IP konfiguraciju u vremenskom intervalu od 20 sekundi.
ip -br a
Iz izlaza možete vidjeti da se IP konfiguracija interfejsa vratila na DHCP nakon vremenskog intervala od 20 sekundi. IP adresa se vratila na 192.168.2.104 sa ranije statički konfigurisane IP adrese koja je bila 192.168.2.150.
Doduše, alat NMState je zgodan alat za konfigurisanje vaših mrežnih interfejsa. To je deklarativni alat koji primjenjuje željeno stanje konfiguracije sučelja hosta koristeći NetworkManager API.
Stanje se lako definira korištenjem interaktivnog pristupa ili korištenjem metode bazirane na fajlovima koja koristi unaprijed konfigurirani YAML fajl. Ovo poboljšava automatizaciju zadataka konfiguracije i smanjuje greške tokom konfiguracije.