Provisionamiento remoto Softphone Grandstream GS Wave

Provisionamiento remoto Softphone Grandstream GS Wave

En este articulo, un poco extenso, veremos como configurar el aprovisionamiento remoto del Softphone marcado Grandstream. Los pasos que seguiremos son:

  1. configuración de la plantilla del teléfono

  2. generación del archivo XML

  3. configuración de un servidor HTTP

  4. configuración del aprovisonamiento en el Softphone

Empezamos con el primer punto; tendremos que descargar el archivo que contiene todas las plantillas de los distintos teléfonos SIP comercializados por GrandStream y utilizar el archivo con nombre gs_wave_config.txt.

Abrimos el archivo con un editor de texto y rellenamos los campos del primer account presente en el archivo con el numero de extensión 100 (por ejemplo):

#######################################################################

## Account 1 General Settings ##

#######################################################################

# Account Active. 0 - No, 1 - Yes. Default value is 0

# Number: 0, 1

P271 = 1

# Account Name

P270 = 100

# SIP Server

P47 = IPPBX:puerto

# SIP User ID

P35 = 100

# SIP Authentication ID

P36 = 100

# SIP Authentication Password

P34 = contraseña

# Voice Mail Access Number

P33 =

# Name (Display Name, e.g., John Doe)

P3 = voztovoice

#######################################################################

## Account 1 Network Settings ##

#######################################################################

# Outbound Proxy

P48 = IPPBX:puerto

# Secondary Outbound Proxy

P2333 =

# DNS Mode. 0 - A Record, 1 - SRV, 2 - NAPTR/SRV. Default value is 0

# Number: 0, 1, 2

P103 = 0

# NAT Traversal. 0 - NAT No, 1 - STUN, 2 - Keep-alive, 3 - UPnP, 4 - Auto. Default value is 2

# Number: 0, 1, 2, 3, 4

P52 = 2

# Proxy-Require

P197 =

#######################################################################

## Account 1 SIP Settings ##

#######################################################################

# Unregister Before New Registration. 0 - Do Not Unregister, 1 - Unregister All, 2 - Unregister Single. Default value is 2

# Number: 0, 1, 2

P81 = 2

# Register Expiration (m). In minutes. Default value is 60

# Number: 0 - 64800

P32 = 5

# Local SIP Port. Default value is 5060

# Number: 5 - 65535

P40 = 7000

# Enable Session Timer/ Session Expiration(s). In seconds. Default value is 180 seconds.

# By default, Session Timer is Enabled. Session Timer is disabled if the value is 0.

# Number: 0 or 90 - 64800

P260 = 180

# Min-SE(s). Default value is 90 seconds

# Number: 90 - 64800

P261 = 90

# UAC Specify Refresher. 0 - Omit, 1 - UAC, 2 - UAS. Default value is 0

# Number: 0, 1, 2

P266 = 0

# UAS Specify Refresher. 1 - UAC, 2 - UAS. Default value is 1

# Number: 1, 2

P267 = 1

# Force INVITE. Always refresh with INVITE instead of UPDATE even when remote party supports UPDATE

# 0 - No, 1 - Yes. Default value is 0

# Number: 0, 1

P265 = 0

# Caller Request Timer. Request for timer when calling

# 0 - No, 1 - Yes. Default value is 0

# Number: 0, 1

P262 = 0

# Callee Request Timer

# Request for timer when being called (i.e., if remote party supports timer # but did not request for one)

# 0 - No, 1 - Yes. Default value is 0

# Number: 0, 1

P263 = 0

# Force Timer. Still use timer when remote party does not support timer

# 0 - No, 1 - Yes. Default value is 0

# Number: 0, 1

P264 = 0

# SIP Transport

# 0 - UDP , 1 - TCP, 2 - TLS. Default value is 0

# Number: 0, 1, 2

P130 = 0

# Only Accept SIP Requests from Known Servers

# 0 - No, 1 - Yes. Default value is 0

# Number: 0, 1

P2347 = 0

# Check SIP User ID for Incoming INVITE

# 0 - No, 1 - Yes. Default value is 0

# Number: 0, 1

P258 = 0

#######################################################################

## Account 1 Codec Settings ##

#######################################################################

# DTMF: in audio. 0 - No, 1 - Yes. Default value is 0

# Number: 0, 1

P2301 = 0

# DTMF: via RFC2833. 0 - No, 1 - Yes. Default value is 1

# Number: 0, 1

P2302 = 1

# DTMF: via SIP INFO. 0 - No, 1 - Yes. Default value is 0

# Number: 0, 1

P2303 = 0

# Preferred Vocoder

# First codec. -1 - NONE, 0 - PCMU, 8 - PCMA, 9 - G.722, 2 - G.726-32, 97 - # iLBC, 123 - Opus, 3 - GSM. Default value is 0

