IoT Prototyp: Entwicklung einer IoT Tunnellösung für Azure und ThingWorx

14.08.2018

Im Rahmen meiner Bachelorarbeit habe ich Netzwerktunnellösungen von IoT Plattformen untersucht und selbst eine Tunnellösung entwickelt. Zu den untersuchten IoT Plattformen gehören Microsoft Azure, PTC ThingWorx und die Eurotech Everyware Cloud. Herausgekommen ist eine Client-Server-Anwendung in Java. Sie kann im Standalone-Modus und im Zusammenspiel mit bestehenden IoT Plattformen genutzt werden.

Wozu wird eine IoT Tunnellösung benötigt?

Dies ist eine Frage, die mir während meiner Bachelorarbeit sehr häufig gestellt wurde. Im Internet of Things werden vernetzte Dinge immer häufiger über IoT Plattformen angebunden. Dabei werden oftmals Telemetriedaten an die Plattform gesendet und es besteht evtl. die Möglichkeit, Nachrichten von der Plattform an das Ding zu senden. Ein direkter Zugriff auf ein vernetztes Gerät ist über das Internet hingegen zunächst nicht möglich. Dazu muss ein Netzwerktunnel aufgebaut werden. Beim Thema Netzwerktunnel denken viele vielleicht an VPN. VPNs sind jedoch vergleichsweise schwergewichtig und für den massenhaften Einsatz im Internet der Dinge eher ungeeignet.

Anforderungen an eine IoT Tunnellösung

Zur Analyse der IoT Plattformen und als Basis für meine eigene Entwicklung habe ich Anforderungen für eine IoT Tunnellösung ermittelt. Die Wichtigsten davon sind:

  • Firewallneutralität – der Netzwerktunnel muss ohne Firewall-Anpassungen funktionieren
  • Netzwerkperformance & Stabilität – der Tunnel muss eine ausreichende Performance bieten und die Verbindung muss ohne Abbrüche gehalten werden
  • API zur Integration – das Tunnelsystem muss über eine API zur Steuerung und Integration in bestehende IoT Plattformen verfügen

 

Aufbau der IoT Tunnellösung

 

Fachlicher Systemüberblick einer IoT Tunnellösung
Fachlicher Systemüberblick einer IoT Tunnellösung

 

Die Abbildung zeigt den groben Aufbau des Tunnelsystems. Das IoT-Gerät ist das Ziel, zu dem eine Tunnelverbindung hergestellt werden soll. Im gleichen Netzwerk wird der Tunnel-Listener installiert. Er baut einen Websocket-Tunnel mit dem Tunnel-Server auf. In einem anderen Netzwerk befindet sich der Tunnel-Client, welcher ebenfalls einen Websocket-Tunnel mit dem Tunnel-Server aufbaut. Die Tunnelverbindung ist in der Abbildung blau markiert. Der Tunnel-Client kann nun eine TCP-Verbindung mit dem IoT Gerät aufbauen. Diese kann z.B. eine Datenbankverbindung, ein SSH-Tunnel oder eine HTTP-Abfrage sein. Die IoT Plattform kann mit dem Tunnel-Server kommunizieren und so festlegen, zu welchem IoT Gerät welche Verbindung aufgebaut werden soll.

Websockets als Tunnelprotokoll
Für die Entscheidung das Websocket-Protokoll als Transport für den Tunnel zu benutzen sprechen mehrere Faktoren. Websockets benutzen die gleichen Ports wie HTTP und müssen deshalb nicht extra in den Firewalleinstellungen berücksichtigt werden. Im Gegensatz zu HTTP kann damit außerdem bidirektional kommuniziert werden. Ein Nachteil ist, dass Proxy-Server immer noch eine eher schlechte Unterstützung für Websocket-Verbindungen bieten, was bei falscher Konfiguration dazu führt, dass keine Verbindung hergestellt werden kann.
Eine der größten Herausforderungen bestand in der Implementierung eines Protokolls für den Tunnel.
Es galt eine Menge Fragen zu klären, angefangen bei „Wie übertrage ich TCP-Daten über eine Websocket-Verbindung?“ über „Wie identifiziere ich eine Tunnel-Verbindung?“, oder „Wie koordiniere ich den Auf- und Abbau einer Verbindung?“ bis hin zu „Was passiert eigentlich, wenn für einen Tunnel mehrere TCP-Verbindungen existieren?“.
Die letzte Frage hat sich mir erst beantwortet, als ich beim Tunneln einer Website auf einmal ein und das gleiche Bild an allen möglichen Stellen angezeigt bekommen habe. Der Browser hatte mehrere HTTP/TCP-Verbindungen geöffnet, meine Implementierung hatte jedoch nur mit einer gerechnet. Dadurch konnten die TCP-Segmente nicht mehr richtig zugeordnet werden und auf der Website erschien überall das gleiche Bild.
Die Lösung bestand darin pro TCP-Verbindung eine Websocket-Verbindung zu erstellen, wodurch jedoch der Verbindungsaufbau erheblich komplexer wurde.

Integration von Tunnelsystemen in eine IoT Plattform
Um die Integrierbarkeit zu beweisen, habe ich die Tunnellösung beispielhaft mit der Plattform Thingworx und mit Microsoft Azure integriert. Dazu wurden vorher sowohl im Tunnel-Listener und im Tunnel-Client Schnittstellen definiert, welche dazu implementiert werden mussten.
Auffällig war hierbei, dass sich die Zeit zum Verbindungsaufbau zwischen den IoT Plattformen stark unterschied. Die Verzögerung hing mit den jeweils verwendeten Protokollen, welches die Plattformen zur Gerätekommunikation nutzen, zusammen.

Fazit: Netzwerktunnel für IoT Geräte – auch ohne VPN

In meiner Bachelorarbeit habe ich gezeigt, wie IoT Geräte Netzwerktunnel aufbauen können, ohne ein VPN-Netzwerk aufbauen zu müssen. In einer prototypischen Umsetzung konnte außerdem die Integration mit den IoT Plattformen Microsoft Azure und PTC Thingworx bewiesen werden.
Ein Themenfeld, das in meiner Bachelorarbeit nicht betrachtet wurde, ist der Sicherheitsaspekt, welcher für einen produktiven Einsatz mit vernetzen Geräten kritisch ist.

 

Mehr zur technischen Umsetzung von IoT Lösungen erfahren?

 

Zurück zur Übersicht

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*Pflichtfelder

*