Rede no Linux: ip, ss, netstat e configuração de interfaces
1. Introdução ao Gerenciamento de Rede no Linux
O gerenciamento de rede no Linux passou por uma evolução significativa nas últimas décadas. Antigamente, administradores utilizavam comandos como ifconfig e route para configurar interfaces e rotas. Essas ferramentas, embora funcionais, faziam parte do pacote net-tools, que foi gradualmente substituído pelo conjunto iproute2.
O comando ip tornou-se o padrão moderno para configuração de rede, oferecendo uma sintaxe unificada e recursos mais avançados. Para diagnóstico de conexões, temos o ss (socket statistics) como substituto moderno do netstat, além de arquivos de configuração que variam conforme a distribuição.
É importante distinguir entre configurações temporárias (aplicadas via comandos e perdidas após reinicialização) e configurações permanentes (definidas em arquivos como /etc/network/interfaces ou via Netplan).
2. Comando ip: O Novo Padrão para Configuração de Rede
O comando ip é a ferramenta central do iproute2. Vamos explorar seus principais subcomandos.
Gerenciamento de interfaces com ip link
Listar interfaces disponíveis:
ip link show
Ativar ou desativar uma interface:
sudo ip link set eth0 up
sudo ip link set eth0 down
Modificar o MTU (Maximum Transmission Unit):
sudo ip link set eth0 mtu 1500
Configuração de endereços IP com ip addr
Exibir endereços configurados:
ip addr show
Adicionar um endereço IP a uma interface:
sudo ip addr add 192.168.1.100/24 dev eth0
Remover um endereço IP:
sudo ip addr del 192.168.1.100/24 dev eth0
Roteamento com ip route
Visualizar a tabela de roteamento:
ip route show
Adicionar rota padrão (gateway):
sudo ip route add default via 192.168.1.1
Adicionar rota estática para uma rede específica:
sudo ip route add 10.0.0.0/8 via 192.168.1.254
3. Diagnóstico com ss e netstat
Comando ss (socket statistics)
O ss é mais rápido e eficiente que o netstat, especialmente em sistemas com muitas conexões. Opções principais:
-t: exibe conexões TCP-u: exibe conexões UDP-l: exibe apenas sockets em modo listen-p: mostra o processo associado (requer sudo)-n: exibe portas numericamente
Exemplos práticos:
# Todas as conexões TCP ativas
ss -t
# Portas em escuta (TCP e UDP)
ss -tln
ss -uln
# Portas em escuta com processo associado
sudo ss -tlnp
Comando netstat
Embora considerado legado, o netstat ainda está presente em muitos sistemas. Exemplos úteis:
# Conexões ativas com portas numéricas
netstat -an
# Portas TCP em escuta
netstat -tln
# Tabela de roteamento
netstat -rn
Comparação prática: ss vs netstat
O ss oferece melhor desempenho em sistemas com milhares de conexões, além de fornecer informações mais detalhadas sobre sockets. O netstat é mais intuitivo para iniciantes, mas o ss é recomendado para uso moderno.
4. Configuração de Interfaces de Rede
Estilo Debian/Ubuntu (/etc/network/interfaces)
Exemplo de configuração estática:
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
Para DHCP:
auto eth0
iface eth0 inet dhcp
Estilo Red Hat/CentOS (/etc/sysconfig/network-scripts/ifcfg-*)
Arquivo ifcfg-eth0 para IP estático:
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
Configuração via Netplan (Ubuntu moderno)
Arquivo YAML em /etc/netplan/01-netcfg.yaml:
network:
version: 2
ethernets:
eth0:
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
Aplicar configuração:
sudo netplan apply
NetworkManager (nmcli e nmtui)
Interface via terminal:
# Listar conexões
nmcli connection show
# Criar conexão estática
nmcli connection add type ethernet con-name "minha-rede" ifname eth0 ip4 192.168.1.100/24 gw4 192.168.1.1
# Modificar DNS
nmcli connection modify "minha-rede" ipv4.dns "8.8.8.8 8.8.4.4"
5. Resolução de Nomes e DNS
Arquivo /etc/hosts
Resolução local de nomes, sobrescreve DNS:
127.0.0.1 localhost
192.168.1.100 servidor.local
Arquivo /etc/resolv.conf
Configuração de servidores DNS:
nameserver 8.8.8.8
nameserver 8.8.4.4
search meudominio.local
systemd-resolved e resolvectl
Gerenciamento moderno de DNS:
# Verificar status
resolvectl status
# Configurar DNS para interface
sudo resolvectl dns eth0 8.8.8.8
# Verificar resolução de nome
resolvectl query google.com
6. Diagnóstico Avançado e Solução de Problemas
Verificação de conectividade
Teste básico com ping:
ping -c 4 8.8.8.8
Rastreamento de rota com traceroute:
traceroute google.com
Ferramenta combinada mtr (my traceroute):
mtr google.com
Análise de tráfego local
Captura de pacotes com tcpdump:
# Capturar pacotes na interface eth0
sudo tcpdump -i eth0
# Capturar tráfego HTTP na porta 80
sudo tcpdump -i eth0 port 80
Escaneamento de portas com nmap:
# Escanear portas abertas no localhost
nmap localhost
# Escanear portas específicas
nmap -p 22,80,443 192.168.1.100
Depuração de problemas comuns
Interface down: verifique com ip link show e ative com ip link set eth0 up.
Rota ausente: confirme com ip route show e adicione rota padrão se necessário.
DNS falhando: teste com ping 8.8.8.8 (IP direto) e depois com ping google.com. Se o IP funcionar mas o nome não, revise /etc/resolv.conf.
7. Boas Práticas e Automação
Script para configuração rápida
Crie um script config-rede.sh:
#!/bin/bash
INTERFACE="eth0"
IP="192.168.1.100"
MASCARA="24"
GATEWAY="192.168.1.1"
# Configuração temporária
sudo ip addr flush dev $INTERFACE
sudo ip addr add $IP/$MASCARA dev $INTERFACE
sudo ip link set $INTERFACE up
sudo ip route add default via $GATEWAY
echo "Rede configurada em $INTERFACE com IP $IP/$MASCARA"
Persistência com systemd-networkd
Arquivo /etc/systemd/network/10-eth0.network:
[Match]
Name=eth0
[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
DNS=8.8.4.4
Ativar:
sudo systemctl enable --now systemd-networkd
Monitoramento básico
Script para log de conectividade:
#!/bin/bash
LOG="/var/log/rede-monitor.log"
echo "$(date) - Verificando conectividade..." >> $LOG
ping -c 2 8.8.8.8 > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Conectividade OK" >> $LOG
else
echo "FALHA na conectividade" >> $LOG
fi
# Registrar conexões ativas
echo "Conexões TCP ativas:" >> $LOG
ss -tln >> $LOG
echo "---" >> $LOG
Referências
- Documentação oficial do iproute2 — Página oficial do projeto iproute2 com referência completa dos comandos
ip,sse tc. - Manual do comando ip no Linux — Página de manual (man page) do comando
ipcom todas as opções e exemplos. - Guia de configuração de rede no Ubuntu — Documentação oficial da Canonical sobre configuração de interfaces, Netplan e NetworkManager.
- Comparação entre ss e netstat — Artigo técnico da Red Hat explicando as diferenças e quando usar cada ferramenta.
- Tutorial de tcpdump para iniciantes — Guia prático sobre captura e análise de pacotes com tcpdump no Linux.
- Documentação do systemd-resolved — Manual oficial do systemd-resolved e comando resolvectl para gerenciamento moderno de DNS.
- Netplan: configuração de rede declarativa — Exemplos oficiais de configuração YAML para Netplan em distribuições Ubuntu modernas.