HTTPS-Tunneling über OpenVPN zum Abrufen von SPS-Daten (Speicherprogrammierbare Steuerung) mittels PyModBus

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Baron89
User
Beiträge: 18
Registriert: Mittwoch 16. Januar 2019, 16:56

Ich möchte von einer SPS-Steuerung Daten in meine lokale SQL-Datenbank schreiben. Dazu melde ich mich via OpenVPN am Firmennetz an, um auf die Datenbank zuzugreifen.
Dies möchte ich über ein Client/Server Skript mit Sockets realisieren (mit PyModBus z.B.).
Ich frage mich nun, wie ich das Routing konfigurieren muss für die TCP / IP-Kommunikation (Client Server / Connect Client-Traffic), um Echtzeitdaten vom Server über eine OpenVPN-Verbindung an meinen externen Client zu übertragen?
Was ist zu beachten? Besonders in Bezug auf Portweiterleitung und Hosting.
Muss die Firma dazu im Router/Firewall etwas freigeben oder reicht es, wenn ich bei meiner FritzBox eine statische IP-Adresse hinterlege und die Portweiterleitung (z.B. 443) aktiviere.
Kann mich jetzt von der Netzwerkkonfiguration nicht so ganz hineinversetzen in das ganze.
Prinzipiell habe ich über VPN Zugang zu der Datenbank, die über eine statische IP-Adresse (http-tunneling) verfügbar ist in jedem Browser; allerdings kann ich diese eben nicht pingen und lässt sich somit nicht verwenden.

Vielen Dank! :wink:
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Das ist kein Python-Problem.
Grundsätzlich solltest du die Fragen der IT-Abteilung deines Arbeitgebers stellen. In der Regel bedeutet "VPN" aber, dass auf deinem Gerät ein Netzwerkgerät angelegt wird, das sich so verhält, als wäre es im Zielnetzwerk. Das ist ja der Sinn dahinter. Also muss auch kein Port weitergeleitet werden, etc. Du verhälst dich so, als wärst du im Firmennetzwerk und fertig.
Baron89
User
Beiträge: 18
Registriert: Mittwoch 16. Januar 2019, 16:56

Hallo sparrow,

ja, das weiß ich ja!
Aber wie ich bereits geschrieben habe, ist das System im Webbrowser über eine statische IP erreichbar.
Diese ist allerdings nicht pingbar und ich weiß dementsprechend nicht, wie ich dann über ein Skript oder ähnliches
direkt darauf zugreifen kann!
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was hat denn das eine mit dem anderen zu tun? Wenn du da mit HTTP per Browser drauf zugreifen kannst, kannst du auch per Python per HTTP drauf zugreifen. Was das BRINGT steht auf einem anderen Blatt, Datenbanken sind ja nicht per HTTP erreichbar unter normalen Umstaenden.

Ping nutzt einfach nur ICMP, ob das die Firewall durchlaesst hat erstmal nichts mit der Funktionalitaet von Sockets zu tun.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich weiß nicht, ob ich die Rolle von Client und Server richtig verstanden habe. Dein Rechner ist der Client und fragt den Server im VPN ab?

Wenn Du eingeloggt bist, spielt Deine lokale statische IP-Adresse keine Rolle mehr, sondern Du bekommst immer eine neue IP-Addresse im Firmennetz.
Baron89
User
Beiträge: 18
Registriert: Mittwoch 16. Januar 2019, 16:56

Sirius3 hat geschrieben: Sonntag 2. Februar 2020, 13:46 Ich weiß nicht, ob ich die Rolle von Client und Server richtig verstanden habe. Dein Rechner ist der Client und fragt den Server im VPN ab?
Exakt!
Dann greife ich über den Webbrowser auf die externe SPS-Datenbank zu!
Ich will dies aber auf meine lokale SQL-Datenbank umleiten, da ich die Daten in Echtzeit abrufen möchte!
Wenn Du eingeloggt bist, spielt Deine lokale statische IP-Adresse keine Rolle mehr, sondern Du bekommst immer eine neue IP-Addresse im Firmennetz.
Ja, aber das ist doch das Problem!
Wie soll dann das Hosting stattfinden bzw. wie kann ich dann ein Skript schreiben, dass mir den Request/Response liefert?
Ich brauche dazu doch eine fixe IP sowie Port? Oder sehe ich das etwa falsch?

Wie macht ihr das so bzw. hattet ihr schon mal einen ähnlichen Fall dsbzgl.?,-)
Baron89
User
Beiträge: 18
Registriert: Mittwoch 16. Januar 2019, 16:56

