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/sMask DestinationScheduler FlowQueue-CoDelDescription pipe_wifi_download_por_ip -
Pipe de Upload (por IP de origem)
Bandwidth 1 Mb/sMask SourceScheduler FlowQueue-CoDelDescription pipe_wifi_upload_por_ip
2. Criar as Queues
Acesse Firewall → Shaper → Queues.
-
Queue de Download
Pipe pipe_wifi_download_por_ipWeight 100Description queue_wifi_download_por_ip -
Queue de Upload
Pipe pipe_wifi_upload_por_ipWeight 100Description 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 WANDirection InTarget queue_wifi_download_por_ipDestination 192.168.20.0/24Description Wifi_Limit_Download_Per_IP -
Regra de Upload
Interface WANDirection OutTarget queue_wifi_upload_por_ipSource 192.168.20.0/24Description 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.
1. Criar os Pipes (banda do link)
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_downloadWeight 9Description queue_voip_download -
Download Geral
Pipe pipe_downloadWeight 1Description queue_geral_download -
Upload Voip
Pipe pipe_uploadWeight 9Description queue_voip_upload -
Upload Geral
Pipe pipe_uploadWeight 1Description 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 10Interface WANProto UDPSrc-port 5060Direction InTarget queue_voip_downloadDescription SIP_Download -
SIP Upload
Sequence 20Interface WANProto UDPDst-port 5060Direction OutTarget queue_voip_uploadDescription SIP_Upload -
RTP Download
Sequence 30Interface WANProto UDPSrc-port 10000-20000Direction InTarget queue_voip_downloadDescription RTP_Download -
RTP Upload
Sequence 40Interface WANProto UDPDst-port 10000-20000Direction OutTarget queue_voip_uploadDescription RTP_Upload -
Tráfego Geral Download
Sequence 50Interface WANProto ipDirection InTarget queue_geral_downloadDescription Outros_Download -
Tráfego Geral Upload
Sequence 60Interface WANProto ipDirection OutTarget queue_geral_uploadDescription 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.
Cenário 3 — Mitigar Bufferbloat por Link (FQ-CoDel + ECN)
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_downloadDescription queue_claro_download -
Claro Upload
Pipe pipe_claro_uploadDescription queue_claro_upload -
Vivo Donwload
Pipe pipe_vivo_downloadDescription queue_vivo_download -
Vivo Upload
Pipe pipe_vivo_uploadDescription queue_vivo_upload
3. Regras por Interface/Direção
Acesse Firewall → Shaper → Rules.
-
Claro Download
Interface Claro Sequence 10Direction In Target queue_claro_downloadDescription Claro_Download -
Claro Upload
Interface Claro Sequence 20Direction Out Target queue_claro_uploadDescription Claro_Upload -
Vivo Donwload
Interface Vivo Sequence 30Direction In Target queue_vivo_downloadDescription Vivo_Download -
Vivo Upload
Interface Vivo Sequence 40Direction Out Target queue_vivo_uploadDescription 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
- Status em tempo real: Firewall → Shaper → Status.
- Teste de carga controlado: iPerf3 entre hosts internos/externos.
- Medição de bufferbloat: https://www.waveform.com/tools/bufferbloat.
- Logs e ordem: verifique Sequence das regras; específicas devem preceder genéricas.
- 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.