Pesquisa de site

Como mudar do Network Manager para systemd-networkd no Linux


No mundo do Linux, a adoção do systemd tem sido um assunto de controvérsia acalorada, e o debate entre seus proponentes e críticos ainda continua. A partir de hoje, a maioria das principais distribuições do Linux adotaram o systemd como um sistema init padrão.

Anunciado como "nunca terminado, nunca completo, mas acompanhando o progresso da tecnologia" por seu autor, o systemd não é apenas o daemon init, mas é projetado como um sistema mais amplo e uma plataforma de gerenciamento de serviço que abrange o crescente ecossistema de daemons, bibliotecas e utilitários do sistema principal.

Uma das muitas adições ao systemd é systemd-networkd, que é responsável pela configuração de rede dentro do ecossistema systemd. Usando systemd-networkd, você pode configurar rede DHCP/IP estática básica para dispositivos de rede. Ele também pode configurar recursos de rede virtual, como pontes, túneis ou VLANs. A rede sem fio não é tratada diretamente pelo systemd-networkd, mas você pode usar o serviço wpa_supplicant para configurar adaptadores sem fio e, em seguida, conectá-lo com systemd-networkd.

Em muitas distribuições Linux, o Network Manager foi e ainda é usado como um gerenciador de configuração de rede padrão. Comparado ao Network Manager, o systemd-networkd ainda está em desenvolvimento ativo e faltam recursos. Por exemplo, ele não possui a inteligência do Network Manager para manter seu computador conectado em várias interfaces o tempo todo. Ele não fornece ganchos ifup/ifdown para scripts avançados. No entanto, systemd-networkd está bem integrado com o restante dos componentes systemd (por exemplo, resolvido para DNS, timesyncd para NTP, udevd para nomenclatura), e a função de systemd-networkd só pode crescer com o tempo no ambiente systemd.

Se você está satisfeito com a forma como o systemd está evoluindo, uma coisa que você pode considerar é mudar do Network Manager para o systemd-networkd. Se você é totalmente contra o systemd, e perfeitamente satisfeito com o Network Manager ou serviço básico de rede, isso é totalmente legal.

Mas para aqueles que desejam experimentar systemd-networkd, você pode ler e descobrir neste tutorial como mudar do Network Manager para systemd-networkd em Linux.

Requerimento

systemd-networkd está disponível em systemd versão 210 e superior. Assim, distribuições como Debian 8 Jessie (systemd 215), Fedora 21 (systemd 217), Ubuntu 15.04 (systemd 219) ou posterior são compatíveis com systemd-networkd.

Para outras distribuições, verifique a versão do seu systemd antes de prosseguir.


$ systemctl --version

Alternar do Network Manager para systemd-networkd

É relativamente simples mudar do Network Manager para systemd-networkd (e vice-versa).

Primeiro, desabilite o serviço Network Manager e habilite systemd-networkd da seguinte maneira.


$ sudo systemctl disable NetworkManager
$ sudo systemctl enable systemd-networkd

Você também precisa habilitar o serviço systemd-resolved, que é usado por systemd-networkd para resolução de nome de rede. Este serviço implementa um servidor DNS de cache.


$ sudo systemctl enable systemd-resolved
$ sudo systemctl start systemd-resolved

Uma vez iniciado, o systemd-resolved criará seu próprio resolv.conf em algum lugar no diretório /run/systemd. No entanto, é uma prática comum armazenar informações do resolvedor de DNS em /etc/resolv.conf, e muitos aplicativos ainda dependem de /etc/resolv.conf. Portanto, por motivos de compatibilidade, crie um link simbólico para /etc/resolv.conf como segue.


$ sudo rm /etc/resolv.conf
$ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

Configurar conexões de rede com systemd-networkd

Para configurar dispositivos de rede com systemd-networkd, você deve especificar informações de configuração em arquivos de texto com extensão .network. Esses arquivos de configuração de rede são armazenados e carregados de /etc/systemd/network. Quando há vários arquivos, systemd-networkd os carrega e processa um por um em ordem léxica.

