Vai al contenuto

Traffic shaping e QoS

In questa lezione impari a

  • spiegare a cosa servono traffic shaping e QoS
  • scegliere tra shaper (ALTQ) e limiter
  • configurare limiter per utente
  • applicare limiti solo in certi orari

Quando la banda non basta per tutti, bisogna decidere chi passa prima. Questa lezione mostra come farlo con pfSense.

Cos'è il traffic shaping?

Il Traffic Shaping (o QoS - Quality of Service) è la capacità di controllare, prioritizzare e limitare il traffico di rete in base a regole specifiche. Immagina di avere un'autostrada a 3 corsie: il traffic shaping decide quali veicoli possono usare la corsia veloce, quali quella normale, e quali devono rallentare.

Problemi risolti dal traffic shaping

  • VoIP Instabile – Chiamate che "scattano" quando qualcuno scarica file → QoS garantisce priorità VoIP
  • Videoconferenze Lente – Teams/Zoom lagga durante backup → Priorità alta per videoconferenze
  • Un Utente Satura Banda – Download torrent occupa tutta la banda → Limiti per-utente o per-applicazione
  • Servizi Critici Lenti – ERP/CRM lento durante peak hours → Priorità garantita per traffico aziendale

Scenari d'uso reali

ScenarioProblemaSoluzione QoS
Call CenterVoIP scadente durante ore puntaPriorità massima VoIP (EF), limite download per utenti
Ufficio RemotoVideoconferenze interrotte da aggiornamenti WindowsPriorità alta videoconf, limite basso Windows Update
Scuola/UniversitàStudenti saturano banda con YouTube/NetflixLimite streaming video, priorità piattaforme e-learning
Hotel/WiFi PubblicoPochi utenti monopolizzano bandaFair queue + limite per-utente (es: 10 Mbps max)
Azienda Multi-SedeVPN site-to-site lentaPriorità traffico inter-sede, limit P2P/streaming

Due approcci: traffic shaper vs limiters

pfSense offre DUE sistemi di traffic shaping completamente diversi. È fondamentale capire quando usare quale.

Traffic shaper (ALTQ)

Sistema più vecchio ma maturo, basato su ALTQ (Alternate Queueing). Lavora con code di priorità gerarchiche.

Come funziona ALTQ. ALTQ crea "code" (queues) con priorità diverse. Quando la banda è satura, i pacchetti nelle code ad alta priorità passano prima.

Banda WAN: 100 Mbps

Queue Hierarchy:
├─ qVoIP (40% banda, priorità 7) ← VoIP sempre fluido
├─ qVideoConf (30% banda, priorità 5) ← Teams/Zoom
├─ qWeb (20% banda, priorità 3) ← Navigazione normale
└─ qDefault (10% banda, priorità 1) ← Tutto il resto

Durante congestione:
- VoIP usa fino a 40 Mbps garantiti
- Se VoIP usa solo 10 Mbps, i 30 Mbps liberi vanno a VideoConf
- Fair distribution dinamica basata su priorità

Vantaggi ALTQ:

  • Prioritizzazione intelligente basata su tipo traffico
  • Condivisione banda dinamica tra code
  • Wizard integrato (facilissimo per casi comuni)
  • Ideale per: VoIP, videoconferenze, gaming

Limitazioni ALTQ:

  • Solo 1 interfaccia per tipo (1 WAN, 1 LAN)
  • Non funziona con multi-WAN load balancing
  • Meno granulare per limiti per-utente

Limiters (dummynet)

Sistema più flessibile basato su dummynet. Lavora con pipe che limitano rigidamente la banda.

Configurazione limiter download
Configurazione limiter per limitare velocità download con schedulers

Come funzionano i limiters. I limiters sono "tubi" con diametro fisso. Crei limiters separati e li associ a regole firewall specifiche.

Limiter: Download_10Mbps
Bandwidth: 10 Mbps
Mask: Source Address

Applicato a regola firewall:
Source: LAN net
Destination: Internet
In/Out pipe: Download_10Mbps

Risultato:
Ogni IP LAN può scaricare MAX 10 Mbps
IP 192.168.1.10 → 10 Mbps max
IP 192.168.1.20 → 10 Mbps max (indipendente)
Totale può superare 10 Mbps (somma di tutti)

Vantaggi Limiters:

  • Limiti per-utente granulari
  • Funziona con multi-WAN
  • Bandwidth guarantees rigidi
  • Supporta più interfacce simultaneamente

Limitazioni Limiters:

  • Nessuna prioritizzazione intelligente
  • Banda "sprecata" se non utilizzata (non ridistribuita)
  • Configurazione più complessa (no wizard)

