Folha de consulta

Comandos de rede Linux: ip, ss, ping, traceroute, dig e curl para diagnóstico de rede

Atualizado: · Skillaria.Top

Os principais comandos de rede do Linux são ip (endereços, interfaces e rotas), ss (portas abertas e conexões), ping e traceroute (se um host responde e por onde passa o pacote), dig (verificação de DNS) e curl (requisições a serviços HTTP). O diagnóstico fica mais rápido quando segue as camadas: interface e endereço, rota, DNS, porta e resposta da aplicação.

Os comandos de rede do Linux cobrem quase todo o diagnóstico do dia a dia: ip mostra endereços e rotas, ss mostra portas abertas e conexões, ping e traceroute verificam se um host está acessível, dig consulta o DNS e curl testa a resposta de um serviço web. Abaixo está uma cola com as opções mais úteis e uma ordem de verificação que ajuda a achar a causa quando "a rede não funciona".

Cola: comandos de rede do Linux em uma tabela

TarefaComando
Endereços IP de todas as interfacesip -br addr
Estado das interfaces (UP/DOWN)ip -br link
Tabela de rotasip route
Por qual gateway o pacote sai até um endereçoip route get 8.8.8.8
Vizinhos (tabela ARP)ip neigh
Portas em escuta e processossudo ss -tulpn
Conexões TCP estabelecidasss -tn state established
Verificar se um host está acessívelping -c 4 example.com
Caminho dos pacotes até o hosttraceroute example.com, mtr example.com
Resolver nome para endereçodig +short example.com
Consultar um servidor DNS específicodig @1.1.1.1 example.com
Verificar a resposta HTTPcurl -I https://example.com
Detalhes da conexão e do TLScurl -v https://example.com
Se uma porta TCP está abertanc -zv host 443
Nome do hosthostnamectl, hostname -I

ip: endereços, interfaces e rotas

O comando ip, do pacote iproute2, substituiu o ifconfig e o route, que estão obsoletos. Os subcomandos podem ser abreviados: ip a equivale a ip addr e ip r equivale a ip route. A opção -br gera uma saída resumida, e -c colore essa saída.

$ ip -br addr
lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             192.168.1.25/24 fe80::a00:27ff:fe4e:66a1/64
docker0          DOWN           172.17.0.1/16

Se a interface não tem endereço da rede certa ou está em DOWN, não adianta procurar mais adiante: o problema está nesse nível.

Como adicionar um endereço IP e ativar a interface

sudo ip link set eth0 up
sudo ip addr add 192.168.1.50/24 dev eth0
sudo ip addr del 192.168.1.50/24 dev eth0

As mudanças feitas com ip valem apenas até a próxima reinicialização. Configurações permanentes ficam nos arquivos do sistema: netplan no Ubuntu, NetworkManager (nmcli) no Fedora e no RHEL, e systemd-networkd em muitos servidores.

Rotas e gateway padrão

$ ip route
default via 192.168.1.1 dev eth0 proto dhcp metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.25

$ ip route get 10.20.0.5
10.20.0.5 via 192.168.1.1 dev eth0 src 192.168.1.25 uid 1000

A linha default via indica o gateway para onde vai tudo o que não se encaixa em rotas mais específicas. Se ela não existe, não há acesso à internet, mesmo que a rede local funcione. Para adicionar uma rota: sudo ip route add 10.20.0.0/16 via 192.168.1.254.

ss: quais portas estão abertas e quem as escuta

ss substituiu o netstat e é mais rápido. A combinação mais usada é ss -tulpn:

OpçãoSignificado
-t / -uTCP / UDP
-lsomente sockets em escuta
-pmostrar o processo (para processos de outros usuários é preciso sudo)
-nnão converter portas e endereços em nomes
-atodos os sockets, inclusive os estabelecidos
-sestatísticas resumidas
$ sudo ss -tulpn
Netid State  Recv-Q Send-Q Local Address:Port  Peer Address:Port Process
tcp   LISTEN 0      511          0.0.0.0:80         0.0.0.0:*     users:(("nginx",pid=812,fd=6))
tcp   LISTEN 0      128          0.0.0.0:22         0.0.0.0:*     users:(("sshd",pid=640,fd=3))
tcp   LISTEN 0      151        127.0.0.1:3306       0.0.0.0:*     users:(("mysqld",pid=901,fd=21))

Repare no endereço: 0.0.0.0 significa que o serviço aceita conexões em todas as interfaces, e 127.0.0.1 significa que aceita apenas conexões locais. Essa é uma causa comum de o banco de dados "não responder" a partir de outra máquina.

Como descobrir quem ocupa a porta

sudo ss -ltnp 'sport = :8080'
sudo ss -tn dst 10.0.0.7          # conexões para um endereço específico
ss -tan state time-wait | wc -l   # quantos sockets estão em TIME-WAIT

ping: o host está acessível?

ping envia pacotes ICMP echo e mostra o tempo de resposta e as perdas. No Linux ele roda sem parar, por isso defina a quantidade de pacotes com -c.

$ ping -c 4 8.8.8.8
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=12.4 ms
...
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 12.1/12.5/13.0/0.3 ms

Opções úteis: -i 0.2 define o intervalo, -W 2 define o tempo limite de resposta, -4 e -6 escolhem a versão do protocolo, e -s 1472 -M do testa o MTU sem fragmentação. Lembre-se de que muitos servidores e provedores de nuvem bloqueiam ICMP: a falta de resposta ao ping ainda não significa que o host está indisponível.

traceroute e mtr: onde os pacotes se perdem

