|
QoS com Asterisk e iproute2 |
|
26 de fevereiro de 2008 |
Neste tutorial iremos explorar como efetuar a marcação de pacotes e o QoS em uma rede que faz uso de VoIP com Asterisk e um firewall GNU/Linux com iproute2.
Uma questão que pode melhorar em muito a qualidade de voz em ambientes que utilizam voz sobre IP (VoIP) é a utilização de QoS e traffic shapping nos roteadores da rede.
O cenário que utilizaremos para implantar a nossa solução é o seguinte:

Neste artigo iremos utilizar o IAX para nos conectar ao Internet Telephony Service Provider (ITSP), portanto utilizaremos apenas a porta 4569. Como o IAX2 transporta tanto a mídia quanto a sinalização nesta porta, precisaremos apenas priorizar o trafico nesta porta. Caso utilizassemos o SIP, precisariamos priorizar as portas utilizadas pelo RTP, que é o protocolo que transporta a mídia. As portas que o Asterisk utilizará para o RTP são definidas no arquivo rtp.conf em /etc/asterisk.
Podemos marcar os pacotes IP com 4 flags para o QoS, as quais são:
0x02: Minimazar o custo financeiro 0x04: Maximizar a garantia de entrega dos pacotes 0x08: Maximizar o throughput 0x10: Minimizar o atraso
Oficialmente é possível marcar apenas um desses bits por pacotes, entretanto extra-oficialmente podemos marcar qualquer combinação de bits. No nosso caso, temos que as aplicações de VoIP são bastante sensíveis ao atraso, assim marcaremos os pacotes para minimizar esta variável.
Por padrão a pilha TCP/IP do GNU/Linux utiliza uma estratégia de First In First Out (FIFO), mas faremos uso do utilitário tc para alterar esta política. No nosso caso iremos criar três filas, sendo que a fila 1 tem prioridade sobre a fila 2 que tem prioridade sobre a fila 3. Desta maneira enquanto existir algum pacote na fila 1, nenhum pacote da fila 2 ou 3 será enviado, o mesmo acontecendo em relação da fila 2 com a 3.
Como a interface eth1 é a interface com a Internet do nosso firewall, isto é realizado com o seguinte comando:
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 0
Os 16 parâmetros que seguem a opção priomap são extremamente importantes, pois são eles que dizem a qual fila o pacote irá pertencer. Isso funciona da seguinte maneira: os pacotes sem nenhum bit the type of service (TOS) marcados vão para a fila 3 (parâmetro 0), os pacotes marcados com 0x10 vão para a fila 2 (parâmtro 1) e os pacotes com todos os bits the TOS marcados são encaminhados para a fila 1.
Agora vamos definir as políticas para as filas com os três comandos abaixo:
tc qdisc add dev eth1 parent 1:1 handle 10: sfq limit 3000
tc qdisc add dev eth1 parent 1:2 handle 20: sfq
tc qdisc add dev eth1 parent 1:3 handle 30: sfq
O primeiro comando faz com que a fila 1 tenha um buffer para até 3000 ( essa é a teoria, na prática o comando tc tem um limite hard coded de 128 pacotes como o máximo possível).
Por padrão o Asterisk não marca os seus pacotes, para fazer isso precisamos modificar o parâmetro tos da sessão general do iax.conf, vamos marcar os pacotes IAX2 com todos os bits the TOS para que os mesmos sejam encaminhados para a fila 1.
iax.conf:
tos=0x1e
Mesmo assim não temos a garantia que os pacotes IAX2 serão encaminhados para a fila 1. Para isto utilizaremos mais um recurso do tc, os filtros. Assim com os comandos abaixo iremos encaminhar para a fila 1 os pacotes que tem porta de destino e origem igual a 4569.
tc filter add dev eth1 protocol ip parent 1: prio 1 u32 match ip dport 4569 0xffff flowid 1:1
tc filter add dev eth1 protocol ip parent 1: prio 1 u32 match ip sport 4569 0xffff flowid 1:1
Voilà, todos os nosso pacotes IAX2 têm prioridade sobre qualquer outro tipo de tráfico que flui atravês do nosso firewall. Podemos ver algumas estatisticas do tc com o segunte comando:
tc -s qdisc ls dev eth1
Para limpar as configurações do tc podemos utilizar o comando abaixo:
tc qdisc del dev eth1 root
Agora cabe a você colocar os comandos do tc na inicialização do seu sistema.
Eng. Guilherme Loch Góes
www.voffice.com.br
Referências: http://www.rns-nis.co.yu/~mps/linux-tc.html http://www.voip-info.org/wiki-Asterisk+QoS http://www.howtoforge.com/voip_qos_traffic_shaping_iproute2_asterisk
|
|
|
Tutoriais sobre Asterisk e VoIP |
|
A snalização MFC/R2 é uma sinalização utilizada em telefonia digital, entregue ao consumidor em um link de dados E1, encontrada com muita freqüencia em cidades do interior e em alguns pontos nas capitais brasileiras onde não existe a possibilidade de entrega de um link ISDN ou RDSI como é conhecido no Brasil. Como nos EUA a sinhalização MFC/R2 não existe, pouca ou melhor dizendo nenhuma importância foi dada ao desenvolvimento de bibliotecas que suportassem este tipo de sinalização no Asterisk. |
BackTraces, você já usou? não?, então vamos lá...
Backtrace é um modo de obter informações sobre o que esta acontecendo de errado quando um programa fecha inesperadamente, no nosso caso vamos usar o asterisk como exemplo. Existem dois tipos de backtraces que também é conhecido como bt, que são: bt e bt full... |
|
Um ponto algumas vezes esquecido, por nós técnicos, é a interface com o usuário. Nos preocupamos em dimensionar corretamente o servidor, ter uma boa infra-estrutura de rede, aplicar uma politica de QoS na rede entre outras e nos esquecemos de um fator determinante para o sucesso e aceitação dos nossos projetos: a interface com o usuário. |
|
Se você trabalha com telefonia IP, talvez ainda não tenha ouvido falar do OpenSER, mas certamente você ouviu falar sobre o Asterisk. Bom eu adoro uma chamada polêmica e eu já vi esta questão formulada muitas vezes em fóruns e listas de discussão. Então eu vou me atrever a comparar estes dois softwares muito populares dedicados ao mercado de VoIP. A idéia aqui não é mostrar qual é o melhor, mas principalmente mostrar como eles são diferentes um do outro. Abaixo está uma comparação tópico por tópico. |
Neste tutorial vou explicar como compilar e instalar o codec speex no ASTERISK, que é juntamente com o ilbc uma ótima alternativa para quem não quer gastar com licensas de codecs proprietários como o G729.
|
|
O Power over Ethernet é uma tecnologia relativamente nova que evoluiu sobre a, amplamente divulgada Ethernet, que disponibiliza energia em corrente contínua confiavelmente através dos mesmos cabos que disponibilizam dados Ethernet. |
O Queue LOG analyzer é uma opção GPL para geração de relatórios e gráficos sobre as filas e CDR Call Detailed Record do Asterisk . O autor é o Earl C. Terwillinger.
|
Esse tutorial tem como objetivo demonstrar o processo de configuração do Astribank XORCOM. |
|
|