ALTQ e limiters insieme: possibile ma attenzione. Tecnicamente puoi usare ALTQ e Limiters contemporaneamente, MA:

  • Configurazione molto complessa
  • Facile creare conflitti/inefficienze
  • Debugging difficile

Consiglio: Scegli UNO dei due approcci in base alle tue esigenze.

Quale scegliere?

Usa ALTQ Se...Usa Limiters Se...
Hai VoIP o videoconferenze criticheVuoi limitare singoli utenti (es: 10 Mbps/user)
Vuoi prioritizzazione automatica per tipo trafficoHai multi-WAN con load balancing
Setup singola WAN + singola LANHai multiple interfacce (LAN, DMZ, Guest, etc.)
Vuoi wizard semplice e veloceServe controllo granulare per-regola
Gaming online (bassa latenza critica)WiFi pubblico con fair usage per utente

Configurazione traffic shaper (ALTQ) con wizard

Iniziamo con ALTQ usando il wizard - perfetto per VoIP, videoconferenze e gaming.

Step 1: avviare il wizard

  1. Accedi al wizard
    Vai in Firewall → Traffic Shaper → Wizards
  2. Seleziona wizard
    Wizard: Multiple Lan/Wan (più completo)
    Clicca Next

Step 2: configurare banda WAN

  1. Numero connessioni WAN
    Number of WAN type connections: 1
    (Aumenta se hai multi-WAN)
  2. Configura connessione WAN
    Interface: WAN
    
    Scheduler: HFSC (consigliato)
    - HFSC = Hierarchical Fair Service Curve (migliore per VoIP)
    - CBQ = Class Based Queueing (più semplice)
    - PRIQ = Priority Queueing (meno features)
    
    Upload Bandwidth: 95% della banda upload reale
    Esempio: Se upload = 20 Mbps → Inserisci 19 Mbps
    (5% margine per overhead TCP/IP)
    
    Download Bandwidth: 95% della banda download reale
    Esempio: Se download = 100 Mbps → Inserisci 95 Mbps
    
    Come trovare banda reale?
    - Speedtest.net (3-5 test in momenti diversi, prendi media)
    - Fast.com (Netflix speed test)
    - Chiedi ISP (contratto può mentire!)

Step 3: configurare LAN

  1. Numero connessioni LAN
    Number of LAN type connections: 1
    (Aumenta se hai multiple LAN/DMZ da shapare)
  2. Configura LAN
    Interface: LAN
    Scheduler: HFSC

Step 4: voice over IP (VoIP)

  1. Abilita supporto VoIP
    Enable
    Crea code ad altissima priorità per traffico VoIP
  2. Configura provider VoIP
    Provider: Generic (custom provider)
    
    Upload bandwidth %: 10%
    (VoIP usa pochissima banda - 10% è abbondante)
    Esempio: WAN 20 Mbps → VoIP garantiti 2 Mbps
    
    Download bandwidth %: 10%
    
    VoIP Server IP/Network:
    - Se PBX interno: 192.168.1.10
    - Se provider esterno: Lascia vuoto (wizard identifica VoIP automaticamente)
    - Se multipli: Crea alias e inserisci
    
    Nota: Wizard riconosce automaticamente protocolli VoIP comuni:
    - SIP (porta 5060/5061)
    - RTP (porte 10000-20000)
    - IAX (porta 4569)

Step 5: penalty box (traffico a bassa priorità)

  1. Abilita Penalty Box
    Enable
    Coda a bassa priorità per P2P, file sharing, etc.
  2. Configura bandwidth
    Upload bandwidth %: 10%
    (P2P/torrent limitato a 10% banda)
    
    Download bandwidth %: 10%
    
    Address: (opzionale)
    Puoi specificare IP/network da penalizzare
    Esempio: 192.168.1.50 (utente che fa troppo P2P)

Step 6: Peer-to-peer networking

  1. Abilita rilevamento P2P
    Enable
    Identifica automaticamente traffico P2P (BitTorrent, eMule, etc.)
  2. Azione
    Options:
    ☑ Lower priority (metti P2P in Penalty Box)
    (Consigliato - P2P va lento ma non blocca VoIP/web)
    
    Alternative:
    ☐ Deny (blocca completamente P2P)
    (Solo se vuoi policy zero-tolerance)

Step 7: network games

  1. Abilita supporto gaming
    Enable
    Priorità alta per gaming (bassa latenza critica!)
  2. Bandwidth
    Upload %: 10%
    (Gaming usa poca banda, ma necessita bassa latenza)
    
    Download %: 10%
    
    Cosa viene prioritizzato:
    - Counter-Strike, Call of Duty, Fortnite
    - League of Legends, Dota 2
    - WoW, Final Fantasy XIV
    - Xbox Live, PlayStation Network, Steam
    
    Wizard riconosce automaticamente porte gaming comuni

