Como configurar a rede IP com ‘nmcli’ no Linux
Como administrador Linux, você tem várias ferramentas para configurar suas conexões de rede, como nmtui, seu NetworkManager com interface gráfica de usuário GNOME e, claro, nmcli (ferramenta de linha de comando do gerenciador de rede).
Tenho observado muitos administradores usando nmtui por sua simplicidade. No entanto, usar nmcli economiza seu tempo, aumenta sua confiança, permite a integração em scripts e é a principal ferramenta para solucionar problemas de rede de servidores Linux, restaurando rapidamente sua funcionalidade.
Tendo notado vários comentários buscando ajuda com nmcli, decidi escrever este artigo. Claro, você deve sempre ler as páginas de manual com atenção (elas são o recurso número 1 para você). Meu objetivo é economizar seu tempo e fornecer algumas dicas úteis.
Sintaxe do comando nmcli
A sintaxe de nmcli é:
nmcli [OPTIONS] OBJECT {COMMAND | help}
Onde OBJECT
é geral, rede, rádio, conexão, dispositivo e agente.
Verifique o status do dispositivo de rede no Linux
Um bom ponto de partida seria verificar nossos dispositivos:
nmcli dev status
DEVICE TYPE STATE CONNECTION
docker0 bridge connected docker0
virbr0 bridge connected virbr0
enp0s3 ethernet connected enp0s3
virbr0-nic ethernet disconnected --
lo loopback unmanaged --
Como podemos ver na primeira coluna, há uma lista dos nossos dispositivos de rede. Temos uma placa de rede com o nome enp0s3
. Na sua máquina, você poderá ver nomes diferentes.
A nomenclatura depende do tipo de placa de rede (se é integrada, uma placa PCI, etc.). Na última coluna, vemos nossos arquivos de configuração, que são usados por nossos dispositivos para se conectar à rede
É simples entender que nossos dispositivos, por si só, nada podem fazer. Eles precisam que criemos um arquivo de configuração para instruí-los sobre como obter conectividade de rede. Esses arquivos também são chamados de ‘perfis de conexão’ e os encontramos no diretório /etc/sysconfig/network-scripts.
cd /etc/sysconfig/network-scripts/
ls
Saída de amostra
ifcfg-enp0s3 ifdown-isdn ifup ifup-plip ifup-tunnel
ifcfg-lo ifdown-post ifup-aliases ifup-plusb ifup-wireless
ifdown ifdown-ppp ifup-bnep ifup-post init.ipv6-global
ifdown-bnep ifdown-routes ifup-eth ifup-ppp network-functions
ifdown-eth ifdown-sit ifup-ib ifup-routes network-functions-ipv6
ifdown-ib ifdown-Team ifup-ippp ifup-sit
ifdown-ippp ifdown-TeamPort ifup-ipv6 ifup-Team
ifdown-ipv6 ifdown-tunnel ifup-isdn ifup-TeamPort
Como você pode ver aqui, os arquivos com nomes começando com 'ifcfg-'
(configuração de interface) são perfis de conexão. Quando criamos uma nova conexão ou modificamos uma existente com nmcli ou nmtui, os resultados são salvos aqui como perfis de conexão.
Vou mostrar dois deles da minha máquina, um com configuração dhcp e outro com ip estático.
cat ifcfg-static1
cat ifcfg-Myoffice1
Percebemos que algumas propriedades têm valores diferentes e outras não existem se não forem necessárias.
Vamos dar uma olhada rápida nos mais importantes.
TYPE
– temos o tipo Ethernet aqui. Também poderíamos ter WiFi, equipe, vínculo e outros.DEVICE
– o nome do dispositivo de rede associado a este perfil.BOOTPROTO
– se tiver o valor “dhcp ”, então nosso perfil de conexão obtém um IP dinâmico do servidor DHCP. Se tiver o valor “nenhum”, então ele não usa um IP dinâmico e provavelmente atribuímos um IP estático.IPADDR
– é o IP estático que atribuímos ao nosso perfil.PREFIX
– a máscara de sub-rede. Um valor 24 significa 255.255.255.0. Você pode entender melhor a máscara de sub-rede anotando seu formato binário. Por exemplo, valores de 16, 24 e 26 significam que os primeiros 16, 24< ou 26 bits, respectivamente, são definidos como 1 e o restante é 0. Isso define o endereço de rede e o intervalo de endereços IP que podem ser atribuídos.GATEWAY
– o IP do gateway.DNS1
,DNS2
– dois servidores DNS que queremos usar.ONBOOT
– se tiver o valor “yes” significa que ao inicializar nosso computador irá ler este perfil e tentar atribuí-lo ao seu dispositivo.
Verifique a conexão de rede no Linux
Agora, vamos seguir em frente e verificar nossas conexões:
nmcli con show
A última coluna de dispositivos nos ajuda a entender qual conexão está ‘UP‘ e funcionando e qual não está. Na imagem acima você pode ver as duas conexões ativas: Myoffice1 e enp0s8.
Dica: Se quiser ver apenas as conexões ativas, digite:
nmcli con show -a
Dica: você pode usar o preenchimento automático clicando em Tab
quando usar nmcli, mas é melhor usar formato mínimo do comando.
Assim, os seguintes comandos são iguais:
nmcli connection show
nmcli con show
nmcli c s
Verifique o endereço IP no Linux
Se eu verificar os endereços IP dos meus dispositivos:
ip a
Vejo que meu dispositivo enp0s3
pegou o IP 192.168.1.6 do servidor dhcp porque o perfil de conexão Myoffice1
que está ativo tem uma configuração dhcp.
Se eu colocar “up ”
meu perfil de conexão com o nome static1
então meu dispositivo usará o IP estático 192.168.1.40 conforme definido no perfil de conexão.
nmcli con down Myoffice1 ; nmcli con up static1
nmcli con show
Vamos ver o endereço IP novamente:
ip a
Podemos fazer nosso primeiro perfil de conexão. As propriedades mínimas que devemos definir são type, ifname, e con-name:
type
– para o tipo de conexão.ifname
– para o nome do dispositivo atribuído à nossa conexão.con-name
– para o nome da conexão.
Criando uma nova conexão Ethernet no Linux
Vamos fazer uma nova conexão ethernet com o nome Myhome1
, atribuída a um dispositivo enp0s3
:
nmcli con add type ethernet con-name Myhome1 ifname enp0s3
Verifique sua configuração:
cat ifcfg-Myhome1
Como você pode ver, tem BOOTPROTO=dhcp
, porque não fornecemos nenhum endereço IP estático.
Dica: Podemos modificar qualquer conexão com o comando “nmcli con mod“
. Porém, se você modificar uma conexão dhcp e alterá-la para estática, não se esqueça de alterá-la “ipv4.method ”
de “auto ”
para “manual ”
. Caso contrário, você terá dois endereços IP: um do servidor dhcp e outro estático.
Vamos fazer um novo perfil de conexão Ethernet com nome static2
, que será atribuído a um dispositivo enp0s3
, com IP estático 192.168.1.50, sub-rede máscara 255.255.255.0=24, e gateway 192.168.1.1.
nmcli con add type ethernet con-name static2 ifname enp0s3 ip4 192.168.1.50/24 gw4 192.168.1.1
Verifique sua configuração:
cat ifcfg-static2
Modifique servidores DNS no Linux
Vamos modificar o último perfil de conexão e adicionar dois servidores DNS.
nmcli con mod static2 ipv4.dns “8.8.8.8 8.8.4.4”
Dica: Há algo aqui que você deve prestar atenção: as propriedades do endereço IP e do gateway têm nomes diferentes quando você adiciona e quando você modifica uma conexão. Ao adicionar conexões você usa “ip4 ”
e “gw4 ”
, enquanto ao modificá-las você usa “ipv4 ”
e “ gwv4 ”
.
Abra a conexão Ethernet no Linux
Agora vamos abrir este perfil de conexão:
nmcli con down static1 ; nmcli con up static2
Como você pode ver, o dispositivo enp0s3
agora tem um endereço IP 192.168.1.50.
ip a
Dica: Existem muitas propriedades que você pode modificar. Se você não se lembra deles de cor, você pode se ajudar digitando “nmcli con show ”
e depois o nome da conexão:
nmcli con show static2
Você pode modificar todas essas propriedades escritas em letras minúsculas.
Por exemplo: quando você desativa um perfil de conexão, o NetworkManager procura outro perfil de conexão e o traz automaticamente. (Deixo como exercício para verificar). Se você não deseja que seu perfil de conexão se conecte automaticamente:
nmcli con mod static2 connection.autoconnect no
O último exercício é muito útil: você criou um perfil de conexão mas deseja que ele seja utilizado por usuários específicos. É bom classificar seus usuários!
Definir permissões de conexão Ethernet para usuário no Linux
Permitimos que apenas a usuária stella use este perfil:
nmcli con mod static2 connection.permissions stella
Dica: Se quiser dar permissões para mais de um usuário, você deve digitar user:user1,user2
sem espaço em branco entre eles:
nmcli con mod static2 connection.permissions user:stella,john
Se você fizer login como outro usuário, não poderá “up” este perfil de conexão:
nmcli con show
nmcli con up static2
ls /etc/sysconfig/network-scripts
Uma mensagem de erro diz que a conexão ‘static2’ não existe, mesmo que vejamos que ela existe. Isso ocorre porque um usuário atual não tem permissão para abrir esta conexão.
Conclusão: não hesite em usar nmcli. É fácil e útil.