Comandos de rede Linux: ip, ss, ping, traceroute, dig e curl para diagnóstico de rede
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
| Tarefa | Comando |
|---|---|
| Endereços IP de todas as interfaces | ip -br addr |
| Estado das interfaces (UP/DOWN) | ip -br link |
| Tabela de rotas | ip route |
| Por qual gateway o pacote sai até um endereço | ip route get 8.8.8.8 |
| Vizinhos (tabela ARP) | ip neigh |
| Portas em escuta e processos | sudo ss -tulpn |
| Conexões TCP estabelecidas | ss -tn state established |
| Verificar se um host está acessível | ping -c 4 example.com |
| Caminho dos pacotes até o host | traceroute example.com, mtr example.com |
| Resolver nome para endereço | dig +short example.com |
| Consultar um servidor DNS específico | dig @1.1.1.1 example.com |
| Verificar a resposta HTTP | curl -I https://example.com |
| Detalhes da conexão e do TLS | curl -v https://example.com |
| Se uma porta TCP está aberta | nc -zv host 443 |
| Nome do host | hostnamectl, 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ção | Significado |
|---|---|
-t / -u | TCP / UDP |
-l | somente sockets em escuta |
-p | mostrar o processo (para processos de outros usuários é preciso sudo) |
-n | não converter portas e endereços em nomes |
-a | todos os sockets, inclusive os estabelecidos |
-s | estatí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?
| Comando | O que faz |
|---|---|
curl -I URL | somente os cabeçalhos (requisição HEAD) |
curl -v URL | detalhado: DNS, conexão, TLS e cabeçalhos |
curl -L URL | seguir redirecionamentos |
curl -o arquivo URL | salvar em arquivo |
curl -X POST -H 'Content-Type: application/json' -d '{"a":1}' URL | enviar JSON |
curl -k URL | não verificar o certificado (somente para depuração) |
curl --resolve site.ru:443:10.0.0.5 https://site.ru | acessar um servidor específico, ignorando o DNS |
curl -s -o /dev/null -w '%{http_code} %{time_total}\n' URL | có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"
- Interface e endereço:
ip -br addr— a interface está UP e tem endereço. - Gateway:
ip route— existedefault via; depoisping -c 3 <gateway>. - Rede externa por IP:
ping -c 3 1.1.1.1. Se funciona, o roteamento está correto. - DNS:
dig +short example.com. Resposta vazia ou erro com ping por IP funcionando indica problema no resolvedor. - Porta:
nc -zv host 443oucurl -v. No servidor, usess -tulpnpara ver se o serviço escuta e em qual endereço. - Firewall:
sudo nft list ruleset,sudo iptables -L -n,sudo ufw status. - Aplicação:
curl -Ie 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 |
|---|---|
ifconfig | ip addr, ip link |
route -n | ip route |
arp -n | ip neigh |
netstat -tulpn | ss -tulpn |
nslookup | dig |
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.
Este tema é abordado em profundidade, com prática, no curso “Linux: с нуля до уверенного администрирования”.
Ir para o curso