Skip to content

Telmex troncal SIP con Asterisk11

Telmex troncal SIP con Asterisk11 published on 11 Comments on Telmex troncal SIP con Asterisk11

Contrate una línea Telmex y me instalaron un gateway Thomson TG712, la línea telefónica que sale del teléfono ya no se conecta a la pared, se conecta a un puerto FXS en el módem.
Al parecer ya no instalan teléfonos analógicos, y de hecho Telmex empezó a ofrecer paquetes de solo Internet.

Lo primero que hice fue obtener los datos de la cuenta voip, esto lo hice en la pagina de configuración de voz del módem.

https://192.168.1.254/cgi/b/_voip_/cfg/?be=0&l0=4&l1=2

Le di editar y obtuve el Usuario, Contraseña y SIP URI (En el caso de la contraseña se puede obtener del codigo fuente de la pagina, o con un plugin para mostrar passwords en el navegador)

[email protected]   y una contraseña numérica 12345678901234

Buscando en internet lpi.telmex.com encontré este proxy 201.116.100.193

Probé los datos con un cliente zoipper y en un instante se conecto pude hacer y recibir llamadas de mi línea Telmex.

Configure una troncal en mi asterisk de la siguiente manera:

[[email protected]]
type=peer
insecure=invite,register
host=lpi.telmex.com
outboundproxy=201.116.100.193
[email protected]
secret=12345678901234
authdomain=lpi.telmex.com
[email protected]
fromuser=555XXXXXXX
fromdomain=lpi.telmex.com
context=from-trunk-sip-lpi.telmex.com

[lpi.telmex.com]
type=peer
host=lpi.telmex.com
outboundproxy=201.116.100.193
[email protected]
secret=122076218223
authdomain=lpi.telmex.com
fromuser=4496880517
fromdomain=lpi.telmex.com
[email protected]
context=from-trunk-sip-lpi.telmex.com

register=4496880517:[email protected]/4496880517

No tengo mucha experiencia en conmutadores y trate de configurarlo utilizando las instrucciones pero por más que intente no se conectaba.