# Number: -1, 0, 8, 9, 2, 97, 123, 3

P57 = 0

# Second codec. -1 - NONE, 0 - PCMU, 8 - PCMA, 9 - G.722, 2 - G.726-32, 97 #- iLBC, 123 - Opus, 3 - GSM. Default value is 8

# Number: -1, 0, 8, 9, 2, 97, 123, 3

P58 = 8

# Third codec. -1 - NONE, 0 - PCMU, 8 - PCMA, 9 - G.722, 2 - G.726-32, 97 - #iLBC, 123 - Opus, 3 - GSM. Default value is -1

# Number: -1, 0, 8, 9, 2, 97, 123, 3

P59 = -1

# Forth codec. -1 - NONE, 0 - PCMU, 8 - PCMA, 9 - G.722, 2 - G.726-32, 97 - #iLBC, 123 - Opus, 3 - GSM. Default value is -1

# Number: -1, 0, 8, 9, 2, 97, 123, 3

P60 = -1

# Fifth codec. -1 - NONE, 0 - PCMU, 8 - PCMA, 9 - G.722, 2 - G.726-32, 97 - #iLBC, 123 - Opus, 3 - GSM. Default value is -1

# Number: -1, 0, 8, 9, 2, 97, 123, 3

P61 = -1

# Sixth codec. -1 - NONE, 0 - PCMU, 8 - PCMA, 9 - G.722, 2 - G.726-32, 97 - #iLBC, 123 - Opus, 3 - GSM. Default value is -1

# Number: -1, 0, 8, 9, 2, 97, 123, 3

P62 = -1

# Seventh codec. -1 - NONE, 0 - PCMU, 8 - PCMA, 9 - G.722, 2 - G.726-32, 97 #- iLBC, 123 - Opus, 3 - GSM. Default value is -1

# Number: -1, 0, 8, 9, 2, 97, 123, 3

P63 = -1

# H.264 Image Size. 9 - 720P, 1 - VGA, 5 - CIF, 0 - QVGA, 6 - QCIF. Default #value is 1

# Number: 9, 1, 5, 0, 6

P2307 = 1

# Video Bit Rate. 32 - 32 kbps, 64 - 64 kbps, 96 - 96 kbps, 128 - 128 kbps, #160 - 160 kbps, 192 - 192 kbps

# 210 - 210 kbps, 256 - 256 kbps, 384 - 384 kbps, 512 - 512 kbps, 640 - 640 #kbps, 768 - 768 kbps

# 1024 - 1024 kbps. Default value is 512.

# Number: 32, 64, 96, 128, 160, 192, 210, 256, 384, 512, 640, 768, 1024.

P2315 = 512

# SDP Bandwidth Attribute. Default value is 1

# 0 - Standard, 1 - Media Level, 2 - Session Level, 3 - None

# Number: 0, 1, 2, 3

P2360 = 1

# H.264 Payload Type. Default value is 99

# Number

P293 = 99

# SRTP Mode. Default value is 0. 0 - Disable, 1 - Enable but not forced, 2 #- Enable and forced.

# Number: 0, 1, 2

P183 = 0

# Enable SRTP Key Lifetime. 0 - No, 1 - Yes.

# Number: 0,1

P2363 = 1

#######################################################################

## Account 1 Call Settings ##

#######################################################################

# Dial Plan Prefix

# String

P66 =

# Dial Plan. Default value is { x+ | \+x+ | *x+ | *xx*x+ }

P290 = { x+ | \+x+ | *x+ | *xx*x+ }

# Auto Answer. 0 - No, 1 - Yes, 2 - Enable Intercom/Paging. Default value #is 0

# Number: 0, 1, 2

P90 = 0

# Use # as Dial Key. 0 - No, 1 - Yes. Default value is 1

# Number: 0, 1

P72 = 1

# No Answer Timeout (s). Default value is 20

# Number: 1 - 120

P139 = 20

Otros parámetros importantes:

# STUN Server

P76 = stun.voztovoice.org

# Config Server Path

P237 = IPServidorHTTP/gs/100

Una vez terminada la configuración del archivo, pasamos al punto 2 descargando la utilidad para la creación del archivo XML disponible solamente para el sistema operativo Windows. Una vez descomprimido el archivo, ejecutamos el programa GSXmlGenerator_3.5:
 

En Configuration Template seleccionamos el archivo que acabamos de crear y en Output Path la carpeta donde vamos a guardar el archivo XML generado.

En Secuential MAC Address ponemos un dirección MAC inventada de 12 digitos; lo importante es que los primeros 6 caracteres sean 000b82 que identifican de manera univoca la marca Grandstream; los últimos seis pueden terminar, por ejemplo, con el numero de extensión configurada en el archivo. Para terminar damos click en:

