Ir para o conteúdo

Capítulo 27 – Traffic Shaping

Introdução

Traffic Shaping é o mecanismo que controla, prioriza e otimiza o fluxo de dados na rede. No OPNsense, essa funcionalidade utiliza o dummynet (nativo do FreeBSD) em conjunto com o firewall para aplicar limitação, priorização e agendamento de pacotes.
Sem shaping, alguns fluxos podem monopolizar a banda, elevando latência e jitter — especialmente danosos para VoIP, videoconferências e aplicações interativas.

Com o Traffic Shaping, é possível:

  • Definir limites de banda por interface, rede, host ou aplicação.
  • Priorizar serviços críticos (ex.: VoIP) em detrimento de tráfego menos sensível (ex.: downloads em segundo plano).
  • Garantir justiça no uso da internet (igualdade) entre usuários e dispositivos.
  • Reduzir bufferbloat aplicando algoritmos modernos como FQ-CoDel.

O resultado é uma QoS mais estável e previsível para toda a rede.


Conceitos Fundamentais

Pipes

Canais lógicos com capacidade máxima de transmissão (largura de banda). Todo pacote “remapeado” para um pipe respeita seu limite.

Queues (Filas)

Organizam o tráfego dentro do pipe, aplicando prioridades relativas (weights). É nelas que os algoritmos de agendamento atuam.

Schedulers (Agendadores)

Algoritmos que decidem como e quando os pacotes nas filas são atendidos.
Destaque para FQ-CoDel (Fair Queuing – Controlled Delay), eficaz contra bufferbloat. Alternativas mais simples, como PRIQ, apenas obedecem prioridade.

Rules (Regras de Shaping)

Regras que enviam o tráfego para queues/pipes específicos, baseadas em IP/porta/protocolo/interface/direção.

Resumo

  • Pipes definem quantos pacotes cabem no link.
  • Queues organizam quais pacotes tem prioridade dentro do link.
  • Schedulers definem como os pacotes fluem dentro do link.
  • Rules selecionam quais pacotes entram em cada link virtual.

Durante os procedimentos abaixo, iremos basicamente criar os pipes, criar filas e associar aos pipes, e aplicar regras para dizer quais conexões serão enfileiradas.

Facilitando a compreensão

Se preferir pensar de uma forma mais simples: Pense como uma rua (pipe) com o semáforo quebrado:
Há um guarda de trânsito (rules) que sinaliza quantos carros podem avançar por vez (scheduler) em cada direção (queues).


Pré-requisitos e Diretrizes

  • Conhecer a banda real (medida) de cada link.
  • Decidir onde aplicar (WAN, LAN, VLAN específica).
  • Entender direções:

    • Download: tráfego entra pela WAN.
    • Upload: tráfego sai pela WAN.
  • As regras possuem Sequência que definem a ordem de processamento.

  • Necessário habilitar Shared Forwarding caso use policy routing.


Cenário 1 — Limitar Download/Upload por Máquina (Wi-Fi)

Objetivo: cada dispositivo Wi-Fi recebe, no máximo, 5 Mb/s de download e 1 Mb/s de upload, independentemente do uso dos demais.

Premissas:

  • 1 link WAN.
  • Sem outras regras de shaper na WAN.
  • Sub-rede Wi-Fi: 192.168.20.0/24.

1. Criar os Pipes

Acesse Firewall → Shaper → Pipes.

Importante

Ao abrir o formulário do pipe, clique na opção advanced mode para visualizar o campo Scheduler.

  • Pipe de Download (por IP de destino)

    Bandwidth 5 Mb/s
    Mask Destination
    Scheduler FlowQueue-CoDel
    Description pipe_wifi_download_por_ip
  • Pipe de Upload (por IP de origem)

    Bandwidth 1 Mb/s
    Mask Source
    Scheduler FlowQueue-CoDel
    Description pipe_wifi_upload_por_ip

2. Criar as Queues

Acesse Firewall → Shaper → Queues.

  • Queue de Download

    Pipe pipe_wifi_download_por_ip
    Weight 100
    Description queue_wifi_download_por_ip
  • Queue de Upload

    Pipe pipe_wifi_upload_por_ip
    Weight 100
    Description queue_wifi_upload_por_ip

3. Criar as Regras de Shaping

Acesse Firewall → Shaper → Rules.

