Delen via


Servicedetectie uitvoeren

Toepassingen op hoog niveau in Azure Sphere kunnen servicedetectie uitvoeren met behulp van DNS-servicedetectie (DNS-SD). Toepassingen kunnen servicedetectie gebruiken om netwerkservices te vinden en hostnaamomzetting uit te voeren, zodat ze met de service kunnen communiceren via de Azure Sphere-firewall. Multicast DNS (mDNS) kan ook worden gebruikt om peer-to-peer-detectie uit te voeren op een lokaal netwerk, wat met name handig is wanneer de IP-adressen en hostnamen van het doeleindpunt niet bekend zijn tijdens het ontwerp.

Toepassingen gebruiken DNS-SD-query's om DNS-records op te halen van niet-lokale DNS-servers of via een multicast-koppeling. Als de naam die wordt opgevraagd zich onder het .local top-level domain (TLD) bevindt, is de query multicast op het lokale netwerk via alle ingeschakelde netwerkinterfaces; anders wordt de unicast-servicedetectie uitgevoerd. Het voorbeeld van servicedetectie laat zien hoe u servicedetectie uitvoert in Azure Sphere.

Opmerking

De Azure Sphere-firewall voorkomt dat toepassingen communiceren met niet-geautoriseerde services. Het toestaan van uitgaande verbindingen met .local TLD's in het toepassingsmanifest kan echter het beveiligingsrisico voor een apparaat verhogen doordat een toepassing verbinding kan maken met niet-geautoriseerde services die op het lokale netwerk worden geadverteerd. Toepassingen mogen alleen uitgaande verbindingen met .local TLD's toestaan in beveiligde omgevingen die voorkomen dat onbevoegde partijen services adverteren. Om in dit scenario extra beveiliging te bieden, vereist Azure Sphere dat services die op het lokale netwerk worden gedetecteerd, zich ook op het lokale subnet bevinden.

Headerbestanden opnemen

Toepassingen die servicedetectie uitvoeren, moeten het headerbestand voor omzetten bevatten:

 #include <resolv.h>

Een serviceverbinding toestaan

Voordat u een DNS-SD-query uitvoert, moet u de service toevoegen aan de mogelijkheid AllowedConnections van het toepassingsmanifest. Met de Azure Sphere-firewall kan de toepassing vervolgens verbinding maken met de gedetecteerde service-exemplaren met behulp van de bijbehorende hostnamen en IP-adressen. Als een .local TLD-service is opgegeven, staat de firewall alleen verbindingen toe met gedetecteerde resources in het lokale subnet.

De volgende typen servicenamen worden ondersteund in de mogelijkheid AllowedConnections:

  • Lokale DNS-servicenaam, zoals '_sample._tcp.local'
  • Niet-lokale DNS-servicenaam, zoals '_sampleinstance._tcp.dns-sd.org'
  • Naam van lokaal service-exemplaar, zoals '_sampleinstance._tcp.hostname.local'
  • Domeinnaam, zoals 'samplehost.contoso.com'
  • IP-adres

Hier volgt een fragment uit een toepassingsmanifest met een niet-lokale servicenaam.

"AllowedConnections": [ "_http._tcp.dns-sd.org" ]

Een DNS-SD-query uitvoeren

Als u een DNS-SD-query wilt uitvoeren, moet u verschillende typen DNS-records aanvragen:

  • PTR-records die exemplaren van een DNS-service opsommen.
  • SRV - en TXT-records die details van de service-exemplaren bevatten, zoals hostnaam en poort.
  • Een record met de IP-adressen van de opgehaalde hostnamen.

Voordat u de query verzendt, moet u deze maken en initialiseren en vervolgens een querybericht toevoegen waarmee de DNS-record wordt aangevraagd. U kunt een DNS-SD-query maken en initialiseren door de functie POSIX aan te roepen res_init(). U kunt een bericht voor de query maken door de functie POSIX aan te roepen res_mkquery().

Een unicast-DNS-query verzenden

Wanneer u unicast-servicedetectie uitvoert, kunt u de DNS-SD-query verzenden en het antwoord ophalen door de FUNCTIE POSIX aan te roepen res_send().

Als u een DNS-SD-query wilt verzenden via een multicastkoppeling, moet de toepassing een socket openen en de aanvraag via de socket verzenden naar het loopback-IP-adres 127.0.0.1 (doelpoort 53). Nadat de aanvraag is verzonden, kunnen meerdere antwoorden worden geretourneerd. De toepassing moet enkele seconden wachten en luisteren om alle antwoorden te verzamelen. Dit wordt gedemonstreerd in het servicedetectievoorbeeld.

Belangrijk

Dit loopback-IP-adres is een bètafunctie die in toekomstige releases buiten gebruik wordt gesteld en vervolgens wordt vervangen. Dit is een belangrijke wijziging voor toepassingen die afhankelijk zijn van het adres.

Toegestane verbindingen voor hosts met meerdere IP-adressen

De Azure Sphere-firewall staat slechts verbindingen met één IP-adres per hostnaam toe. Als een host meerdere IP-adressen heeft, staat de Azure Sphere-firewall alleen verbindingen met een van de adressen toe. Een toepassing kan curl gebruiken om HTTPS-aanvragen te verzenden naar een host met meerdere IP-adressen; curl probeert verbinding te maken met elk IP-adres totdat het toegestane adres is gevonden. Dit kan echter een vertraging veroorzaken terwijl de toepassing het toegestane adres vindt.