109.3 Lição 1
Certificação: |
LPIC-1 |
---|---|
Versão: |
5.0 |
Tópico: |
109 Fundamentos de rede |
Objetivo: |
109.3 Resolução de problemas básicos de rede |
Lição: |
1 de 2 |
Introdução
O Linux dispõe de recursos de rede extremamente flexíveis e poderosos. Na verdade, os sistemas operacionais baseados em Linux são freqüentemente usados nos dispositivos de rede comuns, incluindo equipamentos comerciais de alto padrão. Seria possível criar uma certificação inteira tendo como tema os recursos de rede do Linux. Tendo isso em mente, esta lição abordará somente algumas ferramentas básicas de configuração e resolução de problemas.
Sugerimos revisar as lições sobre protocolos de internet e configurações de rede persistente antes de iniciar esta lição. Aqui, trataremos das ferramentas para configurar e solucionar problemas nas redes IPv4 e IPv6.
Embora não estejam incluídos nos objetivos oficiais, farejadores de pacotes (packet sniffers) como o tcpdump
são ferramentas úteis para a resolução de problemas. Os sniffers de pacotes permitem visualizar e gravar os pacotes que entram ou saem de uma interface de rede. Ferramentas como visualizadores hexadecimais e analisadores de protocolo podem ser usadas para visualizar esses pacotes com mais detalhes do que um farejador de pacotes normalmente permitiria. É bom saber que essas opções existem.
Sobre o comando ip
O comando ip
é um utilitário bastante recente, usado para visualizar e definir quase tudo relacionado às configurações de rede. Esta lição cobre alguns dos subcomandos mais usados do ip
, embora mal arranhe a superfície do que está disponível. Vale a pena ler a documentação para aprender a usá-lo da maneira mais eficaz.
Cada subcomando de ip
tem sua própria página de manual. A seção SEE ALSO
da página do manual de ip
inclui uma lista deles:
$ man ip ... SEE ALSO ip-address(8), ip-addrlabel(8), ip-l2tp(8), ip-link(8), ip-maddress(8), ip-monitor(8), ip-mroute(8), ip-neighbour(8), ip-netns(8), ip- ntable(8), ip-route(8), ip-rule(8), ip-tcp_metrics(8), ip-token(8), ip- tunnel(8), ip-xfrm(8) IP Command reference ip-cref.ps ...
Em vez de passar por aqui toda vez que você precisar da página de manual, simplesmente adicione -
e o nome do subcomando a ip
; por exemplo, man ip-route
.
Outra boa fonte de informações é a função de ajuda. Para visualizar a ajuda integrada, adicione help
após o subcomando:
$ ip address help Usage: ip address {add|change|replace} IFADDR dev IFNAME [ LIFETIME ] [ CONFFLAG-LIST ] ip address del IFADDR dev IFNAME [mngtmpaddr] ip address {save|flush} [ dev IFNAME ] [ scope SCOPE-ID ] [ to PREFIX ] [ FLAG-LIST ] [ label LABEL ] [up] ip address [ show [ dev IFNAME ] [ scope SCOPE-ID ] [ master DEVICE ] [ type TYPE ] [ to PREFIX ] [ FLAG-LIST ] [ label LABEL ] [up] [ vrf NAME ] ] ip address {showdump|restore} IFADDR := PREFIX | ADDR peer PREFIX ...
Máscara de rede e revisão de roteamento
O IPv4 e o IPv6 são conhecidos como protocolos roteados ou roteáveis. Isso significa que eles são projetados de forma a permitir que os designers de rede controlem o fluxo de tráfego. O Ethernet não é um protocolo roteável. Assim, se você conectar diversos dispositivos somente com Ethernet, haverá pouquíssimas opções para controlar o fluxo de tráfego da rede. Quaisquer medidas empregadas para controlar o tráfego acabariam tendo resultado semelhante aos protocolos roteáveis e de roteamento atuais.
Os protocolos roteáveis permitem que os designers de rede segmentem as redes para reduzir os requisitos de processamento dos dispositivos de conectividade, fornecer redundância e gerenciar o tráfego.
Os endereços IPv4 e IPv6 têm duas seções. O primeiro conjunto de bits constitui a seção da rede, ao passo que o segundo representa a seção do host. O número de bits que constituem a seção da rede é determinado pela máscara de rede (também chamada de máscara de sub-rede). Ele também pode ser chamado de comprimento do prefixo. Independentemente de como é chamado, trata-se do número de bits que a máquina trata como sendo a parte da rede do endereço. No IPv4, ele às vezes é especificado em notação decimal com pontos.
Veja abaixo um exemplo usando IPv4. Observe como os dígitos binários mantêm seu valor de posição nos octetos, mesmo quando são divididos pela máscara de rede.
192.168.130.5/20 192 168 130 5 11000000 10101000 10000010 00000101 20 bits = 11111111 11111111 11110000 00000000 Network = 192.168.128.0 Host = 2.5
A seção da rede de um endereço é usada pelas máquinas IPv4 ou IPv6 para pesquisar em qual interface um pacote deve ser enviado em sua tabela de roteamento. Quando um host IPv4 ou IPv6 com roteamento habilitado recebe um pacote que não é destinado ao próprio host, ele busca uma correspondência para a parte da rede do destino em uma rede da tabela de roteamento. Se uma entrada correspondente for encontrada, ele envia o pacote ao destino especificado na tabela. Se nenhuma entrada for encontrada e uma rota padrão estiver configurada, ele é enviado para a rota padrão. Se nenhuma entrada for encontrada e nenhuma rota padrão estiver configurada, o pacote é descartado.
Configurando uma interface
Vamos falar de duas ferramentas que permitem configurar uma interface de rede: ifconfig
e ip
. O programa ifconfig
, embora ainda amplamente utilizado, é considerado uma ferramenta legada e nem sempre está disponível em sistemas mais novos.
Tip
|
Nas distribuições Linux mais recentes, a instalação do pacote |
Antes de configurar uma interface, devemos primeiro saber quais interfaces estão disponíveis. Há algumas maneiras de fazer isso. Uma delas é usar a opção -a
de ifconfig
:
$ ifconfig -a
Outra forma é usar ip
. Há diversos exemplos com ip addr
, ip a
e alguns com ip address
. Eles são todos sinônimos. Oficialmente, o subcomando é ip address
. Assim, para visualizar a página de manual, usamos man ip-address
e não man ip-addr
.
O subcomando link
para ip
lista os links de interface disponíveis para configuração:
$ ip link 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: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:54:18:57 brd ff:ff:ff:ff:ff:ff 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:ab:11:3e brd ff:ff:ff:ff:ff:ff
Pressupondo que o sistema de arquivos sys
esteja montado, também podemos listar o conteúdo de /sys/class/net
$ ls /sys/class/net enp0s3 enp0s8 lo
Para configurar uma interface com o ifconfig
, você deve estar logado como root ou rodar um utilitário como sudo
para executar o comando com privilégios de root. Siga o exemplo abaixo:
# ifconfig enp1s0 192.168.50.50/24
A versão Linux do ifconfig
é flexível com a forma de se especificar a máscara de sub-rede:
# ifconfig eth2 192.168.50.50 netmask 255.255.255.0 # ifconfig eth2 192.168.50.50 netmask 0xffffff00 # ifconfig enp0s8 add 2001:db8::10/64
Note como, no IPv6, a palavra-chave add
foi usada. Se um endereço IPv6 não for precedido por add
, será exibida uma mensagem de erro.
O seguinte comando configura uma interface com ip
:
# ip addr add 192.168.5.5/24 dev enp0s8 # ip addr add 2001:db8::10/64 dev enp0s8
No caso do ip
, o mesmo comando é usado para IPv4 e IPv6.
Configurando opções de baixo nível
O comando ip link
é usado para configurar a interface de baixo nível ou para configurações de protocolos, como VLANs, ARP ou MTUs, ou ainda para desabilitar uma interface.
Uma tarefa comum para ip link
é desabilitar ou habilitar uma interface. Isso também pode ser feito com o ifconfig
:
# ip link set dev enp0s8 down # ip link show dev enp0s8 3: enp0s8: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000 link/ether 08:00:27:ab:11:3e brd ff:ff:ff:ff:ff:ff # ifconfig enp0s8 up # ip link show dev enp0s8 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:ab:11:3e brd ff:ff:ff:ff:ff:ff
Às vezes é necessário ajustar o MTU de uma interface. Da mesma forma que é possível habilitar/desabilitar interfaces, esse ajuste também pode ser feito com ifconfig
ou ip link
:
# ip link set enp0s8 mtu 2000 # ip link show dev enp0s3 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2000 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:54:53:59 brd ff:ff:ff:ff:ff:ff # ifconfig enp0s3 mtu 1500 # ip link show dev enp0s3 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:54:53:59 brd ff:ff:ff:ff:ff:ff
A tabela de roteamento
Os comandos route
, netstat -r
e ip route
podem ser usados para visualizar a tabela de roteamento. Se quiser modificar as rotas, use route
ou ip route
. Eis abaixo alguns exemplos de visualização de uma tabela de roteamento:
$ netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default 10.0.2.2 0.0.0.0 UG 0 0 0 enp0s3 10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s3 192.168.150.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s8 $ ip route default via 10.0.2.2 dev enp0s3 proto dhcp metric 100 10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 100 192.168.150.0/24 dev enp0s8 proto kernel scope link src 192.168.150.200 $ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 10.0.2.2 0.0.0.0 UG 100 0 0 enp0s3 10.0.2.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3 192.168.150.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s8
Observe como não há saída relacionada ao IPv6. Para visualizar a tabela de roteamento do IPv6, usamos route -6
, netstat -6r
e ip -6 route
.
$ route -6 Kernel IPv6 routing table Destination Next Hop Flag Met Ref Use If 2001:db8::/64 [::] U 256 0 0 enp0s8 fe80::/64 [::] U 100 0 0 enp0s3 2002:a00::/24 [::] !n 1024 0 0 lo [::]/0 2001:db8::1 UG 1 0 0 enp0s8 localhost/128 [::] Un 0 2 84 lo 2001:db8::10/128 [::] Un 0 1 0 lo fe80::a00:27ff:fe54:5359/128 [::] Un 0 1 0 lo ff00::/8 [::] U 256 1 3 enp0s3 ff00::/8 [::] U 256 1 6 enp0s8
Um exemplo de netstat -r6
foi omitido porque sua saída é idêntica à de route -6
. Algumas das saídas do comando route
acima são autoexplicativas. A coluna Flag
fornece algumas informações sobre a rota. O sinalizador U
indica que uma rota está ativa. Um !
significa rota rejeitada, ou seja, uma rota com um !
não será usada. O sinalizador n
indica que a rota não foi armazenada em cache. O kernel mantém um cache de rotas separadamente de todas as rotas conhecidas para permitir pesquisas mais rápidas. O sinalizador G
indica um gateway. A coluna Metric
ou Met
não é usada pelo kernel. Ela se refere à distância administrativa até o alvo. Essa distância administrativa é usada pelos protocolos de roteamento para determinar rotas dinâmicas. A coluna Ref
é a contagem de referência ou o número de usos de uma rota. Assim como Metric
, ela não é usada pelo kernel do Linux. A coluna Use
mostra o número de pesquisas para uma rota.
Na saída de netstat -r
, MSS
indica o tamanho máximo do segmento para as conexões TCP nessa rota. A coluna Window
mostra o tamanho da janela TCP padrão. irtt
mostra o tempo de ida e volta dos pacotes nesta rota.
A saída de ip route
e ip -6 route
é interpretada desta maneira:
-
Destino.
-
Endereço opcional seguido pela interface.
-
O protocolo de roteamento usado para adicionar a rota.
-
O escopo da rota. Se omitido, trata-se de um escopo global ou um gateway.
-
A métrica da rota. Ela é usada pelos protocolos de roteamento dinâmico para determinar o custo da rota. Não é usada pela maioria dos sistemas.
-
Se for uma rota IPv6, a preferência da rota RFC4191.
Para que isso fique mais claro, eis alguns exemplos:
- Exemplo de IPv4
-
default via 10.0.2.2 dev enp0s3 proto dhcp metric 100
-
O destino é a rota padrão.
-
O endereço do gateway é
10.0.2.2
, acessível através da interfaceenp0s3
. -
Ela foi adicionada à tabela de roteamento pelo DHCP.
-
O escopo foi omitido, portanto é global.
-
A rota tem um valor de custo de
100
. -
Não há preferência de rota de IPv6.
-
- Exemplo de IPv6
-
fc0::/64 dev enp0s8 proto kernel metric 256 pref medium
-
O destino é
fc0::/64
. -
Ele é acessível através da interface
enp0s8
. -
Foi adicionado automaticamente pelo kernel.
-
O escopo foi omitido, portanto é global.
-
A rota tem um valor de custo de
256
. -
Ela tem uma preferência de IPv6
medium
.
-
Gerenciando as rotas
As rotas podem ser gerenciadas com route
ou ip route
. Veja abaixo um exemplo de adição e remoção de uma rota usando o comando route
. Com route
, adicionamos a opção -6
para IPv6:
# ping6 -c 2 2001:db8:1::20 connect: Network is unreachable # route -6 add 2001:db8:1::/64 gw 2001:db8::3 # ping6 -c 2 2001:db8:1::20 PING 2001:db8:1::20(2001:db8:1::20) 56 data bytes 64 bytes from 2001:db8:1::20: icmp_seq=1 ttl=64 time=0.451 ms 64 bytes from 2001:db8:1::20: icmp_seq=2 ttl=64 time=0.438 ms # route -6 del 2001:db8:1::/64 gw 2001:db8::3 # ping6 -c 2 2001:db8:1::20 connect: Network is unreachable
Abaixo, o mesmo exemplo usando o comando ip route
:
# ping6 -c 2 2001:db8:1:20 connect: Network is unreachable # ip route add 2001:db8:1::/64 via 2001:db8::3 # ping6 -c 2 2001:db8:1:20 PING 2001:db8:1::20(2001:db8:1::20) 56 data bytes 64 bytes from 2001:db8:1::20: icmp_seq=2 ttl=64 time=0.529 ms 64 bytes from 2001:db8:1::20: icmp_seq=2 ttl=64 time=0.438 ms # ip route del 2001:db8:1::/64 via 2001:db8::3 # ping6 -c 2 2001:db8:1::20 connect: Network is unreachable
Exercícios Guiados
-
Quais comandos podem ser usados para listar as interfaces de rede?
-
Como desativar temporariamente uma interface? E como reativá-la?
-
Qual das opções a seguir é uma máscara de sub-rede razoável para IPv4?
0.0.0.255
255.0.255.0
255.252.0.0
/24
-
Quais comandos você pode usar para verificar sua rota padrão?
-
Como adicionar um segundo endereço IP a uma interface?
Exercícios Exploratórios
-
Qual subcomando de
ip
pode ser usado para configurar a marcação de vlan? -
Como configurar uma rota padrão?
-
Como obter informações detalhadas sobre o comando
ip neighbour
? O que acontece se ele for executado sozinho? -
Como fazer backup da tabela de roteamento? Como restaurar esse backup?
-
Qual subcomando de
ip
pode ser usado para configurar opções de spanning tree?
Resumo
Em geral, as redes são configuradas pelos scripts de inicialização do sistema ou por um ajudante como o NetworkManager. A maioria das distribuições possui ferramentas para editar os arquivos de configuração do script de inicialização. Consulte a documentação de sua distribuição para saber mais.
A possibilidade de configurar manualmente a rede permite solucionar problemas com mais eficácia. Isso é muito útil nos ambientes mínimos usados para tarefas como a restauração de backups ou a migração para um novo hardware.
Os utilitários abordados nesta seção têm mais funcionalidades do que as mostradas. Vale a pena estudar a página de manual de cada um deles para se familiarizar com as opções disponíveis. Os comandos ss
e ip
são a maneira moderna de fazer as coisas, enquanto os outros recursos, embora ainda presentes, são considerados ferramentas legadas.
A melhor maneira de se familiarizar com as ferramentas abordadas é praticar. Usando um computador com uma quantidade modesta de RAM, é possível configurar um laboratório de rede virtual usando máquinas virtuais para suas experiências. Três máquinas virtuais já bastam para você se familiarizar com as ferramentas listadas.
Os comandos usados nesta lição incluem:
ifconfig
-
Utilitário legado usado para configurar interfaces de rede e revisar seus estados.
ip
-
Utilitário moderno e versátil usado para configurar interfaces de rede e revisar seus estados.
netstat
-
Comando legado usado para visualizar as conexões de rede atuais e as informações de rota.
route
-
Comando legado usado para visualizar ou modificar a tabela de roteamento de um sistema.
Respostas aos Exercícios Guiados
-
Quais comandos podem ser usados para listar as interfaces de rede?
Qualquer um dos comandos abaixo:
ip link
,ifconfig -a
, ouls /sys/class/net
-
Como desativar temporariamente uma interface? E como reativá-la?
Podemos usar
ifconfig
ouip link
:Usando
ifconfig
:$ ifconfig wlan1 down $ ifconfig wlan1 up
Usando
ip link
:$ ip link set wlan1 down $ ip link set wlan1 up
-
Qual das opções a seguir é uma máscara de sub-rede razoável para IPv4?
-
255.252.0.0
-
/24
As outras máscaras listadas são inválidas porque não separam o endereço de forma clara em duas seções, sendo que a primeira parte define a rede e a segunda o host. Os bits mais à esquerda de uma máscara sempre serão
1
e os bits à direita sempre serão0
.
-
-
Quais comandos você pode usar para verificar sua rota padrão?
Podemos usar
route
,netstat -r
, ouip route
:$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default server 0.0.0.0 UG 600 0 0 wlan1 192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 wlan1 $ netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default server 0.0.0.0 UG 0 0 0 wlan1 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan1 $ ip route default via 192.168.1.20 dev wlan1 proto static metric 600 192.168.1.0/24 dev wlan1 proto kernel scope link src 192.168.1.24 metric 600
-
Como adicionar um segundo endereço IP a uma interface?
Usaríamos
ip address
ouifconfig
. Lembre-se de queifconfig
é uma ferramenta legada:$ ip addr add 172.16.15.16/16 dev enp0s9 label enp0s9:sub1
A parte
label enp0s9:sub1
do comando adiciona um alias aenp0s9
. Se você não usa o comando legadoifconfig
, pode omitir essa parte. Caso contrário, o comando ainda vai funcionar, mas o endereço adicionado não aparecerá na saída deifconfig
.Também é possível usar o
ifconfig
:$ ifconfig enp0s9:sub1 172.16.15.16/16
Respostas aos Exercícios Exploratórios
-
Qual subcomando de
ip
pode ser usado para configurar a marcação de vlan?ip link
tem uma opçãovlan
que pode ser empregada. Veja abaixo um exemplo de marcação de uma sub-interface com vlan 20.# ip link add link enp0s9 name enp0s9.20 type vlan id 20
-
Como configurar uma rota padrão?
Usando
route
ouip route
:# route add default gw 192.168.1.1 # ip route add default via 192.168.1.1
-
Como obter informações detalhadas sobre o comando
ip neighbour
? O que acontece se ele for executado sozinho?Lendo a página de manual:
$ man ip-neigbour
Ele exibe o cache ARP:
$ ip neighbour 10.0.2.2 dev enp0s3 lladdr 52:54:00:12:35:02 REACHABLE
-
Como fazer backup da tabela de roteamento? Como restaurar esse backup?
O exemplo abaixo demonstra o backup e a restauração de uma tabela de roteamento:
# ip route save > /root/routes/route_backup # ip route restore < /root/routes/route_backup
-
Qual subcomando de
ip
pode ser usado para configurar opções de spanning tree?Como no caso do gerenciamento de configurações de vlan, o
ip link
pode configurar o spanning tree usando o tipobridge
. O exemplo mostra a adição de uma interface virtual com uma prioridade STP de 50:# ip link add link enp0s9 name enp0s9.50 type bridge priority 50