VoIP e QoS · 4 min read · Jan 22, 2026
QoS E Modellazione Del Traffico Per Utenti VoIP Utilizzando iproute2 E Asterisk
QoS E Modellazione Del Traffico Per Utenti VoIP Utilizzando iproute2 E Asterisk
La qualità delle mie chiamate VoIP è peggiorata ogni volta che scaricavo o caricavo qualcosa. Questo era irritante, specialmente per coloro che mi chiamavano (io li sentivo meglio di quanto loro sentissero me). Così ho esplorato Iproute2 e altri howto, specialmente riguardo al traffico VoIP, ma non riuscivo a trovare nulla che funzionasse bene. Dopo un po’ di tentativi, ho trovato impostazioni che erano giuste per me: qualità VoIP consistente, indipendentemente da qualsiasi attività sulla rete.
Una nota riguardo al mio sistema VoIP: sto usando Asterisk su un laptop di riserva (IBM T20), e il mio fornitore VoIP è l’eccellente Unlimitel, in Canada. Poiché ospito la mia stessa box Asterisk, posso configurarla praticamente come voglio. Ho anche acquistato un telefono hardphone IAX che risiede sulla mia intranet.
Configurazione
Presumo che tu abbia già in atto il tuo firewall Linux. I pacchetti VoIP attraversano il tuo firewall e il tuo NAT è già impostato e funzionante. Non toccheremo nemmeno il tuo firewall con questa configurazione. Tutto ciò che devi fare è creare il giusto qdisc, classi e filtri per dare priorità ai tuoi pacchetti VoIP. Il comando tc di Iproute2 è qui per questo.
Immaginiamo che la tua rete sia così:
Internet <------> Modem via cavo <-------> Firewall Linux <-----> Intranet <-----> Telefono VoIPPoiché sto usando Asterisk con IAX, la porta di interesse è la porta 4569. Se stai usando SIP, adatta la porta nelle righe seguenti.
Alcune Informazioni di Base
I pacchetti IP hanno un’area dove puoi impostare QoS (qualità del servizio). Mentre il tuo ISP probabilmente li ignorerà, puoi utilizzarli nella tua rete locale per una certa modellazione del traffico. I 4 bit di QoS sono:
0x02: Minimizzare il Costo Monetario
0x04: Massimizzare l’Affidabilità
0x08: Massimizzare il Throughput
0x10: Minimizzare il Ritardo
Ufficialmente, ti è permesso attivare al massimo uno di questi bit. Il tuo firewall può quindi esaminare i pacchetti man mano che arrivano e determinare quali inoltrare per primi, di solito Minimizzare il Ritardo.
Non ufficialmente, puoi attivare qualsiasi di questi bit contemporaneamente. Quindi potresti avere un pacchetto con sia Minimizzare il Ritardo che Massimizzare il Throughput. Tenendo presente questo, diamo un’occhiata ad alcune delle funzionalità di Iproute2.
Iproute2 E tc
Per impostazione predefinita, i pacchetti vengono inviati First In-First Out. Con tc, puoi alterare drasticamente questo. Utilizziamo un sistema di coda molto semplice: abbiamo 3 “tubi” (o code) e assegniamo loro una priorità. Cioè, finché c’è qualcosa nella coda 1, non svuotiamo (o dequeue) la coda 2, e finché c’è qualcosa nella coda 2, non dequeue la coda 3.
Questo viene fatto con il seguente comando (nota: eth1 è l’interfaccia esterna):
tc qdisc add dev eth1 root handle 1: prio priomap 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 0I 16 valori per priomap sono importanti. Fondamentalmente dice che la maggior parte dei pacchetti finisce nella 3ª coda (poiché partiamo da zero, è chiamata “2”), tranne i pacchetti con QoS Minimizzare-Ritardo, che vengono messi nella 2ª coda, tranne i pacchetti con tutti i bit QoS attivati, che vengono messi nella 1ª coda. (la disciplina di coda prio imposta 3 code per impostazione predefinita)
I 16 valori sono in ordine per i seguenti QoS:
1: 0x00: nessun QoS è impostato -> alla 3ª coda (2)
2: 0x02: Minimizzare il Costo Monetario (MMC) (2)
3: 0x04: Massimizzare l’Affidabilità (MR) (2)
4: 0x06: MMC + MR (2)
5: 0x08: Massimizzare il Throughput (MT) (2)
6: 0x0a: MT + MMC (2)
7: 0x0c: MT + MR (2)
8: 0x0e: MT + MR + MMC (2)
9: 0x10: Minimizzare il Ritardo (MD) (1)
10: 0x12: MD + MMC (1)
11: 0x14: MD + MR (1)
12: 0x16: MD + MMC + MR (1)
13: 0x18: MD + MT (1)
14: 0x1a: MD + MT + MMC (1)
15: 0x1c: MD + MT + MR (1)
16: 0x1e: MD + MT + MR + MMC (0)
Questo è stato il nostro primo passo.
Successivamente, regoleremo ciascuna coda affinché abbia essa stessa una disciplina di coda:
tc qdisc add dev eth1 parent 1:1 handle 10: sfq limit 3000tc qdisc add dev eth1 parent 1:2 handle 20: sfqtc qdisc add dev eth1 parent 1:3 handle 30: sfqQuesto dà alla prima coda una capacità supposta di 3000 pacchetti. In realtà, la dimensione sarà di 128 pacchetti poiché è codificata nel programma tc come la dimensione massima possibile.
A questo punto, la maggior parte dei pacchetti passerà attraverso la 3ª coda, tranne quelli con il bit QoS Minimizzare-Ritardo impostato.
Se regoli il tuo iax.conf sulla tua box Asterisk per dire quanto segue, alcuni pacchetti potrebbero finire nella prima coda:
tos=0x1e
Tuttavia, poiché questo non è una garanzia, li costringeremo a passare per la coda 1 utilizzando un altro trucco nel cilindro di tc, i filtri.
Ricorda, IAX utilizza la porta 4569, quindi costringeremo qualsiasi pacchetto da e verso questa porta a passare attraverso la prima coda:
tc filter add dev eth1 protocol ip parent 1: prio 1 u32 match ip dport 4569 0xffff flowid 1:1tc filter add dev eth1 protocol ip parent 1: prio 1 u32 match ip sport 4569 0xffff flowid 1:1tc filter add dev eth1 protocol ip parent 1: prio 1 u32 match ip tos 0x10 0xff flowid 1:2Tecnicamente, l’ultima riga non è necessaria ma non fa male lasciarla.
E ora, hai finito! Tutti i tuoi pacchetti VoIP vengono dequestrati per primi e soprattutto. Anche durante un pesante download o upload, non perderai interattività per le tue chiamate telefoniche.
Per vedere alcune statistiche, esegui il seguente comando:
tc -s qdisc ls dev eth1Per rimuovere le tue code e tornare allo stato normale, esegui:
tc qdisc del dev eth1 rootOra sta a te eseguire automaticamente i comandi appropriati all’avvio.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.