109.2 Lição 2
Certificação: |
LPIC-1 |
---|---|
Versão: |
5.0 |
Tópico: |
109 Fundamentos de rede |
Objetivo: |
109.2 Configuração de rede persistente |
Lição: |
2 de 2 |
Introdução
O Linux oferece suporte a praticamente todas as tecnologias de rede usadas para conectar servidores, contêineres, máquinas virtuais, desktops e dispositivos móveis. As conexões entre todos esses nós da rede podem ser dinâmicas e heterogêneas, exigindo, assim, um gerenciamento adequado por parte do sistema operacional instalado.
No passado, as distribuições desenvolviam suas próprias soluções personalizadas para gerenciar a infraestrutura de rede dinâmica. Hoje, ferramentas como o NetworkManager e o systemd fornecem recursos mais abrangentes e integrados para atender a todas as demandas específicas.
NetworkManager
A maioria das distribuições Linux adota o daemon do serviço NetworkManager para configurar e controlar as conexões de rede do sistema. A finalidade do NetworkManager é tornar a configuração da rede o mais simples e automática possível. Ao usarmos o DHCP, por exemplo, o NetworkManager organiza as mudanças de rota, a busca de endereço IP e atualizações da lista local de servidores DNS, se necessário. Quando há conexões com e sem fio disponíveis, o NetworkManager prioriza a conexão com fio por padrão. O NetworkManager tenta manter ao menos uma conexão ativa o tempo todo, sempre que possível.
Note
|
Uma solicitação usando DHCP (Dynamic Host Configuration Protocol, ou Protocolo de configuração de host dinâmico) geralmente é enviada por meio do adaptador de rede assim que o link para a rede é estabelecido. O servidor DHCP que está ativo na rede responde com as configurações (endereço IP, máscara de rede, rota padrão, etc.) que o solicitante deve usar para se comunicar por meio do protocolo IP. |
Por padrão, o daemon do NetworkManager controla as interfaces de rede não mencionadas no arquivo /etc/network/interfaces
. Ele faz isso para não interferir em outros métodos de configuração que também podem estar presentes, modificando assim somente as interfaces desacompanhadas.
O serviço NetworkManager é executado em segundo plano com privilégios de root e aciona as ações necessárias para manter o sistema online. Os usuários comuns podem criar e modificar conexões de rede com aplicativos clientes que, mesmo sem privilégios de root, são capazes de se comunicar com o serviço subjacente para executar as ações solicitadas.
Existem aplicativos cliente do NetworkManager para a linha de comando e para o ambiente gráfico. No caso deste último, o aplicativo cliente é incluído como um acessório do ambiente de desktop (com nomes como nm-tray, network-manager-gnome, nm-applet ou plasma-nm) e geralmente fica acessível por meio de um ícone indicador no canto da barra da área de trabalho ou no utilitário de configuração do sistema.
Na linha de comando, o próprio NetworkManager fornece dois programas clientes: nmcli
e nmtui
. Ambos trazem os mesmos recursos básicos, mas o nmtui
tem uma interface baseada em curses, ao passo que o nmcli
é um comando mais abrangente que também pode ser usado em scripts. O comando nmcli
separa todas as propriedades relacionadas à rede controladas pelo NetworkManager em categorias chamadas objetos:
general
-
Status e operações gerais do NetworkManager
networking
-
Controle geral de rede.
radio
-
Controles de rádio do NetworkManager.
connection
-
Conexões do NetworkManager.
device
-
Dispositivos gerenciados pelo NetworkManager.
agent
-
Agente secreto ou agente polkit do NetworkManager.
monitor
-
Monitora as mudanças do NetworkManager.
O nome do objeto é o principal argumento do comando nmcli
. Para mostrar o status geral de conectividade do sistema, por exemplo, o objeto geral
deve ser dado como argumento:
$ nmcli general STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN connected full enabled enabled enabled enabled
A coluna STATE
informa se o sistema está conectado a uma rede ou não. Se a conexão for limitada devido a uma configuração externa incorreta ou a restrições de acesso, a coluna CONNECTIVITY
não relatará um status de conectividade full
. Se Portal
aparecer na coluna CONNECTIVITY
, isso significa que são necessárias etapas extras de autenticação (geralmente por meio do navegador web) para concluir o processo de conexão. As colunas restantes mostram o status das conexões sem fio (se houver), seja WIFI
ou WWAN
(Wide Wireless Area Network, ou seja, redes celulares). O sufixo HW
indica que o status corresponde ao dispositivo de rede e não à conexão de rede do sistema, ou seja, informa se o hardware está habilitado ou desabilitado para economizar energia.
Além do argumento de objeto, o nmcli
também precisa de um argumento de comando para ser executado. O comando status
é usado por padrão se nenhum argumento de comando estiver presente, de modo que o comando nmcli general
é interpretado, na verdade, como nmcli general status
.
Praticamente não é necessário realizar nenhuma ação quando o adaptador de rede está conectado diretamente ao ponto de acesso por meio de cabos, mas as redes sem fio exigem mais interação para aceitar novos membros. O nmcli
facilita o processo de conexão e salva as configurações para permitir uma conexão automática no futuro e, portanto, é muito útil para laptops ou qualquer outro dispositivo móvel.
Antes de conectar-se ao wi-fi, é conveniente listar primeiro as redes disponíveis na área local. Se o sistema tiver um adaptador wi-fi funcionando, o objeto device
irá usá-lo para verificar as redes disponíveis com o comando nmcli device wifi list
:
$ nmcli device wifi list IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY 90:F6:52:C5:FA:12 Hypnotoad Infra 11 130 Mbit/s 67 ▂▄▆_ WPA2 10:72:23:C7:27:AC Jumbao Infra 1 130 Mbit/s 55 ▂▄__ WPA2 00:1F:33:33:E9:BE NETGEAR Infra 1 54 Mbit/s 35 ▂▄__ WPA1 WPA2 A4:33:D7:85:6D:B0 AP53 Infra 11 130 Mbit/s 32 ▂▄__ WPA1 WPA2 98:1E:19:1D:CC:3A Bruma Infra 1 195 Mbit/s 22 ▂___ WPA1 WPA2
A maioria dos usuários provavelmente usará o nome na coluna SSID
para identificar a rede de interesse. Por exemplo, o comando nmcli
pode se conectar à rede de nome Hypnotoad
usando o objeto device
novamente:
$ nmcli device wifi connect Hypnotoad
Se o comando for executado dentro de um emulador de terminal no ambiente gráfico, aparecerá uma caixa de diálogo solicitando a senha da rede. Quando executado em um console de texto, a senha pode ser fornecida junto com os outros argumentos:
$ nmcli device wifi connect Hypnotoad password MyPassword
Se a rede wi-fi esconde seu nome SSID, o nmcli
ainda assim pode se conectar a ela com os argumentos extras hidden yes
:
$ nmcli device wifi connect Hypnotoad password MyPassword hidden yes
Se o sistema tiver mais de um adaptador wi-fi, indicamos o que deve ser usado com ifname
. Por exemplo, para se conectar usando o adaptador de nome wlo1
:
$ nmcli device wifi connect Hypnotoad password MyPassword ifname wlo1
Depois que a conexão for estabelecida, o NetworkManager dará um nome a ela de acordo com o SSID correspondente (no caso de uma conexão wi-fi) e manterá esse nome nas conexões futuras. O nome das conexões e seus UUIDs são listados pelo comando nmcli connection show
:
$ nmcli connection show NAME UUID TYPE DEVICE Ethernet 53440255-567e-300d-9922-b28f0786f56e ethernet enp3s5 tun0 cae685e1-b0c4-405a-8ece-6d424e1fb5f8 tun tun0 Hypnotoad 6fdec048-bcc5-490a-832b-da83d8cb7915 wifi wlo1 4G a2cf4460-0cb7-42e3-8df3-ccb927f2fd88 gsm --
O tipo de cada conexão é mostrado — pode ser ethernet
, wifi
, tun
, gsm
, bridge
, etc. — bem como o dispositivo ao qual estão associadas. Para executar ações em uma conexão específica, é preciso fornecer seu nome ou UUID. Para desativar a conexão Hypnotoad
, por exemplo:
$ nmcli connection down Hypnotoad Connection 'Hypnotoad' successfully deactivated
Da mesma forma, o comando nmcli connection up Hypnotoad
pode ser usado para ativar a conexão, pois agora ela está salva pelo NetworkManager. Também é possível se reconectar com o nome da interface, mas, nesse caso, usamos o objeto device
:
$ nmcli device disconnect wlo2 Device 'wlo1' successfully disconnected.
O nome da interface também pode ser usado para restabelecer a conexão:
$ nmcli device connect wlo2 Device 'wlo1' successfully activated with '833692de-377e-4f91-a3dc-d9a2b1fcf6cb'.
Observe que o UUID da conexão muda a cada vez que a conexão é ativada e, portanto, é preferível usar o nome para manter a consistência.
Se houver um adaptador sem fio disponível, mas ele não estiver sendo usado, ele pode ser desligado para economizar energia. Desta vez, o objeto radio deve ser passado para nmcli
:
$ nmcli radio wifi off
Obviamente, o dispositivo sem fio pode ser ativado novamente com o comando nmcli radio wifi on
.
Uma vez que as conexões forem estabelecidas, nenhuma interação manual será necessária no futuro, pois o NetworkManager identifica as redes conhecidas disponíveis e se conecta a elas automaticamente. Se necessário, o NetworkManager possui plugins que podem estender suas funcionalidades, por exemplo para suportar conexões VPN.
systemd-networkd
Os sistemas que rodam o systemd podem opcionalmente usar os daemons nativos para gerenciar a conectividade de rede: systemd-networkd
para controlar as interfaces de rede e systemd-resolution
para gerenciar a resolução de nome local. Esses serviços são compatíveis com os métodos de configuração legados do Linux, mas a configuração das interfaces de rede em particular tem recursos que vale a pena conhecer.
Os arquivos de configuração usados pelo systemd-networkd para configurar as interfaces de rede podem ser encontrados em um dos três diretórios a seguir:
/lib/systemd/network
-
O diretório de rede do sistema.
/run/systemd/network
-
O diretório volátil de tempo de execução da rede.
/etc/systemd/network
-
O diretório local de administração da rede.
Os arquivos são processados em ordem lexicográfica, por isso é recomendável iniciar seus nomes com números para facilitar o ordenamento e a leitura.
Os arquivos em /etc
têm a prioridade mais alta, ao passo que os arquivos em /run
têm precedência sobre os arquivos com o mesmo nome em /lib
. Ou seja, se dois ou mais arquivos de configuração em diretórios diferentes tiverem o mesmo nome, o systemd-networkd ignora os que tiverem menor prioridade. Essa maneira de separar os arquivos permite mudar as configurações da interface sem que seja necessário modificar os arquivos originais: as modificações podem ser postas em /etc/systemd/network
para sobrescrever as existentes em /lib/systemd/network
.
A finalidade de cada arquivo de configuração depende de seu sufixo. Os nomes de arquivos que terminam em .netdev
são usados pelo systemd-networkd para criar dispositivos de rede virtuais, como dispositivos bridge ou tun. Os arquivos que terminam em .link
definem configurações de baixo nível para a interface de rede correspondente. O systemd-networkd detecta e configura os dispositivos de rede automaticamente conforme eles aparecem — além de ignorar dispositivos já configurados por outros meios — e, portanto, há pouca necessidade de adicionar esses arquivos na maioria das situações.
O sufixo mais importante é .network
. Os arquivos que empregam esse sufixo podem ser usados para configurar endereços de rede e rotas. Tal como acontece com os outros tipos de arquivos de configuração, o nome do arquivo define a ordem em que ele será processado. A interface de rede à qual o arquivo de configuração se refere é definida na seção [Match]`
dentro do arquivo.
Por exemplo, a interface de rede ethernet enp3s5
pode ser selecionada dentro do arquivo /etc/systemd/network/30-lan.network
graças à entrada Name=enp3s5
na seção [Match]
:
[Match] Name=enp3s5
Também é possível usar uma lista de nomes separados por espaços em branco para selecionar diversas interfaces de rede de uma vez neste mesmo arquivo. Os nomes podem conter globs no estilo do shell, como en*
. Outras entradas permitem usar regras diferentes, como por exemplo selecionar um dispositivo de rede por seu endereço MAC:
[Match] MACAddress=00:16:3e:8d:2b:5b
As configurações do dispositivo estão na seção [Network]
do arquivo. Uma configuração de rede estática simples requer apenas as entradas Address
e Gateway
:
[Match] MACAddress=00:16:3e:8d:2b:5b [Network] Address=192.168.0.100/24 Gateway=192.168.0.1
Para usar o protocolo DHCP em vez de endereços IP estáticos, a entrada DHCP
deve ser usada:
[Match] MACAddress=00:16:3e:8d:2b:5b [Network] DHCP=yes
O serviço systemd-networkd tenta buscar os endereços IPv4 e IPv6 para a interface de rede. Para usar apenas IPv4, empregamos DHCP=ipv4
. Da mesma forma, DHCP=ipv6
ignora as configurações IPv4 e usa apenas o endereço IPv6 fornecido.
As redes sem fio protegidas por senha também podem ser configuradas pelo systemd-networkd, mas o adaptador de rede já deve estar autenticado na rede antes que o systemd-networkd possa configurá-lo. A autenticação é realizada pelo WPA supplicant, um programa dedicado a configurar adaptadores de rede para redes protegidas por senha.
O primeiro passo é criar o arquivo de credenciais com o comando wpa_passphrase
:
# wpa_passphrase MyWifi > /etc/wpa_supplicant/wpa_supplicant-wlo1.conf
Este comando pega a frase-senha para a rede sem fio MyWifi
da entrada padrão e armazena seu hash em /etc/wpa_supplicant/wpa_supplicant-wlo1.conf
. Note que o nome do arquivo deve conter o nome apropriado da interface sem fio, por isso o wlo1
no nome do arquivo.
O gerenciador do systemd lê os arquivos de frase-senha do WPA em /etc/wpa_supplicant/
e cria o serviço correspondente para executar o WPA supplicant e abrir a interface. O arquivo de frase secreta criado no exemplo terá uma unidade de serviço correspondente chamada wpa_supplicant@wlo1.service
. O comando systemctl start wpa_supplicant@wlo1.service
associará o adaptador sem fio ao ponto de acesso remoto. O comando systemctl enable wpa_supplicant@wlo1.service
tornará essa associação automática durante a inicialização.
Finalmente, um arquivo .network
correspondente à interface wlo1
deve estar presente em /etc/systemd/network/
, já que o systemd-networkd vai usá-lo para configurar a interface assim que o WPA supplicant encerrar a associação com o ponto de acesso.
Exercícios Guiados
-
O que significa a palavra
Portal
na colunaCONNECTIVITY
na saída do comandonmcli general status
? -
Em um terminal de console, como um usuário comum pode usar o comando
nmcli
para se conectar à rede sem fioMyWifi
protegida pela senhaMyPassword
? -
Qual comando pode ativar o adaptador sem fio se ele tiver sido desabilitado anteriormente pelo sistema operacional?
-
Em que diretório devem ser postos os arquivos de configuração personalizados quando o systemd-networkd está gerenciando as interfaces de rede?
Exercícios Exploratórios
-
Como um usuário pode executar o comando
nmcli
para excluir uma conexão não utilizada chamadaHotel Internet
? -
O NetworkManager varre redes wi-fi periodicamente e o comando
nmcli device wifi list
lista apenas os pontos de acesso encontrados na última varredura. Como usar o comandonmcli
para pedir que o NetworkManager verifique novamente todos os pontos de acesso disponíveis? -
Qual entrada
name
deve ser usada na seção[Match]
de um arquivo de configuração do systemd-networkd para encontrar todas as interfaces ethernet? -
Como o comando
wpa_passphrase
deve ser executado para usar a frase-senha fornecida como argumento e não a partir da entrada padrão?
Resumo
Esta lição cobre as ferramentas comuns usadas no Linux para gerenciar conexões de rede heterogêneas e dinâmicas. Embora a maioria dos métodos de configuração não exija intervenção do usuário, às vezes isso é necessário, e ferramentas como o NetworkManager e o systemd-networkd podem reduzir o incômodo ao mínimo. A lição abrange os seguintes tópicos:
-
Como o NetworkManager e o systemd-networkd se integram ao sistema.
-
Como o usuário pode interagir com o NetworkManager e o systemd-networkd.
-
Configuração básica de interfaces com o NetworkManager e o systemd-networkd.
Os conceitos, comandos e procedimentos abordados foram:
-
Comandos do cliente do NetworkManager:
nmtui
andnmcli
. -
Varredura e conexão com redes sem fio usando os comandos apropriados do
nmcli
. -
Conexões de rede wi-fi persistentes usando o systemd-networkd.
Respostas aos Exercícios Guiados
-
O que significa a palavra
Portal
na colunaCONNECTIVITY
na saída do comandonmcli general status
?Significa que são necessárias etapas extras de autenticação (geralmente por meio do navegador web) para concluir o processo de conexão.
-
Em um terminal de console, como um usuário comum pode usar o comando
nmcli
para se conectar à rede sem fioMyWifi
protegida pela senhaMyPassword
?Em um terminal somente texto, o comando seria
$ nmcli device wifi connect MyWifi password MyPassword
-
Qual comando pode ativar o adaptador sem fio se ele tiver sido desabilitado anteriormente pelo sistema operacional?
$ nmcli radio wifi on
-
Em que diretório devem ser postos os arquivos de configuração personalizados quando o systemd-networkd está gerenciando as interfaces de rede?
No diretório local de administração da rede:
/etc/systemd/network
.
Respostas aos Exercícios Exploratórioss
-
Como um usuário pode executar o comando
nmcli
para excluir uma conexão não utilizada chamadaHotel Internet
?$ nmcli connection delete "Hotel Internet"
-
O NetworkManager varre redes wi-fi periodicamente e o comando
nmcli device wifi list
lista apenas os pontos de acesso encontrados na última varredura. Como usar o comandonmcli
para pedir que o NetworkManager verifique novamente todos os pontos de acesso disponíveis?O usuário root pode executar
nmcli device wifi rescan
para fazer o NetworkManager verificar novamente os pontos de acesso disponíveis. -
Qual entrada
name
deve ser usada na seção[Match]
de um arquivo de configuração do systemd-networkd para encontrar todas as interfaces ethernet?A entrada
name=en*
, já queen
é o prefixo para as interfaces ethernet no Linux e o systemd-networkd aceita globs do tipo shell. -
Como o comando
wpa_passphrase
deve ser executado para usar a frase-senha fornecida como argumento e não a partir da entrada padrão?A senha deve ser fornecida logo após o SSID, como em
wpa_passphrase MyWifi MyPassword
.