My CW calling.

jueves, 14 de julio de 2022

AllStarLink sobre Línea 4G/LTE

Luego de estar trabajando un buen tiempo con el sistema AllStarLink y estando muy satisfecho con las prestaciones que ofrece, me encuentro con el siguiente problema.

Como seguramente sabeis, para que un nodo de AllStarLink pueda registrarse en el servidor y pueda establecer enlaces con los demas nodos, se necesita que la red donde se encuentra instalado permita el paso de determinados protocolos de Internet y el tráfico hacia y desde determinados puertos, particularmente el puerto 4569. Esto no es un inconveniente cuando el nodo esta dentro de una red domiciliaria con un proveedor de Internet que haga llegar el servicio por un medio NO INALAMBRICO, es decir bien sea fibra óptica o hibrido fibra/cobre. En este caso el mayor reto podría ser la configuración del firewall del router de nuestro domicilio para direccionar el tráfico de forma apropiada y permitir el reenvío en los puertos con los protocolos necesarios. Pero qué pasa si queremos usar un servicio de Internet móvil del que ofrecen los prestadores de servicios de telefonía? Concretamente un servicio de datos 4G/LTE?. En este caso tenemos un problema.

El problema.

Los servicios de datos 4G/LTE presentan varios inconvenientes cuando queremos acceder desde internet a un servidor (cualquiera que este sea) que tengamos internamente en nuestra red. Uno de estos problemas es que lo que vemos como nuestra IP pública no es solo nuestra, sino que esta compartida por los usuarios pegados al enlace del servicio; es decir, nuestro dispositivo se encuentra un salto por detras de la IP pública anunciada, junto con muchos otros dispositovos de otros clientes conectados en una especie de concentrador de red. En este caso el trafico de entrada no es capaz de resolver a que dispositivo debe ser redirigido a menos que la conexión se haya iniciado desde adentro. Algunos dispositivos como por ejemplo las cámaras IP funcionan porque es la cámara la que inicia una conexión de streaming hacia UN SERVIDOR EXTERNO QUE ES PROPIEDAD DE UN TERCERO al cual se conecta la aplicación para ver el streaming y enviar los comandos a la cámara. Es decir que tienes que usar una especie de proxy porque no hay manera de que llegues directamente desde internet hasta tu cámara en este tipo de infraestructuras. Es por esto que dificilmente podemos poner en funcionamiento nuestro nodo conectado a través de un enlace de datos 4G/LTE.

 


La solución.

La forma de salirle al paso al inconveniente consiste en implementar un PROXY y una VPN. Lo anterior puede no resultar cómodo de hacer; pero funciona. Lo que sucederá, es que nuestro nodo se conectará al servidor PROXY usando la VPN y el servidor PROXY será el encargado de ayudarnos a registrar en la red AllStarLink y redirigirá todo el trafico de nuestro nodo de manera que podamos llegar a otros nodos y que a su vez los demas nodos puedan conectar con el nuestro.

Paso 1. El PROXY

El servidor PROXY consiste en otro nodo de ALLStarLink que debemos instalar en un lugar donde exista la posibilidad de un enlace de internet dedicado. En este caso resulta muy comodo usar una servicio de máquina virtual en la nube tal como el que ofrece Google Cloud, a menos que queramos un nodo completamente funcional para control de repetidora o en enlace de radio simplex. Para la instalación del PROXY seguiremos los mismos pasos que para cualquier nodo de AllStarLink (tendremos que obtener un nuevo número de nodo).

En nuestro nodo PROXY debemos completar las siguientes tareas de configuración:

En el archivo iax.conf debe añadir un bloque como el siguiente por cada nodo para el que vaya a servir de proxy.

[Aqui va el número del nodo que quiero proxyficar]
type=friend
host=dynamic
username=radio-proxy
secret=AquiVaLaClaveQueUsaraEnElNodoParaAccederAEsteProxy
auth=md5
context=radio-in
disallow=all
allow=g726aal2
transfer=no

 Añada las siguientes dos líneas en el archivo extensions.conf

[radio-in]
exten => _0N.,1,Rpt(${EXTEN:1}|F)
exten => _0N.,n,Hangup

Reemplace lo que tenga la sección [radio-secure] con lo siguiente:

[radio-secure]
exten=_20XX,1,Rpt,${EXTEN}
exten=_21XX,1,Rpt,${EXTEN}
exten=_22XX,1,Rpt,${EXTEN}
exten=_23XX,1,Rpt,${EXTEN}
exten=_24XX,1,Rpt,${EXTEN}
exten=_25XX,1,Rpt,${EXTEN}
exten=_26XX,1,Rpt,${EXTEN}
exten=_27XXX,1,Rpt,${EXTEN}
exten=_28XXX,1,Rpt,${EXTEN}
exten=_29XXX,1,Rpt,${EXTEN}
exten=_4XXXX,1,Rpt,${EXTEN}
exten=_5XXXX,1,Rpt,${EXTEN}

Añada las siguiente líneas al final de la seccion [allstar-sys]

exten => _9.,1,Rpt(${EXTEN:2}|X|${EXTEN:1:1})
exten => _9.,n,Hangup

Añada estas lineas al final del archivo rpt.conf

[proxy]
ipaddr=AquiVaLaIpPublicaDeEsteServidorQueHaraDeProxy

En este momento este nodo esta preparado para servir de proxy. Asegúrese de que este nodo tiene el archivo que le permite encontrar a los demas nodos y que debería estar en la siguiente ruta: 

/var/lib/asterisk/rpt_extnodes. 

El servicio updatenodelist deberá estar corriendo ya que es el que actualiza la lista del archivo rpt-extnodes.

Llegados a este punto ya tiene un nodo de AllStarLink que funcionará como PROXY. 

Paso 2. Nuestro Nodo en 4G/LTE

El paso a continuación consiste en realizar los siguientes ajustes en el nodo que estará en nuestra red detras del router 4G/LTE. Esto resulta muy interesante porque este nodo podría incluso estar en una zona retirada o de alta montaña funcionando como controlador de repetidor o de enlace simplex con la única condición de que al menos llegue hasta el lugar la señal del proveedor del servicio de datos 4G/LTE.

Agregue los siguientes dos bloque en su archivo iax.conf:

[radio-proxy]
type=user
deny=0.0.0.0/0.0.0.0
permit=<AquiVaLaDireccionIpPublicaDeSuServidorProxy>/255.255.255.255
context=radio-secure-proxy
disallow=all
allow=g726aal2
transfer=no

[radio-proxy-out]
type=peer
host=<AquiVaLaDireccionIpPublicaDeSuServidorProxy>
username=<AquiVaElNumeroDeEsteNodo>
secret=<aquiVaElPasswordQueUsaraEsteNodoParaConectarConElProxy>
auth=md5
disallow=all
allow=g726aal2
transfer=no

 En el archivo rpt.conf añada lo siguiente en el bloque [nodes]:

[nodes]
<deje las lineas que ya tiene este bloque y añada lo que hay a partir de la siguiente linea....>
_20XX = radio-proxy-out/0%s
_20XXX = radio-proxy-out/0%s
_21XX = radio-proxy-out/0%s
_21XXX = radio-proxy-out/0%s
_22XX = radio-proxy-out/0%s
_22XXX = radio-proxy-out/0%s
_23XX = radio-proxy-out/0%s
_23XXX = radio-proxy-out/0%s
_24XX = radio-proxy-out/0%s
_24XXX = radio-proxy-out/0%s
_25XX = radio-proxy-out/0%s
_25XXX = radio-proxy-out/0%s
_26XX = radio-proxy-out/0%s
_26XXX = radio-proxy-out/0%s
_27XXX = radio-proxy-out/0%s
_27XXXX = radio-proxy-out/0%s
_28XXX = radio-proxy-out/0%s
_28XXXX = radio-proxy-out/0%s
_29XXX = radio-proxy-out/0%s
_29XXXX = radio-proxy-out/0%s
_4XXXX = radio-proxy-out/0%s
_4XXXXX = radio-proxy-out/0%s
_5XXXX = radio-proxy-out/0%s
_5XXXXX = radio-proxy-out/0%s
; note the . wildcard doesn't work here in rpt.conf
;_2. = radio-proxy-out/0%s  don't work like extensions

Añada las siguientes líneas en el archivo extensions.conf:

[radio-secure-proxy]
exten => _0X.,1,Goto(allstar-sys|${EXTEN:1}|1)

Para finalizar por cada nodo que tenga en su sistema añada la siguiente línea en la sección [radio-secure-proxy]

            exten => <NumeroDelNodo>,1,rpt,<NumeroDelNodo>|X

Un último paso aqui es ingresar en su cuenta de AllStarLink en el menú de Portal ==> Server Settings, edite la información de su nodo y al final en la casilla que dice "Proxy IP", coloque la dirección IP pública de su proxy y salve la modifiación. Ya puede ir y reiniciar ambos nodos (el proxy y el nodo que tiene atras del servicio 4G) y verifique que aparecen registrados ambos en la red de AllStarLink.