Importante

Na tela de adição da regra, clique na opção advanced para exibir o campo Direction.

  • Regra de Download

    Interface WAN
    Direction In
    Target queue_wifi_download_por_ip
    Destination 192.168.20.0/24
    Description Wifi_Limit_Download_Per_IP
  • Regra de Upload

    Interface WAN
    Direction Out
    Target queue_wifi_upload_por_ip
    Source 192.168.20.0/24
    Description Wifi_Limit_Upload_Per_IP

4. Validar

  • Acesse Firewall → Shaper → Status para observar tráfego nas filas.
  • Realize teste simultâneo de velocidade (speedtest.net) em múltiplas máquinas: cada host respeitará 5 Mb/s down e 1 Mb/s up.

Importante

Se todos compartilharem a mesma banda, revise as Masks nos pipes (Destination no download, Source no upload).


Cenário 2 — Priorizar Voz sobre IP (SIP/RTP)

Objetivo: priorizar SIP (porta 5060/UDP) e RTP (10000–20000/UDP) frente ao tráfego geral, em proporção 9:1.

Premissas:

  • 1 link WAN.
  • Sem outros shapers na WAN.

Acesse Firewall → Shaper → Pipes.

  • Download

    Bandwidth (download real)
    Description pipe_download
  • Upload

    Bandwidth (upload real)
    Description pipe_upload

2. Criar as Queues (proporção 9:1)

Acesse Firewall → Shaper → Queues.

  • Download Voip

    Pipe pipe_download
    Weight 9
    Description queue_voip_download
  • Download Geral

    Pipe pipe_download
    Weight 1
    Description queue_geral_download
  • Upload Voip

    Pipe pipe_upload
    Weight 9
    Description queue_voip_upload
  • Upload Geral

    Pipe pipe_upload
    Weight 1
    Description queue_geral_upload

3. Criar Regras (específicas no topo)

Acesse Firewall → Shaper → Rules.

Importante

Na tela de adição da regra, clique na opção advanced para exibir o campo Direction.

  • SIP Download

    Sequence 10
    Interface WAN
    Proto UDP
    Src-port 5060
    Direction In
    Target queue_voip_download
    Description SIP_Download
  • SIP Upload

    Sequence 20
    Interface WAN
    Proto UDP
    Dst-port 5060
    Direction Out
    Target queue_voip_upload
    Description SIP_Upload
  • RTP Download

    Sequence 30
    Interface WAN
    Proto UDP
    Src-port 10000-20000
    Direction In
    Target queue_voip_download
    Description RTP_Download
  • RTP Upload

    Sequence 40
    Interface WAN
    Proto UDP
    Dst-port 10000-20000
    Direction Out
    Target queue_voip_upload
    Description RTP_Upload
  • Tráfego Geral Download

    Sequence 50
    Interface WAN
    Proto ip
    Direction In
    Target queue_geral_download
    Description Outros_Download
  • Tráfego Geral Upload

    Sequence 60
    Interface WAN
    Proto ip
    Direction Out
    Target queue_geral_upload
    Description Outros_Upload

Importante

Repare que estamos usando o protocolo UDP e as portas Origem/Destino 5060 ou 10000:20000 para identificar o tráfego que é SIP/RTP e o que é o tráfego restante.

4. Validar

  • Acesse Firewall → Shaper → Status para verificar ocupação das filas de VoIP vs Geral.
  • Gere tráfego concorrente (ex.: chamadas + downloads) e confirme que VoIP permanece estável.

Importante

Ajuste portas RTP conforme o PABX/softphone. Se usar SRTP/diferentes ranges, adapte as regras.


Objetivo: reduzir latência sob carga limitando o pipe a 85%–95% da banda real e aplicando FQ-CoDel (com ECN quando suportado).

Sobre o ECN

ECN é um algoritmo de notificação de rede congestionada. Muito útil quando os demais equipamentos de rede como switches e roteadores também suportam.

Premissas:

  • Link 1 (Claro): medido 89/97 Mb/s (down/up).
  • Link 2 (Vivo): medido 750/396 Mb/s (down/up).
  • Sem outros shapers na WAN.

1. Criar os Pipes (4 no total)

Acesse Firewall → Shaper → Pipes.

Importante