Vamos começar criando uma pasta /etc/systemd/network.


$ sudo mkdir /etc/systemd/network

Rede DHCP

Vamos configurar a rede DHCP primeiro. Para isso, crie o seguinte arquivo de configuração. O nome de um arquivo pode ser arbitrário, mas lembre-se de que os arquivos são processados em ordem léxica.


$ sudo vi /etc/systemd/network/20-dhcp.network

[Match]
Name=enp3*

[Network]
DHCP=yes

Como você pode ver acima, cada arquivo de configuração de rede contém uma ou mais seções com cada seção precedida pelo cabeçalho [XXX]. Cada seção contém um ou mais pares chave/valor. A seção [Match] determina quais dispositivos de rede são configurados por este arquivo de configuração. Por exemplo, este arquivo corresponde a qualquer interface de rede cujo nome comece com ens3 (por exemplo, enp3s0, enp3s1, enp3s2 , etc). Para interface(s) correspondente(s), aplica-se a configuração de rede DHCP especificada na seção [Network].

Rede IP estática

Se você deseja atribuir um endereço IP estático a uma interface de rede, crie o seguinte arquivo de configuração.


$ sudo vi /etc/systemd/network/10-static-enp3s0.network

[Match]
Name=enp3s0

[Network]
Address=192.168.10.50/24
Gateway=192.168.10.1
DNS=8.8.8.8

Como você pode imaginar, a interface enp3s0 receberá um endereço 192.168.10.50/24, um gateway padrão 192.168.10.1 e um DNS servidor 8.8.8.8. Uma sutileza aqui é que o nome de uma interface enp3s0, em fatos, também corresponde à regra padrão definida na configuração DHCP anterior. No entanto, como o arquivo 10-static-enp3s0.network é processado antes de 20-dhcp.network de acordo com a ordem lexical, a configuração estática tem prioridade sobre a configuração DHCP em caso de interface enp3s0.

Assim que terminar de criar os arquivos de configuração, reinicie o serviço systemd-networkd ou reinicie.


$ sudo systemctl restart systemd-networkd

Verifique o status do serviço executando:


$ systemctl status systemd-networkd
$ systemctl status systemd-resolved

Configurar dispositivos de rede virtual com systemd-networkd

systemd-networkd também permite configurar dispositivos de rede virtual, como pontes, VLANs, túneis, VXLAN, bonding, etc. Você deve configurar esses dispositivos virtuais em arquivos com .netdev extensão.

Aqui vou mostrar como configurar uma interface de ponte.

Ponte do Linux

Se você deseja criar uma ponte Linux (br0) e adicionar uma interface física (eth1) à ponte, crie a seguinte configuração.


$ sudo vi /etc/systemd/network/bridge-br0.netdev

[NetDev]
Name=br0
Kind=bridge

Em seguida, configure a interface bridge br0 e a interface slave eth1 usando os arquivos .network como segue.


$ sudo vi /etc/systemd/network/bridge-br0-slave.network

[Match]
Name=eth1

[Network]
Bridge=br0

$ sudo vi /etc/systemd/network/bridge-br0.network

[Match]
Name=br0

[Network]
Address=192.168.10.100/24
Gateway=192.168.10.1
DNS=8.8.8.8

Finalmente, reinicie systemd-networkd:


$ sudo systemctl restart systemd-networkd

Você pode usar a ferramenta brctl para verificar se uma ponte br0 foi criada.

Resumo

Quando systemd promete ser um gerenciador de sistema para Linux, não é de admirar que algo como systemd-networkd tenha surgido para gerenciar configurações de rede. Nesta fase, no entanto, systemd-networkd parece mais adequado para um ambiente de servidor onde as configurações de rede são relativamente estáveis. Para ambientes de desktop/laptop que envolvem várias interfaces transitórias com/sem fio, o Network Manager ainda pode ser uma escolha preferencial.

Para aqueles que desejam verificar mais sobre systemd-networkd, consulte a página de manual oficial para obter uma lista completa de seções e chaves suportadas.

Artigos relacionados: