Usando o NetworkManager no Ubuntu Server ou Debian (e também DNSMasq via NetworkManager)

Tanto o Debian (sem interface gráfica) quanto Ubuntu Server não utilizam o Network Manager como software gerenciador de redes por padrão e para usá-lo é preciso fazer alguns passos.

O Ubuntu server utiliza o networkd juntamente com o netplan.

O Debian utiliza o interfaces (/etc/network/interfaces)

Instalar o Network Manager:

# Para uma instalação padrão:sudo apt install network-manager# ou se quiser economizar ainda mais espaço:sudo apt install network-manager --no-install-recommends

Apague os arquivos antigos (.yaml) de configuração do netplan (porque o netplan une todos os arquivos .yaml na pasta, e no final o networkd fica com prioridade sobre o NetworkManager.

# Apague todos os arquivos na pasta /etc/netplan/ - Por quê?# Porque o netplan faz uma união das configurações de todos os arquivos, e o networkd parece ter prioridade sobre o NetworkManager.sudo rm -r /etc/netplan/*

Habilite o Network Manager no Netplan (Ubuntu apenas)

# Adicione um novo arquivosudo nano /etc/netplan/network-manager.yaml# E adicione o seguinte:# Using network-manager as the main network renderer softwarenetwork:  renderer: NetworkManager  version: 2

E aplique as configurações do netplan com:

sudo netplan apply

Pare o networkd e reinicie o NetworkManager para deixá-lo assumir o controle das interfaces de rede:

# Desabilitando o networkd e reiniciando o NetworkManagersudo systemctl stop systemd-networkd && sudo systemctl restart NetworkManager

Arrumando o DNS

....

Extra - Instalando o dnsmasq

Por que usar o dnsmasq? Ele é mais poderoso, flexível e maduro que o DNS resolver do systemd-networkd, permite fazer cache de DNS e outras funções mais.

Por padrão o dnsmasq-base já é instalado com o NetworkManager, mas você pode ter certeza instalando-o assim:

sudo apt install dnsmasq-base

Mas qual a diferença entre dnsmasq e dnsmasq-base?

O dnsmasq-base é uma versão leve do dnsmasq que funciona integrada ao NetworkManager, dessa forma não há um serviço exclusivo para ele, se não o próprio serviço do NetworkManager.

Você pode escolher instalar o dnsmasq completo também, fica à sua escolha. Neste tutorial vamos usar apenas o dnsmasq-base.

Diga para o NetworkManager usar o dnmasq da seguinte forma:

# Adicione um arquivo novo nas configurações do Network Managersudo nano /etc/NetworkManager/conf.d/dns.conf# E insira o seguinte[main]dns=dnsmasq# Agora reinicie o Network Managersudo systemctl restart NetworkManager

Continuação para o Ubuntu e outros sistemas que estejam usando o systemd-networkd para gerenciar o DNS

Agora precisamos parar e desabilitar o systemd-networkd (pois entra em conflito com o network manager) e o systemd-resolved (pois entra em conflito com o dnsmasq).

sudo systemctl stop systemd-networkdsudo systemctl disable systemd-networkdsudo systemctl stop systemd-resolvedsudo systemctl disable systemd-resolved

Temos também que apagar o arquivo /etc/resolv.conf, pois ele é um link simbólico (symlink) para um arquivo controlado pelo systemd-networkd.

sudo rm /etc/resolv.conf

Reinicie o NetworkManager para fazer com que ele tome controle do arquivo resolv.conf

sudo systemctl restart NetworkManager

Agora visualize o arquivo resolv.conf, ele terá um comentário do NetworkManager

cat /etc/resolv.conf

A saída é algo assim (perceba o "Generated by NetworkManager", isso é importante):

# Generated by NetworkManagernameserver 127.0.1.1

Testando se o dnsmask está funcionando

Para testar se o dnsmask está funcionando, verifique se o serviço dele está escutando requisições DNS na porta 53 no ip 127.0.0.1

sudo lsof -i -P -n | grep LISTEN

E aparecerá algo tipo:

lightdm    1035             root   11u  IPv4   30973      0t0  TCP *:5900 (LISTEN)sshd       1038             root    3u  IPv4   28056      0t0  TCP *:22 (LISTEN)sshd       1038             root    4u  IPv6   28058      0t0  TCP *:22 (LISTEN)dnsmasq    1287           nobody    5u  IPv4   32930      0t0  TCP 127.0.0.1:53 (LISTEN)

Verifique se um serviço chamado systemd-resolve está ativo e escutando também na porta 53... se sim, isso significa que o systemd-resolved ainda está ligado e pode entrar em conflito com o dnsmasq, desabilite-o.

Perceba o nome dnmasq, o ip e a porta
127.0.0.1:53 (LISTEN)

Você também pode verificar em um gerenciador de tarefas como htop

sudo htop# Digite F4 e dnsmasq# aparecerá algo assim:PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command1287 nobody     20   0 19768  1236  1096 S  0.0  0.0  0:02.24 │  ├+ /usr/sbin/dnsmasq --no-resolv --keep-in-foreground

Referências

Configurando dnsmasq (mas é o dnsmasq completo, não apenas dnsmasq-base)
https://computingforgeeks.com/install-and-configure-dnsmasq-on-ubuntu/

Dnsmasq tips and tricks
https://www.linux.com/topic/networking/advanced-dnsmasq-tips-and-tricks/

Alterando configurações DNS do networkd
https://askubuntu.com/questions/1012641/dns-set-to-systemds-127-0-0-53-how-to-change-permanently

Dnsmasq using network manager
https://superuser.com/questions/681993/using-dnsmasq-with-networkmanager

Resolvendo conflitos entre dnsmasq e systemd resolved
https://unix.stackexchange.com/questions/304050/how-to-avoid-conflicts-between-dnsmasq-and-systemd-resolved

You should also read: