Dia 17: Encaminhamento Avançado — Policy Routing, PBR e Multicast
Neste artigo
1. Introdução ao Encaminhamento Avançado
O encaminhamento tradicional baseia-se no endereço de destino: o router consulta a tabela de encaminhamento, selecciona a melhor rota e envia o pacote. Este modelo funciona para a maioria dos cenários, mas fica limitado quando precisamos de decisões baseadas em outros critérios — endereço de origem, protocolo, porta TCP/UDP, ou marcações de firewall.
O encaminhamento avançado expande este paradigma com três pilares fundamentais:
| Tecnologia | Função | Caso de uso |
|---|---|---|
| PBR | Decidir rota por política (origem, porta, marca) | Tráfego VPN por origem |
| VRF | Múltiplas tabelas de encaminhamento isoladas | Multi-inquilino, sobreposição |
| Multicast | Um para muitos (IGMP + PIM) | Transmissão, IPTV, conferências |
No Dia 5 abordámos encaminhamento estático e protocolos dinâmicos (RIP, OSPF). No Dia 7 cobrimos BGP e políticas entre sistemas autónomos. Hoje damos o salto para técnicas que não se limitam ao endereço de destino.
ℹ Por que importa?
PBR e VRF são a base de redes empresariais modernas — SD-WAN, multi-inquilino, nuvem híbrida. Sem eles, o tráfego segue sempre a rota padrão, impossibilitando segmentação avançada e políticas de saída selectivas.
2. Policy-Based Routing (PBR)
O Policy-Based Routing (PBR) permite que o router tome decisões de encaminhamento com base em critérios que não o endereço de destino. Em vez de consultar apenas a tabela de rotas, o router avalia regras (mapas de rotas) que podem considerar:
- Endereço IP de origem (sub-rede específica)
- Protocolo (TCP, UDP, ICMP)
- Porta de origem ou destino
- Tamanho do pacote
- Marcas do firewall (fwmark via Netfilter)
- Interface de entrada
Route Maps
As mapas de rotas são o mecanismo central do PBR. Funcionam como listas ordenadas de regras, cada uma com condições (match) e acções (set). Se um pacote corresponde às condições, a acção define o comportamento — próximo salto, interface de saída, marcação DSCP, etc.
Em routers Cisco, uma route map típica tem este aspecto:
# Cisco IOS — Route map para PBR
route-map VPN-TRAFFIC permit 10
match ip address 100
set ip next-hop 10.0.1.1
!
# ACL que define o tráfego a redireccionar
access-list 100 permit tcp 192.168.1.0 0.0.0.255 any eq 443
!
# Aplicar na interface de entrada
interface GigabitEthernet0/0
ip policy route-map VPN-TRAFFIC
No Linux, o equivalente usa o subsistema iproute2 com regras (ip rule) e tabelas de encaminhamento múltiplas.
ℹ Ordem de avaliação
O Linux processa as regras por prioridade (campo priority em ip rule). A primeira regra que corresponde determina a tabela a usar. A regra consulta local (prioridade 0) é sempre a primeira e resolve endereços locais.
3. Configurar PBR no Linux (ip rule)
O Linux suporta PBR nativamente através do iproute2. O conceito chave é que podemos ter várias tabelas de encaminhamento, cada uma identificada por um nome ou número, e regras que determinam qual a tabela a consultar.
Passo 1 — Criar uma tabela personalizada
Por defeito, o Linux tem três tabelas: local, main e default. Para PBR precisamos de tabelas adicionais, definidas em /etc/iproute2/rt_tables:
# Adicionar tabela personalizada
echo "200 vpn" >> /etc/iproute2/rt_tables
# Adicionar rota na tabela vpn
ip route add default via 10.0.1.1 dev tun0 table vpn
# Regra: tráfego da sub-rede 192.168.1.0/24 usa a tabela vpn
ip rule add from 192.168.1.0/24 table vpn
# Verificar regras
ip rule show
# Verificar rotas da tabela vpn
ip route show table vpn
Passo 2 — Marcação de pacotes com fwmark
Para critérios mais avançados (porta, protocolo), usamos o Netfilter para marcar pacotes e depois criamos regras baseadas nessas marcas:
# Marcar pacotes com destino HTTPS (porta 443)
iptables -t mangle -A PREROUTING -p tcp --dport 443 -j MARK --set-mark 1
# Regra baseada na marca
ip rule add fwmark 1 table vpn
# Verificar marcação
iptables -t mangle -L PREROUTING -v -n
⚠ Atenção
As regras ip rule e iptables não sobrevivem a um reinício. Para persistência, usar um script de inicialização (systemd) ou pacote iptables-persistent.
Passo 3 — SNAT para tráfego da tabela VPN
Quando o tráfego sai pela interface tun0, precisa de NAT para que os pacotes tenham um endereço de origem válido nessa interface:
# SNAT para tráfego que sai pela VPN
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
# Activar encaminhamento
echo 1 > /proc/sys/net/ipv4/ip_forward
4. Multicast — IGMP e PIM
O multicast é um modo de entrega um-para-muitos: uma fonte envia pacotes para um endereço de grupo (224.0.0.0/4 em IPv4, ff00::/8 em IPv6) e todos os receptores interessados recebem uma cópia. É fundamental para transmissão ao vivo, conferências, e distribuição de actualizações.
IGMP — Gestão de Grupos
O IGMP (Internet Group Management Protocol) é o protocolo que permite aos hospedeiros anunciarem interesse em receber tráfego de um grupo multicast. O router envia queries períodicas e os hospedeiros respondem com relatórios de adesão. Existem três versões:
| Versão | Características | Notas |
|---|---|---|
| IGMPv1 | Join simples, leave por timeout | Obsoleto |
| IGMPv2 | Leave explícito, queries específicos | Mais comum |
| IGMPv3 | Source-Specific Multicast (SSM) | Recomendado |
PIM — Protocol Independent Multicast
O PIM é o protocolo de encaminhamento multicast entre routers. Tem vários modos:
- PIM Dense Mode (PIM-DM) — Inunda a rede com tráfego e depois poda os ramos sem receptores. Adequado para grupos pequenos e redes locais.
- PIM Sparse Mode (PIM-SM) — Constrói árvores partilhadas com um ponto de encontro (Rendezvous Point, RP). Mais escalável para grupos grandes.
- PIM-SSM (Source-Specific Multicast) — O receptor especifica a fonte. Dispensa o RP, mais seguro e simples.
- BIDIR-PIM — Bidireccional, optimizado para muitos-fontes-muitos-receptores.
No Linux, podemos inspecionar grupos multicast activos:
# Listar grupos multicast activos
ip maddr show
# Verificar rotas multicast
ip mroute show
# Activar multicast na interface
ip link set eth0 multicast on
# Verificar pertinência em grupos
cat /proc/net/igmp
ℹ Endereços reservados
O intervalo 224.0.0.0/4 é reservado para multicast em IPv4. O sub-intervalo 224.0.0.0/24 é para protocolos locais (TTL=1) — OSPF hello (224.0.0.5), RIPv2 (224.0.0.9). Em IPv6, ff02::/16 é o âmbito link-local.
5. VRF — Virtual Routing and Forwarding
O VRF (Virtual Routing and Forwarding) cria instâncias isoladas da tabela de encaminhamento dentro do mesmo router. Cada VRF tem as suas próprias rotas, interfaces e regras, permitindo sobreposição de endereços e segmentação total entre inquilinos ou departamentos.
No Linux, o VRF é implementado desde o kernel 4.8+ através do módulo vrf:
# Criar VRF com ID de tabela 10
ip link add vrf-red type vrf table 10
ip link set dev vrf-red up
# Atribuir interface ao VRF
ip link set dev eth1 master vrf-red
# Adicionar rota dentro do VRF
ip route add 10.10.0.0/16 dev eth1 table 10
# Verificar rotas do VRF
ip route show table 10
# Verificar VRFs activos
ip -br link show type vrf
O tráfego que entra por uma interface pertencente a um VRF só consulta a tabela de encaminhamento desse VRF. Isto permite, por exemplo, que dois inquilinos usem 10.0.0.0/24 sem conflito — cada um tem a sua própria tabela.
| Comparativo | VRF | VLAN |
|---|---|---|
| Camada | L3 (tabela de encaminhamento) | L2 (domínio de difusão) |
| Isolamento | Tabelas de rotas separadas | Domínios de difusão separados |
| Sobreposição | Sim (IPs duplicados) | Sim (MACs duplicados) |
| Caso típico | Multi-inquilino, MPLS VPN | Segmentação de rede local |
💡 Dica
O VRF-Lite é a variante sem MPLS — usa-se em redes puramente IP para segregação L3. Ideal para data centers com múltiplas inquilinos que partilham a mesma infra-estrutura física.
6. Multihoming
Multihoming significa ter mais de uma ligação a fornecedores ou redes upstream. É fundamental para redundância e balanceamento de carga. Existem várias estratégias:
Multihoming com dois ISPs (BGP)
O cenário clássico: uma empresa com dois ISPs e um bloco IP próprio (PI — Provider Independent). O BGP anuncia o bloco a ambos os fornecedores, e o tráfego de entrada escolhe o melhor caminho:
# Cisco IOS — Multihoming BGP com dois ISPs
router bgp 65001
network 203.0.113.0 mask 255.255.255.0
neighbor 198.51.100.1 remote-as 64512
neighbor 198.51.100.1 route-map PREPEND-ISP1 out
neighbor 192.0.2.1 remote-as 64513
neighbor 192.0.2.1 route-map PREFER-ISP2 out
!
# ISP2 preferido para entrada (AS_PATH mais curto)
route-map PREFER-ISP2 permit 10
set as-path prepend 65001 65001
!
# ISP1 como reserva (AS_PATH mais longo)
route-map PREPEND-ISP1 permit 10
set as-path prepend 65001 65001 65001
Multihoming com PBR no Linux
Para redes sem bloco IP próprio (PI), o PBR é a solução. Cada ISP dá um endereço, e o tráfego é distribuído por origem ou porta:
# Tabelas para cada ISP
echo "201 isp1" >> /etc/iproute2/rt_tables
echo "202 isp2" >> /etc/iproute2/rt_tables
# Rotas de cada ISP
ip route add default via 192.0.2.1 dev eth0 table isp1
ip route add default via 198.51.100.1 dev eth1 table isp2
# Regras: tráfego de entrada sai pela mesma interface
ip rule add from 192.0.2.10 table isp1
ip rule add from 198.51.100.10 table isp2
# Regra: VoIP (portas 5060-5061) usa ISP2
iptables -t mangle -A PREROUTING -p udp --dport 5060:5061 -j MARK --set-mark 2
ip rule add fwmark 2 table isp2
# Balanceamento por origem
ip rule add from 192.168.1.0/25 table isp1
ip rule add from 192.168.1.128/25 table isp2
⚠ Atenção
O multihoming sem BGP requer que o tráfego de entrada e saída use o mesmo ISP. Se o pacote entra por ISP1 e sai por ISP2, os firewalls do ISP2 vão descartar por anti-spoofing (BCP38). As regras ip rule add from ... garantem isto.
7. Erros Comuns e Lista de Verificação
Aqui ficam os erros mais frequentes ao configurar encaminhamento avançado e a respectiva lista de verificação:
| Problema | Causa | Solução |
|---|---|---|
| Tráfego ignora PBR | Regra ip rule com prioridade errada |
Verificar ip rule show e prioridade |
| Sem acesso após VPN | Falta NAT na interface tun0 | Adicionar MASQUERADE em POSTROUTING |
| VRF sem tráfego | Interface não atribuída ao VRF | ip link set dev ethX master vrf-red |
| Multicast não funciona | Multicast desactivado na interface | ip link set eth0 multicast on |
| PBR perde após reboot | Regras não persistem | Script systemd ou iptables-persistent |
| Multihoming: pacotes descartados | Entrada e saída por ISPs diferentes | Garantir simetria com ip rule from |
Lista de Verificação
- ✓
ip rule showmostra as regras correctas com prioridades - ✓
ip route show table Nconfirma rotas em cada tabela - ✓
iptables -t mangle -L -v -nconfirma marcação de pacotes - ✓
cat /proc/sys/net/ipv4/ip_forwardretorna 1 - ✓
ip -br link show type vrflista VRFs activos - ✓
ip maddr showconfirma grupos multicast activos - ✓ Persistência de regras após reboot configurada
- ✓ Simetria de tráfego em multihoming verificada
✓ Resumo
PBR dá-nos controlo granular sobre o caminho do tráfego; VRF cria isolamento L3 sem hardware adicional; Multicast optimiza entrega um-para-muitos; Multihoming garante redundância. Combinados, formam o conjunto de ferramentas de qualquer administrador de redes empresariais.