Wie kann ich eine statische IP-Adresse auf meinem IoT-Gerät festlegen und bei Bedarf automatisch in einem Netzwerk arbeiten?

1161
Melomaniac

Ich baue ein Heim-IoT-Gerät, und ich möchte dieses Gerät an alle Personen versenden können, die zuvor eine statische IP-Adresse festgelegt haben, und alles, was sie tun müssen, ist, eine Verbindung zum Internet herzustellen und gut zu gehen. Ich werde lokal einen Server betreiben, um jeden Roboter zu überwachen, also dachte ich, ich würde für jedes RPi eine statische IP-Adresse festlegen. Sobald sie an den Kunden ausgeliefert wird, müssen sie ihr RPi einfach in ihr Netzwerk laden und Port-Forwarding durchführen. Dann würden sie die App herunterladen und Befehle an den Roboter ausgeben (ich verwende ihre Anmeldeinformationen, um zu wissen, welches RPi gesteuert werden soll). Das Problem ist, dass, wenn sich die IP ändert, ich die Kommunikation zu diesem Remote-Gerät verlieren würde. Gibt es also eine Möglichkeit, meinen lokalen Server mit allen Remote-Geräten zu verbinden?

Ich habe sehr wenig Erfahrung mit dem Networking, ich hacke mich durch und sehe das vielleicht falsch. Jede Hilfe wird sehr geschätzt!

0
Wenn Sie z. B. Smartphones betrachten - Server stellen keine Verbindung zu ihnen her, Server dienen. es sind Smartphones als Clients, die sich mit Servern verbinden. Ich weiß, es ist am Anfang nicht offensichtlich :) Das Gleiche gilt für Viren und andere Dienste. Es funktioniert und die Clients müssen keine Portweiterleitung einrichten (und wenn der ISP nur eine lokale IP-Adresse angibt, müssen Ihre Clients den ISP nach der Portweiterleitung fragen, was problematisch ist). rsm vor 7 Jahren 0
So fügen Sie den Kommentar von @rsm hinzu: Außerdem ist es sicherer, da für das Gerät kein Port für das Internet geöffnet ist und daher niemand eine Verbindung zum Gerät öffnen und Sicherheitsanfälligkeiten ausnutzen kann. Stefan Vaillant vor 7 Jahren 0

3 Antworten auf die Frage

1
Alex

Sie müssen ein Schema implementieren, bei dem Ihr RPi Clients für Ihren Server ist.
Was Sie wirklich brauchen - es ist entweder eine statische IP-Adresse bei Ihnen zu Hause / in Ihrem Unternehmen oder ein billiger VPS oder DDNS (dynamischer DNS-Dienst). Wenn Sie Ihr RPi an Ihre Clients senden, legen Sie auf diese Weise fest, dass die IP automatisch über DHCP eingerichtet wird, und fügen Sie einen Befehl hinzu, der eine Verbindung zu Ihrem Server über SSH (vorzugsweise über die Authentifizierung mit öffentlichen Schlüsseln) mit umgekehrter SSH-Einstellung herstellt. Auf diese Weise können Sie eine Verbindung zu einem Ihrer RPis über einen umgekehrten Port auf Ihrem eigenen Server herstellen. Unabhängig davon, wo sich Ihre RPi befinden, können Sie immer darauf zugreifen (natürlich nicht, wenn sie sich nicht hinter professionellen Firewalls befinden, die ausgehende LAN-Verbindungen ohne Authentifizierung einschränken).

