Arduino aus dem Internet erreichen

Hi,

ich habe seit Jahren "dyndns.org".
Aber vergiss nicht das Portforwarding auf deinem Router. Sonst gehts nicht.

Gruß/hk007

Ja das kenne ich von meinen IPCams, die haben einen voreingestellten DNS-Service. Bei DynDNS muss ich doch aber was bezahlen oder nicht?

dyndns ist immer noch kostenlos, falls Du keinen der Premiumservices nutzt. Für ein einfaches DNS kostet das nix.
Ich würde aber trotzdem dringend davon abraten, den Arduino direkt aus dem Internet zugänglich zu machen.
Es gibt aufgrund der limitierten Rechenleistung keinerlei Sicherheitsmechanismen. Der i.d.R. verbaute WizNET 5100 Ethernet Chip kann glaub ich maximal 2 parallele Netzwerkverbindungen verarbeiten. Alles was darüber hinaus geht, kann ungewollte Seiteneffekte haben.
Ich weiss ja nicht, was Du da schaltest, aber ich vermute mal es gibt keine Authentifizierung oder einen Passwortschutz. Jeder der Deine öffentliche IP kennt, hat damit Zugriff auf den Arduino. Auch wenn Du die IP keinem sagst, es gibt genug Spambots, die nihcts anderes machen als ganze Netze abzugrasen auf der Suche nach offenen Ports. Da bei solchen Scans auch immer Daten geschickt werden, bekommt Dein Arduino wahllos irgendwelche Bytes geschickt.
Bist Du 100%ig sicher, das Dein Projekt gegen alle falsch gesendeten Daten abgesichert ist?
Im schlimmsten Fall schalten Dir irgendwelche Leute das Licht an- und aus, steuerst Du aber z.B. die Heizung von Aquarium oder Deinem Pool, kann das schnell größere Folgen haben (Stromkosten, gekochte Fische, etc.).
Auch wenn es Dein Projekt drastisch vergrößert, ich würde immer einen Server vor den Arduino hängen, der den Zugriff regelt. Hier kannst Du dann mit Paswortabfragen, HTTPS und was weiss ich nicht alles das Projekt sicher machen. Der Webserver selbst redet dann per lokalem Netzwerk mit dem Arduino. Schau Dir mal das Projekt von Cetax an: Hier haben wir sowas detailliert besprochen. http://arduino.cc/forum/index.php/topic,102817.0.html

INTERNET <-----> | Router | <----> Webserver <----> Arduino

Edit: Ein solcher Server könnte z.B. der Raspberry Pi sein, da läuft ein "normales" Linux drauf und für wenig Last sollte die Performance auf alle Fälle reichen. Außerdem kann die Kist per USB mit Strom versorgt werden und ist entsprechend sparsam. Mit etwas Geschick kann man sich sogar den Arduino-Ethernet oder das Ethernet-Shield sparen, wenn man Raspberry und Arduino über eine serielle Schnittstelle miteinander reden läßt.

hi,

dyndns.org ist leider seit einiger zeit nicht mehr kostenlos, wenn Du Dich neu anmeldest. die "alten" kostenlosen konten werden weiter betrieben.

sonst kann ich mich mkl nur anschließen. es gibt zwar einen passwortschutz für den arduino-webserver, aber wie sicher der ist...
der raspberry ist sicher optimal für sowas.

gruß stefan

Ich schätze einmal dass es sich nicht um zeitkritische Aufgaben handelt.
Ein Webserver sollte genügen. Der Arduino ist nur Client. Der Router braucht kein Portforwarding. Für die Sicherheit ist der Server zuständig. Der Client schickt in entsprechend kurzen Intervallen Requests an den Server, und „pollt“ damit auch gleich Informationen vom Webserver.

Wenn Du jetzt etwas steuerst, schickt der Webserver beim nächsten Aufruf vom Arduino die Daten weiter.
Der Arduino übermittelt seine Daten via Parameter bei jedem Request.

Ich denke das ist eine günstige und sichere Lösung.

Du brauchst im prinzip keinen Webserver.
Wenn du dir in VB(.Net) oder einer sonstigen Sprache
einen eigenen Server schreiben kannst, dann ist das alles kein Problem!

Du kannst dir einen Clienten dazu schreiben der einen Handshake vorher an den
Server sendet (Sei es von mir aus ein Passowrt) und dann wenn der
Server den richtigen Handshake hat, hat er auch die Erlaubnis Daten
weiter an Arduino zu senden. Vorher nicht! Sprich: Eine Schnittstelle!

