Linux: Fundamentos de Rede
Os comandos de rede do Linux são ferramentas essenciais pra diagnosticar "por que não consigo conectar". Desde ver os IPs até testar a conectividade de portas, da resolução de DNS até requisições HTTP — esses comandos cobrem todo o processo de troubleshooting de rede.
📋 Pré-requisitos: Você já deve conhecer
- Aula 3: Fundamentos do Terminal
1. O Que Você Vai Aprender
ip addr/route: ver a configuração de redeping/mtr: testes de conectividadecurl/wget: requisições HTTPss/netstat: portas em escutadig: consultas DNS
2. A História do "Site Não Carrega"
(1) O Problema: Subiu o Serviço, Mas Não Acessa de Fora
O Xiaoming subiu um serviço em Node.js na porta 3000, mas quando ele tentava acessar http://server-ip:3000 pelo navegador, ficava carregando até dar timeout.
Primeiro ele conferiu localmente:
curl http://localhost:3000
# ✅ Retornou o HTML normal
Depois conferiu de fora:
# Verificar se a porta estava em escuta
ss -tlnp | grep 3000
# LISTEN 0 128 127.0.0.1:3000 0.0.0.0:* ← Só escutava em localhost!
# O Node.js estava bindado em 127.0.0.1 em vez de 0.0.0.0
(2) Corrigindo o Endereço de Bind
O Xiaoming trocou server.listen(3000, '127.0.0.1') por server.listen(3000, '0.0.0.0'). Depois de reiniciar, o acesso de fora já funcionava.
PermitRootLogin no pra desabilitar o login SSH direto como root, usando um usuário comum + sudo. Também desabilite o login por senha (PasswordAuthentication no) e use só autenticação por chave.
(3) O Benefício: Um Método de Troubleshooting Sistemático
O Xiaoming aprendeu a sequência de diagnóstico: curl local pra confirmar que o serviço funciona → ss pra ver o endereço de escuta → conferir o firewall → curl externo pra validar.
3. Pontos-Chave
(1) ip — Configuração de Rede
# Ver endereços IP
ip addr show
# Ou na forma abreviada
ip a
# Ver a tabela de roteamento
ip route
# Ou abreviado
ip r
# Ver o status das interfaces de rede
ip link show
# Habilitar/desabilitar interface
sudo ip link set eth0 up
sudo ip link set eth0 down
(2) ping/mtr — Testes de Conectividade
# ping (testa a conectividade de rede)
ping google.com # Ping contínuo, Ctrl+C pra parar
ping -c 4 google.com # Ping só 4 vezes
ping -c 4 -i 2 google.com # Intervalo de 2 segundos
ping -c 10 -q google.com # Só o resumo
# mtr (combina traceroute e ping)
mtr google.com # Traça rota continuamente
mtr -r -c 10 google.com # Modo relatório (saída após 10 rounds)
(3) curl/wget — Requisições HTTP
# curl (requisições HTTP)
curl https://example.com # Requisição GET
curl -I https://example.com # Só os headers
curl -o page.html https://example.com # Salva num arquivo
> 💡 Dica: O `curl -v` (modo verboso) é uma ferramenta poderosa pra debugar problemas HTTP — ele mostra os headers completos da requisição, os headers da resposta e o processo de handshake TLS, ajudando a identificar se é problema de DNS, timeout de conexão, erro de certificado ou redirect. Quando uma requisição `curl` falha, o primeiro passo é adicionar `-v` pra ver os detalhes.
curl -L http://httpbin.org/redirect/3 # Segue redirects
curl -k https://self-signed.com # Pula a verificação SSL
curl -X POST -d '{"key":"value"}' -H "Content-Type: application/json" https://api.example.com
# wget (download de arquivos)
wget https://example.com/file.zip # Baixa o arquivo
wget -c https://example.com/big.zip # Continua um download interrompido
wget -r -np https://example.com/docs/ # Download recursivo
(4) ss/netstat — Portas em Escuta
# ss (recomendado, mais rápido)
ss -tlnp # Portas TCP em escuta
ss -ulnp # Portas UDP em escuta
ss -tlnp | grep 80 # Filtra a porta 80
ss -tuna # Todas as conexões TCP/UDP
# netstat (tradicional, pode precisar instalar)
netstat -tlnp
netstat -i # Estatísticas da interface de rede
(5) dig — Consultas DNS
# dig
dig example.com # Consulta DNS completa
dig +short example.com # Só o IP
dig example.com A # Consulta registro A
dig example.com MX # Consulta registro de e-mail
dig @8.8.8.8 example.com # Usa um servidor DNS específico
# Outras ferramentas de DNS
nslookup example.com # Consulta simples
host example.com # Mais conciso
ℹ️ Nota: O
dig,nslookupehostconsultam registros DNS, mas têm formatos de saída diferentes —digé o mais detalhado (inclui tempo de consulta, servidor etc.),nslookupé mais conciso, ehosté o mais minimalista (só o IP). Usedigpra troubleshooting de DNS, ehostoudig +shortpra lookups rápidos de IP.
(6) ▶ Exemplo: Ver a Configuração de Rede Local
# Ver todos os endereços IP
ip -br addr
# lo UNKNOWN 127.0.0.1/8
# eth0 UP 192.168.1.100/24
# Ver o gateway padrão
ip route | grep default
# default via 192.168.1.1 dev eth0
# Ver o DNS
cat /etc/resolv.conf
# nameserver 8.8.8.8
# nameserver 1.1.1.1
Saída:
TEXTlo UNKNOWN 127.0.0.1/8 eth0 UP 192.168.1.100/24 default via 192.168.1.1 dev eth0 nameserver 8.8.8.8 nameserver 1.1.1.1
(7) ▶ Exemplo: Troubleshooting de Conectividade de Rede
# 1. Pingar o gateway primeiro (confirma que a LAN está ok)
ping -c 2 192.168.1.1
# 2. Pingar um IP externo (confirma que a internet está ok)
ping -c 2 8.8.8.8
# 3. Resolução de DNS (confirma que o domínio resolve)
dig +short google.com
# 4. Conectividade de porta (confirma que a porta do serviço está aberta)
nc -zv google.com 80
# Connection to google.com (142.250.80.14) 80 port [tcp/http] succeeded!
# 5. Requisição HTTP (confirma que o serviço está funcionando)
curl -I https://example.com
Saída:
TEXTPING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.423 ms --- 192.168.1.1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=12.3 ms --- 8.8.8.8 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss 142.250.80.14 Connection to google.com (142.250.80.14) 80 port [tcp/http] succeeded! HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8 Server: ECS (dcb/7F84)
(8) ▶ Exemplo: Testando APIs com curl
# Requisição GET
curl https://api.github.com/users/octocat
# Ver os headers da resposta
curl -I https://httpbin.org
# Enviar JSON via POST
curl -X POST https://httpbin.org/post \
-H "Content-Type: application/json" \
-d '{"name":"Alice","role":"developer"}'
# Requisição autenticada
curl -u "username:token" https://api.github.com/user
# Testar só o código de status HTTP
curl -s -o /dev/null -w "%{http_code}" https://example.com
Saída:
TEXT{"login":"octocat","id":583231,"avatar_url":"https://avatars.githubusercontent.com/u/583231?v=4"} HTTP/1.1 200 OK Server: gunicorn/19.9.0 Content-Type: application/json { "json": { "name": "Alice", "role": "developer" } } 200
(9) ▶ Exemplo: Troubleshooting de Porta
# Ver todas as portas TCP em escuta
ss -tlnp
# Conferir se a porta 3306 (MySQL) está em escuta
ss -tlnp | grep 3306
# Ver portas de um processo específico
ss -tlnp | grep nginx
# Testar se uma porta remota está aberta
echo "Testing port 80..."
timeout 3 bash -c "echo >/dev/tcp/example.com/80" && echo "Open" || echo "Closed"
# Ver os estados das conexões
ss -tuna | grep ESTAB
Saída:
TEXTState Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 128 0.0.0.0:80 0.0.0.0:* LISTEN 0 128 0.0.0.0:443 0.0.0.0:* LISTEN 0 128 *:3306 *:* LISTEN 0 511 *:80 *:* users:(("nginx",pid=1234,fd=6)) Open ESTAB 0 0 192.168.1.100:22 10.0.0.50:52341 ESTAB 0 0 192.168.1.100:443 172.16.0.5:49832
(10) ▶ Exemplo: Baixar Arquivos
# Download com wget
wget -c https://releases.ubuntu.com/22.04/ubuntu-22.04.3-live-server-amd64.iso
# Download com curl
curl -L -o ubuntu.iso https://releases.ubuntu.com/22.04/ubuntu-22.04.3-live-server-amd64.iso
# Baixar e extrair de uma vez
curl -L https://github.com/user/repo/archive/main.tar.gz | tar -xz
Saída:
TEXT--2026-07-07 10:23:01-- https://releases.ubuntu.com/22.04/ubuntu-22.04.3-live-server-amd64.iso Resolving releases.ubuntu.com... 185.125.190.37 HTTP request sent, awaiting response... 200 OK Length: 2014838784 (1.9G) [application/x-iso9660-image] Saving to: 'ubuntu-22.04.3-live-server-amd64.iso' % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 45% 891M 0 0 891M 0 0 0 12.3M 0:00:02 0:00:01 0:00:01 12.3M
(11) ▶ Exemplo Abrangente: Script de Diagnóstico de Rede
#!/bin/bash
# net-diag.sh - Ferramenta de diagnóstico de rede
TARGET="${1:-google.com}"
echo "========================================"
echo " Relatorio de Diagnostico de Rede"
echo " Horario: $(date)"
echo "========================================"
echo ""
echo "1. Configuracao de Rede Local"
echo "----------------"
ip -br addr 2>/dev/null || ifconfig
echo ""
echo "2. Gateway Padrao"
echo "-----------"
ip route | grep default
echo ""
echo "3. Servidores DNS"
echo "--------------"
cat /etc/resolv.conf | grep nameserver
echo ""
echo "4. Resolucao DNS ($TARGET)"
echo "----------------------"
dig +short "$TARGET" 2>/dev/null || nslookup "$TARGET" 2>/dev/null || host "$TARGET"
echo ""
echo "5. Conectividade de Rede"
echo "--------------"
ping -c 4 -q "$TARGET" 2>&1 | tail -3
echo ""
echo "6. Resposta HTTP"
echo "-------------"
curl -s -o /dev/null -w "HTTP %{http_code}, tempo: %{time_total}s\n" "https://$TARGET" --connect-timeout 5
echo ""
echo "7. Trace de Rota"
echo "------------"
mtr -r -c 3 "$TARGET" 2>/dev/null | tail -5 || echo "mtr nao esta instalado"
echo ""
echo "8. Portas em Escuta"
echo "-----------"
ss -tlnp 2>/dev/null | head -10 || netstat -tlnp 2>/dev/null | head -10
echo ""
echo "========================================"
❓ Perguntas Frequentes
P: Se o ping falhar, é sempre problema de rede? R: Nem sempre. Muitos servidores bloqueiam ICMP (ping) por firewall. É totalmente normal o ping falhar e o HTTP funcionar. Alternativa:
nc -zv host portaoucurl -Ipra testar portas específicas do serviço.
P: Qual a diferença entre
curlewget? R: Ocurlé mais rico em recursos (suporta todos os métodos HTTP, headers customizados, dados JSON), ideal pra testar APIs. Owgettem download mais poderoso (download recursivo, continuação, espelhamento de sites). Usecurlno dia a dia pra testar APIs, ewgetpra baixar arquivos.
P: Qual é melhor,
ssounetstat? R: Ossé mais novo e mais rápido — ele lê direto do buffer de sockets do kernel sem precisar parsear/proc/net. Onetstaté mais antigo e lento em sistemas com muitas conexões. Dê preferência aoss; onetstatpode nem vir instalado por padrão em sistemas mais novos.
P: Qual a diferença entre a porta 80 e 443? R: A 80 é HTTP (texto puro), a 443 é HTTPS (criptografado). Sites modernos praticamente só usam 443. Se
curl http://...não funcionar, tentecurl https://....
P: Por que a conexão SSH está lenta? R: Causas comuns: 1) DNS reverso (configure
UseDNS no). 2) Autenticação GSSAPI (configureGSSAPIAuthentication no). 3) Latência de rede. Solução rápida: adicioneUseDNS noeGSSAPIAuthentication nono~/.ssh/config.
📖 Resumo
ip addr/ip routemostram IP e roteamentoping -c 4testa conectividade,mtrtraça a rotacurl -Ivê os headers de resposta,curl -X POST -d '{}'envia requisiçõesss -tlnpmostra as portas em escutadig +shortfaz consulta DNS rápida
📝 Exercícios
- Básico (⭐): Use
ip -br addrpra ver seu IP local e as interfaces de rede, depois useping -c 4 google.compra testar a conectividade e analisar o resultado - Intermediário (⭐⭐): Use
ss -tlnppra ver todas as portas em escuta da sua máquina, depois usecurl -I https://example.compra ver os headers HTTP edig +short github.compra consultar o IP do GitHub - Desafio (⭐⭐⭐): Escreva um script de diagnóstico de rede que detecte automaticamente IP local, gateway, DNS, conectividade, resposta HTTP e portas em escuta, gere um relatório formatado e destaque em cor os avisos quando encontrar anomalias