Pesquisa de site

NMState: uma ferramenta de configuração de rede declarativa


O ecossistema Linux oferece inúmeras maneiras de configurar a rede, incluindo o popular daemon Network Manager e ferramentas de linha de comando, como o utilitário GUI nmcli e nmtui. Este guia apresenta outra ferramenta de configuração de rede conhecida como NMState

NMState é um gerenciador de rede declarativo para configurar redes em hosts Linux. É uma biblioteca que fornece uma ferramenta de linha de comando que gerencia as configurações da rede host. Ele gerencia a rede de host por meio de uma API declarativa norte. No momento em que este guia foi escrito, o daemon NetworkManager era o único provedor suportado pelo NMState.

Neste guia, veremos alguns exemplos de uso da ferramenta NMState. Neste guia, demonstraremos isso usando o Fedora Linux.

Abordagens imperativas versus declarativas

O gerenciamento de rede pode adotar duas abordagens – Imperativa e declarativa. Na abordagem imperativa, você define explicitamente o estado de rede de uma interface executando comandos no terminal. O foco está no ‘como’.

Por exemplo, para derrubar uma rede usando a abordagem imperativa, execute o comando:

sudo ifconfig enp0s3 down

Por outro lado, a abordagem declarativa usa um arquivo YAML para aplicar as alterações a uma configuração. A maioria das ferramentas de orquestração DevOps, como o Kubernetes, usa essa abordagem para implantar aplicativos pods usando um arquivo YAML.

Essa abordagem fornece o que é comumente chamado de Infraestrutura como Código (IaC) nos círculos de DevOps. Isso aprimora a automação da configuração de rede no host e fornece uma maneira mais rápida e confiável de fazer diversas alterações em uma interface de rede com o mínimo de erros.

Agora, vamos mudar de assunto e ver como você pode usar a ferramenta de configuração NMState para configurar suas interfaces de rede no Linux.

Etapa 1: instalar a ferramenta de configuração de rede NMState

Daremos o pontapé inicial instalando o Nmstate. Primeiro, verifique a disponibilidade do pacote nos repositórios do Fedora da seguinte forma:

sudo dnf search nmstate

Pela saída, podemos ver que o gerenciador de rede está disponível nos repositórios oficiais.

Em seguida, instale o NMstate da seguinte maneira. Isso funciona no Fedora 31 e versões posteriores.

sudo dnf install nmstate

O comando instala a API do gerenciador de rede NMState juntamente com outras dependências do Python.

Assim que a instalação for concluída, verifique se o pacote nmstate está instalado da seguinte maneira.

rpm -qi nmstate

Para Linux baseado em RHEL, habilite primeiro o repositório copr.

sudo dnf copr enable nmstate/nmstate-stable

Em seguida, instale o NMstate da seguinte maneira.

sudo dnf install nmstate

Confira instruções adicionais sobre como instalar o NMState da fonte.

Depois de instalado, você pode verificar a versão do NMstate instalada da seguinte maneira.

nmstatectl version

1.0.2

Usando a ferramenta de configuração NMState no Linux

Com o NMstate instalado, vamos aos detalhes de como você pode aproveitar ao máximo a API do gerenciador de rede.

Para visualizar a configuração de rede atual da sua interface de rede, execute o seguinte comando. Aqui está a configuração da sua interface enp0s3.

nmstatectl show enp0s3

A saída é dividida em 4 seções distintas:

  • dns-resolver: Esta seção contém a configuração do servidor de nomes para a interface específica.
  • regras de rota: estipula as regras de roteamento.
  • rotas: inclui rotas dinâmicas e estáticas.
  • Interfaces: Esta seção especifica as configurações de ipv4 e ipv6.

Alterando a configuração de rede no Linux

Você pode usar a ferramenta de configuração NMState para configurar seus hosts para o estado desejado usando modos interativos ou baseados em arquivo.

  • Interativo: edita uma interface de rede usando o comando nmstatectl edit. Este comando abre um editor de texto que é definido pela variável de ambiente EDITOR. Depois que as alterações forem salvas, o NMState aplicará a nova configuração imediatamente, a menos que sejam detectados erros de sintaxe.
  • Baseado em arquivo: no modo baseado em arquivo, a configuração da interface é aplicada usando um arquivo YAML ou JSON usando o comando nmstatectl apply.

