Dia 17: Encaminhamento Avançado — Policy Routing, PBR e Multicast

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 show mostra as regras correctas com prioridades
  • ip route show table N confirma rotas em cada tabela
  • iptables -t mangle -L -v -n confirma marcação de pacotes
  • cat /proc/sys/net/ipv4/ip_forward retorna 1
  • ip -br link show type vrf lista VRFs activos
  • ip maddr show confirma 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.