Step 8: altri servizi

Il wizard permette di configurare altre applicazioni:

  • HTTP/HTTPS: Navigazione web normale
  • Streaming Media: YouTube, Netflix (priorità media)
  • Mail: SMTP/IMAP (priorità media-bassa)

Per semplicità, configuriamo solo i critici (VoIP, Gaming, P2P) e lasciamo il resto a priorità default.

Step 9: finalizzazione

  1. Review configurazione
    Wizard mostra summary delle code create
    Verifica che tutto sia corretto
  2. Clicca Finish
    Wizard applica configurazione
    Traffic Shaper attivo.

Wizard completato. Il wizard ha creato automaticamente:

  • Code HFSC gerarchiche su WAN e LAN
  • Regole firewall con code associate
  • Priorità: VoIP > Gaming > Web > P2P
  • Bandwidth garantiti per ogni coda

Configurazione manuale limiters

Ora vediamo come creare limiters per controllo granulare per-utente.

Configurazione limiter upload
Configurazione limiter per controllare velocità upload con mask per-IP

Esempio: limitare ogni utente a 10 Mbps download

  1. Accedi a Limiters
    Vai in Firewall → Traffic Shaper → Limiters
  2. Crea limiter download
    Clicca New Limiter
  3. Configura limiter
    Name: Download_10Mbps_PerUser
    (Nome descrittivo)
    
    ☑ Enable
    
    Bandwidth: 10 Mbit/s
    (Limite per singolo utente)
    
    Mask: Source addresses
    (CRITICO! Applica limite PER source IP)
    
    Description: Limita ogni utente a 10 Mbps download
    
    Opzioni avanzate (opzionali):
    
    Scheduler: FlowQueue-CoDel (consigliato)
    - FlowQueue-CoDel = Migliore per latenza (gaming/VoIP)
    - FlowQueue-PIE = Alternativa moderna
    - NONE = No scheduling (default)
    
    Queue Size (buckets): 64 (default OK)
    
    ECN: ☑ Enable
    (Explicit Congestion Notification - riduce packet loss)

    Clicca Save

  4. Crea limiter upload
    Ripeti creazione per upload (simmetrico):
    Name: Upload_5Mbps_PerUser
    Bandwidth: 5 Mbit/s
    Mask: Destination addresses
    (Per upload, maschera su DESTINATION!)
Limiter con alias per traffico specifico
Applicazione limiter a specifici IP usando aliases firewall

Associare limiter a regola firewall

  1. Modifica regola LAN
    Firewall → Rules → LAN
    Modifica regola "Allow LAN to any" (o crea nuova regola)
  2. Scroll a Advanced Features
    Espandi sezione Advanced Options
  3. Configura limiters
    In / Out pipe:
    In: Download_10Mbps_PerUser
    (Traffico IN verso client = download)
    
    Out: Upload_5Mbps_PerUser
    (Traffico OUT da client = upload)
    
    Spiegazione direzioni:
    IN = Traffico che ENTRA nell'interfaccia (verso LAN = download)
    OUT = Traffico che ESCE dall'interfaccia (da LAN = upload)
  4. Salva e applica
    Save → Apply Changes
    Limiters attivi.

Test limiters

Da PC utente (192.168.1.100):

1. Vai su Speedtest.net
2. Esegui test

Risultato atteso:
Download: ~10 Mbps (limitato)
Upload: ~5 Mbps (limitato)

Se supera = limiter non applicato correttamente
- Verifica regola firewall abbia limiter
- Verifica "mask" corretta (source per download)
- Check Status → Queues per vedere limiter attivo

Schedulers: limiti temporali

Gli schedulers permettono di applicare regole/limiters solo in determinate fasce orarie.

Configurazione scheduler temporale
Creazione scheduler per applicare regole in fasce orarie specifiche

Esempio: blocca streaming video orario lavorativo

  1. Crea scheduler
    Vai in Firewall → Schedules
    Clicca Add
  2. Configura schedule
    Schedule Name: Orario_Lavorativo
    Description: Lunedì-Venerdì 9:00-18:00
    
    Month: (lascia vuoto = tutti i mesi)
    Day: (lascia vuoto = tutti i giorni)
    
    Time Range:
    Start: 09:00
    Stop: 18:00
    
    Days of Week:
    ☑ Mon
    ☑ Tue
    ☑ Wed
    ☑ Thu
    ☑ Fri
    ☐ Sat
    ☐ Sun
    
    Clicca Add Time se serve aggiungere più fasce

    Save

  3. Usa scheduler in regola firewall
    Firewall → Rules → LAN → Add
    Action: Reject
    Protocol: TCP/UDP
    Source: LAN net
    Destination: Alias "Streaming_Sites"
    (YouTube, Netflix, Disney+, etc. - crea alias IP)
    Destination Port: 80, 443
    
    Schedule: Orario_Lavorativo ← SELEZIONA SCHEDULE!
    
    Description: Blocca streaming video ore lavorative
    
    Risultato:
    Lun-Ven 9:00-18:00 → YouTube/Netflix bloccati
    Fuori orario → YouTube/Netflix funzionano normalmente

