Eseguire l'individuazione del servizio
Le applicazioni di alto livello in Azure Sphere possono eseguire l'individuazione dei servizi tramite DNS Service Discovery (DNS-SD). Le applicazioni possono usare l'individuazione dei servizi per trovare servizi di rete ed eseguire la risoluzione dei nomi host in modo che possano interagire con il servizio tramite il firewall Azure Sphere. Multicast DNS (mDNS) può essere usato anche per eseguire l'individuazione peer-to-peer in una rete locale, il che è particolarmente utile quando gli indirizzi IP e i nomi host dell'endpoint di destinazione non sono noti in fase di progettazione.
Le applicazioni utilizzano query DNS-SD per recuperare record DNS da server DNS non locali o tramite un collegamento multicast. Se il nome oggetto della query si trova nel dominio di primo livello .local (TLD), la query è multicast nella rete locale tramite tutte le interfacce di rete abilitate; in caso contrario, viene eseguita l'individuazione del servizio unicast. L'esempio di individuazione dei servizi mostra come eseguire l'individuazione dei servizi in Azure Sphere.
Nota
Il firewall azure sphere impedisce alle applicazioni di comunicare con servizi non autorizzati. Tuttavia, consentire le connessioni in uscita ai TTLD locali nel manifesto dell'applicazione può aumentare il rischio per la sicurezza per un dispositivo consentendo a un'applicazione di connettersi a servizi non autorizzati annunciati nella rete locale. Le applicazioni devono consentire connessioni in uscita ai TTLD locali solo in ambienti protetti che impediscono a parti non autorizzate di fornire servizi pubblicitari. Per offrire una protezione aggiuntiva in questo scenario, Azure Sphere richiede che i servizi individuati nella rete locale si trovino anche nella subnet locale.
Includi file di intestazione
Le applicazioni che eseguono l'individuazione del servizio devono includere il file di intestazione di risolvi:
#include <resolv.h>
Consentire una connessione a un servizio
Prima di eseguire una query DNS-SD, è necessario aggiungere il servizio alla funzionalità AllowedConnections del manifesto dell'applicazione. Il firewall azure sphere consentirà quindi all'applicazione di connettersi alle istanze del servizio individuate usando i nomi host e gli indirizzi IP associati. Se viene specificato un servizio TLD .local , il firewall consentirà le connessioni solo alle risorse individuate nella subnet locale.
I tipi di nomi di servizio seguenti sono supportati nella funzionalità AllowedConnections:
- Nome del servizio DNS locale, ad esempio "_sample._tcp.local"
- Nome del servizio DNS non locale, ad esempio "_sampleinstance._tcp.dns-sd.org"
- Nome istanza del servizio locale, ad esempio "_sampleinstance._tcp.hostname.local"
- Nome di dominio, ad esempio "samplehost.contoso.com"
- Indirizzo IP
Ecco un estratto di un manifesto dell'applicazione che include un nome di servizio non locale.
"AllowedConnections": [ "_http._tcp.dns-sd.org" ]
Eseguire una query DNS-SD
Per eseguire una query DNS-SD, è necessario richiedere diversi tipi di record DNS:
- Record PTR che enumera le istanze di un servizio DNS.
- Record SRV e TXT che contengono i dettagli delle istanze del servizio, ad esempio il nome host e la porta.
- Record che contengono gli indirizzi IP dei nomi host recuperati.
Prima di inviare la query, è necessario crearla e inizializzarla e quindi aggiungere un messaggio di query che richiede il record DNS. È possibile creare e inizializzare una query DNS-SD chiamando la funzione POSIX res_init(). È possibile creare un messaggio per la query chiamando la funzione POSIX res_mkquery().
Inviare una query DNS unicast
Quando si esegue l'individuazione del servizio unicast, è possibile inviare la query DNS-SD e recuperare la risposta chiamando la funzione POSIX res_send().
Inviare la query su un collegamento multicast
Per inviare una query DNS-SD su un collegamento multicast, l'applicazione deve aprire un socket e inviare la richiesta tramite socket all'indirizzo IP di loopback 127.0.0.1 (porta di destinazione 53). Dopo l'invio della richiesta, potrebbero essere restituite più risposte. L'applicazione deve attendere alcuni secondi per raccogliere tutte le risposte. Questa operazione viene illustrata nell'esempio di individuazione dei servizi.
Importante
Questo indirizzo IP di loopback è una funzionalità beta che verrà ritirata e quindi sostituita nelle versioni future. Si tratterà di una modifica di rottura per le applicazioni che si basano sull'indirizzo.
Connessioni consentite per host con più indirizzi IP
Il firewall Azure Sphere consente le connessioni a un solo indirizzo IP per nome host. Se un host ha più indirizzi IP, il firewall Azure Sphere consente solo le connessioni a uno degli indirizzi. Un'applicazione può utilizzare curl per effettuare richieste HTTPS a un host che ha più indirizzi IP; curl tenterà di connettersi a ogni indirizzo IP fino a quando non viene trovato l'indirizzo consentito. Tuttavia, ciò potrebbe causare un ritardo mentre l'applicazione trova l'indirizzo consentito.