109.3 Resolução de problemas de Rede
Vamos ver como trabalhar com as ferramentas do pacote ip
.
Comando IP
O Comando IP
veio substituir uma série de comandos independentes, comandos estes que são pertencentes ao pacote net-tools
, todas as ferramentas do net-tools
foram agrupandos no comando ip
.
Segue abaixo um exemplo, exibindo o novo comando ip
e o antigo ifconfig
.
Pacote IP | Pacote Net-tools |
---|---|
ip address | ifconfig |
ip link | ifconfig |
ip neighbor | arp |
ip route | route |
A principal funcionalidade do comando IP é mostrar e manipular interfaces de rede, rotas, tunels e equipamentos de rede, com ele nós vamos manipular diretamente as informações de rede sem o uso de nenhum gerenciador por trás, como: NetworkManager, NetworkD, ou até mesmo scripts.
Com isso, toda a alteração é não persistente, quando você reiniciar, toda a alteração terá desaparecido, ou caso você feche sua sessão de terminal, também vai sumir o que você fez.
Opções:
Opções | Descrição |
---|---|
link | Usado para interagir com a interface do Linux, seria como trabalhar com camada 2, você não vai ver informações de IP. |
address ou addr | Mostra o endereço lógico das interfaces, seria como trabalhar na camada 3. |
route | Trabalha com as rotas que tem n o Linux. |
show | Usando com ip link , ip addr , ip route entre outros, vai exibir as informações sobre o link, sobre os endereços e sobre as rotas. |
list | Usado com ip route , vai mostrar as rotas, igual o show. |
flush | Limpa toda a configuração de uma interface. |
set | Aplica uma configuração. |
dev (interface) | Identifica a interface, o device. |
Vamos ver alguns exemplos:
# Limpar toda a configuração de uma interface:
ip addr flush dev enp0s9
####################################################################
################### LINK ###########################################
####################################################################
################# [ Ativar ] ##################
# Ativar a interface de rede:
ip link set dev enp0s8 up
################# [ Desativar ] ###############
# Desativar a interface de rede:
ip link set dev enp0s8 down
####################################################################
################### ADDRESS ########################################
####################################################################
################# [ Adicionar ] ###############
# Adicionar endereço:
ip addr add 192.168.2.15/24 dev enp0s8
################# [ Remover ] ###############
ip addr del 192.168.2.15/24 dev enp0s8
####################################################################
################### ROUTE ##########################################
####################################################################
################# [ Adicionar ] ###############
ip route add 10.0.2.2/32 via 0.0.0.0 dev enp0s3
# Adicionar uma rota padrão:
ip route add default via 192.168.0.1 dev enp0s8
################# [ Remover ] ###############
ip route del 192.168.0.0/24 dev enp0s3
ifconfig
Por padrão não vem instalado, precisa instalar o pacote net-tools
, para a LPI você só precisa conhecer o básico sobre.
Opção | Descrição |
---|---|
-a | Mostra todas as interfaces, até as Down. |
route -n | Mostra todas as rotas. |
# Desativando uma interface:
ifconfig enp0s8 down
# Ativando uma interface:
ifconfig enp0s8 up
# Adicionar endereço:
ifconfig enp0s8 192.168.0.1 netmask 255.255.255.0
# Remover endereço - nao removeu de imediato:
ifconfig enp0s8 del 192.168.0.1 netmask 255.255.255.0
# Subir a interface já com IP:
ifconfig enp0s8 192.168.0.1 netmask 255.255.255.0 up
# Subinterface:
ifconfig enp0s8:0 192.168.0.10 netmask 255.255.255.0
# Adicionar uma rota padrão:
route add default gw 192.168.0.1 dev enp0s8
# Remover rota padrão:
route del default
# Adicionar uma rota:
route add 192.168.54.10/32 dev enp0s8
Ping
Usado para enviar pacotes de testes para um host remoto, usado para testar a conectividade entre dois hosts e verificar se o host de destino está up e respondendo.
A maquina que envia o ping, envia um echo_request, conhecido como tipo 8 do ICMP, e a máquina que responde, envia um echo_reply, tendo o tipo 0 do ICMP.
Com ping podemos ver se está tendo perda de pacote e podemos ver o RTT (Round trip time).
traceroute
Usado para ver o rastreamento de pacotes de rota para o host da rede. Diferente do ping, ele usa pacotes UDP para verificação, para usar icmp, use a opção -I
.
$ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 _gateway (192.168.121.1) 0.419 ms 0.302 ms 0.350 ms
2 192.168.1.1 (192.168.1.1) 0.894 ms 1.254 ms 1.175 ms
3 186-230-221-117.ded.intelignet.com.br (186.230.221.117) 10.961 ms 10.866 ms 10.766 ms
4 10.192.254.16 (10.192.254.16) 8.100 ms 10.192.254.14 (10.192.254.14) 8.010 ms 10.192.254.16 (10.192.254.16) 12.802 ms
5 10.223.238.236 (10.223.238.236) 11.634 ms 10.223.238.238 (10.223.238.238) 12.728 ms 12.634 ms
6 209.85.174.58 (209.85.174.58) 8.910 ms 72.14.194.55 (72.14.194.55) 9.547 ms 209.85.174.58 (209.85.174.58) 9.185 ms
7 108.170.245.161 (108.170.245.161) 8.627 ms 74.125.243.65 (74.125.243.65) 8.820 ms 74.125.243.1 (74.125.243.1) 8.111 ms
8 142.251.61.73 (142.251.61.73) 7.567 ms 142.250.46.225 (142.250.46.225) 7.723 ms 72.14.236.203 (72.14.236.203) 7.636 ms
9 dns.google (8.8.8.8) 7.747 ms 7.877 ms 7.670 ms
vagrant@ubuntu2004:~$
tracepath
Similar o traceroute
, só muda o nome e que todas as opções do tracepath
não precisa ser root, já o traceroute
possui algumas opções que necessitam que você seja super usuário. .
ss
Similar ao netstat
, mas o ss
faz parte do pacote iproute2
, que é o mesmo pacote que o novo comando ip
pertence. As opções de uso são as mesmas.
Usado para verificar as conexões ativas na máquina, portas abertas, em quais portas está escutando, em qual delas tem conexão estabelecida dentre muitas outras funcionalidades.
Opção | Descrição |
---|---|
-t | Mostra informações relacionadas a TCP. |
-u | Mostra informações relacionadas a UDP. |
-a | Mostra todos os sockets, que estão listening ou não e estabelecidas. |
-n | Impede a resolução de nomes e portas. |
-e | Mostra informações adicionais sobre o socket. |
-l (L) | Mostra somente os sockets que estão sendo escutados. |
-p | Motra o processo responsável por aquela conexão. |
-i | Mostra estatística de todas as interfaces. |
-s | Mostra um resumo das estatísticas. |
# Mostrar conexões estabelecidas (UDP e TCP):
$ ss -tu
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp ESTAB 0 0 192.168.121.52:ssh 192.168.121.1:45604
# Portas que estão sendo escutadas:
$ ss -tul
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 127.0.0.53%lo:domain 0.0.0.0:*
udp UNCONN 0 0 192.168.121.52%eth0:bootpc 0.0.0.0:*
tcp LISTEN 0 4096 127.0.0.53%lo:domain 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:*
tcp LISTEN 0 128 [::]:ssh [::]:*
# Exibindo as estatísticas:
$ netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
enp5s0 1500 226725 0 0 0 108880 0 0 0 BMRU
lo 65536 2960 0 0 0 2960 0 0 0 LRU
virbr0 1500 0 0 0 0 0 0 0 0 BMU
virbr1 1500 0 0 0 0 0 0 0 0 BMU
virbr3 1500 0 0 0 0 0 0 0 0 BMU
# Exibindo o resumo das estatísticas:
$ ss -s
Total: 151
TCP: 4 (estab 1, closed 0, orphaned 0, timewait 0)
Transport Total IP IPv6
RAW 1 0 1
UDP 2 2 0
TCP 4 3 1
INET 7 5 2
FRAG 0 0 0
# Exibindo somente as conexões TCP que estão em Listening:
$ ss -lt
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 127.0.0.53%lo:domain 0.0.0.0:*
LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:*
LISTEN 0 128 [::]:ssh [::]:*
netcat
Usado para fazer verificação de conexão, com isso, conseguimos saber se uma porta em escutando e respondendo reuisições, o nc
funciona da mesma forma, exatamente igual.
Opção | Descrição |
---|---|
-z | Somente faz um scan, para verificar se tem algum daemon escutando na porta. |
-v | Verbose. |
# Verificando se tem algo escutando uma porta:
$ netcat localhost 22
SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.2
# Fazendo um scan:
$ netcat -zv localhost 22
Connection to localhost 22 port [tcp/ssh] succeeded!
# Criar uma conexão para teste numa porta:
$ nc -k -l -p 12345
# Em outro terminal, verificar se tem algo escutando essa porta:
$ nc -zv localhost 12345