Und wenn du wirklich gut bist, schreibst du dir sogar einen Webserver
der eine Passworteingabe verlangt und dann nach dem gleichen Prinzip arbeitet!

Und was die DNS angeht. Naja ich hab noch von dyndns.org eine kostenlose von damals.
Aber ich kann net glauben, dass es heute keinen einzigen Anbieter mehr gibt, der das
noch kostenlos macht. Muss es doch geben!

Was da zwischen Arduino und Internat hängt, ist ja im Prinzip egal. Wie das Kind am Ende heisst auch. Wichtig ist eine zwischengeschaltete Kontrollinstanz, welche für die nötige Sicherheit sorgt. Wie das konkret umgesetzt wird, ist vom Projekt abhängig. Es kann ein Webserver sein z.b. inkl. einer schicken HTML-Steueroberfläche, kann aber auch nur ein einfacher Dienst sein, der als "Durchlauferhitzer" fungiert.

Das es keinen freien dynamich DNS Anbieter mehr geben soll, wundert mich auch ein wenig. Das wäre ja fast mal ein eigenes Projekt wert :slight_smile:

Ich bin davon ausgegangen, dass ein Webserver existiert. Eigentlich sollte die Polling-Variante auch bei allen Free-Hostern mit PHP Unterstützung funktionieren. PC braucht dann zu Hause keiner laufen. Und da es nur ein Client ist brauche ich mMn keine Kontrollinstanz.

Wenn es stattdessen ein eigener PC/RaspberryPI werden soll, könnte man obige Free-Hoster mit ein paar Zeilen Code als eigenes DNS Service verwenden. (Natürlich nur wenn man damit nicht gegen die Nutzungsbestimmungen verstößt.)

Hi,
vielen Dank für die zahlreichen Tipps und Hinweise. Ich denke ich werde erstmal den ganzen Spaß als Heimnetzanwendung laufen lassen.
Gibt es einen solchen Server auch gleich inklusive Router, damit ich nicht zwei Boxen stehen habe, worauf müsste ich achten, wenn ich mir ein solches Geschoss zulege?
mfg
Balli

Du kannst als Server im Prinzip jeden PC nehmen der in deinem Netz hängt, Laufen muss dieser halt immer.
Um den PC als Server verwenden zu können, brauchst Du nur ein Programm, das gibt’s als Freeware. Z.B: EasyPHP (sogar ohne Installation), oder viele andere.
Also für den Anfang musst Du nichts investieren.

Danke, das ist mir sogar klar und habe ich auch schon gemacht, jedoch habe ich keinerlei Erfahrungen mit den Serverboxen und wenn ich mir denn irgendwann eine zulegen sollte, würde ich gerne eine nehmen in der der Router integriert ist, damit ich nicht noch ein Teil mehr rumstehen habe. Wobei mir die Raspberry-Variante auch ganz gut gefällt.
mfg
Balli

Am Ende ist sowas immer eine Kostenfrage. Zum Einen in der Anschaffung und zum Anderen bei den laufenden Kosten (Strom). Bei beidem liegt der Raspberry super im Rennen, denn für 35 Euro eine Linuxbüchse (wenn auch eine kleine) die kaum Strom braucht ist kaum zu schlagen. Aber auch bei einem eigenen Server sollte man wissen was man macht, wenn man nach außen Dienste exportiert. Alles was von außen erreichbar ist, ist potentiell gefährdet. Also sind hier regelmäßige Updates und eine gute Konfig Pflicht.

@Voralpenkreuz:
Die Variante, das der Arduino aktiv mit einem externen Webserver kommuniziert geht natürlich auch. Allerdings hat man, je nach Auslastung des Arduino und wie oft er Zeit für einen Webrequest hat (plus den Aufwand den man für DNS, timeouts, Fehlertolleranz etc. treiben muss), immer einen zeitlichen Versatz zwischen Befehl auf der Weboberfläche anklicken und der Reaktion des Arduino. Es ging ja darum, den Arduino von außen zu steuern.
Wer einen guten Router hat, kann aber beider kombinieren. Portforwarding von public-IP des Routers nach innen auf den Arduino. Firewall des Routers blockt alle Anfragen auf diesem Port außer von der IP des Webservers. Bei shared Hostern ist das zwar nicht 100%ig, schränkt aber die Zahl der möglichen "Täter" massiv ein :slight_smile:
Leider können sowas nicht alle Router, die Fritzbox z.B. nicht (zumindest meine 7270 nicht). Mein Vigor Router könnte das z.B.