Weniger Arbeit (für Ihre Kunden), wenn sich das Gerät über DHCP konfiguriert und eine Verbindung zum Internet-Server herstellt, als wenn der Kunde die Portweiterleitung manuell einrichten muss! CBHacking vor 7 Jahren 0
@CBHacking Das meinte ich eigentlich - DHCP auf RPi (Geräte, die an den Kunden gesendet werden sollen). Wenn OP eine statische IP-Adresse auf seinem Server einrichtet oder DDNS verwendet, können alle Remote-Geräte bei der Geburt ihre Heimat finden, anstatt Kunden zu komplizierten Netzwerken aufzufordern Alex vor 7 Jahren 0
Ja, Entschuldigung, ich meinte das als Kommentar in Übereinstimmung mit Ihnen, mit dem Hinweis, dass es nicht nur ein technisch besseres Design ist, sondern auch für die Benutzer des OPs einfacher ist. CBHacking vor 7 Jahren 0
@CBHacking Ohh, dann tut es mir auch leid, dass ich es nicht verstanden habe Alex vor 7 Jahren 0
Vielen Dank für das Feedback, ich muss etwas recherchieren und werde diesen Beitrag auf jeden Fall aktualisieren. Mir wurde gesagt, ich solle in Toredo nachsehen, was ich jetzt mache, aber DHCP auf den RPis steht als nächstes auf der Liste. Melomaniac vor 7 Jahren 0
@ Melomanisches Teredo-Relay auf Gateways von Drittanbietern (was bedeutet, dass es für einen Mann in der Mitte des Angriffs vorgesehen ist), DNS wird es nicht verwenden, die Boot-Leistung ist schrecklich und erfordert Overhead, zusätzlich zu IPv4-gekapselt IPv6 über IPv4 verwenden können. Im Gegensatz dazu erfordert die von mir angebotene Lösung keine statische IP-Adresse für Clients. Sie stellen eine Verbindung zu Ihrem Server her, und Sie können auf alle auf sie zugreifen, wenn Sie zu Ihrem Serverport zurückkehren. Alex vor 7 Jahren 0
0
LawrenceC

Das externe IPv4 eines Heimnetzwerks wird von ihrem ISP gesteuert und kann sich jederzeit ändern, wenn es dynamisch ist, wie es bei den meisten privaten Internetverbindungen der Fall ist.

Es gibt mehrere Anbieter von "Dynamic DNS" -Providern (z. B. NoIP), mit denen Sie ein Konto erstellen, einen DNS-Domänennamen aus einer Liste auswählen und einem "Dynamic Update Client" die Verbindung mit ihm erlauben und den DNS-Eintrag aktualisieren können . Ihr IoT-Gerät muss diesen Client ausführen.

Diese Anbieter verfügen in der Regel über eine kostenlose Stufe, in der ein oder zwei Namen kostenlos zur Verfügung stehen, sodass Sie bezahlen müssen, wenn Sie mehr Namen wünschen. Ehrlich gesagt ist dies nicht sehr skalierbar für mehr als ein paar Geräte.

Wenn es sich um eine umfangreiche Bereitstellung von Geräten handelt, ist das Richtige für Sie, wenn Sie möchten, dass Ihre Geräte "plug and play" wirklich "plug and play" sind, die Geräte so zu entwerfen, dass sie die Verbindung zu einem zentralen Server initiieren, anstatt sich auf den Server zu verlassen, der mit ihnen verbunden ist Verschieben Sie Ihren Server zu einem Hosting-Service oder einem VPS-Cloud-Anbieter (z. B. Amazon, Azure usw.).

Vielen Dank @LawrenceC für den Rat, ich bekomme ein paar unterschiedliche Meinungen. Ich gebe Ihnen Bescheid, wenn ich Ihre Lösung am Ende verwende (was Software / Dienstleistungen von Drittanbietern umfasst), aber ich möchte dies lieber vermeiden, wenn dies möglich ist Melomaniac vor 7 Jahren 0
0
Melomaniac

Hier ist ein Update für den Fall, dass jemand das gleiche Problem hat. Als empfohlen werden RPis als Clients konfiguriert. Am Ende habe ich mit dem node package ip die IP jedes Roboters in meiner Datenbank aktualisiert. Jeder Client zieht dann die IP aus der Datenbank, um eine Verbindung herzustellen.

Hier ist ein Ausschnitt meines Codes. Der Server wird beim Booten ausgelöst .

var ip = require('ip'); var mongo = require('mongodb') var MongoClient = mongo.MongoClient  var url = 'your_url' var name = "example" function updateIP() { // update ip if need be var my_ip = ip.address() console.log(my_ip) MongoClient.connect(url, function(err, db){ console.log(err) var robots = db.collection('robots') robots.findAndModify(, [['name', 1]], {$set: }, ) }) }