Marque a opção advanced mode no formulário do pipe para visualizar o campo Scheduler type.

  • Claro_Download

    Bandwidth 76 Mb/s (≈85% de 89 Mb/s)
    Scheduler type FlowQueue-Codel
    (FQ-)CoDel ECN marcar
    Description pipe_claro_download
  • Claro_Upload

    Bandwidth 82 Mb/s (≈85% de 97 Mb/s)
    Scheduler type FlowQueue-Codel
    (FQ-)CoDel ECN marcar
    Description pipe_claro_upload
  • Vivo_Download

    Bandwidth 637 Mb/s (≈85% de 750)
    Scheduler type FlowQueue-Codel
    (FQ-)CoDel ECN marcar
    Description pipe_vivo_download
  • Vivo_Upload

    Bandwidth 336 Mb/s (≈85% de 396)
    Scheduler type FlowQueue-Codel
    (FQ-)CoDel ECN marcar
    Description pipe_vivo_upload

2. Criar Queues (4 no total)

Acesse Firewall → Shaper → Queues.

  • Claro Download

    Pipe pipe_claro_download
    Description queue_claro_download
  • Claro Upload

    Pipe pipe_claro_upload
    Description queue_claro_upload
  • Vivo Donwload

    Pipe pipe_vivo_download
    Description queue_vivo_download
  • Vivo Upload

    Pipe pipe_vivo_upload
    Description queue_vivo_upload

3. Regras por Interface/Direção

Acesse Firewall → Shaper → Rules.

  • Claro Download

    Interface Claro
    Sequence 10
    Direction In
    Target queue_claro_download
    Description Claro_Download
  • Claro Upload

    Interface Claro
    Sequence 20
    Direction Out
    Target queue_claro_upload
    Description Claro_Upload
  • Vivo Donwload

    Interface Vivo
    Sequence 30
    Direction In
    Target queue_vivo_download
    Description Vivo_Download
  • Vivo Upload

    Interface Vivo
    Sequence 40
    Direction Out
    Target queue_vivo_upload
    Description Vivo_Upload

4. Validar

  • Acesse Firewall → Shaper → Status para acompanhar filas sob carga.

Teste de bufferbloat

Acesse o site waveform usando uma máquina interna para testar. Espera-se obter nota A/A+ quando ajustado corretamente.

Importante

Se notar anomalias, teste com o ECN desabilitado (há equipamentos que o ignoram parcialmente).


Observações Importantes

  • Direção correta importa: Download = WAN/In; Upload = WAN/Out.
  • Weights são relativos ao pipe: a razão 9:1 vale somente dentro do mesmo pipe e apenas sob saturação.
  • Dimensione por banda medida (não contratada): use 85%–95% para que o shaper controle a fila na borda.
  • Sequenciamento: regras específicas (SIP/RTP) antes das genéricas (Geral).
  • Compatibilidade: IDS/IPS inline, Zenarmor e Proxy podem interferir; valide sempre.
  • Shared Forwarding: habilite para efetividade do shaping em cenários com policy routing.

Boas Práticas

  • Defina nomenclatura clara para pipes/queues/rules (por link, direção e propósito).
  • Documente capacidade, máscaras, pesos e regras — especialmente em ambientes multi-WAN.
  • Monitore Firewall → Shaper → Status durante testes de carga.
  • Use FQ-CoDel como padrão; ajuste ECN se houver incompatibilidades.
  • Revise periodicamente com base em banda real (novos testes de velocidade).

Validação e Diagnóstico

  1. Status em tempo real: Firewall → Shaper → Status.
  2. Teste de carga controlado: iPerf3 entre hosts internos/externos.
  3. Medição de bufferbloat: https://www.waveform.com/tools/bufferbloat.
  4. Logs e ordem: verifique Sequence das regras; específicas devem preceder genéricas.
  5. Confirmação de caminho: em ambientes com policy routing, valide se Shared Forwarding está habilitado.

Conclusão

O Traffic Shaping do OPNsense, baseado no dummynet e em algoritmos como o FQ-CoDel, permite controlar largura de banda, priorizar serviços críticos (como VoIP) e reduzir bufferbloat, entregando redes mais responsivas, estáveis e justas.
Com dimensionamento correto, máscaras por host, sequenciamento adequado e validação contínua, é possível obter QoS consistente em ambientes de qualquer porte.