Monitoraggio traffic shaping

Visualizzare code attive

  1. Status code ALTQ
    Vai in Status → Queues
    Vedrai tutte le code con statistiche real-time
  2. Informazioni visualizzate
    Queue Name: qVoIP
    Bandwidth: 8.5 Mbps / 10 Mbps (85% utilizzato)
    Packets: 125,432 queued, 234 dropped
    Borrows: 12 times
    (Volte che ha "preso in prestito" banda da altre code)
    
    Cosa cercare:
    ✅ Dropped packets bassi (<1%) = OK
    ⚠️ Dropped packets alti (>5%) = Banda insufficiente
    ✅ Borrows alti = Code collaborano bene
    ⚠️ Una coda sempre al 100% = Sottodimensionata

Grafici banda

Status → Traffic Graph

Opzioni:
- Interface: WAN
- Resolution: 1 second
- Style: Area/Line

Mostra banda usata real-time per interfaccia
Utile per identificare picchi e saturazioni

Risoluzione dei problemi traffic shaping

Problema: limiters non funzionano

  1. Verifica limiter abilitato
    Firewall → Traffic Shaper → Limiters
    "Enable" deve essere selezionato
  2. Verifica regola firewall corretta
    Firewall → Rules → LAN
    La regola deve avere In/Out pipe configurati
    La regola deve essere SOPRA altre regole che potrebbero matchare prima
  3. Check mask corretto
    Download limiter: Mask = Source addresses
    Upload limiter: Mask = Destination addresses
    
    Se invertiti, limiter non funziona per-utente!
  4. Verifica Stati
    Status → Queues
    Dovresti vedere limiter attivo con pacchetti processati

Problema: VoIP ancora scadente con ALTQ

Possibili cause:

1. Banda configurata troppo alta
   Se configuri banda WAN > reale, ALTQ non funziona
   Soluzione: Riduci a 90-95% banda reale (SpeedTest)

2. Bufferbloat ISP
   Router ISP ha buffer enormi che introducono latency
   Test: DSLReports Speed Test (mostra bufferbloat grade)
   Soluzione: Riduci banda configurata a 80-85% reale

3. Upload saturato
   VoIP sensibile a upload saturo (ACK packets ritardati)
   Soluzione: Riduci upload max al 90%, aumenta % VoIP

4. Regole firewall sbagliate
   Traffico VoIP non passa dalla coda giusta
   Verifica: Status → Queues → qVoIP deve avere pacchetti

5. QoS sul router ISP
   Se doppio NAT, QoS deve essere su router ISP non pfSense
   Soluzione: Metti router ISP in bridge mode

Buone pratiche traffic shaping

  • Misura banda reale: SpeedTest multipli in ore diverse, prendi minimo
  • Configura 90-95% banda: Mai 100% (overhead, variabilità ISP)
  • Priorità VoIP massima: Se usi telefoni IP, VoIP SEMPRE priorità 1
  • Limita P2P aggressivamente: P2P satura tutto se non controllato
  • Test DSLReports: Verifica bufferbloat score (A/A+ = ottimo)
  • Monitor dropped packets: Se >1% costante = bandwidth insufficiente
  • Schedulers per policy: Usa schedule per blocking temporale
  • Documenta configurazione: QoS complesso - documenta scelte
  • Review trimestrale: Necessità cambiano (più utenti, nuovi servizi)
  • Bridge mode ISP router: QoS funziona meglio senza doppio NAT

Esercizi

⭐ Facile

Esercizio 1 – Shaper o limiter?. Per ogni richiesta scegli lo strumento: dare priorità al VoIP; massimo 10 Mbps a ogni utente; mettere in fondo alla coda il traffico peer-to-peer.

Suggerimento

Shaper · limiter · shaper (penalty box o coda a bassa priorità).

⭐⭐ Medio

Esercizio 2 – Un limiter per utente. Crea due limiter, 10 Mbit/s in download e 2 Mbit/s in upload, con mask per indirizzo IP, e associali a una regola della LAN. Verifica con uno speed test da due client contemporaneamente.

⭐⭐⭐ Sfida

Esercizio 3 – Solo in orario di lezione. Usa uno schedule per limitare lo streaming dal lunedì al venerdì, dalle 8 alle 14. Descrivi la configurazione e come hai verificato che fuori orario il limite non sia attivo.