VoIP Configuração · 4 min read · Jan 22, 2026
QoS E Modelagem de Tráfego Para Usuários VoIP Usando iproute2 E Asterisk
QoS E Modelagem de Tráfego Para Usuários VoIP Usando iproute2 E Asterisk
A qualidade das minhas chamadas telefônicas VoIP sofreu sempre que eu estava baixando ou enviando qualquer coisa. Isso era irritante, especialmente para aqueles que me ligavam (eu os ouvia melhor do que eles me ouviam). Então, eu brinquei com o Iproute2 e outros tutoriais, especialmente em relação ao tráfego VoIP, mas não consegui encontrar nada que funcionasse bem. Depois de algumas tentativas, encontrei configurações que eram adequadas para mim: qualidade VoIP consistente, independentemente de quaisquer atividades na rede.
Uma nota sobre meu sistema VoIP: estou usando Asterisk em um laptop reserva (IBM T20), e meu provedor de VoIP é o excelente Unlimitel, no Canadá. Como hospedo minha própria caixa Asterisk, posso configurá-la para fazer o que eu quiser. Também comprei um telefone duro IAX que reside na minha intranet.
Configuração
Assumo que você já tenha seu firewall Linux configurado. Pacotes VoIP atravessam seu firewall e seu NAT já está configurado e funcionando. Não vamos nem tocar no seu firewall com esta configuração. Tudo o que você precisa fazer é criar o qdisc, classes e filtros corretos para priorizar seus pacotes VoIP. O comando tc do Iproute2 está aqui para isso.
Vamos supor que sua rede seja assim:
Internet <------> Modem a cabo <-------> Firewall Linux <-----> Intranet <-----> Telefone VoIPComo estou usando Asterisk com IAX, a porta de interesse é a porta 4569. Se você estiver usando SIP, adapte a porta nas linhas seguintes.
Algumas Informações de Fundo
Pacotes IP têm uma área onde você pode pré-definir QoS (qualidade de Serviço). Embora seu ISP provavelmente os ignore, você pode usá-los em sua rede local para alguma modelagem de tráfego. Os 4 bits de QoS são:
0x02: Minimizar Custo Monetário
0x04: Maximizar Confiabilidade
0x08: Maximizar Throughput
0x10: Minimizar Atraso
Oficialmente, você pode ativar no máximo um desses bits. Seu firewall pode então olhar para os pacotes à medida que chegam e determinar quais devem ser encaminhados primeiro, geralmente Minimizar Atraso.
Oficialmente, você pode ativar qualquer um desses bits ao mesmo tempo. Assim, você poderia ter um pacote com ambos Minimizar Atraso e Maximizar Throughput. Com isso em mente, vamos olhar algumas das características do Iproute2.
Iproute2 E tc
Por padrão, os pacotes são enviados Primeiro a Entrar, Primeiro a Sair. Com o tc, você pode alterar isso dramaticamente. Vamos usar um sistema de enfileiramento muito simples: vamos ter 3 “tubos” (ou filas) e atribuir a eles uma prioridade. Ou seja, enquanto houver algo na fila 1, não esvaziamos (ou removemos da fila) a fila 2, e enquanto houver algo na fila 2, não removemos da fila 3.
Isso é feito com o seguinte comando (nota: eth1 é a interface externa):
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 0Os 16 valores para priomap são importantes. Basicamente, ele diz que a maioria dos pacotes acaba na 3ª fila (como começamos em zero, é chamada de “2”), exceto os pacotes com QoS Minimizar-Atraso, que são colocados na 2ª fila, exceto os pacotes com todos os bits de QoS ativados, que são colocados na 1ª fila. (a disciplina de enfileiramento prio define 3 filas por padrão)
Os 16 valores estão na ordem para a seguinte QoS:
1: 0x00: nenhum QoS está definido -> para a 3ª fila (2)
2: 0x02: Minimizar Custo Monetário (MMC) (2)
3: 0x04: Maximizar Confiabilidade (MR) (2)
4: 0x06: MMC + MR (2)
5: 0x08: Maximizar Throughput (MT) (2)
6: 0x0a: MT + MMC (2)
7: 0x0c: MT + MR (2)
8: 0x0e: MT + MR + MMC (2)
9: 0x10: Minimizar Atraso (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)
Esse foi nosso primeiro passo.
Em seguida, ajustaremos cada fila para que elas mesmas tenham alguma disciplina de enfileiramento:
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: sfqIsso dá à primeira fila uma capacidade suposta de 3000 pacotes. Na realidade, o tamanho será de 128 pacotes, pois está codificado no programa tc como sendo o tamanho máximo possível.
Neste ponto, a maioria dos pacotes passará pela 3ª fila, exceto aqueles com o bit de QoS Minimizar-Atraso definido.
Se você ajustar seu iax.conf na sua caixa Asterisk para dizer o seguinte, alguns pacotes podem acabar na primeira fila:
tos=0x1e
No entanto, como isso não é uma garantia, forçaremos eles a irem para a fila 1 usando outro truque no arsenal do tc, filtros.
Lembre-se, IAX usa a porta 4569, então forçaremos qualquer pacote para e da porta a passar pela primeira fila:
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, a última linha não é necessária, mas não faz mal deixá-la.
E agora, você terminou! Todos os seus pacotes VoIP são removidos primeiro e acima de tudo. Mesmo durante um download ou upload pesado, você não perderá a interatividade das suas chamadas telefônicas.
Para ver algumas estatísticas, execute o seguinte comando:
tc -s qdisc ls dev eth1Para remover suas filas e retornar ao estado normal, execute:
tc qdisc del dev eth1 rootAgora cabe a você executar automaticamente os comandos apropriados na inicialização.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.