Howto Asterisk
Howto Asterisk
Necesitaremos los sources de asterisk y los sonidos en español que podemos descargar del siguiente
Link y manos a la obra
Lo primero será crear el usuario que usará el daemon asterisk en nuestro sistema y para ello:
adduser --system --disabled-login --disabled-password --home=/var/spool/asterisk asterisk
addgroup --system asterisk
adduser asterisk asterisk
Ahora nos toca copiar todos los sonidos “asterisk-core-sounds-es-*-current.tar.gz” para el source
que en este caso quedaría en el siguiente directorio “/root/asterisk-1.8.4.1/sounds”.
El paso siguiente sería instalar las dependencias usando un script que ya nos proporcionan en el
source, ya estando dentro ejecutamos:
contrib/scripts/install_prereq install
Teniendo las dependencias instaladas vamos a configurar antes de compilar los fuentes, si usaremos
ldap para guardar la información de las extensiones le diremos que compile el módulo
“res_config_ldap”
./configure --prefix=/usr --bindir=/bin --sbindir=/sbin --sysconfdir=/etc --localstatedir=/var --libdir=/lib
--with-res_config_ldap
y por ultimo nos queda dar los permisos al usuario asterisk en los directorios donde trabajará con
sus bases de datos
chown -R asterisk.asterisk /var/log/asterisk/ /var/lib/asterisk/ /var/spool/asterisk/
P or último nos tocaría crear las llaves rsa para dundi y para ello vamos al directorio
“/var/lib/asterisk/keys” y ejecutamos:
cd /var/lib/asterisk/keys
astgenkey -n voip.ho.rimed.cu
Y
Sustituyan voip.ho.rimed.cu por el nombre dns de su servidor voip, y listo, ya tenemos asterisk
instalado ahora tenemos que configurarlo para prestar servicio a nuestros usuarios.
Configurando:
Para configurar nuestra pequeña central tenemos varios datos que representaremos en rojo en los
archivos de configuración y sustituiremos por nuestros datos reales en nuestra central, en estos
ejemplos encontramos los datos para la central en la provincia Holguín.
Otra cosa que debemos tener bien claro es el rango de extensiones que tendrá publicadas nuestra
central en la red dundi, estos datos si no lo conoces contacte a los administradores en rimed.
/etc/asterisk/asterisk.conf
[directories](!)
astetcdir => /etc/asterisk
astmoddir => /lib/asterisk/modules
astvarlibdir => /var/lib/asterisk
astdbdir => /var/lib/asterisk
astkeydir => /var/lib/asterisk
astdatadir => /var/lib/asterisk
astagidir => /var/lib/asterisk/agi-bin
astspooldir => /var/spool/asterisk
astrundir => /var/run/asterisk
astlogdir => /var/log/asterisk
[options]
systemname = voip.ho.rimed.cu
runuser = asterisk
rungroup = asterisk
documentation_language = es_ES
[compat]
pbx_realtime=1.6
res_agi=1.6
app_set=1.6
/etc/asterisk/modules.conf
[modules]
autoload=yes
;preload => res_config_ldap.so
load => res_musiconhold.so
noload => pbx_lua.so
noload => pbx_ael.so
noload => pbx_gtkconsole.so
noload => chan_alsa.so
noload => chan_console.so
Como ven aquí vamos a decirle a asterisk que no cargue algunos modulos que no necesitamos para
su funcionamiento en nuestra red, y para los que usamos ldap tenemos la linea:
;preload => res_config_ldap.so
que debemos descomentar para que cargue el modulo para leer los datos de las extensiones que
crearemos en nuestra base de datos ldap.
/etc/asterisk/sip.conf
[general]
context=local
allowoverlap=no
udpbindaddr=0.0.0.0
tcpenable=no
tlsenable=no
srvlookup=no
disallow=all
allow=speex
allow=gsm
nat=yes
directmedia=no
language=es
useragent=VoIp PBX Server
videosupport=yes
domain= voip.ho.rimed.cu
fromdomain= voip.ho.rimed.cu
rtcachefriends=yes
jbenable = yes
jbforce = no
jbmaxsize = 250
[8120110]
type=friend
context=rimed
secret=password
callerid="Anibal Trutie"
host=dynamic
[8120111]
type=friend
context=local
secret=password
callerid="Usuario restringido"
host=dynamic
En el fichero “sip.conf” es donde se crean las extensiones que se usarán con los teléfonos ip y los
softphone, en esta configuración dejamos creadas de ejemplo dos extensiones, como pueden ver en
la ext “8120110” tenemos el parametro “context” donde definimos el contexto en el plan de
marcado en este caso rimed por lo tanto podrá hacer llamadas a ext en otros servidores de la red ya
que dicho contexto incluye las busquedas dundi de ext en otros servidores de la red, en el parametro
“secret” definimos su contraseña y en el “callerid” pondremos la identificación de la ext que será
mostrada en el display de los teléfonos ip cuando se les llame. La ext “8120110” como pertenece al
contexto local solo podrá hacer llamadas a las ext en el mismo servidor.
Tenga en cuenta que solo hemos habilitado dos codec para la transmision de audio
allow=speex
allow=gsm
usamos gsm buscando compatibilidad y redimiento ya que es uno de los que menos ancho de banda
consume, aproximadamente unos 13kb/s , el codec speex tambien lo habilitamos ya que este
consume menos que gsm, se puede usar en softphone como x-lite pero no es compatible con los
teléfonos ip y en softphone como el ekiga para linux no estan bien soportados.
/etc/asterisk/voicemail.conf
[general]
format=wav49|gsm|wav
attach=no
attachfmt=wav49
maxsecs=300
minsecs=5
skipms=3000
maxsilence=4
silencethreshold=128
maxlogins=3
charset=UTF-8
fromstring=Correo de Voz
[email protected]
emailsubject=Mensaje de ${VM_CALLERID}.
emailbody=${VM_NAME}:\n\n\tUsted ha recibido un mensaje (${VM_DUR} min) en su buzón de voz $
{VM_MAILBOX}\nenviado por ${VM_CALLERID} con fecha ${VM_DATE}\n\n\t\t\t--- Nodo Provincial
VoIp.ho.rimed.cu ---\n
emaildateformat=%d/%m/%Y a las %r
sendvoicemail=yes
[voicemail]
8020110 => 8888,Anibal Trutié,[email protected],,|attach=yes|delete=yes
8020111 => 8888,Usuario Restringido,[email protected],,|attach=yes|delete=yes
En este archivo es donde configuramos los buzones de voz, este ejemplo esta configurado para que
los mensajes nos lleguen a nuestra dirección de correo electrónico, no todas las extensiones
necesitan tener activado el buzon de voz por lo que solo configuraremos las que necesitemos.
/etc/asterisk/iax.conf
[general]
language=es
bandwidth=low
disallow=all
allow=gsm
jitterbuffer=yes
forcejitterbuffer=yes
maxjitterbuffer=250
autokill=yes
[dundi]
type=friend
dbsecret=dundi/secret
context=local
El protocolo “iax2” solo lo usaremos para la transmisión entre servidores asterisk por lo que
usaremos como un estandar el codec gsm, en este archivo es donde configuramos el usuario dundi
que usara el servidor para dichas transmisiones.
/etc/asterisk/extensions.conf
[general]
static=yes
writeprotect=no
clearglobalvars=yes
[globals]
[macro-Sip]
exten => s,1,Dial(SIP/${ARG1},22)
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s-BUSY,1,Playback(vm-nobodyavail)
exten => s-BUSY,n,Playback(vm-goodbye)
exten => s-BUSY,n,HangUp()
exten => s-NOANSWER,1,VoiceMail(${ARG1}@voicemail)
exten => s-NOANSWER,n,HangUp()
exten => _s-.,1,Playback(ss-noservice)
exten => _s-.,n,VoiceMail(${ARG1}@voicemail)
exten => _s-.,n,Playback(vm-goodbye)
exten => _s-.,n,HangUp()
[dundi-ext]
switch => DUNDi/dundi-ext
[dundi-inc]
exten => _8120[0-2]XX,1,NoOp()
exten => 8129999,1,NoOp()
[local]
exten => i,1,Playback(vm-invalid)
exten => i,n,HangUp()
exten => 8129999,1,Playback(demo-congrats)
exten => 8129999,n,Hangup()
exten => _812XXXX,1,Ringing()
exten => _812XXXX,n,Macro(Sip,${EXTEN})
exten => _XXXX,1,Ringing()
exten => _XXXX,n,Macro(Sip,812${EXTEN})
exten => t,1,Playback(vm-goodbye)
exten => t,n,HangUp()
[rimed]
include => local
include => dundi-ext
[general]
department=Informatica y Comunicaciones
organization=Nodo Provincial UCP Holguin
locality=Holguin
stateprov=Holguin
country=CU
[email protected]
bindaddr=0.0.0.0
port=4520
entityid=00:18:51:17:e3:27
cachetime=3600
ttl=32
autokill=yes
storehistory=yes
[mappings]
dundi-ext => dundi-inc,0,IAX2,dundi:${SECRET}@voip.ho.rimed.cu/${NUMBER},nopartial
[86:c1:ea:b9:ef:af]
model = symmetric
host = voip.rimed.cu
inkey = voip.rimed.cu
outkey = voip.ho.rimed.cu
include = all
permit = all
qualify = yes
En el archivo dundi.conf es donde le decimos a nuestro dundi los servidores a los cuales hacerle
consultas buscando extensiones al hacer una llamada, en dejamos todas la información de nuestro
servidor y creamos una conexión para cada servidor a conectarnos en la red, en este ejemplo
creamos una conexión con el servidor de rimed y los parametros a tener en cuenta son:
entityid=00:18:51:17:e3:27
es donde definimos la identidad de nuestro servidor para la cual usamos el numero mac de la
interface de red, si necesitan cambiar de pc el servidor asterisk no cambien la identificación ya que
habra que hacerlo en cada servidor que establesca conexión con ustedes y habría que cambiar todas
las configuraciones. Las configuraciones para la conexión con los servidores conocidos las pongo
en la página final de este documento, el que iré actualizando a medida que se conecten los demás.
Cada bloque de conexión con otro servidor comienza por la identidad del servidor remoto:
[86:c1:ea:b9:ef:af]
model = symmetric
host = voip.rimed.cu
inkey = voip.rimed.cu
outkey = voip.ho.rimed.cu
include = all
permit = all
qualify = yes
para cada conexión “inkey”es la llave rsa publica del servidor remoto “voip.rimed.cu.pub” y
“outkey” es la llave rsa privada de nuestro servidor, en este caso “voip.ho.rimed.cu.key”, Las llaves
rsa se crean en pares ( xxxx.key <=> xxxx.pub ) es otra cosa a tener en cuenta a la hora de migrar el
servicio hacia otra pc, ya que la llave xxxx.pub que es la que publicaremos para que depositen en
los demás servidores solo sirve con la xxxx.key que se creo junto con ella, por lo tanto solo vamos a
crearla la primera ves, tambien tengan en cuenta que las llaves xxxx.pub de los demas servidores
tenemos que depositarlas en nuestro servidor dentro de “/var/lib/asterisk/keys”
Comandos básicos:
Iniciar, reiniciar y detener asterisk
/etc/init.d/asterisk start
/etc/init.d/asterisk restart
/etc/init.d/asterisk stop
Entrar en la consola de asterisk “CLI”y recargar la configuración:
asterisk -r
CLI> reload
Mostrar la ayuda
CLI> core show help
! Execute a shell command
agent logoff Sets an agent offline
agent show Show status of agents
agent show online Show all online agents
agi dump html Dumps a list of AGI commands in HTML format
agi exec Add AGI command to a channel in Async AGI
agi set debug [on|off] Enable/Disable AGI debugging
agi show commands [topic] List AGI commands or specific help
...
Configuración LDAP:
/etc/asterisk/res_ldap.conf
[_general]
protocol= 3
url = ldap://ldap.ho.rimed.cu
basedn = ou=voip,dc=ucp,dc=ho,dc=rimed,dc=cu
user = cn=asterisk,dc=ucp,dc=ho,dc=rimed,dc=cu
pass = password
[sip]
name = cn
host = AstAccountHost
port = AstAccountPort
type = AstAccountType
context = AstAccountContext
callerid = AstAccountCallerID
fullcontact = AstAccountFullContact
useragent = AstAccountUserAgent
md5secret = AstAccountRealmedPassword
defaultuser = AstAccountDefaultUser
regseconds = AstAccountExpirationTimestamp
ipaddr = AstAccountIPAddress
lastms = AstAccountLastQualifyMilliseconds
additionalFilter=(objectClass=AsteriskSIPUser)
[voicemail]
mailbox = cn
context = AstVoicemailContext
password = AstVoicemailPassword
fullname = AstAccountCallerID
email = AstVoicemailEmail
pager = AstVoicemailPager
options = AstVoicemailOptions
additionalFilter = (objectClass=AsteriskVoiceMail)
/etc/asterisk/extconfig.conf
[settings]
sipusers => ldap,"ou=voip,dc=ucp,dc=ho,dc=rimed,dc=cu",sip
sippeers => ldap,"ou=voip,dc=ucp,dc=ho,dc=rimed,dc=cu",sip
voicemail => ldap,"ou=voip,dc=ucp,dc=ho,dc=rimed,dc=cu",voicemail
Ejemplos en ldif de extensiones:
Extension del contexto rimed con buzón de voz (voicemail)
dn: cn=8120112,ou=voip,dc=ucp,dc=ho,dc=rimed,dc=cu
cn: 8120112
objectClass: account
objectClass: top
objectClass: AsteriskExtension
objectClass: AsteriskSIPUser
objectClass: AsteriskVoiceMail
AstAccountName: 8120112
AstAccountType: friend
AstAccountHost: dynamic
AstAccountContext: rimed
AstAccountCallerID: Anibal Trutie
AstAccountRealmedPassword: {md5}password
AstVoicemailPassword: 9999
AstVoicemailContext: voicemail
AstVoicemailEmail: [email protected]
AstVoicemailOptions: attach=yes|delete=yes
dn: cn=8120113,ou=voip,dc=ucp,dc=ho,dc=rimed,dc=cu
cn: 8120112
objectClass: account
objectClass: top
objectClass: AsteriskExtension
objectClass: AsteriskSIPUser
AstAccountName: 8120113
AstAccountType: friend
AstAccountHost: dynamic
AstAccountContext: rimed
AstAccountCallerID: Usuario restringido
AstAccountRealmedPassword: {md5}password
La Sintaxis es <extension>:<dominio>:<password>
El usuario ldap “asterisk” tiene que tener permisos para modificar muchos de los atributos a los que
hace referencia el archivo anterior, le damos permiso en el la base donde se almacena el voip.
/etc/ldap/slapd.conf
access to attrs=AstAccountSecret,AstVoicemailPassword
by dn="cn=admin,dc=ucp,dc=ho,dc=rimed,dc=cu" write
by dn="cn=asterisk,dc=ucp,dc=ho,dc=rimed,dc=cu" write
by * none
access to dn.subtree="ou=voip,dc=ucp,dc=ho,dc=rimed,dc=cu"
by dn="cn=admin,dc=ucp,dc=ho,dc=rimed,dc=cu" write
by dn="cn=asterisk,dc=ucp,dc=ho,dc=rimed,dc=cu" write
by * read
Conexiones con servidores conocidos:
Las llaves rsa xxxx.pub de estos servidores estan publicadas en este Link
/etc/asterisk/dundi.conf
[86:c1:ea:b9:ef:af]
model = symmetric
host = voip.rimed.cu
inkey = voip.rimed.cu
outkey = voip.xx.rimed.cu
include = all
permit = all
qualify = yes
[00:18:51:17:e3:27]
model = symmetric
host = voip.ho.rimed.cu
inkey = voip.ho.rimed.cu
outkey = voip.xx.rimed.cu
include = all
permit = all
qualify = yes
[00:1e:8c:c8:28:1c]
model = symmetric
host = voip.ij.rimed.cu
inkey = voip.ij.rimed.cu
outkey = voip.xx.rimed.cu
include = all
permit = all
qualify = yes
[00:18:51:9d:1e:2a]
model = symmetric
host = voip.vc.rimed.cu
inkey = voip.vc.rimed.cu
outkey = voip.xx.rimed.cu
include = all
permit = all
qualify = yes
[00:1a:92:b4:52:7a]
model = symmetric
host = voip.sc.rimed.cu
inkey = voip.sc.rimed.cu
outkey = voip.xx.rimed.cu
include = all
permit = all
qualify = yes
[00:1d:60:60:bc:bc]
model = symmetric
host = voip.ss.rimed.cu
inkey = voip.ss.rimed.cu
outkey = voip.xx.rimed.cu
include = all
permit = all
qualify = yes
CONTINÚA DEBAJO
[00:26:18:34:b6:ef]
model = symmetric
host = voip.lt.rimed.cu
inkey = voip.lt.rimed.cu
outkey = voip.xx.rimed.cu
include = all
permit = all
qualify = yes