Realización de la detección de servicios
Importante
Esta es la documentación de Azure Sphere (heredado). Azure Sphere (heredado) se retira el 27 de septiembre de 2027 y los usuarios deben migrar a Azure Sphere (integrado) en este momento. Use el selector de versiones situado encima de la TOC para ver la documentación de Azure Sphere (integrado).
Las aplicaciones de alto nivel de Azure Sphere pueden realizar la detección de servicios mediante la detección de servicios con DNS (DNS-SD). Las aplicaciones pueden utilizar la detección de servicios para encontrar servicios de red y realizar la resolución de nombres de host para que puedan interactuar con el servicio a través del firewall de Azure Sphere. También se puede utilizar DNS multidifusión (mDNS) para realizar la detección punto a punto en una red local, lo que resulta especialmente útil cuando las direcciones IP y los nombres de host del punto de conexión de destino no se conocen en tiempo de diseño.
Las aplicaciones utilizan consultas de DNS-SD para recuperar registros de DNS de servidores DNS no locales o a través de un vínculo de multidifusión. Si el nombre que se está consultando está bajo el dominio de nivel superior (TLD) .local, la consulta es multidifusión en la red local por todas las interfaces de red habilitadas; de lo contrario, se realiza la detección de servicios de unidifusión. El ejemplo de detección de servicios demuestra cómo realizar dicha detección en Azure Sphere.
Nota:
El firewall de Azure Sphere impide a las aplicaciones comunicarse con servicios no autorizados. Sin embargo, permitir las conexiones salientes a los dominios de nivel superior .local en el manifiesto de aplicación puede aumentar el riesgo de seguridad de un dispositivo al permitir que una aplicación se conecte con servicios no autorizados que se anuncian en la red local. Las aplicaciones solo deberían permitir conexiones salientes a los dominios de nivel superior .local en entornos seguros que impiden que partes no autorizadas puedan anunciar los servicios. Para proporcionar protección adicional en este escenario, Azure Sphere requiere que los servicios que se detecten en la red local también residan en la subred local.
Inclusión de archivos de encabezado
Las aplicaciones que realizan la detección de servicios deben incluir el archivo de encabezado resolv:
#include <resolv.h>
Permitir una conexión de servicio
Antes de realizar una consulta DNS-SD, debe agregar el servicio a la funcionalidad AllowedConnections del manifiesto de aplicación. El firewall de Azure Sphere permitirá entonces que la aplicación se conecte a las instancias del servicio detectadas con las direcciones IP y los nombres de host asociados. Si se especifica un servicio TLD .local, el firewall solo permitirá las conexiones a los recursos detectados en la subred local.
Los siguientes tipos de nombres de servicio se admiten en la funcionalidad AllowedConnections:
- Nombre del servicio DNS local, por ejemplo, "_sample._tcp.local"
- Nombre del servicio DNS no local, como "_sampleinstance._tcp.dns-sd.org"
- Nombre de instancia de servicio local, como "_sampleinstance._tcp.hostname.local"
- Nombre de dominio, como "samplehost.contoso.com"
- Dirección IP
Este es un extracto de un manifiesto de aplicación que incluye un nombre de servicio que no es local.
"AllowedConnections": [ "_http._tcp.dns-sd.org" ]
Realización de una consulta DNS-SD
Para realizar una consulta DNS-SD, deberá consultar varios tipos de registros de DNS:
- Registros PTR que enumeran las instancias de un servicio DNS.
- Registros SRV y TXT que contienen los detalles de las instancias de servicio, como el nombre de host y el puerto.
- Registros A que contienen las direcciones IP de los nombres de host recuperados.
Antes de enviar la consulta, debe crearla e iniciarla y, después, agregar un mensaje de consulta que solicita el registro de DNS. Puede crear e inicializar una consulta DNS-SD al llamar a la función POSIX res_init(). Puede crear un mensaje para la consulta mediante una llamada a la función POSIX res_mkquery().
Envío de una consulta de DNS de unidifusión
Al realizar la detección de servicios de unidifusión, puede enviar la consulta DNS-SD y recuperar la respuesta mediante una llamada a la función POSIX res_send().
Envío de la consulta a través de un vínculo de multidifusión
Para enviar una consulta DNS-SD a través de un vínculo de multidifusión, la aplicación debe abrir un socket y enviar la solicitud a través del socket a la dirección IP de bucle invertido 127.0.0.1 (puerto de destino 53). Después de enviar la solicitud, se pueden devolver varias respuestas. La aplicación debe esperar y escuchar durante varios segundos para recopilar todas las respuestas. Esto se muestra en el ejemplo de detección de servicios.
Importante
Esta dirección IP de bucle invertido es una característica beta que se retirará y, a continuación, se reemplazará en futuras versiones. Se trata de un cambio importante para las aplicaciones que dependen de la dirección.
Conexiones permitidas para los hosts con varias direcciones IP
El firewall de Azure Sphere solo permite conexiones a una dirección IP por nombre de host. Si un host tiene varias direcciones IP, el firewall de Azure Sphere solo permite conexiones a una de ellas. Una aplicación puede utilizar curl para realizar solicitudes HTTPS a un host que tiene varias direcciones IP; curl intentará conectarse a cada dirección IP hasta que se encuentre la dirección permitida. Sin embargo, esto puede provocar un retraso mientras la aplicación busca la dirección permitida.