Vamos agora colocar a mão na massa e ver como você pode modificar a configuração da rede usando NMState.

Nosso sistema Fedora possui duas interfaces de rede ativas com a seguinte configuração:

ip -br -4 a
Saída de amostra
lo               UNKNOWN        127.0.0.1/8 
enp0s3           UP             192.168.2.104/24 
enp0s8           UP             192.168.2.103/24 

Exemplo de modo de configuração interativo

Usaremos o modo interativo para alterar o MTU (Unidade Máxima de Transmissão) da interface de rede enp0s3. Por padrão, isso é definido como 1500 conforme mostrado.

ifconfig

Vamos mudar isso para 4000. Faremos isso usando o comando nmstatectl edit da seguinte forma.

sudo nmstatectl edit enp0s3

Isso abre a configuração em um editor de texto. Para o nosso caso, ele abre no editor vim. Em seguida, role até o fim e localize o parâmetro mtu. Alteraremos o valor para 4000, assim como editaríamos um arquivo no vim. Então salvaremos as alterações.

Ao salvar e sair do arquivo, você verá alguma saída embaralhada no terminal enquanto NMstate salva as alterações. Nenhuma intervenção é necessária, então apenas fique quieto.

Vamos agora confirmar se a alteração foi feita.

ifconfig

Na saída do terminal, podemos ver que alteramos com sucesso o MTU para 4000 do valor padrão 1500.

Exemplo de modo de configuração baseado em arquivo

Vamos agora modificar a configuração usando o modo baseado em arquivo. Neste exemplo, desabilitaremos o IPv6 para a interface de rede enp0s8. A primeira etapa é criar um arquivo YAML que especificará o estado desejado da interface de rede enp0s8.

sudo nmstatectl show enp0s8 > enp0s8.yml

A seguir, editaremos o arquivo YAML da seguinte maneira.

sudo vim enp0s8.yml

Role para baixo até a seção ipv6. Para desabilitar o IPv6, defina o parâmetro enabled como false e exclua as linhas que foram riscadas.

Salve a configuração e aplique o novo estado usando o arquivo YAML da seguinte maneira.

sudo nmstatectl apply enp0s8.yml

Agora execute o comando mostrado para verificar se o IPv6 foi desabilitado. A saída exibida mostra que o IPv6 da interface de rede enp0s8 está em branco, o que significa que desabilitamos o IPv6 na interface com sucesso.

ip -br a 

Aplicando alterações de rede temporariamente

Outra funcionalidade realmente útil que o NMstate oferece é a capacidade de configurar temporariamente um estado de rede desejado. Quando estiver satisfeito com a configuração, você poderá prosseguir e tornar as alterações permanentes. Caso contrário, as alterações feitas voltarão às configurações iniciais assim que o tempo limite expirar. O tempo limite padrão é 60 segundos.

Para demonstrar isso, definiremos temporariamente um IP estático na interface enp0s3 e desabilitaremos o DHCP. Mais uma vez, acesse o arquivo usando um editor de texto.

sudo vim enp0s3.yml

Vá até a seção ipv4. Especifique o IP estático – no nosso caso 192.168.2.150 e exclua as linhas que foram riscadas. Além disso, certifique-se de definir o parâmetro dhcp como false.

Salve o arquivo e confirme temporariamente as alterações da seguinte maneira.

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

A opção --no-commit aplica temporariamente as alterações por um período definido pela opção --timeout que, neste exemplo, é de 20 segundos.

Para verificar a aplicação temporal das alterações, verificaremos a configuração do IP em um intervalo de tempo de 20 segundos.

ip -br a 

Na saída, você pode ver que a configuração IP da interface foi revertida para DHCP após o intervalo de tempo de 20 segundos. O endereço IP voltou para 192.168.2.104 do IP configurado estaticamente anteriormente, que era 192.168.2.150.

É certo que a ferramenta NMState é uma ferramenta conveniente para configurar suas interfaces de rede. É uma ferramenta declarativa que aplica o estado de configuração desejado da interface de um host usando a API NetworkManager.

O estado é facilmente definido usando a abordagem interativa ou usando o método baseado em arquivo que usa um YAML pré-configurado. forte> arquivo. Isso aprimora a automação das tarefas de configuração e a redução de erros durante a configuração.