109.3 Lição 2
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: |
2 de 2 |
Introdução
Os sistemas operacionais baseados em Linux incluem uma variedade de ferramentas para solucionar problemas de rede. Esta lição abordará algumas das mais comuns. Neste ponto, você deve ter uma noção do modelo OSI ou de outros modelos de rede em camadas, endereçamento IPv4 ou IPv6 e os fundamentos de roteamento e comutação.
A melhor maneira de testar uma conexão de rede é tentar usar seu aplicativo. Se isso não funcionar, existem muitas ferramentas disponíveis para ajudar a diagnosticar o problema.
Testando conexões com ping
Os comandos ping
e ping6
enviam uma solicitação de eco ICMP para um endereço IPv4 ou IPv6, respectivamente. Uma solicitação de eco ICMP envia uma pequena quantidade de dados ao endereço de destino. Se o endereço de destino estiver acessível, ele manda uma mensagem de eco ICMP de volta ao remetente com os mesmos dados que lhe foram enviados:
$ ping -c 3 192.168.50.2 PING 192.168.50.2 (192.168.50.2) 56(84) bytes of data. 64 bytes from 192.168.50.2: icmp_seq=1 ttl=64 time=0.525 ms 64 bytes from 192.168.50.2: icmp_seq=2 ttl=64 time=0.419 ms 64 bytes from 192.168.50.2: icmp_seq=3 ttl=64 time=0.449 ms --- 192.168.50.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2006ms rtt min/avg/max/mdev = 0.419/0.464/0.525/0.047 ms
$ ping6 -c 3 2001:db8::10 PING 2001:db8::10(2001:db8::10) 56 data bytes 64 bytes from 2001:db8::10: icmp_seq=1 ttl=64 time=0.425 ms 64 bytes from 2001:db8::10: icmp_seq=2 ttl=64 time=0.480 ms 64 bytes from 2001:db8::10: icmp_seq=3 ttl=64 time=0.725 ms --- 2001:db8::10 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.425/0.543/0.725/0.131 ms
A opção -c
é usada para especificar o número de pacotes a enviar. Se você omitir esta opção, ping
e ping6
continuarão a enviar pacotes até que você os interrompa, normalmente com a combinação de teclas Ctrl+C
Não é possível executar ping em um host, mas isso não significa que você não pode se conectar a ele. Muitas empresas têm firewalls ou listas de controle de acesso ao roteador que bloqueiam tudo, exceto o mínimo necessário para que os sistemas funcionem. Isso inclui as solicitações e respostas de eco ICMP. Como esses pacotes podem incluir dados arbitrários, um invasor astuto poderia usá-los para extrair dados.
Traçando Rotas
Os programas traceroute
e traceroute6
servem para mostrar a rota que um pacote faz para chegar ao seu destino. Para isso, eles enviam diversos pacotes ao destino, incrementando o campo Time-To-Live (TTL) do cabeçalho IP com cada pacote subsequente. Cada roteador ao longo do caminho responde com uma mensagem ICMP de TTL excedido:
$ traceroute 192.168.1.20 traceroute to 192.168.1.20 (192.168.1.20), 30 hops max, 60 byte packets 1 10.0.2.2 (10.0.2.2) 0.396 ms 0.171 ms 0.132 ms 2 192.168.1.20 (192.168.1.20) 2.665 ms 2.573 ms 2.573 ms $ traceroute 192.168.50.2 traceroute to 192.168.50.2 (192.168.50.2), 30 hops max, 60 byte packets 1 192.168.50.2 (192.168.50.2) 0.433 ms 0.273 ms 0.171 ms $ traceroute6 2001:db8::11 traceroute to 2001:db8::11 (2001:db8::11), 30 hops max, 80 byte packets 1 2001:db8::11 (2001:db8::11) 0.716 ms 0.550 ms 0.641 ms $ traceroute 2001:db8::11 traceroute to 2001:db8::11 (2001:db8::11), 30 hops max, 80 byte packets 1 2001:db8::10 (2001:db8::11) 0.617 ms 0.461 ms 0.387 ms $ traceroute net2.example.net traceroute to net2.example.net (192.168.50.2), 30 hops max, 60 byte packets 1 net2.example.net (192.168.50.2) 0.533 ms 0.529 ms 0.504 ms $ traceroute6 net2.example.net traceroute to net2.example.net (2001:db8::11), 30 hops max, 80 byte packets 1 net2.example.net (2001:db8::11) 0.738 ms 0.607 ms 0.304 ms
Por padrão, o traceroute
envia 3 pacotes UDP com dados inúteis para a porta 33434, incrementando-os a cada vez que envia um pacote. Cada linha na saída do comando é uma interface de roteador que o pacote atravessa. Os tempos mostrados em cada linha da saída são o tempo de ida e volta de cada pacote. O endereço IP é o endereço da interface do roteador em questão. Se o traceroute
puder, ele usa o nome DNS da interface do roteador. Às vezes, aparece *
no lugar de uma hora. Quando isso acontece, significa que o traceroute
nunca recebeu a mensagem de TTL excedido para este pacote. Isso geralmente indica que a última resposta é o último salto da rota.
Se você tiver acesso a root
, a opção -I
configura o traceroute
para usar solicitações de eco ICMP ao invés de pacotes UDP. Elas geralmente são mais eficazes do que o UDP porque o host de destino tem mais probabilidade de responder a uma solicitação de eco ICMP do que ao pacote UDP:
# traceroute -I learning.lpi.org traceroute to learning.lpi.org (208.94.166.201), 30 hops max, 60 byte packets 1 047-132-144-001.res.spectrum.com (47.132.144.1) 9.764 ms 9.702 ms 9.693 ms 2 096-034-094-106.biz.spectrum.com (96.34.94.106) 8.389 ms 8.481 ms 8.480 ms 3 dtr01hlrgnc-gbe-4-15.hlrg.nc.charter.com (96.34.64.172) 8.763 ms 8.775 ms 8.770 ms 4 acr01mgtnnc-vln-492.mgtn.nc.charter.com (96.34.67.202) 27.080 ms 27.154 ms 27.151 ms 5 bbr01gnvlsc-bue-3.gnvl.sc.charter.com (96.34.2.112) 31.339 ms 31.398 ms 31.395 ms 6 bbr01aldlmi-tge-0-0-0-13.aldl.mi.charter.com (96.34.0.161) 39.092 ms 38.794 ms 38.821 ms 7 prr01ashbva-bue-3.ashb.va.charter.com (96.34.3.51) 34.208 ms 36.474 ms 36.544 ms 8 bx2-ashburn.bell.ca (206.126.236.203) 53.973 ms 35.975 ms 38.250 ms 9 tcore4-ashburnbk_0-12-0-0.net.bell.ca (64.230.125.190) 66.315 ms 65.319 ms 65.345 ms 10 tcore4-toronto47_2-8-0-3.net.bell.ca (64.230.51.22) 67.427 ms 67.502 ms 67.498 ms 11 agg1-toronto47_xe-7-0-0_core.net.bell.ca (64.230.161.114) 61.270 ms 61.299 ms 61.291 ms 12 dis4-clarkson16_5-0.net.bell.ca (64.230.131.98) 61.101 ms 61.177 ms 61.168 ms 13 207.35.12.142 (207.35.12.142) 70.009 ms 70.069 ms 59.893 ms 14 unassigned-117.001.centrilogic.com (66.135.117.1) 61.778 ms 61.950 ms 63.041 ms 15 unassigned-116.122.akn.ca (66.135.116.122) 62.702 ms 62.759 ms 62.755 ms 16 208.94.166.201 (208.94.166.201) 62.936 ms 62.932 ms 62.921 ms
Algumas empresas bloqueiam solicitações e respostas de eco ICMP. Para contornar isso, podemos usar o TCP. Usando uma porta TCP aberta conhecida, garantimos que o host de destino responderá. Para usar o TCP, inclua a opção -T
junto com -p
para especificar a porta. Como no caso das solicitações de eco ICMP, é necessário ter acesso de root
para fazer isso:
# traceroute -m 60 -T -p 80 learning.lpi.org traceroute to learning.lpi.org (208.94.166.201), 60 hops max, 60 byte packets 1 * * * 2 096-034-094-106.biz.spectrum.com (96.34.94.106) 12.178 ms 12.229 ms 12.175 ms 3 dtr01hlrgnc-gbe-4-15.hlrg.nc.charter.com (96.34.64.172) 12.134 ms 12.093 ms 12.062 ms 4 acr01mgtnnc-vln-492.mgtn.nc.charter.com (96.34.67.202) 31.146 ms 31.192 ms 31.828 ms 5 bbr01gnvlsc-bue-3.gnvl.sc.charter.com (96.34.2.112) 39.057 ms 46.706 ms 39.745 ms 6 bbr01aldlmi-tge-0-0-0-13.aldl.mi.charter.com (96.34.0.161) 50.590 ms 58.852 ms 58.841 ms 7 prr01ashbva-bue-3.ashb.va.charter.com (96.34.3.51) 34.556 ms 37.892 ms 38.274 ms 8 bx2-ashburn.bell.ca (206.126.236.203) 38.249 ms 36.991 ms 36.270 ms 9 tcore4-ashburnbk_0-12-0-0.net.bell.ca (64.230.125.190) 66.779 ms 63.218 ms tcore3-ashburnbk_100ge0-12-0-0.net.bell.ca (64.230.125.188) 60.441 ms 10 tcore4-toronto47_2-8-0-3.net.bell.ca (64.230.51.22) 63.932 ms 63.733 ms 68.847 ms 11 agg2-toronto47_xe-7-0-0_core.net.bell.ca (64.230.161.118) 60.144 ms 60.443 ms agg1-toronto47_xe-7-0-0_core.net.bell.ca (64.230.161.114) 60.851 ms 12 dis4-clarkson16_5-0.net.bell.ca (64.230.131.98) 67.246 ms dis4-clarkson16_7-0.net.bell.ca (64.230.131.102) 68.404 ms dis4-clarkson16_5-0.net.bell.ca (64.230.131.98) 67.403 ms 13 207.35.12.142 (207.35.12.142) 66.138 ms 60.608 ms 64.656 ms 14 unassigned-117.001.centrilogic.com (66.135.117.1) 70.690 ms 62.190 ms 61.787 ms 15 unassigned-116.122.akn.ca (66.135.116.122) 62.692 ms 69.470 ms 68.815 ms 16 208.94.166.201 (208.94.166.201) 61.433 ms 65.421 ms 65.247 ms 17 208.94.166.201 (208.94.166.201) 64.023 ms 62.181 ms 61.899 ms
Como o ping
, o traceroute
tem suas limitações. É possível que firewalls e roteadores bloqueiem os pacotes enviados ou devolvidos ao traceroute
. Se você tiver acesso de root
, há opções que podem ajudar a obter resultados precisos.
Encontrando MTUs com tracepath
O comando tracepath
é semelhante ao traceroute
. A diferença é que ele rastreia os tamanhos da Maximum Transmission Unit (MTU) ao longo do caminho. A MTU é uma configuração definida em uma interface de rede, ou uma limitação de hardware sobre a maior unidade de dados de protocolo que é possível transmitir ou receber. O programa tracepath
funciona da mesma maneira que traceroute
no sentido de que incrementa o TTL a cada pacote. A diferença é o envio de um datagrama UDP muito grande. É quase inevitável que o datagrama seja maior do que o dispositivo com a menor MTU ao longo da rota. Quando o pacote chega a este dispositivo, este normalmente responde com um pacote de destino inacessível. O pacote de destino ICMP inacessível tem um campo para a MTU do link para o qual ele enviaria o pacote se pudesse. O tracepath
então manda todos os pacotes subsequentes com esse tamanho:
$ tracepath 192.168.1.20 1?: [LOCALHOST] pmtu 1500 1: 10.0.2.2 0.321ms 1: 10.0.2.2 0.110ms 2: 192.168.1.20 2.714ms reached Resume: pmtu 1500 hops 2 back 64
Ao contrário do traceroute
, precisamos obrigatoriamente usar o tracepath6
para IPv6:
$ tracepath 2001:db8::11 tracepath: 2001:db8::11: Address family for hostname not supported $ tracepath6 2001:db8::11 1?: [LOCALHOST] 0.027ms pmtu 1500 1: net2.example.net 0.917ms reached 1: net2.example.net 0.527ms reached Resume: pmtu 1500 hops 1 back 1
A saída é semelhante à do traceroute
. A vantagem do tracepath
está na última linha, que inclui o menor MTU de todo o link. Isso pode ser útil para solucionar problemas de conexões incapazes de lidar com fragmentos.
Como no caso das ferramentas anteriores de resolução de problemas, existe a possibilidade de o equipamento bloquear seus pacotes.
Criando Conexões Arbitrárias
O programa nc
, conhecido como netcat, pode enviar ou receber dados arbitrários através de uma conexão de rede TCP ou UDP. Os exemplos a seguir devem deixar clara sua funcionalidade.
Aqui está um exemplo de configuração de um ouvinte (listener) na porta 1234
:
$ nc -l 1234 LPI Example
A saída de LPI Example
aparece após o exemplo abaixo, que mostra a configuração de um remetente netcat para enviar pacotes para net2.example.net
na porta 1234
. A opção -l
é usada para especificar que nc
deve receber dados em vez de enviá-los:
$ nc net2.example.net 1234 LPI Example
Pressione Ctrl+C em qualquer um dos sistemas para interromper a conexão.
O netcat funciona com endereços IPv4 e IPv6. Ele funciona com TCP e UDP. Pode inclusive ser usado para configurar um shell remoto rudimentar.
Warning
|
Nem toda instalação de |
$ hostname net2 $ nc -u -e /bin/bash -l 1234
A opção -u
significa UDP. -e
instrui o netcat a enviar tudo o que recebe para a entrada padrão do executável que vem em seguida. Neste exemplo, /bin/bash
.
$ hostname net1 $ nc -u net2.example.net 1234 hostname net2 pwd /home/emma
Percebeu como a saída do comando hostname
corresponde à do host ouvinte e a saída do comando pwd
é um diretório?
Visualizando conexões atuais e listeners
Os programas netstat
e ss
podem ser usados para visualizar o status de seus ouvintes e conexões atuais. Como no caso de ifconfig
, netstat
é uma ferramenta legada. Tanto netstat
quanto ss
têm saídas e opções semelhantes. Eis algumas opções disponíveis para ambos os programas:
-a
-
Mostra todos os sockets.
-l
-
Mostra os sockets de escuta.
-p
-
Mostra o processo associado à conexão.
-n
-
Impede pesquisas de nome para portas e endereços.
-t
-
Mostra as conexões TCP.
-u
-
Mostra as conexões UDP.
Os exemplos abaixo mostram a saída de um conjunto de opções comumente usado em ambos os programas:
# netstat -tulnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 892/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1141/master tcp6 0 0 :::22 :::* LISTEN 892/sshd tcp6 0 0 ::1:25 :::* LISTEN 1141/master udp 0 0 0.0.0.0:68 0.0.0.0:* 692/dhclient # ss -tulnp # ss -tulnp Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 :68 *: users:(("dhclient",pid=693,fd=6)) tcp LISTEN 0 128 :22 *: users:(("sshd",pid=892,fd=3)) tcp LISTEN 0 100 127.0.0.1:25 : users:(("master",pid=1099,fd=13)) tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=892,fd=4)) tcp LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=1099,fd=14))
A coluna Recv-Q
é o número de pacotes que um socket recebeu, mas não passou para seu programa. A coluna Send-Q
é o número de pacotes que um socket enviou e que não foram confirmados pelo receptor. As colunas restantes são autoexplicativas.
Exercícios Guiados
-
Que comando(s) usaríamos para enviar um eco ICMP para
learning.lpi.org
? -
Como seria possível determinar a rota até
8.8.8.8
? -
Qual comando poderia mostrar se há processos escutando na porta TCP 80?
-
Como descobrir qual processo está escutando em uma porta?
-
Como determinar a MTU máxima de um caminho de rede?
Exercícios Exploratórios
-
Como poderíamos usar o netcat para enviar uma solicitação HTTP a um servidor web?
-
Por quais motivos o ping em um host pode falhar?
-
Cite uma ferramenta que poderia ser usada para ver os pacotes de rede que estão chegando ou saindo de um host Linux.
-
Como forçar o
traceroute
a usar uma interface diferente? -
O
traceroute
é capaz de relatar MTUs?
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 discutidos nesta lição foram:
ping
eping6
-
Usados para transmitir pacotes ICMP para um host remoto a fim de testar a disponibilidade de uma conexão de rede.
traceroute
etraceroute6
-
Usados para rastrear um caminho através de uma rede para determinar a conectividade da rede.
tracepath
etracepath6
-
Usados para rastrear um caminho através de uma rede, bem como determinar os tamanhos de MTU ao longo de uma rota.
nc
-
Usado para configurar conexões arbitrárias em uma rede para testar a conectividade, bem como consultar uma rede sobre os serviços e dispositivos disponíveis.
netstat
-
Comando legado usado para determinar as estatísticas e conexões de rede abertas de um sistema.
ss
-
Comando moderno usado para determinar as estatísticas e conexões de rede abertas de um sistema.
Respostas aos Exercícios Guiados
-
Que comando(s) usaríamos para enviar um eco ICMP para
learning.lpi.org
?Usaríamos
ping
ouping6
:$ ping learning.lpi.org
ou
$ ping6 learning.lpi.org
-
Como seria possível determinar a rota até
8.8.8.8
?Usando os comandos
tracepath
outraceroute
.$ tracepath 8.8.8.8
ou
$ traceroute 8.8.8.8
-
Qual comando poderia mostrar se há processos escutando na porta TCP 80?
Com
ss
:$ ss -ln | grep ":80"
Com
netstat
:$ netstat -ln | grep ":80"
Embora este não seja um requisito para o exame, você também poderia usar
lsof
:# lsof -Pi:80
-
Como descobrir qual processo está escutando em uma porta?
Mais uma vez, existem diversas maneiras de se fazer isso. Podemos usar o
lsof
como na resposta anterior, substituindo o número da porta. Também podemos usarnetstat
ouss
com a opção-p
. Lembre-se de que onetstat
é considerado uma ferramenta legada.# netstat -lnp | grep ":22"
As mesmas opções que funcionam com
netstat
também funcionam comss
:# ss -lnp | grep ":22"
-
Como determinar a MTU máxima de um caminho de rede?
Usando o comando
tracepath
:$ tracepath somehost.example.com
Respostas aos Exercícios Exploratórios
-
Como poderíamos usar o netcat para enviar uma solicitação HTTP a um servidor web?
Inserindo a linha de solicitação HTTP, os cabeçalhos necessários e uma linha em branco no terminal:
$ nc learning.lpi.org 80 GET /index.html HTTP/1.1 HOST: learning.lpi.org HTTP/1.1 302 Found Location: https://learning.lpi.org:443/index.html Date: Wed, 27 May 2020 22:54:46 GMT Content-Length: 5 Content-Type: text/plain; charset=utf-8 Found
-
Por quais motivos o ping em um host pode falhar?
Há uma série de possíveis razões. Eis algumas delas:
-
O host remoto está inativo.
-
Um roteador ACL está bloqueando seu ping.
-
O firewall do host remoto está bloqueando seu ping.
-
Você pode estar usando um nome de host ou endereço incorreto.
-
A resolução do seu nome está retornando um endereço incorreto.
-
A configuração de rede da sua máquina está incorreta.
-
O firewall da sua máquina está bloqueando o ping.
-
A configuração de rede do host remoto está incorreta.
-
As interfaces de sua máquina estão desconectadas.
-
As interfaces da máquina remota estão desconectadas.
-
Um componente de rede como um switch, cabo ou roteador entre sua máquina e a máquina remota não está mais funcionando.
-
-
Cite uma ferramenta que poderia ser usada para ver os pacotes de rede que estão chegando ou saindo de um host Linux.
Tanto
tcpdump
quantowireshark
fariam o serviço. -
Como forçar o
traceroute
a usar uma interface diferente?Usando a opção
-i
:$ traceroute -i eth2 learning.lpi.org traceroute -i eth2 learning.lpi.org traceroute to learning.lpi.org (208.94.166.201), 30 hops max, 60 byte packets ...
-
O
traceroute
é capaz de relatar MTUs?Sim, com a opção
--mtu
:# traceroute -I --mtu learning.lpi.org traceroute to learning.lpi.org (208.94.166.201), 30 hops max, 65000 byte packets 1 047-132-144-001.res.spectrum.com (47.132.144.1) 9.974 ms F=1500 10.476 ms 4.743 ms 2 096-034-094-106.biz.spectrum.com (96.34.94.106) 8.697 ms 9.963 ms 10.321 ms ...