Hola a todos. Aquí os dejo los pasos que he seguido para instalar Asterisk 1.8 en mi router 4518 con Attitude Adjustment. Lo he realizado a partir de lo aportado por otros usuarios en este hilo, y le añadido más seguridad y más funcionalidad.
Si el moderador considera que es buena idea mover este contenido a la primera página del hilo, que lo haga.
Lo primero de todo es averiguar nuestro usuario y contraseña de VoIP. Para esto, usando el router 4518 o el 7518 funcionando con un firmware de Orange o ya.com, sacamos un backup de la configuración usando el apartado correspondiente de la web de gestión del router.
Una vez tenemos ese backup, descargamos, en windows por ejemplo, la utilidad XORSearch.exe. Luego, en una consola de MS-DOS, ejecutamos:
XORSearch.exe -n 30 backup.bin sip
El usuario es una cadena alfanumerica de 17 caracteres antes de "@". Apuntarlo.
Luego ejecutamos:
XORSearch.exe -n 1000 backup.bin USUARIO_ENCONTRADO_ANTES
La password esta delante del user y tiene 16 caracteres. Apuntarla.
Ahora ya instalaríamos OpenWRT en el router. Llegado el momento de hacer funcionar la VoIP, instalamos Asterisk. Ejecutamos todo esto:
opkg update:
opkg install kmod-ltq-vmmc
opkg install asterisk18
opkg install asterisk18-chan-lantiq
opkg install asterisk18-codec-alaw
Si queremos grabar llamadas:
opkg install asterisk18-app-mixmonitor
Si queremos ejecutar comandos de shell linux (útil para, por ejemplo, crear registros de llamadas en un fichero .txt):
opkg install asterisk18-app-system
Añadimos al fichero /etc/hosts:
85.62.244.15 sip.orange.es
TU_IP_PUBLICA OpenWrt
Ahora modificamos el contenido de varios ficheros ubicados en /etc/asterisk/.
1. Escribimos todo esto dentro del fichero sip.conf. He dejado mis comentarios porque no molestan y pueden ser útiles:
;Cuando nos llaman, Asterisk mira la IP del llamante y busca un peer que tenga
;un host con esa IP. Si no lo encuentra, la llamada se trata con el general.
[general]
;el register solo indica al proveedor SIP que queremos recibir llamadas
register => +34TU_TELEFONO@sip.orange.es:TU_PASSWORD_SIP:TU_USUARIO_SIP@sip.orange.es
allowguest=no;esto es para impedir llamadas originadas en IPs que no
;corresponden a ningun peer definido mas abajo. Poner "no" para repeler atacantes
insecure=no;esto es para que se pida siempre autenticacion en cada llamada q trate el general
alwaysauthreject=yes;enviar mismo reject tanto si user_unknown como password_unknow
context=nadadenada;este contexto esta vacio para q llamadas no autorizadas no puedan hacer nada
srvlookup=no
udpbindaddr=0.0.0.0
tcpenable=no
qualify=no;Check if client is reachable. If yes, the checks occur every 60 seconds.
nat=no
externaddr=TU_IP_PUBLICA;no vale poner OpenWrt xq se queja
sipdebug=yes
transport=udp
sendrpid=pai
trustrpid=yes
useragent=voip;Antes era Asterisk, cambiado para no dar pistas
bindport=5060
deny=0.0.0.0/0.0.0.0
[yacom]
type=peer
allowguest=no
directmedia=yes;se llamaba canreinvite en versiones anteriores
defaultuser=TU_USUARIO
fromuser=+34TU_TELEFONO
secret=TU_PASSWORD;
context=default
fromdomain=sip.orange.es
host=sip.orange.es;asterisk mira esto para asignar la llamada entrante al peer adecuado
domain=sip.orange.es
outboundproxy=sip.orange.es
dtmfmode=inband
disallow=all
allow=alaw
register=yes
insecure=invite;esto permite que el servidor de orange no tenga que autenticarse cada vez que
;envie un INVITE. En el resto de casos si.
session-timers=originate
session-minse=14460
language=es
qualify=no
defaultexpiry=3600
2. Escribimos todo esto dentro del fichero extesions.conf:
[general]
static=yes
writeprotect=no
autofallthrough=yes
;priorityjumping=yes;deprecated_hace_varias_versiones
[globals]
YACOM=SIP/yacom
LOG_FILENAME=TU_PATH_DONDE_QUIERES_GUARDAR_FICHERO_REGISTRO_LLAMADAS
[llamadas_entrantes]
exten => s,1,Wait(0);esto permite esperar, en segundos
exten => s,n,Set(SENTIDO_LLAMADA=ENT)
exten => s,n,Set(OBJETIVO_LLAMADA=${CALLERID(num)})
exten => s,n,Set(REG_LLAMADA=${STRFTIME(${EPOCH},,%Y%m%d-%H-%M-%S)}-${SENTIDO_LLAMADA}-${OBJETIVO_LLAMADA})
exten => s,n,MixMonitor(${REG_LLAMADA}.wav,b);esto graba la llamada en formato wav
exten => s,n,Dial(TAPI/1&TAPI/2,40)
exten => s,n,NoOp(${DIALSTATUS})
;no hago GOTO aqui porque el CANCEL de PERDIDA_LLAMANTE_DESISTE va directo a extension h
;exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s,n,Hangup()
;CUIDADO con lo que ponemos en la extension h, porque se ejecuta tanto en llamadas entrantes como salientes
exten => h,1,NoOp(${DIALSTATUS})
exten => h,n,Goto(h-${DIALSTATUS},1)
exten => h-CANCEL,1,System(echo "${REG_LLAMADA}-PERDIDA_LLAMANTE_DESISTE" >> ${LOG_FILENAME})
exten => h-CANCEL,n,Goto(SALIR,1)
exten => h-NOANSWER,1,System(echo "${REG_LLAMADA}-PERDIDA_AGOTADOS_TONOS" >> ${LOG_FILENAME})
exten => h-NOANSWER,n,Goto(SALIR,1)
exten => h-BUSY,1,System(echo "${REG_LLAMADA}-OCUPADO" >> ${LOG_FILENAME})
exten => h-BUSY,n,Goto(SALIR,1)
exten => h-ANSWER,1,System(echo "${REG_LLAMADA}-RESPONDE" >> ${LOG_FILENAME})
exten => h-ANSWER,n,NoOp(Termina la conversacion)
exten => h-ANSWER,n,Goto(SALIR,1)
exten => _h-.,1,System(echo "${REG_LLAMADA}-OTROS-${DIALSTATUS}" >> ${LOG_FILENAME})
exten => _h-.,n,Goto(SALIR,1)
exten => SALIR,1,NoOp(Saliendo)
[llamadas_salientes]
exten => _X.,1,Set(CALLERID(num)=+34TU_TELEFONO)
exten => _X.,n,Set(SENTIDO_LLAMADA=SAL)
exten => _X.,n,Set(OBJETIVO_LLAMADA=${EXTEN})
exten => _X.,n,Set(REG_LLAMADA=${STRFTIME(${EPOCH},,%Y%m%d-%H-%M-%S)}-${SENTIDO_LLAMADA}-${OBJETIVO_LLAMADA})
exten => _X.,n,MixMonitor(${REG_LLAMADA}.wav,b);esto graba la llamada en formato wav
exten => _X.,n,Dial(${YACOM}/${EXTEN})
exten => _X.,n,Hangup()
;La extension h ya esta definida arriba
[default]
include => llamadas_entrantes
include => llamadas_salientes
[nadadenada]
exten => s,1,Hangup()
exten => _X.,1,Hangup()
3. Editar fichero lantiq.conf:
Poner estos valores:
;rxgain = -12
;txgain = -12;con esto me escuchaban bajito
rxgain = -23
txgain = 1
echocancel = nlec
4. Editar fichero indications.conf:
country=es
Ya hemos terminado con los ficheros de Asterisk. Ahora vamos con el firewall.
Editar /etc/config/firewall
Para poder recibir llamadas tras un tiempo de inactividad, añadir debajo de la rule de IPv4 ping:
config rule
option name Recibir-llamadas
option src wan
option proto udp
option src_ip 85.62.244.15
option dest_port 5060
option target ACCEPT
option family ipv4
Reiniciar el firewall:
/etc/init.d/firewall stop
/etc/init.d/firewall start
Ejeuctar esto:
/etc/init.d/vmmc enable(para que se arranque al reiniciar)
/etc/init.d/vmmc start para que no haya problema de TAPI en VoIP
- Para solucionar 3 warnings hay que poner esto en /etc/init.d/asterisk, no vale crear esos ficheros a mano porque al reiniciar el router se vacía el directorio /tmp:
Poner estas tres lineas justo antes de la que pone "$DEST/usr/sbin/asterisk $OPTIONS"
[ -d $DEST/var/lib/asterisk/keys ] || mkdir -p /var/lib/asterisk/keys
[ -d $DEST/var/lib/asterisk/moh ] || mkdir -p /var/lib/asterisk/moh
[ -h $DEST/var/lib/asterisk/astdb ] || ln -sf $DEST/usr/lib/asterisk/astdb /var/lib/asterisk/astdb
Por último arrancamos Asterisk:
/etc/init.d/asterisk enable
/etc/init.d/asterisk start
Si hay algún problemas:
- Activar todas las trazas en el logger.conf, descomentando "full".
- Activar en "sip.conf" el debug escribiendo: sipdebug=yes
- Utilizar la consola para hacer debug. Ejecutar asterisk -vvvvddddc(se sale de la consola ejecutando "core stop now").
Un saludo a todos, espero que os sirva.