Completados los pasos anteriores estaremos preparados para que nuestro nodo se conecte al sistema usando el proxy.

Paso 3. La VPN

La idea de la VPN es que podamos tener conectados en un enlace dedicado ambos nodos, el que hace de proxy y nuestro nodo detrás del servicio 4G/Lte.

Existen muchos servicios de VPN tanto gratuitos como de pago. En la comunidad de usuarios de AllStarLink he visto que usan ZeroTier. Personalmente estoy cómodo con OpenVPN que me ofrece hasta tres conexiones gratuitas. Cualquiera que sea el de su elección, los pasos son los mismos.

  • Darse de alta en el servicio de VPN.
  • Configurar un conector de VPN para cada máquina/nodo
  • Instalar el cliente de VPN en cada máquina/nodo
  • Desplegar la configuración del conector VPN correspondiente en cada máquina/nodo.
  • Verificar que ambas máquinas/nodo se puedan ver entre si. La forma mas simple de verificar es corriendo el comando ping en ambos nodos.

 El siguiente gráfico ilustra de manera general lo que se quiere lograr.


73s






jueves, 16 de septiembre de 2021

Enlazando AllStarLink con DMR

Como radioexperimentadores que somos, siempre queremos llevar al límite de las posibilidades todos nuestros sistemas.

Llevo ya algunas semanas usando el nodo de AllStarLink de forma satisfactoria, enlazando a otros nodos y haciendo uno que otro QSO cuando el trabajo me lo permite, además de tenerlo al aire a través de RF en el área metropolitana en la frecuencia de 434.750 Mhz.

Por otro lado, los ùltimos años y meses he visto como han ido ganando terreno los sistemas digitales en el àmbito de la radioafición y particularmente el DMR, con la promesa de ofrecer una comunicación más confiable y eficiente.

Habida cuenta de las divergentes opiniones que cada quien tiene al respecto, DMR es un campo vàlido de experimentación y cada vez más radioaficionados instalan sus hotspots y se enlazan en TGs alrededor del globo.

Me surgió entonces la inquietud de cómo enlazarme localmente al mundo digital de manera simple y sencilla, con los recursos disponibles, empleando el nodo AllStarLink que ya tengo en línea y así no atiborrar la repisa de gadgets; eventualmente es un gasto en un hotspot, que no tendré que hacer ;-). Estaba particularmete animado además porque otros colegas ya lo han hecho, en especial el colega EA8EE con cuyos nodos suelo estar enlazado para aprovechar de uno que otro QSO con el viejo continente en habla hispana.

Fué así que encontré el proyecto DVSwitch que consiste en una serie de herramientas de software libre que nos permite interconectar diferentes sistemas de radioaficionados y enrutar el tráfico entre ellos. A decir verdad un trabajo impresionante por parte de los miembros de este equipo. Me dí a la tarea de implementarlo. Me tomó alrededor de 3 horas tenerlo completamente operativo; mucho menos de lo que me tomó escribir este artículo.

En éste artículo quiero compartir los pasos que seguí para implementar un sistema que interconecta mi nodo de ASL con un talkgroup DMR en la red de Brandmeister, y ya que no hay mucha literatura en español al respecto talves pueda animar a alguien más.

 Prerequistos:

  1. Pasión por la radioexperimentación.
  2. Tener instalado y operativo un nodo de AllStarLink. (Yo uso Raspberry pi 3B, tengo un artículo anterior si se anima).
  3. Tener el ID de DMR y estar registrado en  Brandmeister Network.

Parte 1. Ajustar la configuración del nodo ASL.

Lo primero es hacer algunos ajustes de configuración en los archivos de AllStarLink.

1. Modifique el archivo rpt.conf y coloque las siguientes líneas antes de la sección de su nodo, justo despues de la linea de ; :

[9999]
rxchannel = USRP/127.0.0.1:34001:32001
duplex = 0
hangtime = 0
althangtime = 0
holdofftelem = 1
telemdefault = 0
telemdynamic = 0
linktolink = no
nounkeyct = 1
totime = 180000
idrecording = |ie
idtalkover = |ie 

La primera línea (9999) corresponde a un número de nodo privado que usted puede elegir; es un nodo interno que usará para enrutar el tráfico hacia y desde otros sistemas (DMR en este caso), coloque un número de 4 dígitos.

La segunda línea  especifica el driver del canal, el host y los puertos a donde habla y escucha.

La sexta línea es importante para evitar que la telemetría del nodo ASL se filtre a las salas del talkgroup conectado, toda vez que eso resulta molesto e innecesario en este tipo de enlaces; es necesario si no quieres que te pongan en listas negras.

Posteriormente añada la siguiente línea en el bloque  [nodes] inmediatemente despues de las de su nodo particular:

9999 = radio@127.0.0.1:4569/9999,NONE

2. Abra el archivo modules.conf y ubique la línea que hace referencia al módulo chan_usrp.so; si esta comentado descomentelo y asegurese que quede con el paràmetro load. Debería quedar así:

 load => chan_usrp.so                         ;GNU Radio interface USRP Channel Driver

3. Para finalizar en el archivo extensions.conf añada las siguientes líneas: En el bloque [general] añada la línea:

NODE1 = 9999

Y en el bloque [radio-secure] añada la línea:

exten => ${NODE1},1,rpt,${NODE1}

Llegados a este punto ya tenemos los ajustes necesarios en los archivos de configuración, puede reiniciar su nodo de ASL y debería poder conectar el nodo privado 9999 de la forma como lo hace con otros nodos.

Parte 2. Instalar y configurar DVSwitch.

 1. Si no los tiene ya, instale los repositorios de DvSwitch. A la fecha en que yo hice esta instalación emplee los siguiente comandos para hacer dicha instalación:

: wget http://dvswitch.org/buster
: chmod +x buster
: ./buster
: apt-get update -y

2. Instale ahora DVSwitch usando:

apt-get install dvswitch-server -y

o

apt-get install dvswitch

3. Cambiese al direcrorio /opt/MMDVM_Bridge y edite el archivo MMDVM_Bridge.ini para hacer los siguientes ajustes:

  • Bajo el bloque [general] cambie el valor por el que corresponda con su indicativo de llamada en el parámetro callsign y en el paràmetro id use su DMR ID añadiendo al final dos digitos; por ejemplo añada el número 10.
  • En el bloque [info] puede modificar la información con la suya propia.
  • En el bloque [DMR] cambie el parámetro Enable a 1.
  • En el bloque [DMR_Network] cambie el parámetro Enable a 1, y cambie el paràmetro Address colocando la IP o URL de su servidor DMR (yo estoy usando el servidor de la red de brandmeister 3108.repeater.net) ; verifique si su servidor requiere un password personalizado y cambielo de acuerdo a su caso.

En este punto usted puede reiniciar su nodo o ejecutar el comando  ./MMDVM_Bridge MMDVM_Bridge.ini; y si accede a su cuenta en https://brandmeister.network, podrá ver su hotspot activo.

Haciendo clic en el enlace de su hotspot usted accede a la información del mismo y allí encontrará un recuadro con el título Static Talkgroups; añada el número del TG de DMR al que quiere enlazar su nodo.

4. Volviendo a los ajustes en su nodo; cambiese a la carpeta /opt/Analog_Bridge y edite el archivo Analog_Bridge.ini para hacer los siguientes ajustes:

  • Bajo el bloque [General] cambie el valor del parámetro decoderFallBack a true.
  • En el bloque [AMBE_AUDIO] cambie el valor del paràmetro gatewayDMRId a su DMR ID, y el valor del parámetro repeaterID a su DMR ID añadiendo al final dos dígitos adicionales; esto se corresponde con su SSID (tenga cuidado de usar los mismos que usò en el paso 3; en mi caso yo uso el número 10). En el paràmetro txTg debe colocar el DMR TG que haya usado en la seccion Static Talkgroups de su hotspot en su consola de  https://brandmeister.network brandmeister.network.
  • NOTA: En el bloque [USRP] tenga en cuenta los paràmetros txPort y rxPort ya que estos son los puertos por los que fluyen las tramas de audio de ida y venida entre su nodo ASL y el TG de DMR y deben corresponderse con los establecidos en el paràmetro  rxchannel de su nodo, que vimos arriba en la parte 1.

5. Para finalizar esta parte y habiendo hecho los anteriores ajustes configure los servicios para que inicien el momento de arrancar el sistema con los siguientes comandos y reinicie el nodo:

systemctl enable analog_bridge
systemctl enable md380-emu
systemctl enable mmdvm_bridge

En éste punto tiene el sistema preparado para enlazar y enrutar tràfico entre su nodo y el TG de DMR que haya configurado. Simplemente enlace el nodo privado y listo.

Para mayor detalle puede encontrar ésta formula originalmente haciendo click en éste enlace.

 

Y nuevamente como una imágen vale más que mil palabras aquí les comparto un video clip del cacharreo!

73s