Hola gente:
Nuevamente estoy por aca, para realizar algunas consultas de las cuales por lo que he visto, ustedes saben bastante.
Primero les presento el esquema actual:
(Hard Phones, Soft Phones, etc) <--> Internet <--> Asterisk <--> Varios trunks
Tengo varios telefonos repartidos en diferentes locaciones. Estos internos -registrados en el Asterisk- tienen conflictos para hablar entre si (No hay audio en ningun sentido), pero no para tomar alguno de los trunks -que estan definidos contra Cisco, Mitel, etc.-. Luego de investigar y realizar pruebas, pude solucionarlo con un Proxy, quedando el esquema de esta manera:
(Hard Phones, Soft Phones, etc) <--> Internet <--> Proxy <--> Asterisk <--> Varios trunks
El proxy actual (Brekeke) envia las peticiones de registro de cada extension a Asterisk, por lo cual, Asterisk sigue encargandose de todo, la diferencia es que el proxy realiza unos cambios en los Headers para que Asterisk no tenga problema con el NAT detrás de cada telefono (Por lo visto, este es un problema que tiene mucha gente, ya que los foros estan repletos de consultas sobre esto).
Consultas:
1) Utilizando Kamailio en el lugar del proxy actual, conviene que los phones se registren en Asterisk o Kamailio? ¿Cuales son las ventajas de registrarlo en Kamailio?
2) Si los phones se registraran en Kamailio, el trafico no deberia pasar al Asterisk, ya que machearia el discado y reenviaria al destino sin necesidad del Asterisk. ¿Esto es correcto?
Muchas gracias!
- Utilizando Kamailio en el lugar del proxy actual, conviene que los phones
se registren en Asterisk o Kamailio? ¿Cuales son las ventajas de registrarlo en Kamailio?
LO mejor sería que los registraras en Kamailio, ya que soporta muchos más usuarios y maneja mucho mejor el SIP :) Tendrás cosas como paralel forking, con las que siemopre soñaste xDD
- Si los phones se registraran en Kamailio, el trafico no deberia pasar al
Asterisk, ya que machearia el discado y reenviaria al destino sin necesidad del Asterisk. ¿Esto es correcto?
Eso no lo entiendo...
2009/1/21 Saúl Ibarra saghul@gmail.com:
- Utilizando Kamailio en el lugar del proxy actual, conviene que los phones
se registren en Asterisk o Kamailio? ¿Cuales son las ventajas de registrarlo en Kamailio?
LO mejor sería que los registraras en Kamailio, ya que soporta muchos más usuarios y maneja mucho mejor el SIP :) Tendrás cosas como paralel forking, con las que siemopre soñaste xDD
- Si los phones se registraran en Kamailio, el trafico no deberia pasar al
Asterisk, ya que machearia el discado y reenviaria al destino sin necesidad del Asterisk. ¿Esto es correcto?
Eso no lo entiendo...
Es correcto si te refieres a que una llamada de UA a UA va a ser: UA->Kamailio->UA
El día 21 de enero de 2009 16:07, Victor Pascual Ávila victor.pascual.avila@gmail.com escribió:
- Si los phones se registraran en Kamailio, el trafico no deberia pasar al
Asterisk, ya que machearia el discado y reenviaria al destino sin necesidad del Asterisk. ¿Esto es correcto?
Eso no lo entiendo...
Es correcto si te refieres a que una llamada de UA a UA va a ser: UA->Kamailio->UA
Pero si haces eso (llamadas directas entre usuarios sin pasar por Asterisk) entonces no tienes lógica de PBX en dichas llamadas. Depende de tus necesidades, claro.
Iñaki Baz Castillo wrote:
Si los phones se registraran en Kamailio, el trafico no deberia pasar al Asterisk, ya que machearia el discado y reenviaria al destino sin
necesidad
del Asterisk. ¿Esto es correcto?
Pero si haces eso (llamadas directas entre usuarios sin pasar por Asterisk) entonces no tienes lógica de PBX en dichas llamadas. Depende de tus necesidades, claro.
CLARO!! por eso mismo lo pregunte, cual es la logica de registrar en Kamailio si tengo Asterisk detras. Entiendo que Kamailio sea mas eficiente que Asterisk en el manejo de users y demas, pero necesito que las llamadas pasen por Asterisk, ya que de hecho, tengo los SIP trunks ahi.
gracias!
2009/1/21 sadzas sadzas@gmail.com:
CLARO!! por eso mismo lo pregunte, cual es la logica de registrar en Kamailio si tengo Asterisk detras. Entiendo que Kamailio sea mas eficiente que Asterisk en el manejo de users y demas, pero necesito que las llamadas pasen por Asterisk, ya que de hecho, tengo los SIP trunks ahi.
Nada te impide crear y registrar los usuarios en Kamailio y crearlos también en Asterisk, pero en Asterisk tendrían:
[200] username = 200 host = IP_KAMAILIO qualify = no
De tal forma que cuando en Asterisk hagas un: Dial(SIP/200) Asterisk genere un INVITE y se lo envíe a Kamailio: INVITE sip:200@IP_KAMAILIO SIP/2.0
El truco es:
- Si Kamailio recibe un INVITE a 2XX desde la IP del Asterisk entonces debe hacer el lookup para buscar el registro(s) del usuario y enviarle el INVITE. - Si Kamailio recibe un INVITE a 2XX desde una IP distinta del Asterisk (o sea, desde un tfno) debe enviársela siempre a Asterisk y Asterisk hacer el "Dial(SIP/${EXTEN})" que llamará a Kamailio. - Si Kamailio recibe un MESSAGE no enviárselo a Asterisk que no sabe qué hacer con él, en vez de eso hacer el lookup para enviárselo al usuario.
De esa forma todo el tráfico pasa por Kamailio y Asterisk, permitiendo parallel forking en Kamailio (varios usuarios registrados con misma cuenta SIP) y la lógica Dialplan de Asterisk.
Iñaki Baz Castillo wrote:
Nada te impide crear y registrar los usuarios en Kamailio y crearlos también en Asterisk, pero en Asterisk tendrían:
[200] username = 200 host = IP_KAMAILIO qualify = no
De tal forma que cuando en Asterisk hagas un: Dial(SIP/200) Asterisk genere un INVITE y se lo envíe a Kamailio: INVITE sip:200@IP_KAMAILIO SIP/2.0
El truco es:
- Si Kamailio recibe un INVITE a 2XX desde la IP del Asterisk entonces
debe hacer el lookup para buscar el registro(s) del usuario y enviarle el INVITE.
- Si Kamailio recibe un INVITE a 2XX desde una IP distinta del
Asterisk (o sea, desde un tfno) debe enviársela siempre a Asterisk y Asterisk hacer el "Dial(SIP/${EXTEN})" que llamará a Kamailio.
- Si Kamailio recibe un MESSAGE no enviárselo a Asterisk que no sabe
qué hacer con él, en vez de eso hacer el lookup para enviárselo al usuario.
De esa forma todo el tráfico pasa por Kamailio y Asterisk, permitiendo parallel forking en Kamailio (varios usuarios registrados con misma cuenta SIP) y la lógica Dialplan de Asterisk.
Gracias Iñaqui, y si, lo que decis es similar a lo que tengo en este momento con el proxy de Brekeke. Lo explicaste muy bien.
sadzas wrote:
Gracias Iñaqui, y si, lo que decis es similar a lo que tengo en este momento con el proxy de Brekeke. Lo explicaste muy bien.
Me corrijo... no se si es lo mejor el hecho de que cada extension en Asterisk posea como host la IP del kamailio. Ya que haciendo esto, no puedo tener control de las extensiones registradas. Asterisk estaria viendo la IP del Kamailio Up, pero tal vez el phone esta desconectado.
Creo que lo mejor es definir un trunk apuntando al Kamailio y un dialplan que diga "cuando se disca 2xx enviar al trunk kamailio"...
2009/1/21 sadzas sadzas@gmail.com:
Me corrijo... no se si es lo mejor el hecho de que cada extension en Asterisk posea como host la IP del kamailio. Ya que haciendo esto, no puedo tener control de las extensiones registradas. Asterisk estaria viendo la IP del Kamailio Up, pero tal vez el phone esta desconectado.
Creo que lo mejor es definir un trunk apuntando al Kamailio y un dialplan que diga "cuando se disca 2xx enviar al trunk kamailio"...
Es otra opción, pero da algunos problemas serios si quiers usar, por ejemplo, colas en Asterisk. Te lo digo por experiencia. Además, de la forma que dices tampoco vas a controlar en Asterisk los registros de los usuarios, así que ¿qué más da? no veo ninguna ventaja.
Iñaki Baz Castillo wrote:
Es otra opción, pero da algunos problemas serios si quiers usar, por ejemplo, colas en Asterisk. Te lo digo por experiencia. Además, de la forma que dices tampoco vas a controlar en Asterisk los registros de los usuarios, así que ¿qué más da? no veo ninguna ventaja.
Si, de hecho lo acabo de probar con Brekeke. Si seteas Dynamic en la extension, solo muestra registrada cuando el phone se registra. Obviamente muestra la IP del proxy, pero solo cuando el phone esta registrado:
asterisco*CLI> sip show peers Name/username Host Dyn Nat ACL Port Status Off-net 200.xx.xx.15 N 5060 Unmonitored Brekeke 200.xx.xx.53 N 5060 Unmonitored 6008/6008 (Unspecified) D N 0 UNKNOWN 6007 (Unspecified) D N 0 UNKNOWN 6006/6006 (Unspecified) D 0 UNKNOWN 6005 (Unspecified) D N 0 UNKNOWN 6004/6004 (Unspecified) D 0 UNKNOWN 6003/6003 200.xx.xx.53 D 5060 OK (102 ms) 6002/6002 (Unspecified) D 0 UNKNOWN 6001/6001 200.xx.xx.53 D 5060 OK (122 ms) 6000/6000 (Unspecified) D 0 UNKNOWN
Ahi muestra que tanto el trunk "brekeke" como las extensiones tienen la misma IP, eso es porque estan seteadas en "dynamic".
El tema de la cola lo creo, hay que tener un server que aguante el peso... bueno, voy a ver que onda..
gracias por todo Iñaqui!
El día 21 de enero de 2009 18:07, sadzas sadzas@gmail.com escribió:
El tema de la cola lo creo, hay que tener un server que aguante el peso... bueno, voy a ver que onda..
No, hablo de colas con 4-5 usuarios SIP (no agentes). Si dichos usuarios SIP no existen en Asterisk sino que son direcciones SIP en plan 200@KAMAILIO_IP entonces Asterisk se lía y confunde los estados de dichos usuarios. Por ejemplo ocurre que, a veces, uno está ocupado y Asterisk , *a veces*, determina que todos los usuarios SIP de la cola están ocupados ya que por alguna razón se fija sólo en la IP origen y a saber lo que hace. Si en vez de eso defines cada usuario SIP en Asterisk en plan: [200] username = 200 host =KAMAILIO_IP qualify = no y usas dichos usuarios """"internos"""" en las colas (SIP/200) entonces ningún problema.
Asterisk no funciona nada bien cuando habla con cosas SIP remotas que no sean usuarios suyos y posiblemente nunca lo hará.
Saludos.
Hola Lista!
Por fin se me aclaro esta duda que tenia hace bastante. Pensé que la única forma era ponerlos a funcionar en real time. Lo tenia implementado diferente, y aunque me establecía la comunicación bien, siempre me salía el mensaje de error:
[Jan 19 14:06:46] ERROR[2155]: chan_sip.c:15553 sipsock_read: We could NOT get the channel lock for SIP/192.168.3.10:5060-0916dc38! [Jan 19 14:06:46] ERROR[2155]: chan_sip.c:15554 sipsock_read: SIP transaction failed: 6422893f1de9141254689271410fb744@192.168.3.10
En Asterisk (que escucha en el puerto 5070) solo tenia configurado el usuario en el sip.conf
[Kamailio] type=friend context=default insecure=port,invite host=192.168.3.10
Y en Kamailio tenia registrados 2 UA, el 4000 y el 3000 entonces si llamaban a alguno estos, en el dial plan de Asterisk hacia
exten => _[34]000,1,Verbose(1|Extension Kamailio) exten => _[34]000,n,Dial(SIP/Kamailio/${EXTEN},30) exten => _[34]000,n,Hangup()
Lo que lo enviaba a Kamailio, y el se encargaba de retransmitirlo al UA correspondiente.
Voy a tratar con esta nueva forma que ha dado Iñaki, a ver si me deja de salir ese error, aunque igual la comunicación se está estableciendo sin problemas.
Gracias una vez mas Iñaki
David Céspedes
-----Mensaje original----- De: users-es-bounces@lists.kamailio.org [mailto:users-es-bounces@lists.kamailio.org] En nombre de Iñaki Baz Castillo Enviado el: Miércoles, 21 de Enero de 2009 12:32 p.m. Para: Lista de usuarios de Kamailio Asunto: Re: [Kamailio-Users-ES] Consultas varias Kamailio - Asterisk
El día 21 de enero de 2009 18:07, sadzas sadzas@gmail.com escribió:
El tema de la cola lo creo, hay que tener un server que aguante el peso... bueno, voy a ver que onda..
No, hablo de colas con 4-5 usuarios SIP (no agentes). Si dichos usuarios SIP no existen en Asterisk sino que son direcciones SIP en plan 200@KAMAILIO_IP entonces Asterisk se lía y confunde los estados de dichos usuarios. Por ejemplo ocurre que, a veces, uno está ocupado y Asterisk , *a veces*, determina que todos los usuarios SIP de la cola están ocupados ya que por alguna razón se fija sólo en la IP origen y a saber lo que hace. Si en vez de eso defines cada usuario SIP en Asterisk en plan: [200] username = 200 host =KAMAILIO_IP qualify = no y usas dichos usuarios """"internos"""" en las colas (SIP/200) entonces ningún problema.
Asterisk no funciona nada bien cuando habla con cosas SIP remotas que no sean usuarios suyos y posiblemente nunca lo hará.
Saludos.
El Jueves, 22 de Enero de 2009, David A Céspedes escribió:
Por fin se me aclaro esta duda que tenia hace bastante. Pensé que la única forma era ponerlos a funcionar en real time.
Sí, siempre es mejor que Asterisk piense que los usuarios son suyos (aunque no se registren en él).
Iñaki Baz Castillo wrote:
Si en vez de eso defines cada usuario SIP en Asterisk en plan: [200] username = 200 host =KAMAILIO_IP qualify = no y usas dichos usuarios """"internos"""" en las colas (SIP/200) entonces ningún problema.
Estoy intentando esto mismo. Para que quede claro, de repente estoy buscando una alternativa al realtime entre Asterisk - Kamailio. Y me parece que esto puede funcionar...
Lo que quiero hacer es que los tel se registren en Kamailio para llamadas entre si (esto ya lo tengo hecho) y que para salir por la PSTN vayan al Asterisk, ademas del voicemail, y demas features, teniendo en cuenta que al manejar telefonos fuera de la LAN, necesito usar RTPPROXY. Es todo esto posible?
Mi configuracion actual es la siguiente:
route{ #--------------------------------------------------------# # SANITY #--------------------------------------------------------# if (!mf_process_maxfwd_header("10")) { sl_send_reply("483","Too Many Hops"); exit; }; if (msg:len >= 2048 ) { sl_send_reply("513", "Message too big"); exit; }; #--------------------------------------------------------#
#--------------------------------------------------------# # DETECCION DE NAT route(2); #--------------------------------------------------------#
#--------------------------------------------------------# if (!method=="REGISTER") record_route();
if (loose_route()) { append_hf("P-hint: rr-enforced\r\n"); route(1); };
if (!uri==myself) { append_hf("P-hint: outbound\r\n"); route(1); }; #--------------------------------------------------------# ]
#--------------------------------------------------------# #--------------------------------------------------------# if (uri==myself) { if (method=="REGISTER") {
if (isflagset(5)) { setbflag(6); # if you want OPTIONS natpings uncomment next # setbflag(7); }; save("location"); exit; };
if (!lookup("location")) { sl_send_reply("404", "Not Found"); exit; };
append_hf("P-hint: usrloc applied\r\n"); };
route(1); #--------------------------------------------------------# }
#--------------------------------------------------------# # RUTEOS #--------------------------------------------------------# route[1] { if (subst_uri('/(sip:.*);nat=yes/\1/')){ setbflag(6); };
if (isflagset(5)||isbflagset(6)) { route(3); }
if (!t_relay()) { sl_reply_error(); };
}
route[2]{ force_rport(); if (nat_uac_test("19")) { if (method=="REGISTER") { fix_nated_register(); } else { fix_nated_contact(); }; setflag(5); }; }
route[3] { if (is_method("BYE|CANCEL")) { unforce_rtp_proxy(); } else if (is_method("INVITE")){ force_rtp_proxy(); t_on_failure("1"); }; if (isflagset(5)) search_append('Contact:.*sip:[^>[:cntrl:]]*', ';nat=yes'); t_on_reply("1"); }
#--------------------------------------------------------# # RUTEOS #--------------------------------------------------------# route[4] { if ($rU =~ "5[0-9]" && src_ip!=200.xx.xx.87){ ## Aca pregunto por el origen, para no crear un loop. log(1, "Forwarding to Asterisk \n"); rewritehostport("200.xx.xx.87:5060"); route(5); }; }
route[5] { if (!t_relay()) { sl_reply_error(); }; } #--------------------------------------------------------#
failure_route[1] { if (isbflagset(6) || isflagset(5)) { unforce_rtp_proxy(); } }
#--------------------------------------------------------#
onreply_route[1] { if ((isflagset(5) || isbflagset(6)) && status=~"(183)|(2[0-9][0-9])") { force_rtp_proxy(); } search_append('Contact:.*sip:[^>[:cntrl:]]*', ';nat=yes');
if (isbflagset(6)) { fix_nated_contact(); } exit; }
Quiero que al discar 5 se dirija al Asterisk para salir por la PSTN. La pregunta es, donde debo colocar correctamente el route para el INVITE hacia ASTERISK, estoy olvidando de algo? Teniendo en cuenta el RTPPROXY...
gracias!
sr-users-es@lists.kamailio.org