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.