traceroute mostra os nós no caminho até o destino. Asteriscos em alguns saltos são normais, pois um roteador intermediário pode não responder. O sinal de alerta é quando os asteriscos aparecem de um salto em diante até o fim.

traceroute -n example.com        # sem nomes DNS, mais rápido
sudo traceroute -T -p 443 example.com   # TCP em vez de UDP, atravessa firewalls
tracepath example.com            # sem root, mostra também o MTU

mtr combina ping e traceroute e atualiza em tempo real as estatísticas de perda de cada salto. Para gerar um relatório: mtr -rwc 50 example.com.

dig: verificação de DNS

dig, do pacote dnsutils (bind-utils no RHEL), é a principal ferramenta para verificar o DNS. A forma curta devolve apenas a resposta:

$ dig +short example.com
93.184.215.14

$ dig example.com MX +short
$ dig @8.8.8.8 example.com A       # perguntar a um servidor específico
$ dig -x 8.8.8.8 +short            # registro reverso (PTR)
$ dig +trace example.com           # percorrer a cadeia desde os servidores raiz

Na saída completa, observe o status: NOERROR significa que o registro foi encontrado, NXDOMAIN significa que o domínio não existe, e SERVFAIL significa que o servidor não conseguiu responder (muitas vezes por problema com DNSSEC ou com o servidor autoritativo inacessível). Se dig @8.8.8.8 responde, mas o dig comum não, o problema está no resolvedor local: confira /etc/resolv.conf e resolvectl status.

Observe também que o dig não lê o /etc/hosts. Para testar a resolução de nomes do jeito que a aplicação faz, use getent hosts example.com.

curl: teste de HTTP e de APIs

curl responde à última pergunta: o serviço responde e o que ele devolve?

ComandoO que faz
curl -I URLsomente os cabeçalhos (requisição HEAD)
curl -v URLdetalhado: DNS, conexão, TLS e cabeçalhos
curl -L URLseguir redirecionamentos
curl -o arquivo URLsalvar em arquivo
curl -X POST -H 'Content-Type: application/json' -d '{"a":1}' URLenviar JSON
curl -k URLnão verificar o certificado (somente para depuração)
curl --resolve site.ru:443:10.0.0.5 https://site.ruacessar um servidor específico, ignorando o DNS
curl -s -o /dev/null -w '%{http_code} %{time_total}\n' URLcódigo da resposta e tempo
$ curl -s -o /dev/null -w '%{http_code} %{time_connect} %{time_total}\n' https://example.com
200 0.041 0.187

As mensagens de erro do curl indicam a camada do problema: Could not resolve host é DNS, Connection refused significa porta fechada ou sem nenhum processo escutando, Connection timed out significa que o firewall descarta os pacotes ou não há rota, e SSL certificate problem indica um problema com o certificado.

Ordem de diagnóstico: quando "a rede não funciona"

  1. Interface e endereço: ip -br addr — a interface está UP e tem endereço.
  2. Gateway: ip route — existe default via; depois ping -c 3 <gateway>.
  3. Rede externa por IP: ping -c 3 1.1.1.1. Se funciona, o roteamento está correto.
  4. DNS: dig +short example.com. Resposta vazia ou erro com ping por IP funcionando indica problema no resolvedor.
  5. Porta: nc -zv host 443 ou curl -v. No servidor, use ss -tulpn para ver se o serviço escuta e em qual endereço.
  6. Firewall: sudo nft list ruleset, sudo iptables -L -n, sudo ufw status.
  7. Aplicação: curl -I e os logs do serviço (journalctl -u nginx).

Siga de baixo para cima e não pule etapas: em poucos minutos você descobre em que nível está o problema, em vez de reiniciar tudo às cegas.

Comandos antigos e seus substitutos

Obsoleto (net-tools)Substituto moderno
ifconfigip addr, ip link
route -nip route
arp -nip neigh
netstat -tulpnss -tulpn
nslookupdig

Em distribuições recentes o net-tools muitas vezes nem vem instalado, então vale se acostumar com os comandos novos.

Conclusão

Para o diagnóstico do dia a dia bastam seis comandos de rede do Linux: ip, ss, ping, traceroute, dig e curl. Verifique por camadas — endereço, rota, DNS, porta e aplicação — e o erro costuma ser encontrado rapidamente. Os comandos de rede e a análise de falhas comuns são praticados no curso de Linux.

Perguntas frequentes

Por que o comando ifconfig não existe no meu sistema?

Ele faz parte do pacote net-tools, que não é instalado por padrão nas distribuições modernas. Use ip addr ou instale o net-tools manualmente.

Como saber meu endereço IP público pelo terminal?

Execute curl ifconfig.me ou curl -4 icanhazip.com: um serviço externo devolve o endereço com o qual você sai para a internet. O comando ip addr mostra apenas os endereços das interfaces, geralmente internos.

Qual a diferença entre ping e verificar uma porta?

O ping testa se o host responde por ICMP, mas não diz nada sobre um serviço específico. Para verificar se o servidor aceita conexões em uma porta, use nc -zv host porta ou curl.

Como ver a velocidade e a carga de uma interface de rede?

Os contadores de bytes e erros aparecem com ip -s link, e a carga em tempo real pode ser vista com iftop, nload ou bmon. A largura de banda entre duas máquinas é medida com o iperf3.

Como trocar temporariamente o servidor DNS?

Em sistemas com systemd-resolved, use sudo resolvectl dns eth0 1.1.1.1. Para um teste pontual, é mais simples indicar o servidor diretamente na consulta: dig @1.1.1.1 example.com.

Aprenda este tema em vídeo

Este tema é abordado em profundidade, com prática, no curso “Linux: с нуля до уверенного администрирования”.

Ir para o curso