Como usar ip route para inspecionar e adicionar rotas de rede

1. Introdução ao comando ip route e ao roteamento no Linux

O roteamento IP é um dos pilares fundamentais da comunicação em redes de computadores. No Linux, o subsistema de roteamento gerencia como os pacotes são encaminhados entre diferentes interfaces de rede e destinos. O comando ip route faz parte do pacote iproute2, que substituiu o legado route (do pacote net-tools) por oferecer uma sintaxe mais consistente, suporte a funcionalidades avançadas como múltiplas tabelas de roteamento e melhor integração com o kernel moderno.

Enquanto route -n exibe a tabela de roteamento de forma simples, ip route fornece informações detalhadas como escopo, métrica, protocolo de origem e cache de rota. A estrutura básica de uma entrada na tabela de roteamento inclui: rede de destino, gateway (próximo salto), métrica (prioridade) e interface de saída.

2. Inspecionando a tabela de roteamento atual

Para visualizar a tabela de roteamento principal, utilize:

ip route show

Exemplo de saída típica:

default via 192.168.1.1 dev eth0 proto dhcp metric 100
10.0.0.0/8 via 10.0.0.1 dev eth1 proto static metric 50
172.16.0.0/16 dev eth2 proto kernel scope link metric 100
192.168.1.0/24 dev eth0 proto kernel scope link metric 100
  • default: Rota padrão para qualquer destino não especificado
  • via: Endereço do gateway (próximo salto)
  • dev: Interface de rede utilizada
  • proto: Protocolo que adicionou a rota (kernel, static, dhcp, etc.)
  • scope: Alcance da rota (link, host, universe)
  • metric: Prioridade (menor valor = maior prioridade)

Para filtrar por interface:

ip route show dev eth0

Para exibir a rota específica para um destino:

ip route get 8.8.8.8

Saída:

8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.100 uid 1000

Esse comando é extremamente útil para verificar qual caminho o sistema escolheria para alcançar um endereço específico.

3. Adicionando rotas estáticas simples

A sintaxe fundamental para adicionar uma rota estática é:

ip route add <destino> via <gateway> dev <interface>

Exemplo 1: Rota para uma sub-rede local

ip route add 10.10.20.0/24 via 192.168.1.254 dev eth0

Exemplo 2: Rota para uma sub-rede remota

ip route add 172.20.0.0/16 via 10.0.0.1 dev eth1

Exemplo 3: Configuração da rota padrão (default gateway)

ip route add default via 192.168.1.1 dev eth0

Ou, de forma equivalente:

ip route add 0.0.0.0/0 via 192.168.1.1 dev eth0

Após adicionar, verifique com ip route show se a rota aparece corretamente.

4. Trabalhando com métricas e prioridades

A métrica define a prioridade de uma rota. Quando existem múltiplas rotas para o mesmo destino, o kernel escolhe aquela com a menor métrica. Isso é útil para cenários de failover ou balanceamento.

Adicionando rota com métrica específica:

ip route add 10.0.0.0/8 via 192.168.1.254 dev eth0 metric 50
ip route add 10.0.0.0/8 via 10.0.0.1 dev eth1 metric 100

Nesse exemplo, a rota via eth0 (métrica 50) será preferida. Se ela falhar, a rota via eth1 (métrica 100) assumirá.

Para simular failover, remova a rota primária:

ip route del 10.0.0.0/8 via 192.168.1.254 dev eth0

O tráfego automaticamente passará a usar a rota secundária.

5. Gerenciando rotas com escopo e tipo

O escopo define o alcance da rota:

  • link: Válida apenas para a própria interface (ex.: redes diretamente conectadas)
  • host: Rota para um único host
  • universe: Alcance global (padrão para rotas via gateway)

Rotas especiais permitem controle fino de tráfego:

  • blackhole: Descarta pacotes silenciosamente
  • unreachable: Retorna ICMP "Destination Unreachable"
  • prohibit: Retorna ICMP "Administratively Prohibited"

Exemplo prático: bloquear tráfego para uma rede específica:

ip route add blackhole 10.0.0.0/8

Para testar:

ping 10.0.0.1

O comando não receberá resposta, mas o tráfego será descartado localmente sem enviar pacotes à rede.

6. Removendo e modificando rotas existentes

Para remover uma rota, utilize a mesma sintaxe da adição, substituindo add por del:

ip route del 10.10.20.0/24 via 192.168.1.254 dev eth0

Para modificar uma rota existente (alterar gateway ou métrica):

ip route change 10.0.0.0/8 via 10.0.0.2 dev eth1 metric 80

Cuidado ao remover a rota padrão: Se você remover a rota default sem ter uma alternativa, perderá conectividade com redes externas. Para restaurá-la rapidamente:

ip route add default via 192.168.1.1 dev eth0

7. Persistência de rotas e integração com scripts

Rotas adicionadas via comando ip route são voláteis e desaparecem após reinicialização. Para torná-las permanentes, configure nos arquivos do sistema:

Debian/Ubuntu (/etc/network/interfaces):

auto eth0
iface eth0 inet static
    address 192.168.1.100
    netmask 255.255.255.0
    gateway 192.168.1.1
    up ip route add 10.0.0.0/8 via 192.168.1.254 dev eth0
    down ip route del 10.0.0.0/8 via 192.168.1.254 dev eth0

Red Hat/CentOS (/etc/sysconfig/network-scripts/route-eth0):

10.0.0.0/8 via 192.168.1.254 dev eth0

Para automação com scripts de inicialização, crie um script em /etc/network/if-up.d/ ou use systemd:

# /etc/systemd/system/static-routes.service
[Unit]
Description=Static routes
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/add-static-routes.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

8. Diagnóstico avançado e resolução de problemas

Para verificar o caminho real que um pacote seguiria:

ip route get 10.20.30.40

Combine com ping para testar conectividade:

ping -c 4 10.20.30.40

Se o ping falhar, verifique conflitos de rota com:

ip route show table all

Isso exibe todas as tabelas de roteamento (principal, local, default), permitindo identificar rotas conflitantes.

Para depuração avançada, use tcpdump para capturar pacotes na interface de saída esperada:

tcpdump -i eth0 -n icmp

Execute um ping para o destino e observe se os pacotes estão sendo enviados pela interface correta.

Referências