Freigeben über


Ausführen der Dienstermittlung

Wichtig

Dies ist die Dokumentation zu Azure Sphere (Legacy). Azure Sphere (Legacy) wird am 27. September 2027 eingestellt, und Benutzer müssen bis zu diesem Zeitpunkt zu Azure Sphere (integriert) migrieren. Verwenden Sie die Versionsauswahl oberhalb des Inhaltsverzeichniss, um die Dokumentation zu Azure Sphere (Integriert) anzuzeigen.

Allgemeine Anwendungen in Azure Sphere können unter Verwendung der DNS-Dienstermittlung (DNS-SD) eine Dienstermittlung ausführen. Anwendungen können die Dienstermittlung nutzen, um Netzwerkdienste zu finden und eine Hostnamenauflösung durchzuführen, damit sie mit dem Dienst über die Azure Sphere-Firewall interagieren können. Multicast DNS (mDNS) kann auch verwendet werden, um Peer-to-Peer-Ermittlung in einem lokalen Netzwerk durchzuführen. Dies ist insbesondere dann nützlich, wenn die IP-Adressen und Hostnamen des Zielendpunkts zur Entwurfszeit noch nicht bekannt sind.

Anwendungen verwenden DNS-SD-Abfragen, um DNS-Einträge von nicht-lokalen DNS-Servern oder über eine Multicastverbindung abzurufen. Wenn sich der abgefragte Name unter der Top-Level-Domain (TLD) .local befindet, wird die Abfrage im lokalen Netzwerk über alle aktivierten Netzwerkschnittstellen durchgeführt; andernfalls wird die Ermittlung vom Unicastdienst durchgeführt. Das Dienstermittlungsbeispiel zeigt, wie die Dienstermittlung unter Azure Sphere durchgeführt wird.

Hinweis

Die Azure Sphere-Firewall verhindert, dass Anwendungen mit nicht autorisierten Diensten kommunizieren können. Allerdings kann das Zulassen von ausgehenden Verbindungen mit TLDs vom Typ .local im Anwendungsmanifest das Sicherheitsrisiko für ein Gerät erhöhen, indem einer Anwendung erlaubt wird, eine Verbindung mit nicht autorisierten Diensten herzustellen, die im lokalen Netzwerk angekündigt werden. Anwendungen sollten nur ausgehende Verbindungen mit TLDs vom Typ .local in gesicherten Umgebungen zulassen, die Unbefugte daran hindern, Dienste anzukündigen. Um in diesem Szenario zusätzlichen Schutz zu bieten, verlangt Azure Sphere, dass Dienste, die im lokalen Netzwerk ermittelt werden, auch im lokalen Subnetz vorhanden sind.

Einschließen von Headerdateien

Anwendungen, die eine Dienstermittlung ausführen, müssen die Headerdatei „resolv“ einschließen:

 #include <resolv.h>

Zulassen einer Dienstverbindung

Vor dem Ausführen einer DNS-SD-Abfrage muss der Dienst der Funktion „AllowedConnections“ des Anwendungsmanifests hinzugefügt werden. Daraufhin lässt die Azure Sphere-Firewall zu, dass die Anwendung unter Verwendung der zugeordneten Hostnamen und IP-Adressen eine Verbindung mit den ermittelten Dienstinstanzen herstellt. Bei Angabe TLD-Diensts vom Typ .local lässt die Firewall nur Verbindungen mit ermittelten Ressourcen im lokalen Subnetz zu.

In der Funktion „AllowedConnections“ werden folgende Arten von Dienstnamen unterstützt:

  • Lokaler DNS-Dienstname, z.B. „_sample._tcp.local“
  • Nicht lokaler DNS-Dienstname, z.B. „_sampleinstance._tcp.dns-sd.org“
  • Name der lokalen Dienstinstanz, z. B. "_sampleinstance._tcp.hostname.local"
  • Domänenname, z.B. „samplehost.contoso.com“
  • IP-Adresse

Hier sehen Sie einen Auszug aus einem Anwendungsmanifest mit einem nicht lokalen Dienstnamen:

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

Ausführen einer DNS-SD-Abfrage

Wenn Sie eine DNS-SD-Abfrage ausführen möchten, müssen Sie mehrere Arten von DNS-Einträgen anfordern:

  • PTR-Einträge, die Instanzen eines DNS-Diensts aufzählen.
  • SRV- und TXT-Einträge, die Dienstinstanzdetails wie Hostname und Port enthalten.
  • A-Einträge, die die IP-Adressen der abgerufenen Hostnamen enthalten.

Vor dem Senden einer Abfrage müssen Sie diese erstellen und initialisieren und ihr eine Abfragenachricht hinzufügen, die den DNS-Eintrag anfordert. Zum Erstellen und Initialisieren einer DNS-SD-Abfrage können Sie die POSIX-Funktion „res_init()“ aufrufen. Zum Erstellen einer Nachricht für die Abfrage können Sie die POSIX-Funktion „res_mkquery()“ aufrufen.

Senden einer DNS-Unicastabfrage

Bei einer Unicast-Dienstermittlung können Sie die POSIX-Funktion „res_send()“ verwenden, um die DNS-SD-Abfrage zu senden und die Antwort abzurufen.

Wenn Sie eine DNS-SD-Abfrage über eine Multicastverbindung senden möchten, muss die Anwendung einen Socket öffnen und die Anforderung über den Socket an die Loopback-IP-Adresse 127.0.0.1 (Zielport 53) senden. Nachdem die Anforderung gesendet wurde, können mehrere Antworten zurückgegeben werden. Die Anwendung sollte warten und mehrere Sekunden lang lauschen, um alle Antworten zu erfassen. Dies wird im Dienstermittlungsbeispiel veranschaulicht.

Wichtig

Diese Loopback-IP-Adresse ist ein Beta-Feature, das eingestellt und dann in zukünftigen Versionen ersetzt wird. Dies ist dann ein Breaking Change für Anwendungen, die auf die Adresse angewiesen sind.

Zulässige Verbindungen für Hosts mit mehreren IP-Adressen

Die Azure Sphere-Firewall lässt pro Hostname nur Verbindungen mit einer einzelnen IP-Adresse zu. Verfügt ein Host über mehrere IP-Adressen, lässt die Azure Sphere-Firewall nur Verbindungen mit einer der Adressen zu. Eine Anwendung kann curl verwenden, um HTTPS-Anforderungen an einen Host mit mehreren IP-Adressen zu richten. curl versucht in diesem Fall, eine Verbindung mit den einzelnen IP-Adressen herzustellen, bis die zulässige Adresse gefunden wurde. Dies kann jedoch zu Verzögerungen führen, während die Anwendung nach der zulässigen Adresse sucht.