__deets__ hat geschrieben: Sonntag 2. Februar 2020, 13:41 Was hat denn das eine mit dem anderen zu tun? Wenn du da mit HTTP per Browser drauf zugreifen kannst, kannst du auch per Python per HTTP drauf zugreifen. Was das BRINGT steht auf einem anderen Blatt, Datenbanken sind ja nicht per HTTP erreichbar unter normalen Umstaenden.

Ping nutzt einfach nur ICMP, ob das die Firewall durchlaesst hat erstmal nichts mit der Funktionalitaet von Sockets zu tun.
Doch! Ich habe ja schon eine SQL-Datenbank eingerichtet, die sich dann mit dem Enterprise System synchronisiert.
Allerdings kann ich dabei nichts in die Datenbank zurückschreiben.
Dies müsste ich aber bzgl. einer Aufgabe machen (Testfallerzeugung etc....).
Es gibt ja PyModBus - das Protokoll sollte genau das Richtige hierfür sein!
Allerdings benötige ich eben hierzu einen Host/Port.
Oder gibt es andere Möglichkeiten?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Kannst Du Dein Setup genauer beschreiben:
Wie ist die SPS angeschlossen? Wie kommunizierst Du damit? Was ist bei Dir der Server und was der Client?
Baron89
User
Beiträge: 18
Registriert: Mittwoch 16. Januar 2019, 16:56

Es gibt einen Enterprise SQL Server, der die Daten einer Schneider SPS bereitstellt und ich habe mir auch eine SQL-Datenbank eingerichtet, über die sich die Schematas synchronisieren lassen.
Dazu wird eine eigene Software bereitgestellt und darüberhinaus ist das System eben über ein Webinterface durch Authentifizierung via VPN-Tunnel erreichbar.
Ich möchte aber, dass die Realdaten in meine Datenbank geschrieben werden und ich diese auch modifizieren kann, da ich diverse Tests,Berichte, etc... erstellen möchte, was das Standardsystem eben nicht zulässt!
Deshalb der Umweg über ggf. das Modbus Protokoll.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das mag ja alles sein, nur hilft uns das 0 weiter. Wir koennen dir nicht verraten, ob du an die SPS per Modbus rankommst. Denn wenn die schon an einem System angebunden ist, dann ist die aller Wahrscheinlichkeit nicht mehrfach-client-faehig. Und selbst *wenn* sie mehrere Clients beherrschen wuerde, kennt hier doch keiner die Zugangsdaten zu der SPS, und ob die ueberhaupt erreichbar ist aus deinem VPN (ich persoenlich faende das fatal, wenn du von Zuhause mal eben der SPS irgendwelche Instruktionen ueberhelfen kannst). Und auch dein "Enterprise SQL Server" und was auch immer da drumrum gestrickt ist mit "eigene Software" kennt hier keiner.

Darum war der erste Kommentar schon der richtige: besprich das mit deinen Projektverantwortlichen, ob und was da ueberhaupt geht.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn es da schon einen "Enterprise SQL Server" gibt, was hindert Dich daran, dessen Daten mit Deiner privaten Datenbank zu synchronisieren?
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Oder die Realdaten vom dem vorhandenen Server lesen und was Du zusätzlich noch so brauchst in einer anderen, lokalen Datenbank speichern.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Baron89
User
Beiträge: 18
Registriert: Mittwoch 16. Januar 2019, 16:56

Sirius3 hat geschrieben: Sonntag 2. Februar 2020, 17:24 Wenn es da schon einen "Enterprise SQL Server" gibt, was hindert Dich daran, dessen Daten mit Deiner privaten Datenbank zu synchronisieren?
Wie bereits schon geschrieben, tue ich das ja bereits.
Das funktioniert ja auch!
Aber diese Software unterstützt eben nicht das modifizieren der Daten; nur das reine auslesen!
Ich kann sie nicht bearbeiten und zurückschreiben auf das System, weil das die Software leider nicht unterstüzt.
Wäre natürlich das einfachste, klar! Geht aber nicht!:D
Baron89
User
Beiträge: 18
Registriert: Mittwoch 16. Januar 2019, 16:56

__blackjack__ hat geschrieben: Sonntag 2. Februar 2020, 17:28 Oder die Realdaten vom dem vorhandenen Server lesen und was Du zusätzlich noch so brauchst in einer anderen, lokalen Datenbank speichern.
Wie bereits erwähnt, will/muss ich dazu Testfälle erzeugen und nicht nur Daten auslesen, sondern auch zurückschreiben!
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wie auch bereits erwaehnt kennt keiner hier dein System. Du scheinst zu glauben das Setup das du da hast waere in irgendeiner Form ueblich und allgemein bekannt. Wie oft soll man noch sagen, das es das nicht ist? Keiner hier kann wissen, wie deine irgendwie per HTTP erreichbare Datenbank beschrieben werden kann. Fang mal an weit auszuholen, was das alles ist, und wie das zusammen haengt, oder rede mit wem in deiner Firma.
Baron89
User
Beiträge: 18
Registriert: Mittwoch 16. Januar 2019, 16:56

Deshalb war ja meine Frage, ob jmd. schon mal was vergleichbares gemacht hat.
Also unabhängig vom Gesamtsystem jetzt.
Abstrakt meine ich damit:
Nutzen eines Skripts/Sockets wie PyModBus oder ähnliches zum auslesen von Daten einer SPS-Steuerung aus unterschiedlichen Netzwerken (via VPN).
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

VPN ist ja gerade dazu da, dass es keine unterschiedlichen Netzwerke sind.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Baron89: Welche unterschiedlichen Netzwerke? Du hast da ein VPN, das ist ja *ein* Netzwerk. Darum macht man ja VPNs — um Geräte die in verschiedenen Netzwerken stecken in *ein* Netzwerk zu bekommen.

So allgemein wird das sicher schon mal jemand gemacht haben, was Dir konkret aber nicht weiterhelfen wird.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
paddie
User
Beiträge: 101
Registriert: Donnerstag 11. Oktober 2018, 18:09

Für mich sieht das eher so aus, dass die SPS-Systeme(so wie es sein soll) vom eigentlichen Netz getrennt sind. In dem "Enterprise SQL Server" dürfen dann wahrscheinlich auch nur (so sollte es auch sein) ganz wenige Leute / Systeme reinschreiben...zu denen du scheinbar bis jetzt noch nicht gehörst ;-). Bevor du jetzt da versuchst irgendwie was zu "basteln" um diese Vorkehrungen zu umgehen würde ich, wie schon ein paar mal hier erwähnt, erstmal mit der IT/Technik/... reden ob das überhaupt so gewünscht ist. Ansonsten kann das ganz schön nach hinten losgehen.
Ich kenn mich jetzt nicht wirklich mit SPS und den genauen Abläufen aus, aber ich kann mir auch vorstellen, dass nur ganz bestimmte Systeme in die DB schreiben dürfen...und auf diesen Systeme auch vorher die Daten überprüft werden. Hier wäre es dann noch ...schlechter... wenn da "jeder" reinschreiben könnte..
Ja, aber das ist doch das Problem!
Wie soll dann das Hosting stattfinden bzw. wie kann ich dann ein Skript schreiben, dass mir den Request/Response liefert?
Ich brauche dazu doch eine fixe IP sowie Port? Oder sehe ich das etwa falsch?

Wie macht ihr das so bzw. hattet ihr schon mal einen ähnlichen Fall dsbzgl.?,-)
Irgendwie ist es wohl noch zu früh...und/oder 2 Kaffee sind einfach noch zu wenig...

Der "Enterprise SQL Server" hat im internen Netz eine feste IP über die er erreichbar ist...da du mit deinem externen Rechner per VPN am Firmennetz hängst, solltest du den Server über die interne IP oder auch den FQDN erreichen können... Ob dein Client jetzt eine statische oder dynamische IP hat ist da doch total egal.

Oder soll dann von intern auf die Daten auf DEINEM "externen" Rechner zugegriffen werden? DANN..wären wir wieder bei dem Hinweis weiter oben...Rede mit IT/Technik ;-), dass du eine statische IP bekommst ...

Gruß

Paddie
JB_HM
User
Beiträge: 1
Registriert: Montag 3. Februar 2020, 18:54

Hallo zusammen,

ich kenne das Problem von @Baron89. Denn ich habe genau das gleiche Problem.
Und zwar geht es tatsächlich um eine Modbus TCP Kommunikation. Der Modbus TCP Server ist in einem externen Netzwerk. Der Client PC wählt sich über VPN auf den Server PC ein.
Und nun geht es darum, dass man im Python Script ja nicht einfach die durch den VPN-Router vergebene virtuelle IP-Adresse ansprechen kann.

Würde mich schon auch interessieren ob man hier auf der Clientseite etwas programmieren kann. Klar, auf der Serverseite muss natürlich der Client bekannt sein und der Port geöffnet.

Beste Grüße
JB
Antworten