Dia 26: Encaminhamento com Linux — ip route, Policy Routing e VRF
O Linux não é apenas um sistema operativo para servidores e estações de trabalho — pode funcionar como um router completo, encaminhando tráfego entre redes com a mesma flexibilidade que um equipamento comercial. Neste Dia 26 do curso de redes, exploramos o encaminhamento avançado em Linux: ip route, tabelas de encaminhamento múltiplas, policy routing com ip rule, e VRF (Virtual Routing and Forwarding) — funcionalidades que permitem segmentar tráfego, implementar multi-WAN, e isolar redes de forma elegante.
♿ O Linux pode funcionar como router completo — com ip route, policy routing e VRF, substitui routers comerciais em cenários PME.
⚠️ Activar encaminhamento IP sem firewall adequado expõe a rede — sempre configurar iptables/nftables antes de activar net.ipv4.ip_forward.
Neste artigo:
1. Introdução ao Encaminhamento em Linux
O kernel Linux inclui um subsistema de encaminhamento de rede extremamente capaz, acessível através do comando ip do pacote iproute2. Por defeito, o Linux não encaminha pacotes entre interfaces — funciona como um hospedeiro final. Para que actue como router, é necessário activar o IP forwarding ao nível do kernel.
O encaminhamento em Linux suporta vários níveis de complexidade:
- Rotas estáticas — rotas manuais com
ip route add - Protocolos de encaminhamento dinâmico — OSPF, BGP via FRRouting, BIRD, ou Quagga
- Tabelas múltiplas — até 4.294.967.295 tabelas independentes
- Policy routing — decisões de encaminhamento baseadas em origem, marca, TOS, etc.
- VRF — isolamento completo de instâncias de encaminhamento (L3 VPNs)
O comando ip substituiu completamente as ferramentas antigas ifconfig, route e arp. Para referência completa, consulte a página de manual oficial do ip(8).
2. ip route — Comandos Essenciais
O subcomando ip route gere a tabela de encaminhamento principal. É a ferramenta base para definir como o tráfego é encaminhado entre redes.
Activar IP Forwarding
Antes de qualquer configuração de rotas, é necessário activar o encaminhamento no kernel. Sem isto, o Linux descarta pacotes que não são destinados a si próprio.
# Activar IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
# Tornar persistente
# /etc/sysctl.d/99-routing.conf
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
O primeiro método é temporário (perde-se ao reiniciar). Para tornar a configuração persistente, criar o ficheiro em /etc/sysctl.d/ e aplicar com sysctl -p /etc/sysctl.d/99-routing.conf.
Rotas Estáticas
As rotas estáticas definem manualmente o caminho para redes específicas. A tabela principal (main) é a predefinida.
# Rotas estáticas
ip route add 10.0.2.0/24 via 10.0.1.1
ip route add default via 192.168.1.1 dev eth0
ip route show
| Comando | Descrição |
|---|---|
ip route add |
Adiciona uma rota à tabela principal |
ip route del |
Remove uma rota específica |
ip route show |
Lista todas as rotas da tabela principal |
ip route flush |
Limpa todas as rotas (cuidado!) |
ip route get |
Mostra a rota exacta para um destino |
A rota default é a última a ser consultada — quando nenhuma rota mais específica corresponde ao destino, o tráfego é enviado para o gateway predefinido. A métrica (priority) determina a ordem quando há várias rotas para o mesmo destino.
3. Tabelas de Encaminhamento Múltiplas
O Linux suporta múltiplas tabelas de encaminhamento independentes. Por defeito, existem 4 tabelas: local (id 255), main (id 254), default (id 253), e unspec (id 0). Podem ser criadas até 4.294.967.295 tabelas adicionais, definidas em /etc/iproute2/rt_tables.
As tabelas múltiplas são a base do policy routing — permitem que diferentes fluxos de tráfego usem conjuntos de rotas completamente diferentes. Um caso típico é uma rede com duas ligações WAN: tráfego VPN usa uma tabela, tráfego de convidados usa outra.
# Tabelas múltiplas
echo "100 vpn" >> /etc/iproute2/rt_tables
echo "200 guest" >> /etc/iproute2/rt_tables
ip route add default via 10.0.1.1 dev tun0 table vpn
ip route add 192.168.1.0/24 dev eth0 table vpn
Após definir as tabelas em rt_tables, as rotas são adicionadas com o parâmetro table NOME. Para visualizar uma tabela específica:
ip route show table vpn
ip route show table guest
ip route show table all
O comando ip route show table all lista o conteúdo de todas as tabelas simultaneamente — útil para auditar a configuração completa do sistema.
4. Policy Routing com ip rule
O policy routing estende o encaminhamento tradicional. Em vez de decidir a rota apenas pelo destino (IP de destino), o policy routing permite decidir com base em origem, marca de firewall (fwmark), TOS/DSCP, interface de entrada, e outros critérios. As regras são avaliadas em ordem de prioridade (número mais baixo = maior prioridade).
O fluxo de decisão é: o kernel consulta a lista de regras (ip rule) em ordem de prioridade. A primeira regra que corresponde indica qual tabela de encaminhamento usar. Dentro dessa tabela, o kernel procura a rota para o destino.
# Policy routing
ip rule add from 192.168.2.0/24 table vpn
ip rule add fwmark 0x1 table vpn
ip rule show
O exemplo acima cria duas regras: todo o tráfego originado da rede 192.168.2.0/24 usa a tabela vpn; e todo o tráfego marcado com fwmark 0x1 (marcado pelo iptables/nftables) também usa a tabela vpn.
| Selector | Descrição |
|---|---|
from |
IP ou rede de origem |
fwmark |
Marca aplicada pelo firewall (iptables/nftables) |
iif |
Interface de entrada |
tos |
Tipo de Serviço / DSCP |
uidrange |
Intervalo de UID do processo |
Cenário típico de multi-WAN: tráfego da rede de convidados (192.168.3.0/24) sai pela WAN secundária, enquanto o tráfego corporativo sai pela WAN principal. Com fwmark, pode-se marcar pacotes específicos (ex: VoIP) para usar uma rota com menor latência.
5. VRF no Linux
VRF (Virtual Routing and Forwarding) é a forma mais avançada de isolamento de encaminhamento em Linux. Um VRF cria uma instância de encaminhamento completamente separada — com a sua própria tabela de rotas, regras, e interfaces associadas. É o equivalente L3 das VLANs: assim como as VLANs isolam domínios de difusão, os VRFs isolam domínios de encaminhamento.
Os VRFs são suportados nativamente no kernel Linux desde a versão 4.8 (2016), através do módulo vrf. Cada VRF está associado a uma tabela de encaminhamento específica.
# VRF
ip link add vrf-corp type vrf table 10
ip link set vrf-corp up
ip link set eth1 master vrf-corp
ip addr add 10.0.10.1/24 dev eth1
ip route show table 10
Neste exemplo, criamos um VRF chamado vrf-corp associado à tabela 10. A interface eth1 passa a fazer parte deste VRF — todo o tráfego que entra e sai por eth1 usa apenas a tabela 10 para decisões de encaminhamento. O ip route show table 10 mostra as rotas dentro do VRF.
VRF vs Policy Routing
| Característica | Policy Routing | VRF |
|---|---|---|
| Isolamento de rotas | Parcial (regras selectivas) | Total (instância separada) |
| Interfaces dedicadas | Não | Sim (associada ao VRF) |
| Protocolos de encaminhamento | Partilhados | Isolados por VRF |
| Complexidade | Média | Alta |
| Caso de uso típico | Multi-WAN, QoS | L3 VPN, multi-inquilinato |
Para executar comandos dentro de um VRF específico (por exemplo, testar conectividade):
ip vrf exec vrf-corp ping 10.0.10.2
ip vrf exec vrf-corp ip route show
6. Encaminhamento IP e Depuração
A depuração de encaminhamento em Linux exige ferramentas específicas para inspecionar o estado do kernel e o fluxo real dos pacotes. O comando ip route get é especialmente útil — mostra exactamente que rota o kernel escolheria para um destino, incluindo a interface de saída e o gateway.
# Debugging
ip route get 8.8.8.8
ip -s link show eth0
ss -tlnp
O ip route get 8.8.8.8 responde com a rota exacta seleccionada, incluindo a interface, gateway, e origem. O ip -s link show eth0 mostra estatísticas detalhadas da interface (RX/TX, erros, descartes). O ss -tlnp lista sockets TCP em escuta com PID/programa associado.
Ferramentas Complementares
tcpdump -i eth0— captura de pacotes em tempo realtraceroute/mtr— rastreia o caminho até ao destinoconntrack -L— inspeciona a tabela de ligações do netfilterip neigh show— tabela ARP/NDP (vizinhos)sysctl net.ipv4.ip_forward— confirma estado do forwarding
Para verificar se o encaminhamento está activo para IPv6, usar sysctl net.ipv6.conf.all.forwarding. Cada interface tem as suas próprias variáveis em /proc/sys/net/ipv{4,6}/conf/.
7. Erros Comuns e Lista de Verificação
A configuração de encaminhamento em Linux é poderosa mas propensa a erros subtis. Abaixo, os erros mais frequentes e uma lista de verificação para auditoria.
| Erro | Causa | Solução |
|---|---|---|
| Pacotes não são encaminhados | ip_forward=0 |
Activar net.ipv4.ip_forward=1 via sysctl |
| Policy routing não funciona | Tabela sem rotas definidas | Verificar ip route show table N e adicionar rotas |
| VRF sem conectividade | Interface não associada ao VRF | ip link set ethX master vrf-N |
| Rotas perdem-se ao reiniciar | Configuração não persistente | Usar systemd-networkd, Netplan, ou ficheiro em /etc/sysctl.d/ |
| fwmark sem efeito | Marca não aplicada no firewall | Configurar iptables -t mangle ou nftables meta mark |
| Tráfego contorna o firewall | Encaminhamento activo sem regras FORWARD | Definir política FORWARD DROP e regras explícitas |
Lista de Verificação
- ✓ Encaminhamento IP activo (
sysctl net.ipv4.ip_forward= 1) - ✓ Encaminhamento IPv6 activo se aplicável
- ✓ Firewall configurado ANTES de activar encaminhamento (política FORWARD DROP)
- ✓ Rotas estáticas persistentes (systemd-networkd, Netplan, ou rc.local)
- ✓ Tabelas múltiplas definidas em
/etc/iproute2/rt_tables - ✓ Regras de policy routing testadas com
ip route get - ✓ VRFs com interfaces correctamente associadas
- ✓
rp_filter(filtragem de caminho inverso) configurado conforme necessário - ✓ Protocolo de encaminhamento dinâmico (FRR, BIRD) configurado se necessário
- ✓ Monitorização de rotas via SNMP, NetFlow, ou scripts personalizados
O parâmetro rp_filter (filtragem de caminho inverso) merece atenção especial: quando activo em modo rigoroso (net.ipv4.conf.all.rp_filter=1), o kernel descarta pacotes cuja rota de retorno não passa pela mesma interface. Isto pode quebrar configurações multi-WAN com policy routing — nesses casos, usar modo permissivo (rp_filter=2) ou desactivar (rp_filter=0).