Capture y compare los paquetes de el zoipper con lo que mandaba el asterisk encontré 3 diferencias en la parte de Authorization:

 

  1. El campo de username= zoiper y thomson mandan username=”[email protected]”, Asterisk manda username=”555XXXXXXX” (sin el dominio, manda únicamente el numero
  2. El campo de uri= zoiper y thomson mandan uri=”sip:lpi.telmex.com”
  3. El campo de cnonce= zoiper y thomson mandan un hash cnonce=”fbe4225b8d4a9aXX8f320d12ad6aX72X”, Asterisk manda solo unos cuantos caracteres cnonce=”478ce5d6″

Autenticación digest como lo envía asterisk

12:17:48.691772 IP (tos 0x60, ttl 64, id 1157, offset 0, flags [none], proto UDP (17), length 678)
127.0.0.1.sip > lpi.telmex.com.sip: SIP, length: 650
REGISTER sip:lpi.telmex.com SIP/2.0
Via: SIP/2.0/UDP 127.0.0.1:5060;branch=z9hG4bK5c8ebb6c
Max-Forwards: 70
From: ;tag=as7b5837f5
To:
Call-ID: [email protected]
CSeq: 103 REGISTER
User-Agent: FPBX-2.11.0beta2(11.1.0)
Authorization: Digest username=”555XXXXXXX”, realm=”ims.telmex.com”, algorithm=MD5, uri=”sip:sip:[email protected]”, nonce=”27902ec82235618e07f9a134c9599455″, response=”d43dee94422d68b246c1433748ed07ce”, qop=auth, cnonce=”478ce5d6″, nc=00000001
Expires: 120
Contact:
Content-Length: 0

La parte que no cuadra es esta:

Authorization: Digest username=”555XXXXXXX”, realm=”ims.telmex.com”, algorithm=MD5, uri=”sip:sip:[email protected]”, nonce=”27902ec82235618e07f9a134c9599455″, response=”d43dee94422d68b246c1433748ed07ce”, qop=auth, cnonce=”478ce5d6″, nc=00000001

Revisando el modulo chan_sip.c note que asterisk no calculaba los hashes para cnonce y el usuario le quitaba la parte despues del @.

Asi que modifique el modulo, la única función que se necesita modificar es la de build_reply_digest Justo en la parte que tiene el comentario /* Calculate SIP digest response */

Ahí justo despues del comentario agregue el siguiente bloque de código para cuando la uri contenga Telmex cumpla con los requisitos del servidor:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
  if(telmex){
                char cnonce_hash[256];
                ast_md5_hash(cnonce_hash, cnonce);
                snprintf(a1, sizeof(a1), "%[email protected]:%s:%s", username, p->realm, secret);
                snprintf(a2, sizeof(a2), "%s:sip:lpi.telmex.com", sip_methods[method].text);
                if (!ast_strlen_zero(md5secret))
                        ast_copy_string(a1_hash, md5secret, sizeof(a1_hash));
                else
                        ast_md5_hash(a1_hash, a1);
                ast_md5_hash(a2_hash, a2);
 
                p->noncecount++;
                if (!ast_strlen_zero(p->qop))
                        snprintf(resp, sizeof(resp), "%s:%s:%08x:%s:%s:%s", a1_hash, p->nonce, p->noncecount, cnonce_hash, "auth", a2_hash);
                else
                        snprintf(resp, sizeof(resp), "%s:%s:%s", a1_hash, p->nonce, a2_hash);
                ast_md5_hash(resp_hash, resp);
 
                /* only include the opaque string if it's set */
                if (!ast_strlen_zero(p->opaque)) {
                        snprintf(opaque, sizeof(opaque), ", opaque="%s"", p->opaque);
                }
 
                /* XXX We hard code our qop to "auth" for now.  XXX */
                if (!ast_strlen_zero(p->qop))
                        snprintf(digest, digest_len, "Digest username="%[email protected]telmex.com", realm="%s", algorithm=MD5, uri="sip:lpi.telmex.com", nonce="%s", response="%s"%s, qop=auth, cnonce="%s", nc=%08x", username, p->realm, p->nonce, resp_hash, opaque, cnonce_hash, p->noncecount);
                else
                                        snprintf(digest, digest_len, "Digest username="%[email protected]telmex.com", realm="%s", algorithm=MD5, uri="sip:lpi.telmex.com", nonce="%s", response="%s"%s", username, p->realm, p->nonce, resp_hash, opaque);
 
                append_history(p, "AuthResp", "Auth response sent for %s in realm %s - nc %d", username, p->realm, p->noncecount);
 
                if (credentials) {
                        ao2_t_ref(credentials, -1, "Unref auth for digest");
                }
                return 0;
        }

11 Comments

Santiago, pudiste configurar la lpi en zoiper sin problemas? segun veo tu explicacion quedo funcionando, pero sin embargo siguiendo tus instrucciones, no consigo registrar mi linea en el cliente, si hay alguna manera de contactarte y pudieras ayudarme te lo agradecere infinitamente. saludos y felicidades por tu excelente sitio.

La contraseña me aparece como “password” tanto en el código fuente como con el visor de contraseñas y esa contraseña obviamente no es válida cuando me trato de conectar por Zoiper. ¿Habrá alguna otra manera de obtener la contraseña?

Hola Poncho, no se que modem tengas, yo ya no uso telmex asi que no se si parcharon eso.

Encontre esto que quiza te ayude:
http://forums.whirlpool.net.au/archive/1099401

Si lo parcharon lo que tendrias que hacer es un poco mas complicado pero totalmente factible por ejemplo si tienes un Thompson, puedes conectarte via telnet y reconfigurar el servidor sip para que se conecte a un servidor sip que tu controles, en ese servidor puedes capturar los intentos de conexion con usuario y password.

Echale un ojo aqui:
http://npr.me.uk/telnet.html
http://mackonsti.wordpress.com/2012/01/11/enable-telnet-thomson-tg585-routers/

Que tal Sanxiagos

Muy buen articulo de tu blog, ya obtuve todos los datos del modem, pero yo soy de Monterrey Nuevo Leon, y veo que en la cuenta es @ims.telmex.com trate de configurar en Zoiper pero no logro que conecte

Como saber que proxy le corresponde?

O hay que desconfigurar la linea dle modem para que funcione?

Gracias por tu tiempo

Leave a Reply

Your email address will not be published. Required fields are marked *