109.2 Lição 1
Certificação: |
LPIC-1 |
---|---|
Versão: |
5.0 |
Tópico: |
109 Fundamentos de rede |
Objetivo: |
109.2 Configuração de rede persistente |
Lição: |
1 de 2 |
Introdução
Em qualquer rede TCP/IP, cada nó deve configurar seu adaptador de rede para atender aos requisitos da rede. Caso contrário, eles não poderão se comunicar uns com os outros. Portanto, o administrador do sistema deve fornecer a configuração básica para que o sistema operacional seja capaz de configurar a interface de rede apropriada, além de se identificar e identificar os recursos básicos da rede sempre que for inicializado.
As configurações de rede não são dependentes do sistema operacional, mas cada um deles tem seus próprios métodos para armazenar e aplicar essas configurações. Os sistemas Linux dependem de configurações armazenadas em arquivos de texto simples no diretório /etc
para ativar a conectividade de rede durante a inicialização. Vale a pena saber como esses arquivos são usados para evitar a perda de conectividade devido a uma configuração local incorreta.
A Interface de Rede
Interface de rede é o termo pelo qual o sistema operacional se refere ao canal de comunicação configurado para funcionar com o hardware de rede conectado ao sistema, como um dispositivo ethernet ou wi-fi. A exceção é a interface loopback, usada quando o sistema operacional precisa estabelecer uma conexão consigo mesmo, mas o objetivo principal de uma interface de rede é fornecer uma rota através da qual os dados locais podem ser enviados e os dados remotos, recebidos. Se a interface de rede não estiver configurada corretamente, o sistema operacional não será capaz de se comunicar com outras máquinas na rede.
Na maioria dos casos, as configurações de interface corretas são definidas por padrão ou personalizadas durante a instalação do sistema operacional. Ainda assim, essas configurações geralmente precisam ser inspecionadas ou mesmo modificadas quando a comunicação não está funcionando corretamente ou quando o comportamento da interface requer personalização.
O Linux tem muitos comandos para listar as interfaces de rede presentes no sistema, mas nem todos estão disponíveis em todas as distribuições. O comando ip
, no entanto, faz parte do conjunto básico de ferramentas de rede empacotadas com todas as distribuições Linux e pode ser usado para listar as interfaces de rede. O comando completo para mostrar as interfaces é ip link show
:
$ ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp3s5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:16:3e:8d:2b:5b brd ff:ff:ff:ff:ff:ff
Se disponível, o comando nmcli device
também pode ser usado:
$ nmcli device DEVICE TYPE STATE CONNECTION enp3s5 ethernet connected Gigabit Powerline Adapter lo loopback unmanaged --
Os comandos mostrados nos exemplos não modificam as configurações do sistema e, portanto, podem ser executados por um usuário sem privilégios. Ambos os comandos listam duas interfaces de rede: lo
(a interface de loopback) e enp3s5
(uma interface ethernet).
Os desktops e laptops que executam Linux geralmente têm duas ou três interfaces de rede predefinidas, uma para a interface virtual de loopback e as outras atribuídas ao hardware de rede encontrado pelo sistema. Os servidores e dispositivos de rede que executam Linux, por outro lado, podem ter dezenas de interfaces de rede, mas os mesmos princípios se aplicam a todas elas. A abstração fornecida pelo sistema operacional permite a configuração de interfaces de rede usando os mesmos métodos, independentemente do hardware usado.
No entanto, é útil conhecer os detalhes sobre o hardware subjacente de uma interface para entender melhor o que está acontecendo quando a comunicação não funciona conforme o esperado. Em um sistema em que há muitas interfaces de rede disponíveis, nem sempre é óbvio saber qual delas corresponde ao wi-fi e qual corresponde à ethernet, por exemplo. Por esse motivo, o Linux usa uma convenção para a nomenclatura de interfaces que ajuda a identificar qual interface de rede corresponde a qual dispositivo e porta.
Nomes de interface
As distribuições Linux mais antigas atribuíam às interfaces de rede ethernet nomes como eth0
, eth1
, etc., numeradas de acordo com a ordem em que o kernel identificava os dispositivos. As interfaces wireless eram nomeadas wlan0
, wlan1
, etc. Esta convenção de nomenclatura, no entanto, não esclarece qual porta Ethernet específica corresponde à interface eth0
, por exemplo. Dependendo de como o hardware fosse detectado, era possível inclusive que duas interfaces de rede trocassem de nome após uma reinicialização.
Para evitar essa ambigüidade, os sistemas Linux mais recentes empregam uma convenção de nomenclatura previsível para as interfaces de rede, criando uma aproximação maior entre o nome da interface e a conexão de hardware subjacente.
Nas distribuições Linux que usam o esquema de nomenclatura do systemd, todos os nomes de interfaces começam com um prefixo de dois caracteres que indica o tipo de interface:
en
-
Ethernet
ib
-
InfiniBand
sl
-
Serial line IP (slip)
wl
-
Rede de área local sem fio (WLAN)
ww
-
Rede de longa distância sem fio (WWAN)
De prioridade mais alta para mais baixa, as seguintes regras são usadas pelo sistema operacional para nomear e numerar as interfaces de rede:
-
Nomear a interface de acordo com o índice fornecido pela BIOS ou pelo firmware dos dispositivos incorporados, por exemplo,
eno1
. -
Nomear a interface de acordo com o índice do slot PCI Express, conforme fornecido pela BIOS ou firmware, por exemplo,
ens1
. -
Nomear a interface de acordo com seu endereço no barramento correspondente, por exemplo,
enp3s5
. -
Nomear a interface de acordo com o endereço MAC da interface, por exemplo,
enx78e7d1ea46da
. -
Nomear a interface usando a convenção legada, por exemplo,
eth0
.
É correto pressupor, por exemplo, que a interface de rede enp3s5
recebeu esse nome porque não se encaixava nos dois primeiros métodos de nomenclatura, de forma que seu endereço no barramento e no slot correspondentes foi usado. O endereço do dispositivo 03:05.0
, encontrado na saída do comando lspci
, revela o dispositivo associado:
$ lspci | fgrep Ethernet 03:05.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8110SC/8169SC Gigabit Ethernet (rev 10)
As interfaces de rede são criadas pelo próprio kernel do Linux, mas existem muitos comandos que podem ser usados para interagir com elas. Normalmente, a configuração ocorre automaticamente e não há necessidade de se alterar as configurações manualmente. Ainda assim, com o nome da interface, é possível informar ao kernel como proceder para configurá-la se necessário.
Gerenciamento da interface
Ao longo dos anos, vários programas foram desenvolvidos para interagir com os recursos de rede fornecidos pelo kernel do Linux. Embora o antigo comando ifconfig
ainda possa ser usado para fazer consultas e configurações de interface simples, ele agora está obsoleto devido ao seu suporte limitado a interfaces não ethernet. O ifconfig
foi substituído pelo comando ip
, que é capaz de gerenciar muitos outros aspectos das interfaces TCP/IP, como rotas e túneis.
Para a maioria das tarefas comuns, a riqueza de recursos do comando ip
acaba sendo excessiva, e por isso existem comandos auxiliares que facilitam a ativação e configuração das interfaces de rede. Os comandos ifup
e ifdown
servem para configurar interfaces de rede com base nas definições de interface encontradas no arquivo /etc/network/interfaces
. Embora possam ser invocados manualmente, esses comandos são, em geral, executados automaticamente durante a inicialização do sistema.
Todas as interfaces de rede gerenciadas por ifup
e ifdown
devem estar listadas no arquivo /etc/network/interfaces
. O formato usado no arquivo é simples: as linhas que começam com a palavra auto
são usadas para identificar as interfaces físicas a serem acessadas quando o ifup
é executado com a opção -a
. O nome da interface deve seguir a palavra auto
na mesma linha. Todas as interfaces marcadas como auto
são ativadas no momento da inicialização, na ordem em que estão listadas.
Warning
|
Os métodos de configuração de rede usados por |
A configuração da interface em si é escrita em outra linha, começando com a palavra iface
, seguida pelo nome da interface, o nome da família de endereços usada por ela e o nome do método empregado para configurá-la. O exemplo a seguir mostra um arquivo de configuração básico para as interfaces lo
(loopback) e enp3s5
:
auto lo iface lo inet loopback auto enp3s5 iface enp3s5 inet dhcp
A família de endereços deve ser inet
para as redes TCP/IP, mas também há suporte a redes IPX (ipx
) e IPv6 (inet6
). As interfaces de loopback usam o método de configuração loopback
. Com o método dhcp
, a interface usa as configurações de IP fornecidas pelo servidor DHCP da rede. As configurações de nosso exemplo permitem a execução do comando ifup
usando o nome de interface enp3s5
como argumento:
# ifup enp3s5 Internet Systems Consortium DHCP Client 4.4.1 Copyright 2004-2018 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Listening on LPF/enp3s5/00:16:3e:8d:2b:5b Sending on LPF/enp3s5/00:16:3e:8d:2b:5b Sending on Socket/fallback DHCPDISCOVER on enp3s5 to 255.255.255.255 port 67 interval 4 DHCPOFFER of 10.90.170.158 from 10.90.170.1 DHCPREQUEST for 10.90.170.158 on enp3s5 to 255.255.255.255 port 67 DHCPACK of 10.90.170.158 from 10.90.170.1 bound to 10.90.170.158 -- renewal in 1616 seconds.
Neste exemplo, o método escolhido para a interface enp3s5
foi dhcp
, de modo que o comando ifup
chamou um programa cliente DHCP para obter as configurações de IP do servidor DHCP. Da mesma forma, o comando ifdown enp3s5
pode ser usado para desativar a interface.
Nas redes sem um servidor DHCP, o método static
pode ser usado e as configurações de IP fornecidas manualmente em /etc/network/interfaces
. Por exemplo:
iface enp3s5 inet static address 192.168.1.2/24 gateway 192.168.1.1
As interfaces que usam o método static
não precisam de uma instrução auto
correspondente, pois são ativadas sempre que o hardware de rede é detectado.
Se a mesma interface tiver mais de uma entrada iface
, todos os endereços e opções configurados serão aplicados ao se abrir essa interface. Isso é útil para configurar endereços IPv4 e IPv6 na mesma interface, bem como para configurar diversos endereços do mesmo tipo em uma única interface.
Nomes locais e remotos
Uma configuração funcional de TCP/IP é apenas o primeiro passo para a usabilidade total da rede. Além de ser capaz de distinguir os nós da rede por seus números IP, o sistema deve poder identificá-los com nomes mais facilmente compreensíveis por seres humanos.
O nome pelo qual o sistema se identifica é personalizável e é aconselhável fazê-lo, mesmo se a máquina não for destinada a se conectar a uma rede. O nome local geralmente corresponde ao nome da rede da máquina, mas nem sempre. Se o arquivo /etc/hostname
existir, o sistema operacional usará o conteúdo da primeira linha como nome local, que a partir daí é chamado simplesmente de nome do host (hostname, em inglês). As linhas que começam com #
dentro de /etc/hostname
são ignoradas.
O arquivo /etc/hostname
pode ser editado diretamente, mas o nome de host da máquina também pode ser definido com o comando hostnamectl
. Quando fornecido com o subcomando set-hostname
, o comando hostnamectl
pega o nome dado como argumento e o escreve em /etc/hostname
:
# hostnamectl set-hostname storage # cat /etc/hostname storage
O nome de host (ou “hospedeiro”) definido em /etc/hostname
é o nome estático, ou seja, o nome usado para inicializar o nome de host do sistema na inicialização. O nome de host estático pode ser uma string com até 64 caracteres de comprimento. No entanto, é recomendado que ele consista apenas em caracteres ASCII minúsculos e sem espaços ou pontos. Também é aconselhável limitá-lo ao formato permitido para rótulos de nomes de domínio DNS, embora esse não seja um requisito estrito.
O comando hostnamectl
pode definir dois outros tipos de nomes de host além do nome de host estático:
- Hostname pretty
-
Ao contrário do nome de host estático, o nome de host pretty pode incluir todos os tipos de caracteres especiais. Ele pode ser usado para definir um nome mais descritivo para a máquina, por exemplo “Armazenamento compartilhado da LAN”:
# hostnamectl --pretty set-hostname "LAN Shared Storage"
- Hostname transiente
-
Usado quando o nome de host estático não está definido ou quando ele é o nome
localhost
padrão. O nome de host transiente é normalmente definido junto com outras configurações automáticas, mas também pode ser modificado com o comandohostnamectl
, por exemplo:# hostnamectl --transient set-hostname generic-host
Se nem a opção --pretty
nem --transient
forem usadas, os três tipos de nomes de host serão configurados com o nome fornecido. Para definir o nome de host estático, mas não os nomes pretty e transiente, usa-se a opção --static
. Em todos os casos, somente o nome de host estático é armazenado no arquivo /etc/hostname
. O comando hostnamectl
também pode ser usado para exibir diversas informações descritivas e de identidade sobre o sistema em execução:
$ hostnamectl status Static hostname: storage Pretty hostname: LAN Shared Storage Transient hostname: generic-host Icon name: computer-server Chassis: server Machine ID: d91962a957f749bbaf16da3c9c86e093 Boot ID: 8c11dcab9c3d4f5aa53f4f4e8fdc6318 Operating System: Debian GNU/Linux 10 (buster) Kernel: Linux 4.19.0-8-amd64 Architecture: x86-64
Esta é a ação padrão do comando hostnamectl
, de modo que o subcomando status
pode ser omitido.
Com relação ao nome dos nós remotos da rede, o sistema operacional tem duas maneiras básicas à sua disposição para combinar nomes e números IP: usar uma fonte local ou usar um servidor remoto para traduzir nomes em números IP e vice-versa. Os métodos podem ser complementares entre si e sua ordem de prioridade é definida no arquivo de configuração Name Service Switch: /etc/nsswitch.conf
. Este arquivo é usado pelo sistema e pelos aplicativos para determinar não apenas as fontes para as correspondências de nome-IP, mas também as fontes das quais obter informações de nome-serviço em uma variedade de categorias, chamadas bancos de dados.
O banco de dados hosts mantém um registro do mapeamento entre nomes e números de host. A linha dentro de /etc/nsswitch.conf
que começa com hosts
define os serviços responsáveis por fornecer as associações para ele:
hosts: files dns
Neste exemplo, files
e dns
são os nomes de serviços que especificam como o processo de pesquisa de nomes de host funciona. Primeiro, o sistema procura por correspondências em arquivos locais e, em seguida, solicita correspondências ao serviço DNS.
O arquivo local do banco de dados hosts é /etc/hosts
, um arquivo de texto simples que associa endereços IP a nomes de host, com uma linha por endereço IP, por exemplo:
127.0.0.1 localhost
O número IP 127.0.0.1 é o endereço padrão da interface de loopback, daí sua associação com o nome localhost.
Também é possível vincular aliases opcionais ao mesmo IP. Os aliases podem fornecer grafias alternativas, nomes de host mais curtos, e devem ser adicionados no final da linha, por exemplo:
192.168.1.10 foo.mydomain.org foo
As regras de formatação para o arquivo /etc/hosts
são:
-
Os campos da entrada são separados por qualquer número de espaços em branco e/ou caracteres de tabulação.
-
O texto que começa em um caractere
#
e vai até o final da linha é um comentário e é ignorado. -
Os nomes de host podem conter apenas caracteres alfanuméricos, sinais de menos e pontos.
-
Os nomes de host devem começar com um caractere alfabético e terminar com um caractere alfanumérico.
Também podemos adicionar endereços IPv6 a /etc/hosts
. A seguinte entrada se refere ao endereço de loopback IPv6:
::1 localhost ip6-localhost ip6-loopback
Após a especificação do serviço files
, a especificação dns
diz ao sistema para solicitar a um serviço DNS a associação nome/IP desejada. O conjunto de rotinas responsáveis por este método é chamado de resolver (resolvedor) e seu arquivo de configuração é /etc/resolv.conf
. O exemplo a seguir mostra um /etc/resolv.conf
genérico contendo entradas para os servidores DNS públicos do Google:
nameserver 8.8.4.4 nameserver 8.8.8.8
Como mostrado no exemplo, a palavra-chave nameserver
indica o endereço IP do servidor DNS. Apenas um servidor de nomes é necessário, mas é possível informar até três deles. Os suplementares serão usados como reserva. Se nenhuma entrada de servidor de nomes estiver presente, o comportamento padrão é usar o servidor de nomes da máquina local.
O resolver pode ser configurado para adicionar automaticamente o domínio aos nomes antes de consultá-los no servidor de nomes. Por exemplo:
nameserver 8.8.4.4 nameserver 8.8.8.8 domain mydomain.org search mydomain.net mydomain.com
A entrada domain
define mydomain.org
como o nome de domínio local; assim, as consultas por nomes dentro deste domínio podem usar nomes curtos relativos ao domínio local. A entrada search
tem uma finalidade semelhante, mas aceita uma lista de domínios a experimentar quando um nome curto é fornecido. Por padrão, ela contém apenas o nome de domínio local.
Exercícios Guiados
-
Quais comandos podem ser usados para listar os adaptadores de rede presentes no sistema?
-
Qual é o tipo de adaptador de rede cujo nome de interface é
wlo1
? -
Qual o papel do arquivo
/etc/network/interfaces
durante o tempo de inicialização? -
Qual entrada de
/etc/network/interfaces
configura a interfaceeno1
para obter suas configurações de IP com DHCP?
Exercícios Exploratórios
-
Como o comando
hostnamectl
poderia ser usado para alterar apenas o nome de host estático da máquina local parafirewall
? -
Quais detalhes além dos nomes de host podem ser modificados pelo comando
hostnamectl
? -
Qual entrada de
/etc/hosts
associa os nomesfirewall
erouter
com o IP10.8.0.1
? -
Como o arquivo
/etc/resolv.conf
poderia ser modificado de maneira a enviar todas as solicitações de DNS para1.1.1.1
?
Resumo
Esta lição trata de como fazer mudanças persistentes na configuração da rede local usando arquivos e comandos padrão do Linux. O Linux espera que as configurações de TCP/IP estejam em locais específicos e pode ser necessário alterá-las quando as configurações padrão não forem apropriadas. A lição abrange os seguintes tópicos:
-
Como o Linux identifica as interfaces de rede.
-
Ativação da interface durante a inicialização e configuração de IP básica.
-
Como o sistema operacional associa nomes a hosts.
Os conceitos, comandos e procedimentos abordados foram:
-
Convenções de nomenclatura de interfaces.
-
Listagem de interfaces de rede com
ip
enmcli
. -
Ativação da interface com
ifup
eifdown
. -
Comando
hostnamectl
e o arquivo/etc/hostname
. -
Arquivos
/etc/nsswitch.conf
,/etc/hosts
e/etc/resolv.conf
.
Respostas aos Exercícios Guiados
-
Quais comandos podem ser usados para listar os adaptadores de rede presentes no sistema?
Os comandos
ip link show
,nmcli device
e o comando legadoifconfig
. -
Qual é o tipo de adaptador de rede cujo nome de interface é
wlo1
?O nome começa com
wl
, portanto trata-se de um adaptador LAN sem fio. -
Qual o papel do arquivo
/etc/network/interfaces
durante o tempo de inicialização?Ele contém as configurações utilizadas pelo comando
ifup
para ativar as interfaces correspondentes durante o tempo de inicialização. -
Qual entrada de
/etc/network/interfaces
configura a interfaceeno1
para obter suas configurações de IP com DHCP?A linha
iface eno1 inet dhcp
.
Respostas aos Exercícios Exploratórios
-
Como o comando
hostnamectl
poderia ser usado para alterar apenas o nome de host estático da máquina local parafirewall
?Com a opção
--static
:hostnamectl --static set-hostname firewall
. -
Quais detalhes além dos nomes de host podem ser modificados pelo comando
hostnamectl
?O
hostnamectl
também pode definir o ícone padrão da máquina local, o tipo de chassi, a localização e o ambiente de implantação. -
Qual entrada de
/etc/hosts
associa os nomesfirewall
erouter
com o IP10.8.0.1
?A linha
10.8.0.1 firewall router
. -
Como o arquivo
/etc/resolv.conf
poderia ser modificado de maneira a enviar todas as solicitações de DNS para1.1.1.1
?Usando
nameserver 1.1.1.1
como sua única entrada de nameserver.