Beruflich Dokumente
Kultur Dokumente
Quando um servidor Asterisk no pode suportar o aumento da carga, mais servidores devem ser adi-
cionados. Uma maneira de fazer isso usar um proxy SIP. No entanto, em comparao com o pr-
prio Asterisk, h muito menos informaes disponveis sobre o uso de proxies SIP. O objetivo deste
artigo mostrar um exemplo simples de usar o proxy Kamailio SIP com o Asterisk e, assim, ajudar
os iniciantes a comear a trabalhar com proxies SIP.
Para este exemplo, usamos mquinas virtuais conectadas a uma rede local, mas a mesma configura-
o pode funcionar atravs da Internet sem ajustes significativos.
Neste exemplo, usaremos o Kamailio com a interface web Siremis, que instalaremos no CentOS
6.8.
yum -y update && yum -y groupinstall core && yum -y groupinstall base && yum -y install epel-release
yum -y install httpd mysql-server php php-mysql php-gd php-curl
Ns vamos precisar da porta 80 para a interface web e udp 5060 para SIP, portanto, algumas regras
IPTables so necessrias:
[kamailio]
name=RPMs for Kamailio on CentOS 6
type=rpm-md
baseurl=http://rpm.kamailio.org/stable/CentOS_6/
gpgcheck=1
gpgkey=http://rpm.kamailio.org/stable/CentOS_6/repodata/repomd.xml.key
enabled=1
e instale o Kamailio:
Tambm no devemos esquecer de configurar os seguintes servios para serem executados na inici-
alizao:
Ns, ento, precisamos descomentar uma string no arquivo / etc / kamailio / kamctlrc:
DBENGINE=MYSQL
e especifique o SIP_DOMAIN. Uma vez que estamos configurando o sistema na rede local, basta
especificar o endereo IP, que no nosso caso :
SIP_DOMAIN=192.168.0.237
Existem parmetros de conexo de banco de dados abaixo do SIP_DOMAIN tambm, mas no pre-
cisamos alter-los neste exemplo.
Em seguida, iniciamos o MySQL e geramos as tabelas necessrias:
#!KAMAILIO
#!define WITH_MYSQL
#!define WITH_AUTH
#!define WITH_USRLOCDB
#!define WITH_PRESENCE
#!define WITH_ACCDB
Essas diretivas ativam os mdulos necessrios. Por exemplo, 'WITH_MYSQL' permite o carrega-
mento de mysql.so:
#!ifdef WITH_MYSQL
loadmodule "db_mysql.so"
#!endif
loadmodule "rtimer.so"
loadmodule "sqlops.so"
E ento, adicionamos um parmetro de mdulo antes da seo de roteamento, que comea com
"####### Routing Logic ########" string:
Tambm precisamos adicionar outra rota aps a ltima linha do segmento da rota (deve ser em tor-
no da linha # 910):
route[CDRS] {
sql_query("cb","call kamailio_cdrs()","rb");
sql_query("cb","call kamailio_rating('default')","rb");
}
Se o Kamailio no iniciar, verifique / var / log / messages (arquivo de log padro do Kamailio), a
menos que qualquer outro sistema de registro, como rsyslog, esteja configurado em vez disso.
Por padro, o Kamailio usa o banco de dados MySQL 'kamailio' com o usurio 'kamailio' e a senha
'kamailiorw'. Voc pode alterar esses parmetros no arquivo / etc / kamailio / kamctlrc antes que o
banco de dados seja criado. Se voc fizer isso, no se esquea de alter-los no kamailio.cfg tambm.
De fato, a Kamailio pode funcionar sem um banco de dados - voc pode definir todos os parmetros
necessrios no arquivo de configurao ou em arquivos externos, mas usar um banco de dados
mais conveniente especialmente em projetos de grande porte. Alm disso, o banco de dados usado
pela interface web Siremis, que estamos prestes a instalar.
Primeiro, precisamos baixar e extrair os arquivos, copi-los para o diretrio de destino e atribuir os
direitos apropriados:
cd /usr/src
wget http://siremis.asipto.com/pub/downloads/siremis/siremis-4.3.0.tgz
tar zxvf siremis*
cp -a siremis*/. /var/www/html
cd /var/www/html
make prepare
rm -rf /var/www/html/Makefile
rm -rf /var/www/html/Changelog
rm -rf /var/www/html/README
chown -R apache. /var/www/html
<Directory "/var/www/html/siremis">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
<FilesMatch "\.xml$">
Order deny,allow
Deny from all
</FilesMatch>
<FilesMatch "\.inc$">
Order deny,allow
Deny from all
</FilesMatch>
</Directory>
<Directory "/var/www/html/openbiz">
AllowOverride All
Order deny,allow
Deny from all
</Directory>
<Directory "/var/www/html/misc">
AllowOverride All
Order deny,allow
Deny from all
</Directory>
O Siremis 4.3.0 precisa do parmetro 'date.timezone' do php.ini, ento vamos atribu-lo (Europa /
Moscov neste exemplo):
date.timezone = Europe/Moscow
Voc pode alterar as configuraes de conexo do banco de dados, mas no se esquea de definir
esses valores ao longo do tempo.
Agora podemos reiniciar o Apache e passar para o estgio final da instalao do Siremis. Abra seu-
ip / siremis no navegador:
Certifique-se de assinalar todas as caixas: 'Criar Siremus DB', 'Importar Dados Dafault', 'Atualizar
SIP DB' e 'Replace DB config'.
Usando um softphone, como o Zoiper, agora podemos registrar no servidor e fazer uma chamada de
101 a 102 (ou vice-versa) para ter certeza de que no cometeu nenhum erro nas etapas anteriores.
Agora podemos retornar ao console e adicionar outra biblioteca seo de carregamento do mdulo
do arquivo kamailio.cfg:
loadmodule "dispatcher.so"
As configuraes de conexo ao banco de dados com a lista de servidores Asterisk o servidor verifi-
ca a frequncia, o que ajuda a evitar o envio de chamadas para servidores indisponveis
A propsito, voc sempre pode encontrar a lista completa de mdulos, seus parmetros e funes no
site oficial.
Agora precisamos configurar rotas. A configurao padro fornece o mnimo necessrio. Por exem-
plo, se algum tentar se registrar com uma senha errada, o Kamailio mostrar o erro 401 e se al -
gum chamar um nmero no existente - 404. O roteamento Kamailio difcil de entender por cau-
sa de relaes no bvias entre variveis e funes na uma mo, e mdulos diferentes que os usam
no outro. Felizmente, para nossos propsitos, precisamos de uma rota muito simples.
if ( method=="INVITE" ) {
ds_select_dst("1","4");
sl_send_reply("100","Trying");
forward();
exit();
}
Quando um pedido INVITE (um convite para iniciar uma conversa) vem, um dos servidores do gru-
po '1' escolhido usando a estratgia '4' (round-robin). Em seguida, enviamos uma resposta para o
chamador e transferimos a chamada para o destino. Por favor, note que agora cada INVITE ser
processado dessa maneira. Assim, no poderemos ligar mais de 101 para 102, porque essa chamada
ser enviada para um dos servidores da Asterisk. O pedido INVITE entrante tambm ser enviado
aos servidores Asterisk sem verificao de origem.
[kamailio]
host=192.168.0.237
port=5060
insecure=invite
type=friend
context=from-pstn
Agora podemos usar a interface da web para adicionar os servidores Asterisk ao banco de dados Ka-
mailio:
'Setid' define um grupo para o servidor.
'Priority' no usado na estratgia de "round-robin", mas pode ser usado em outras estratgias.
'Flags' aqui significa que este servidor est inativo por padro, mas seu estado deve ser verificado.
Agora que ns adicionamos os servidores, o Kamailio deve ser reiniciado. No entanto, na produo,
mais apropriado executar o comando kamcmd dispatcher.reload. Voc tambm pode encontrar a
lista completa de comandos de mdulos no site oficial.
Agora podemos passar aos testes. Usando um softphone, voc pode chamar Kamailio diretamente
sem qualquer conta ou registro. suficiente digitar 'sip: 1@192.168.0.237' no campo de discagem e
pressione o boto 'Chamar'. O Kamailio enviar a chamada para um servidor Asterisk, que proces-
sar essa chamada de acordo com seu dialplan. A prxima chamada ser enviada para o outro servi-
dor.
De um modo geral, resolvemos a nossa tarefa distribuir chamadas de entrada igualmente entre di-
ferentes servidores. No entanto, nem todos os operadores de telefonia esto prontos para enviar cha-
madas diretamente para o seu endereo IP, sem registro, ento voc precisar enviar solicitaes de
tipo REGISTO. Esse recurso implementado pelo mdulo 'uac'. Vamos adicionar outro Asterisco
ao nosso esquema, que desempenhar o papel de um provedor de servios de telefonia. Vamos criar
um nmero de extenso, por exemplo, '200200', que exigir registro.
loadmodule "uac.so"
Alm disso, temos que mudar um parmetro no outro mdulo. Encontre a string:
modparam("rr", "append_fromtag", 0)
e substitua-o por:
modparam("rr", "append_fromtag", 1)
Agora podemos configurar o registro. Para carregar o mdulo 'uac', o Kamailio deve primeiro ser
reiniciado:
Olhe para o campo 'Realm'. Por padro, voc pode inserir qualquer coisa que desejar, mas o registro
falhar com a seguinte mensagem no arquivo de log:
S resta verificar se o assinante '200200' est registrado no Asterisk, que desempenha o papel do
provedor e para iniciar uma chamada de qualquer extenso para '200200'.
Isso conclui nosso exemplo de configurao Kamailio. Por favor, note que este artigo no discute
questes importantes, como o trabalho por trs de NAT, segurana, encaminhamento de chamadas
de sada e muito mais do que voc pode precisar na vida real, no entanto, espero que isso facilite o
domnio de Kamailio.