Durchführen der Dienstermittlung

Allgemeine Anwendungen in Azure Sphere können die Dienstermittlung mithilfe der DNS-Dienstermittlung (DNS-SD) durchführen. Anwendungen können die Dienstermittlung verwenden, um Netzwerkdienste zu finden und hostnamensauflösung durchzuführen, damit sie über die Azure Sphere-Firewall mit dem Dienst interagieren können. Multicast-DNS (mDNS) kann auch für die Peer-to-Peer-Ermittlung in einem lokalen Netzwerk verwendet werden. Dies ist besonders nützlich, wenn die IP-Adressen und Hostnamen des Zielendpunkts zur Entwurfszeit 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 .local-Domäne der obersten Ebene (TLD) befindet, erfolgt die Abfrage im lokalen Netzwerk über alle aktivierten Netzwerkschnittstellen per Multicast. Andernfalls wird die Unicastdienstermittlung ausgeführt. Im Beispiel für die Dienstermittlung wird veranschaulicht, wie die Dienstermittlung in Azure Sphere ausgeführt wird.

Hinweis

Die Azure Sphere-Firewall verhindert, dass Anwendungen mit nicht autorisierten Diensten kommunizieren. Das Zulassen ausgehender Verbindungen mit LOKALEN TLDs im Anwendungsmanifest kann jedoch das Sicherheitsrisiko für ein Gerät erhöhen, da eine Anwendung eine Verbindung mit nicht autorisierten Diensten herstellen kann, die im lokalen Netzwerk angekündigt werden. Anwendungen sollten nur ausgehende Verbindungen mit LOKALEN TLDs in geschützten Umgebungen zulassen, die verhindern, dass nicht autorisierte Parteien Dienste ankündigen. Um in diesem Szenario zusätzlichen Schutz zu bieten, erfordert Azure Sphere, dass sich dienste, die im lokalen Netzwerk ermittelt werden, auch im lokalen Subnetz befinden.

Headerdateien einschließen

Anwendungen, die die Dienstermittlung ausführen, müssen die Auflösungsheaderdatei enthalten:

 #include <resolv.h>

Zulassen einer Dienstverbindung

Bevor Sie eine DNS-SD-Abfrage ausführen, müssen Sie den Dienst der AllowedConnections-Funktion des Anwendungsmanifests hinzufügen. Die Azure Sphere-Firewall ermöglicht es der Anwendung dann, mithilfe der zugehörigen Hostnamen und IP-Adressen eine Verbindung mit den ermittelten Dienstinstanzen herzustellen. Wenn ein LOKALER TLD-Dienst angegeben wird, lässt die Firewall nur Verbindungen mit ermittelten Ressourcen im lokalen Subnetz zu.

Die folgenden Arten von Dienstnamen werden in der AllowedConnections-Funktion unterstützt:

  • Name des lokalen DNS-Diensts, z. B. "_sample._tcp.local"
  • Nicht lokaler DNS-Dienstname, z. B. "_sampleinstance._tcp.dns-sd.org"
  • Name des lokalen Diensts instance, z. B. "_sampleinstance._tcp.hostname.local"
  • Domänenname, z. B. "samplehost.contoso.com"
  • IP-Adresse

Hier ist ein Auszug aus einem Anwendungsmanifest, das einen nicht lokalen Dienstnamen enthält.

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

Ausführen einer DNS-SD-Abfrage

Zum Ausführen einer DNS-SD-Abfrage müssen Sie mehrere Arten von DNS-Einträgen anfordern:

  • PTR-Einträge , die Instanzen eines DNS-Diensts auflisten.
  • SRV- und TXT-Einträge, die Details der Dienstinstanzen enthalten, z. B. Hostname und Port.
  • Ein -Datensatz, der die IP-Adressen der abgerufenen Hostnamen enthält.

Bevor Sie die Abfrage senden, müssen Sie sie erstellen und initialisieren und dann eine Abfragemeldung hinzufügen, die den DNS-Eintrag anfordert. Sie können eine DNS-SD-Abfrage erstellen und initialisieren, indem Sie die POSIX-Funktion res_init() aufrufen. Sie können eine Nachricht für die Abfrage erstellen, indem Sie die POSIX-Funktion res_mkquery() aufrufen.

Senden einer Unicast-DNS-Abfrage

Bei der Unicastdienstermittlung können Sie die DNS-SD-Abfrage senden und die Antwort abrufen, indem Sie die POSIX-Funktion res_send() aufrufen.

Um eine DNS-SD-Abfrage über eine Multicastverbindung zu senden, 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 mehrere Sekunden warten und lauschen, um alle Antworten zu sammeln. Dies wird im Beispiel für die Dienstermittlung veranschaulicht.

Wichtig

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

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

Die Azure Sphere-Firewall lässt nur Verbindungen mit einer IP-Adresse pro Hostnamen zu. Wenn ein Host über mehrere IP-Adressen verfügt, 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 senden. curl versucht, eine Verbindung mit jeder IP-Adresse herzustellen, bis die zulässige Adresse gefunden wird. Dies kann jedoch zu einer Verzögerung führen, während die Anwendung die zulässige Adresse findet.