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

1. O Que Você Vai Aprender


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:

BASH
curl http://localhost:3000
# ✅ Retornou o HTML normal

Depois conferiu de fora:

BASH
# 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.

⚠️ Atenção: Os serviços SSH por padrão permitem login direto do usuário root — essa é a brecha de segurança mais comum. Servidores de produção precisam definir 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

BASH
# 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

TEXT
# 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

BASH
# 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

BASH
# 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

TEXT
# 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, nslookup e host consultam registros DNS, mas têm formatos de saída diferentes — dig é o mais detalhado (inclui tempo de consulta, servidor etc.), nslookup é mais conciso, e host é o mais minimalista (só o IP). Use dig pra troubleshooting de DNS, e host ou dig +short pra lookups rápidos de IP.

(6) ▶ Exemplo: Ver a Configuração de Rede Local

BASH
# 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:

TEXT
lo               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

BASH
# 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:

TEXT
PING 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

BASH
# 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

BASH
# 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:

TEXT
State   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

BASH
# 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

BASH
#!/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 porta ou curl -I pra testar portas específicas do serviço.

P: Qual a diferença entre curl e wget? R: O curl é mais rico em recursos (suporta todos os métodos HTTP, headers customizados, dados JSON), ideal pra testar APIs. O wget tem download mais poderoso (download recursivo, continuação, espelhamento de sites). Use curl no dia a dia pra testar APIs, e wget pra baixar arquivos.

P: Qual é melhor, ss ou netstat? R: O ss é mais novo e mais rápido — ele lê direto do buffer de sockets do kernel sem precisar parsear /proc/net. O netstat é mais antigo e lento em sistemas com muitas conexões. Dê preferência ao ss; o netstat pode 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, tente curl https://....

P: Por que a conexão SSH está lenta? R: Causas comuns: 1) DNS reverso (configure UseDNS no). 2) Autenticação GSSAPI (configure GSSAPIAuthentication no). 3) Latência de rede. Solução rápida: adicione UseDNS no e GSSAPIAuthentication no no ~/.ssh/config.


📖 Resumo


📝 Exercícios

  1. Básico (⭐): Use ip -br addr pra ver seu IP local e as interfaces de rede, depois use ping -c 4 google.com pra testar a conectividade e analisar o resultado
  2. Intermediário (⭐⭐): Use ss -tlnp pra ver todas as portas em escuta da sua máquina, depois use curl -I https://example.com pra ver os headers HTTP e dig +short github.com pra consultar o IP do GitHub
  3. 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
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%