Natürlich ist es für zeitkritische Anwendungen nicht geeignet.
Ich denke jedoch für Anfänger die 1 Sekunde warten können, und sich dafür die ganzen Sicherheits –und Netzwerkfragen ersparen, ist die Variante interessant. Außerdem kann man es auch in einem fremden Netzwerk einsetzen ohne etwas einstellen zu müssen.(DHCP vorausgesetzt)
Um mit einer Pan Tilt Kamera jemanden zu verfolgen ist es viel zu langsam.

Wg. Aufwand für DNS
Verstehe ich nicht ganz. Der Vorteil ist ja dass ich kein DNS-Service benötige.

Verstehe ehrlich gesagt die Problematik nicht ganz.
Mein Arduino Ethernet Webserver hängt auch am Internet und ich mache mir keine Sorgen wegen der Sicherheit.

Ich habe dabei 5 "Schutzmechanismen" eingebaut.

  1. Nicht Port 80, sondern 9999
  2. htaccess Authentifizierung
  3. Document Root liefert eine weiße Seite, im Unterordner liegt mein Script versteckt. (z.b. /GzaEdHXd92A33/
  4. Variablen zum Steuern der Scripte sind ebenfalls dem Angreifer unbekannt.
  5. Jede Seite liefert nen 404 Text :wink:

da2001:
Verstehe ehrlich gesagt die Problematik nicht ganz.
Mein Arduino Ethernet Webserver hängt auch am Internet und ich mache mir keine Sorgen wegen der Sicherheit.

Ich habe dabei 5 "Schutzmechanismen" eingebaut.

  1. Nicht Port 80, sondern 9999
  2. htaccess Authentifizierung
  3. Document Root liefert eine weiße Seite, im Unterordner liegt mein Script versteckt. (z.b. /GzaEdHXd92A33/
  4. Variablen zum Steuern der Scripte sind ebenfalls dem Angreifer unbekannt.
  5. Jede Seite liefert nen 404 Text :wink:

Sind wir da nicht ein bisschen paranoid :smiley: ?!

MindCode:
Sind wir da nicht ein bisschen paranoid :smiley: ?!

Nein, mit Sicherheit nicht. Wer nicht darüber nachdenkt ist Leichtsinnig.

MindCode:
Sind wir da nicht ein bisschen paranoid :smiley: ?!

Nö. Wenn Du wüsstest, was diese Steuerung bewirkt... :slight_smile:

da2001:
Nö. Wenn Du wüsstest, was diese Steuerung bewirkt... :slight_smile:

Ahh, interessant! Dann können wir ja mal checken ob wir das Garagentor auf und die Heizung auf Sauna-ähnliche Temperaturen bekommen :wink:

Für meinen Webserver habe ich eine HTML-Seite, die ein paar Befehle per POST verpackt.
Ein Eingabefeld meiner Form dient als Passwort und wird dann mit den entsprechenden Werten gesendet.
Wer das Passwort nun nicht kennt, kann maximal den Arduino mit einem DOS-Angriff lahmlegen. Das Ergebnis ist vielleicht ein rauchender Arduino, aber kein Zugriff auf die Funktionalitäten.
Per Bruteforce ist das Passwort sicherlich zu knacken, aber das obliegt ja jedem selbst, wie kompliziert man das Passwort gestaltet.
Gefährlicher an dieser Stelle wäre sicherlich, dass mein POST mit gelesen wird und das Passwort ausgelesen werden kann. Ist theoretisch möglich, aber doch eher unwahrscheinlich.
In diesem Fall wäre es dann leider möglich die Farben auf meinem LED-Tisch zu ändern :roll_eyes:

@da2001: Letzteres ist auch die einzige Möglichkeit alle 5 Mechanismen auf einmal auszuhebeln.
Fraglich ist nur, wer den Aufwand treiben würde mit einem Sniffer deine Leitung abzuhorchen...

@Trib

Brutforce htpasswd knacken geht sicherlich. Aber dann ist die Hürde weiterhin das unbekannte Verzeichnis, die Datei und die benötigten Variablen. Ohne Erfolgsmeldung wird sicherlich keiner mehrere Monate warten, bis bei mir im Flur das Licht angeht.

Bevor jemand die Möglichkeit hat, meinen Datenverkehr mit einem Proxy zu filtern und die passenden Befehle zwischen allen anderen zu erkennen, wäre es einfacher bei mir die Scheibe einzuschlagen, zur "Sauna" zu gehen und dort die Temperatur zu verstellen :smiley:
JETZT werden wir paranoid :wink: