Datenbrücke zwischen zwei RasPis über das Internet

OP #7455283
Lesenswert?

Hallo!

Ich möchte von einem Raspberry Pi auf ein anderes GNSS-RTK-Daten übertragen. Diese werden im Sekundentakt generiert und sollten ziemlich zeitnah am anderen Pi ankommen.

Kurz zusammengefasst also: es sollte möglich sein, beliebige Bytes relativ schnell und zuverlässig von einem Pi auf ein anderes bekommen.

Das ganze sollte in bestehenden C++ Code eingefügt werden können.

Was wäre eurer Meinung nach der einfachste Weg? Vor allem ohne Firewallregeln, VPN usw.? Dachte schon an irgendwas mit Telegram oder matrix.org… Ginge das?

Danke im Voraus!

elpat

Gast #7455286
Lesenswert?

Da bleibt ja eigentlich nur noch ein ganz normaler TCP Socket oder UDP.

UDP ist viel einfacher zu programmieren, wenn die Datenpakete klein (max.1400 Bytes) sind und ab und zu mal ein Paket verloren gehen darf.

Aber bedenke, das die Kommunikation ohne VPN (bzw. anderer Verschlüsselung) leicht abgehört und manipuliert werden kann.

Einer muss die IP Adresse des anderen kennen, um die Verbindung aufbauen zu können. Wenn diese sich häufig ändert, kannst du Dienste wie Dyndns nutzen. AVM hat ebenfalls so etwas für Nutzer von deren Router.

Falls du IP v4 nutzt musst du im Router ein Port-Forwarding einrichten, damit dein interner Rechner von außen erreichbar wird.

#7455297
Lesenswert?

Kilo S. schrieb:

In dem du einen zentralen Server im Internet einrichtest

Oder mietest. Bei AWS kostet ein MQTT-Server in der benötigten Größenordnung ~0,50€ pro Monat. Im ersten Jahr vmtl. komplett kostenlos, müsste im Startup-Kontingent liegen.

Wenn du bei MQTT bleibst und keine anderen AWS-Dienste dazuklickst, bist du damit auch nicht bei Amazon gefangen, einen MQTT-Server kriegt man auch anderswo oder kann ihn ganz einfach selber betreiben.

(Firma: Q3) #7455428
Lesenswert?

Die beiden Raspis befinden sich ja jeweils in einem LAN, oder?

Dann verbinde doch die beiden zugehörigen Internet-Router (Fritzbox?) per VPN miteinander! Dadurch wird die IP der beiden Raspis für den jeweils anderen direkt erreichbar ...

Achtung! Die beiden Netzadressen müssen unterschiedlich sein! Auf beiden Seiten z.B. 192.168.178.x (typisch Fritz) geht nicht!

Was ginge wäre z.B. 192.168.178.x und 192.168.179.x ....

#7455431
Lesenswert?

Frank E. schrieb:

Dann verbinde doch die beiden zugehörigen Internet-Router (Fritzbox?) per VPN miteinander!

Wäre die einfachste Lösung, aber:

Pat schrieb:

ohne Firewallregeln, VPN usw.

Und dann bleibt halt nur noch ein externer Server, an den sich beide verbinden...

Aber auch den Weg über VPN verbaut er sich nicht, wenn er einen MQTT-Client in seinen C++ - Code integriert. Dann läuft halt auf einem der Raspis noch ein mosquitto mit.

#7455438
Lesenswert?

Installiere auf den Nodes Tailscale. Tailscale erstellt ein VPN zwischen allen Nodes. So sind sie alle über eine private statische IP Adresse untereinander erreichbar. Der Vorteil von Tailscale ist, dass der Tunnel auch über ein NAT aufgebaut werden kann. Der Client ist für Linux, Win, Mac, IOS, Android erhältlich. Gratis bis 100 Devices. Ein neuer Node ist in 3 Minuten provisioniert.

(Firma: Q3) #7455465
Lesenswert?

Kommt darauf an, was du unter "zeitnah" verstehst ...

Die Info-Quelle könnte ihre Infos in eine (beim Provider angelegte, übers Web erreichbare) MySQL-DB ablegen.

Der "empfangende" Raspi könnte die gleiche DB einfach regelmäßig pollen (z.B im 10s-Takt) und die noch nicht als gelesen markierten Datensätze auslesen und/oder evtl. danach sogar einfach löschen ...

Eine weitere Alternative: Ein Telegram-Bot! Sowohl das Senden als auch das Auslesen der letzten Meldung sind per HTTP-Request recht einfach. Dann benötigst du keine eigene Infrastruktur.

OP #7455781
Lesenswert?

Hallo!

Danke für all eure Tipps!

Am spannendsten klingt für mich Tailscale und die öffentlichen MQTT-Server. Mal sehen, was es letztendlich wird.

Das Internet für die GNSS Geräte kommt meist von irgendeinem Smartphone-Hotspot oder Webcube oder was auch immer, deshalb scheiden alle Fritzbox&Co-Lösungen leider aus.

Danke nochmals und schöne Grüße, elpat

#7464787
Lesenswert?

Pat schrieb:

Dachte schon an irgendwas mit Telegram oder matrix.org… Ginge das?

Witzigerweise ist diese Idee nicht mal die schlechteste. Kommt natürlich auf die Menge der Daten und die geforderte Latenz an. Und natürlich, ob du einen Anbieter wie Telegram in deinem Datenkanal eingebunden haben möchtest.

Aber grundsätzlich ist die Telegram-API offen und gut dokumentiert. Du kannst dir zwei Bots erstellen, einen auf Pi 1 und den anderen auf Pi 2 nutzen und die Bots sich gegenseitig Nachrichten schreiben lassen. Dabei kommst du ohne VPN oder offene Ports aus, brauchst keinen öffentlich erreichbaren Host und brauchst keine Gateway-Applikation auf diesem Host. Dafür hast du aber noch einen Dritten mit im Boot. Musst du wissen ob das OK für deine Anwendung ist.

In Python sind das jeweils 5 Zeilen Code oder so. In C++ vermutlich etwas mehr, aber auch machbar. Die API läuft über Web-Requests, d.h. jede Sprache die dich Requests absetzen lässt ist geeignet.

Ich hab hier einen Raspi mit Webcam in Betrieb der mir regelmäßig Fotos schießt und mir täglich eine Status-Nachricht per Telegram aufs Handy schickt (Anzahl der neuen Fotos, Speicherauslastung, Uptime usw.)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren