Ricerca nel sito web

NMState: uno strumento di configurazione della rete dichiarativa


L'ecosistema Linux offre numerosi modi per configurare la rete, incluso il popolare demone Network Manager e strumenti da riga di comando come nmcli e l'utilità GUI nmtui. Questa guida introduce un altro strumento di configurazione della rete noto come NMState

NMState è un gestore di rete dichiarativo per la configurazione della rete su host Linux. È una libreria che fornisce uno strumento da riga di comando che gestisce le impostazioni della rete host. Gestisce la rete host tramite un'API dichiarativa in direzione nord. Al momento della stesura di questa guida, il demone NetworkManager è l'unico provider supportato da NMState.

In questa guida esamineremo alcuni esempi di utilizzo dello strumento NMState. Per questa guida, lo dimostreremo utilizzando Fedora Linux.

Approcci imperativi e dichiarativi

La gestione della rete può adottare due approcci: imperativo e dichiarativo. Nell'approccio imperativo, definisci esplicitamente lo stato di rete di un'interfaccia eseguendo comandi sul terminale. Il focus è sul “come”.

Ad esempio, per disattivare una rete utilizzando l'approccio imperativo, esegui il comando:

sudo ifconfig enp0s3 down

D'altra parte, l'approccio dichiarativo utilizza un file YAML per applicare le modifiche a una configurazione. La maggior parte degli strumenti di orchestrazione DevOps come Kubernetes utilizza questo approccio per distribuire le applicazioni pod utilizzando un file YAML.

Questo approccio fornisce ciò che viene comunemente definito Infrastructure as Code (IaC) negli ambienti DevOps. Ciò migliora l'automazione della configurazione di rete sull'host e fornisce un modo rapido e più affidabile per apportare più modifiche a un'interfaccia di rete con errori minimi.

Ora cambiamo argomento e vediamo come utilizzare lo strumento di configurazione NMState per configurare le interfacce di rete in Linux.

Passaggio 1: installare lo strumento di configurazione della rete NMState

Daremo il via installando Nmstate. Innanzitutto, controlla la disponibilità del pacchetto dai repository Fedora come segue:

sudo dnf search nmstate

Dall'output possiamo vedere che il gestore della rete è disponibile sui repository ufficiali.

Successivamente, installa NMstate come segue. Funziona su Fedora 31 e versioni successive.

sudo dnf install nmstate

Il comando installa l'API del gestore di rete NMState insieme ad altre dipendenze Python.

Una volta completata l'installazione, verifica che il pacchetto nmstate sia installato come segue.

rpm -qi nmstate

Per Linux basato su RHEL, abilitare prima il repository copr.

sudo dnf copr enable nmstate/nmstate-stable

Quindi installa NMstate come segue.

sudo dnf install nmstate

Consulta ulteriori istruzioni su come installare NMState dal sorgente.

Una volta installato, puoi verificare la versione di NMstate installata come segue.

nmstatectl version

1.0.2

Utilizzo dello strumento di configurazione NMState in Linux

Con NMstate installato, passiamo ai dettagli su come ottenere il massimo dall'API Network Manager.

Per visualizzare la configurazione di rete corrente della tua interfaccia di rete, esegui il comando seguente. Ecco la configurazione della tua interfaccia enp0s3.

nmstatectl show enp0s3

L’output è diviso in 4 sezioni distinte:

  • dns-resolver: questa sezione contiene la configurazione del server dei nomi per l'interfaccia particolare.
  • regole di instradamento: stabilisce le regole di instradamento.
  • percorsi: include sia percorsi dinamici che statici.
  • Interfacce: questa sezione specifica le impostazioni sia ipv4 che ipv6.

Modifica della configurazione di rete in Linux

Puoi utilizzare lo strumento di configurazione NMState per configurare i tuoi host nello stato desiderato utilizzando modalità interattiva o basata su file.

  • Interattivo: modifica un'interfaccia di rete utilizzando il comando nmstatectl edit. Questo comando apre un editor di testo definito dalla variabile d'ambiente EDITOR. Una volta salvate le modifiche, NMState applica immediatamente la nuova configurazione a meno che non vengano rilevati errori di sintassi.
  • Basato su file: nella modalità basata su file, la configurazione dell'interfaccia viene applicata utilizzando un file YAML o JSON utilizzando il comando nmstatectl apply.

Sporchiamoci ora le mani e scopriamo come modificare la configurazione di rete utilizzando NMState.

Il nostro sistema Fedora ha due interfacce di rete attive con la seguente configurazione:

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

Esempio di modalità di configurazione interattiva

Utilizzeremo la modalità interattiva per modificare la MTU (Unità di trasmissione massima) dell'interfaccia di rete enp0s3. Per impostazione predefinita, è impostato su 1500 come mostrato.

ifconfig

Lo modificheremo in 4000. Lo faremo utilizzando il comando nmstatectl edit come segue.

sudo nmstatectl edit enp0s3

Questo apre la configurazione in un editor di testo. Nel nostro caso, si apre nell'editor vim. Successivamente, scorri fino in fondo e individua il parametro mtu. Cambieremo il valore in 4000, proprio come modificheremmo un file in vim. Quindi salveremo le modifiche.

Quando salvi ed esci dal file, vedrai alcuni output criptati sul terminale mentre NMstate salva le modifiche. Non è richiesto alcun intervento, quindi resta semplicemente fermo.

Confermiamo ora che la modifica è stata apportata.

ifconfig

Dall'output del terminale, possiamo vedere che abbiamo modificato con successo la MTU a 4000 dal valore predefinito 1500.

Esempio di modalità di configurazione basata su file

Modifichiamo ora la configurazione utilizzando la modalità basata su file. In questo esempio disabiliteremo IPv6 per l'interfaccia di rete enp0s8. Il primo passo è creare un file YAML che specificherà lo stato desiderato dell'interfaccia di rete enp0s8.

sudo nmstatectl show enp0s8 > enp0s8.yml

Successivamente, modificheremo il file YAML come segue.

sudo vim enp0s8.yml

Scorri verso il basso fino alla sezione IPv6. Per disabilitare IPv6, impostare il parametro abilitato su false ed eliminare le righe barrate.

Salva la configurazione e applica il nuovo stato utilizzando il file YAML come segue.

sudo nmstatectl apply enp0s8.yml

Ora esegui il comando mostrato per verificare che IPv6 sia stato disabilitato. L'output visualizzato mostra che l'IPv6 per l'interfaccia di rete enp0s8 è vuoto, il che implica che abbiamo disabilitato con successo IPv6 sull'interfaccia.

ip -br a 

Applicazione temporanea delle modifiche alla rete

Un'altra funzionalità davvero utile fornita da NMstate è la possibilità di configurare temporaneamente lo stato di rete desiderato. Una volta che sei soddisfatto della configurazione, puoi procedere e rendere permanenti le modifiche. In caso contrario, le modifiche apportate torneranno alle impostazioni iniziali una volta scaduto il timeout. Il timeout predefinito è 60 secondi.

Per dimostrarlo, imposteremo temporaneamente un IP statico sull'interfaccia enp0s3 e disabiliteremo DHCP. Ancora una volta, accedi al file utilizzando un editor di testo.

sudo vim enp0s3.yml

Scorri fino alla sezione ipv4. Specifica l'IP statico, nel nostro caso 192.168.2.150 ed elimina le righe barrate. Inoltre, assicurati di impostare il parametro dhcp su false.

Salvare il file e confermare temporaneamente le modifiche come segue.

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

L'opzione --no-commit applica temporaneamente le modifiche per un periodo definito dall'opzione --timeout che, in questo esempio, è di 20 secondi.

Per verificare l'applicazione temporale delle modifiche, controlleremo la configurazione IP in un intervallo di tempo di 20 secondi.

ip -br a 

Dall'output è possibile vedere che la configurazione IP dell'interfaccia è tornata a DHCP dopo un intervallo di tempo di 20 secondi. L'indirizzo IP risale a 192.168.2.104 dall'IP precedentemente configurato staticamente che era 192.168.2.150.

Certo, lo strumento NMState è uno strumento utile per configurare le tue interfacce di rete. È uno strumento dichiarativo che applica lo stato di configurazione desiderato dell'interfaccia di un host utilizzando l'API NetworkManager.

Lo stato può essere facilmente definito utilizzando l'approccio interattivo o utilizzando il metodo basato su file che utilizza un YAML preconfigurato forte> file. Ciò migliora l'automazione delle attività di configurazione e la riduzione degli errori durante la configurazione.