Se creará el archivo, en este caso, cfg000b82000100.xml Ahora copiamos el archivo en el servidor donde se configurará el servidor HTTP (carpeta /tmp). Abordando el punto 3, instalamos el servidor Web lighttpd (en Debian):

apt-get install lighttpd

luego modificamos la configuración para que se pueda acceder a la carpeta gs (que crearemos) solamente con usuario y contraseña:

nano /etc/lighttpd/lighttpd.conf

al final del archivo se añade:

server.modules += ( "mod_auth" )

auth.backend = "plain"

auth.backend.plain.userfile = "/home/lighttpdpassword"

auth.require = ( "/gs/" =>

(

"method" => "basic",

"realm" => "Password protected area",

"require" => "user=grandstream"

)

)

Con las primeras tres lineas se activa el modulo mod_auth, se indica que las credenciales se guardarán en texto plano y que el archivo que las contendrá será lighttpdpassword presente en la carpeta /home. Con el ultimo bloque se indica que al acceso a la carpeta gs estará restringido con usuario y contraseña. Se guardan los cambios y se reinicia el servidor web:

systemctl restart lighttpd

El paso a seguir es crear la carpeta /gs donde se guardarán los archivos de configuración de las distintas extensiones que se configurarán en los Softphone GS Wave.

mkdir -p /var/www/html/gs

se cambian los permisos de la carpeta creada:

chown -Rf www-data:www-data /var/www/html/

Ahora se puede descargar el Softphone GS WAVE y se realiza la primera prueba; se abre la aplicación y se entra en el menú Ajustes → Provisioning Settings → Download mode

se escoge la opción HTTP

Se continua con Ajustes → Provisioning Settings →Servidor de Configuración

donde se pone la IP del servidor Web

En el servidor Web se activa la captura sobre el puerto 80:

ngrep -t -W byline port 80

En el Softphone, menú Provisioning Settings se selecciona Start Provisioning y se confirma la ejecución de la operación; en el servidor aparecerá:

El Softphone envía una solicitud buscando el archivo cfg.xml sin indicar el MAC Address del celular ya que en el iPhone (no se si android es lo mismo) por temas de seguridad se mantiene privado. Es por eso que en lugar de tener un archivo por cada extensión, tendremos una carpeta por cada extensión. En nuestro caso, para la extensión 100, creamos la carpeta 100 y dentro de la carpeta copiamos el archivo XML anteriormente creado:

mkdir -p /var/www/html/gs/100

cp /tmp/cfg000b82000100.xml /var/www/html/gs/100/cfg.xml

Volvemos a la configuración del Softphone y cambiamos el parámetro Provisioning Settings →Servidor de Configuración con el valor:

IPServidorWeb/gs/100

seleccionamos nuevamente Start Provisioning y miramos la captura de paquetes en el servidor Web:

La respuesta final del servidor será: 401 Unaythorized esto porque para acceder a la carpeta gs se necesita utilizar usuario y contraseña que todavía no hemos creado. Si recuerdan el servidor web buscará el archivo con usuarios y contraseñas en la carpeta home y con nombre lighttpdpassword. Creamos el archivo:

nano /home/lighttpdpassword

un usuario y contraseña por linea separados por el signo dos puntos. Ejemplo:

grandstream:prueba123

guardamos los cambios y volvemos a la configuración del Softphone donde en el menú Ajustes → Provisioning Settings →HTTP/HTTPS username ponemos grandstream y en HTTP/HTTPS password ponemos prueba123

Seleccionamos nuevamente la opción Start Provisioning; El resultado:

La ruta del archivo solicitado será /gs/100/cfg.xml y como las credenciales serán correctas, las respuesta del servidor Web será 200 OK. Después de esa respuesta aparecerán todas las lineas de configuración presentes en el archivo XML que el servidor Web estará enviando al Softphone.

Si ahora, por ejemplo se quiere crear el archivo para la extensión 101:

mkdir -p /var/www/html/gs/101

se copia el archivo en la nueva carpeta:

cp /var/www/html/gs/100/cfg.xml /var/www/html/gs/101

se abre el archivo y se modifican los datos presentes relacionados con la extensión 100 con los datos de la extensión 101, para luego modificar en el menú del Softphone Ajustes → Provisioning Settings →Servidor de Configuración cambiando 100 por 101 y listo. Si queremos utilizar un usuario y contraseña distintos para cada Softphone, lo añadimos al archivo /home/lighttpdpassword

Por ahora es todo. Me comentan.

Vota el Articulo: 

No votes yet
Evalúa la calidad del articulo
Subscribe to Comments for "Provisionamiento remoto Softphone Grandstream GS Wave" Subscribe to VozToVoice - All comments