Sie sind auf Seite 1von 11

Proxy SIP de Kamailio instalao e exemplo de configurao mnima

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.

Digamos que j existe um servidor Asterisk na organizao. Os operadores processam grandes


quantidades de chamadas e o servidor Asterisk existente j no pode lidar com essa carga. Vamos
adicionar outro servidor (para ser preciso, vamos clonar o existente), e faa do nosso proxy SIP um
despachador de chamadas.

Neste exemplo, usaremos o Kamailio com a interface web Siremis, que instalaremos no CentOS
6.8.

Primeiro precisamos desabilitar o SELinux, atualizar o sistema e instalar as dependncias necess-


rias:

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:

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT


iptables -A INPUT -m state --state NEW -m udp -p udp --dport 5060 -j ACCEPT

Em seguida, criamos o arquivo /etc/yum.repos.d/kamailio.repo:

[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:

yum install kamailio kamailio-presence kamailio-mysql

Tambm no devemos esquecer de configurar os seguintes servios para serem executados na inici-
alizao:

yum install kamailio kamailio-presence kamailio-mysqlchkconfig mysqld on


chkconfig httpd on
chkconfig kamailio on

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:

service mysqld start


kamdbctl create

Respondendo "sim" a todas as perguntas.


Agora vamos editar o arquivo de configurao principal: /etc/kamailio/kamailio.cfg. Logicamente,
ele dividido em vrias sees: parmetros globais, carregamento de mdulos, parmetros do m-
dulo e rotas. Cada mdulo Kamailio realiza uma funo especfica; portanto, voc s pode carregar
as bibliotecas necessrias para uma determinada tarefa. O incio do arquivo deve ento ser editado
para o seguinte:

#!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

Podemos carregar qualquer mdulo manualmente, mas as diretivas so mais convenientes.


'WITH_AUTH', por exemplo, permite aos usurios se registrarem no Kamailio com um nome de
usurio e uma senha.
Em seguida, precisamos fazer alguns ajustes relacionados com a interface da web e as estatsticas.
Para fazer isso, adicionamos mais duas strings no final da lista 'loadmodule':

loadmodule "rtimer.so"
loadmodule "sqlops.so"

E ento, adicionamos um parmetro de mdulo antes da seo de roteamento, que comea com
"####### Routing Logic ########" string:

modparam("rtimer", "timer", "name=cdr;interval=300;mode=1;")


modparam("rtimer", "exec", "timer=cdr;route=CDRS")
modparam("sqlops", "sqlcon", "cb=>mysql://kamailio:kamailiorw@localhost/kamailio")

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");
}

Agora hora de comear Kamailio e verificar seu status:

service kamailio start


ps aux | grep kamailio

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

Vamos ento adicionar o seguinte cdigo seo 'VirtualHost' do arquivo de configurao do


Apache:

<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

A Siremis tambm requer um banco de dados separado. Primeiro, adicionaremos um usurio:

mysql -e "GRANT ALL PRIVILEGES ON siremis.* TO siremis@localhost IDENTIFIED BY 'siremisrw';"

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:

A verificao do sistema passou sem erros, voc pode comear a instalao.


Observe que existem senhas de usurio padro para o Kamailio e a Siremis j inseridas no formul-
rio, e se voc no as alterou antes, no necessrio inseri-las manualmente agora.

Certifique-se de assinalar todas as caixas: 'Criar Siremus DB', 'Importar Dados Dafault', 'Atualizar
SIP DB' e 'Replace DB config'.

Verifique se voc especificou os dados corretos.

A instalao est agora completa.


Vamos tentar fazer a primeira chamada atravs do nosso novo Kamailio. Precisamos adicionar um
domnio "Lista de Domnios" no menu 'SIP Admin'. O Kamailio servir apenas domnios (ou en-
dereos IP) que esto listados l.

Quando os usurios se registrarem com um endereo IP ou o nome de domnio correspondente, am-


bos devem estar na lista. No nosso exemplo, usamos apenas um endereo IP.
Para criar um novo assinante, devemos abrir 'Subscriber Services -> Subscribers' e adicionar duas
extenses: 101 e 102. Devemos ento atribuir suas senhas e um endereo IP cinza como domnio
(192.168.0.237 no nosso caso).

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.

Vamos mudar para a configurao de despachamento de chamadas de entrada. Temos 2 mquinas


virtuais com o Asterisk na rede local. Os endereos deles so 192.168.0.234 e 192.168.0.235. Preci-
samos distribuir igualmente as chamadas de entrada entre essas duas mquinas. No nosso exemplo,
usamos o mdulo 'dispatcher', que fornece todos os recursos necessrios.

Agora podemos retornar ao console e adicionar outra biblioteca seo de carregamento do mdulo
do arquivo kamailio.cfg:

loadmodule "dispatcher.so"

Tambm precisamos adicionar dois parmetros:

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

modparam("dispatcher", "db_url", "mysql://kamailio:kamailiorw@localhost/kamailio")


modparam("dispatcher", "ds_ping_interval", 30)

A propsito, voc sempre pode encontrar a lista completa de mdulos, seus parmetros e funes no
site oficial.

Em seguida, reiniciamos o Kamailio e verificamos seu status. Em caso de problemas de inicializa-


o (os mdulos podem ter dependncias, requerem certos parmetros para si ou os mdulos em
que dependem), poderemos encontrar erros no registro.

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.

Vamos adicionar a seguinte condio ao incio da rota principal:

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.

Para corrigir isso, adicionaremos o seguinte 'peer' a ambos os servidores Asterisk:

[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.

O mdulo 'uac' deve ser adicionado ao arquivo de configurao:

loadmodule "uac.so"

Tambm definiremos dois parmetros obrigatrios neste caso:

modparam("uac", "reg_db_url", "mysql://kamailio:kamailiorw@localhost/kamailio")


modparam("uac", "reg_contact_addr", "192.168.0.237")

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:

kamailio /usr/sbin/kamailio[26277]: ERROR: uac [uac_reg.c:799]: uac_reg_tm_callback(): realms do not


match. requested realm: [asterisk]

Portanto, se voc encontrar um problema, procure no primeiro 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.

Das könnte Ihnen auch gefallen