pedant
Goto Top

DD-WRT - DDNS (Custom): Wie wird die IP übergeben?

Hallo,

leider blick ich's nicht.


Die Aufgabe

Ich versuche beim Hoster Strato eine Subdomäne als DynDNS-Ziel zu verwenden.
Das Update soll ein DD-WRT-Router automatisiert ausführen.


System und Daten

Router-Firmware: DD-WRT v3.0-r33413 std (09/27/17)

Stratopaket:
Domain: meinedomain.de
Meine Subdomain: sub.meinedomain.de
Wan-IP: 82.149.225.21
Benutzername: www.meinedomain.de
DDNS-Passwort: geheim


Forschung und Recherche

Die vorbreitenden Einstellungen in meinem Strato-Paket habe ich vorgenommen.
https://www.strato.de/faq/article/671/So-einfach-richten-Sie-DynDNS-fuer ...

Zum Thema DDWRT und DDNS habe ich u.a. das hier gefunden:
https://www.dd-wrt.com/wiki/index.php/DDNS_-_How_to_setup_Custom_DDNS_se ...


In dem Zusammenhang habe ich Folgendes gelernt:
  • Benutzername und Kennwort wird benötigt um eine ht-access-Anmeldung durchzuführen.
  • Die eigentlichen Konfigurationsdaten werden als Get-Daten übertragen.
  • Bei Strato kann man dafür ein gesondertes Kennwort hinterlegen
  • DD-WRT legt Dateien an im Ordner /tmp/ddns/
    • inadyn.conf (Die im Webinterface vorgenommene Konfiguration)
    • ddns.log (Das Ergebnis der Aktualisierung)
    • inadyn_ip.cache (Inhalt: Externe IP-Nummer zur Zeit der letzen Aktualisierung)
    • inadyn_time.cache (Inhalt: Unixzeit der letzen Aktualisierung)
  • Positive Antworten des DDNS-Servers sind:
    • good 82.149.225.21 (IP-Adresse wurde erfolgreich aktualisiert)
    • nochg 82.149.225.21 (Alles gut, aber die IP-Adresse war im Moment schon hinterlegt)
  • nochg heißt "No Change" und nicht "und noch ein G".

Um zu Prüfen was eigentlich passiert und welche Daten aus welchen Konfigurationsfeldern wie übertragen werden, habe ich auf meinem Webspace eine PHP-Datei hinterlegt, die alle an sie übermittelten Get- und Post-Daten in eine Textdatei schreibt.

Mit eigenem PHP-Skript (testscript.php)
DDNS Service : CustomDYNDNS Server: egal.deUsername : egalPassword : egalHostname : hammer&obst=apfelURL : http://www.meinedomain.de/testscript.php?farbe=rot&werkzeug=

POST-Daten wurden keine übermittelt.
Als GET-Daten wurde übermittelt:
farbe=rotwerkzeug=hammerobst=apfel

DD-WRT übermittelt also keine Daten, die nicht entweder in Feld "URL" oder im Feld "Hostname" eingetragen sind.
Die Url, die tatsächlich aufgerufen wird resultiert aus der Anfügung des Feldinhaltes "Hostname" an den Feldinhalt von "URL".
Aus obigen (sinnlosen) Beispiel erfolgt also dieser Aufruf:
http://www.meinedomain.de/testscript.php?farbe=rot&werkzeug=hammer&obst=apfel


Aufruf per Browser

Möchte ich die IP per Browser aktualisieren, so kann ich diese Url verwenden:
https://dyndns.strato.com/nic/update?hostname=sub.meinedomain.de&myip=82.149.225.21
(Das fordert noch zuvor zur Eingabe von Benutzername und Kennwort auf.)
https://www.meinedomain.de:geheim@dyndns.strato.com/nic/update?hostname=sub.meinedomain.de&myip=82.149.225.21
(Benutzername und Kennwort können auch in die Url geschrieben werden.)

Der Aufruf funktioniert und wird mit wird mit good 82.149.225.21 oder nochg 82.149.225.21 quittiert.
Es funktioniert mit http und mit https.

In einigen Beispielen im Web sind noch weitere Variablen angefügt:
&wildcard=NOCHG
&mx=NOCHG
&backmx=NOCHG
Für die prinzipielle Funktion scheinen sie aber nicht nötig zu sein.


Aufruf per Router

Einstellungen
DDNS Service : Custom
DYNDNS Server: dyndns.strato.com
Username : www.meinedomain.de
Password : geheim
Hostname : sub.meinedomain.de
URL : http://dyndns.strato.com/nic/update/?hostname=

[Save] klicken zum Speichern.
Beim Drücken von [Apply] wird die Aktualisierung ausgelöst.

Per Telnet oder ssh kann die Aktualisierung auch per Kommando ausgelöst werden.
/usr/sbin/inadyn -u benutzername -p kennwort --verbose 5 --input_file /tmp/ddns/inadyn.conf

Im Log und in der Statusausgabe erscheint:
Sun Apr 8 16:29:08 2018: INADYN: Started 'INADYN Advanced version 1.96-ADV' - dynamic DNS updater.
Sun Apr 8 16:29:08 2018: I:INADYN: IP address for alias 'sub.meinedomain.de' needs update to '82.149.225.21'
Sun Apr 8 16:29:08 2018: I:INADYN: Alias 'sub.meinedomain.de' to IP '82.149.225.21' updated successfully.

Es sieht also so aus, als hätte es funktioniert, allerdings wird die IP bei Strato nicht aktualisiert.
Die sub.meinedomain.de hat dann immernoch die verhergehende IP.


Meine Frage

Im Aufruf per Browser enthält die URL die IP-Nummer als GET-Variable:
myip=82.149.225.21
Im Aufruf per Router ist das nicht der Fall.
Ich könnte sie dort auch händisch eintragen, aber das wäre absurd.

Gibt es eine DD-WRT-Variable, die ich dort verwenden muss, beispielsweise: %IP% oder <IP>
oder wie wird die aktuelle WAN-IP an den DDNS-Server übermittelt?

Gruß Frank

Content-ID: 370534

Url: https://administrator.de/contentid/370534

Ausgedruckt am: 21.11.2024 um 22:11 Uhr

SlainteMhath
Lösung SlainteMhath 09.04.2018 um 15:27:34 Uhr
Goto Top
Moin,

die DynDNS Dienste nehmen die IP von aus sich der Client verbindet. Alles andere wäre auch Quatsch.

lg,
Slainte
StefanKittel
StefanKittel 09.04.2018 um 16:12:25 Uhr
Goto Top
Hallo,

frag Google mal nach "$_SERVER['REMOTE_ADDR']" für PHP.
Das nur als Vergleich zu PHP.

Stefan
Pedant
Pedant 09.04.2018 um 22:03:47 Uhr
Goto Top
Hallo Slainte,

Zitat von @SlainteMhath:
die DynDNS Dienste nehmen die IP von aus sich der Client verbindet. Alles andere wäre auch Quatsch.
...klingt vernünftig und würde drei Dinge erklären.
1. Warum ich vom Router keine IP per GET zu in meinem Testskript übermittelt bekomme.
2. Warum ich keinen Hinweis im Web finde, wie ich die IP als Variable ins Webinterface schreiben kann.
3. Warum ich im Router eine Erfolgemeldung erhalte auch wenn ich keine IP angebe.

Was es nicht erklärt ist, warum ich für Strato viele Beispiele gefunden habe, die in der URL "myip" nutzen.
Beispiel-URL enthalten dort &myip=<IP> oder &myip=%IP% oder auch &myip=__MYIP__.

Zitat von @SlainteMhath:
Alles andere wäre auch Quatsch.
...nicht vollständig.
Mit der Übergabe der IP als Wert, könnte man auch von B aus eine Umleitung von A nach C vornehmen.
Zugegebenermaßen wäre das aber nur selten sinnvoll.

Vielleicht ist die Antwort auch, dass der Dienst bei Strato die von ihm erkannte Remote-IP verwendet, es sei denn es wird mit myip= eine IP explizit übergeben.

Ich hatte es in der Testphase auch geschafft bei Strato auf eine IP umzubiegen, die ich angegeben hatte.
Das wollte ich jetzt nochmal verifizieren, aber egal was ich im Moment per Browser treibe, erhalte ich von Strato nur diese Antwort:
badauth 0.0.0.0
Keine Ahnung was da gerade los ist.

Per Router habe ich allerdings noch keinen "Beweis" erhalten, dass die Umleitung auch tatsächlich erfolgt.
Er meldet nur, dass es erfolgreich wäre.
Ich habe jetzt testweise einen zweiten DD-WRT-Router, an anderer Stelle (andere externe IP) auf DDNS konfiguriert und der meldet mir auch, dass das Update erfolgreich wäre.
sub.meinedomain.de wird dadurch aber nicht auf die neue IP umgebogen.

Wie es aussieht ist der DDNS-Kram im DD-WRT-Router nicht in Ordnung.
Erfolg melden und Erfolg haben scheinen da nicht Hand in Hand zu gehen.
Wenn's tatsächlich so ist, wäre ich nicht sonderlich überrascht.
Um DNS- und Browsercache auszugrenzen habe ich in den Webinterfaces der beiden Router ein Ping-Commando abgesetzt.
ping sub.meinedomain.de führt bei beiden jeweils zur selben, unveränderten IP.


Ein Blick tiefer bringt weitere Merkwürdigkeiten:
im ddns.log steht Folgendes
ddns.log
Mon Apr  9 21:29:01 2018: INADYN: Started 'INADYN Advanced version 1.96-ADV' - dynamic DNS updater.
Mon Apr  9 21:29:01 2018: W: DYNDNS: My IP address: 82.149.225.21
Mon Apr  9 21:29:01 2018: I:INADYN: IP address for alias 'sub.meinedomain.de' needs update to '82.149.225.21'
Mon Apr  9 21:29:01 2018: DYNDNS my Request:
GET https://dyndns.strato.com/nic/update/?hostname=sub.meinedomain.de HTTP/1.0
Authorization: Basic e3f3lNBiZKuntB4kZTpndnWlMBB4OC==
Host: dyndns.strato.com
User-Agent: inadyn advanced/1.96-ADV software@stevehorbachuk.com


Mon Apr  9 21:29:01 2018: I:INADYN: Alias 'sub.meinedomain.de' to IP '82.149.225.21' updated successfully.
Mon Apr  9 21:29:01 2018: W:INADYN: DYNDNS Server response:
HTTP/1.1 200 OK
Date: Mon, 09 Apr 2018 19:29:01 GMT
Content-Length: 18
Content-Type: text/plain; charset=ISO-8859-1
Vary: Accept-Encoding
Connection: close

badauth 0.0.0.0

Was heißt hier updated successfully und badauth 0.0.0.0 im selben Log.

Vielleicht liegt die Ursache doch oder auch oder zumindest im Moment irgendwo bei Strato.
Ich forsche mal weiter, aber nicht mehr heute.

Gruß Frank
Pedant
Pedant 09.04.2018 um 22:05:39 Uhr
Goto Top
Hallo Stefan,

Zitat von @StefanKittel:
$_SERVER['REMOTE_ADDR']
Danke, kenne ich und nutze es auch an anderer Stelle.
In Zusammenhang DD-WRT und Strato ist es nicht relevant.

Gruß Frank
SlainteMhath
SlainteMhath 10.04.2018 um 09:24:52 Uhr
Goto Top
Mit der Übergabe der IP als Wert, könnte man auch von B aus eine Umleitung von A nach C vornehmen.
Mag sein, DynDNS ist aber eher als "Prosumer" Feature gedacht, nicht für den Einsatz im/durch Unternehmen.

Zum Rest:
Frag doch einfach mal bei Strato nach. Die haben idR eine gute FAQ. Normalerweise erlauben DynDNS Anbieter nur eine bestimmte Änderungen in einem bestimmten Zeitinterval
Pedant
Pedant 10.04.2018 um 12:50:35 Uhr
Goto Top
Hallo,

vorab: es funktioniert jetzt und es war ein ganz banaler Fehler meinerseits: Falsche Logindaten.

Zu meiner Ehrenrettung möchte ich allerdings anführen, dass ein paar Umstände es gut verschleiert haben, dass meine Logindaten falsch waren.

Für ftp und ssh nutze ich als Benutzername www.meinedomain.de
Wie ich jetzt feststellte geht das auch mit dem Benutzernamen meinedomain.de
Für DynDNS allerdings muss der Benutzername zwingend ohne www. angegeben werden, also nur meinedomain.de

Hinzu kamen die weiter unten aufgeführen Fallen im DD-WRT.


Die Einrichung

Sie ist eigentlich sehr einfach und genau gemäß der entsprechenden Anleitungen:

1. Subdomain einrichten
https://www.strato.de/faq/article/339/Kann-ich-mit-den-STRATO-Paketen-ei ...

2. DynDNS für die Subdomain aktivieren
https://www.strato.de/faq/article/671/So-einfach-richten-Sie-DynDNS-fuer ...

3. DDNS im DD-WRT-Router einrichten
https://www.dd-wrt.com/wiki/index.php/DDNS_-_How_to_setup_Custom_DDNS_se ...
Die Hochkommata bei den Einträgen für Username, Password und Hostname natürlich weglassen.


Telnet-Sitzung in einer Eingabeausforderung

Einige Dinge kann man per Telnet machen. hier eine exemplarische Telnet-Sitzung...

telnet 192.168.1.1
Die IP muss die des Routers sein
root
Als "login" muss root verwendet werden auch wenn man für's Webinterface einen anderen Benutznamen eingerichtet hat.
Passwort
Das Password ist dasselbe, wie das für's Webinterface.
cd /tmp/ddns
Verzeichniswechsel
ls
Dateien auflisten
Ausgabe: ddns.log inadyn.conf inadyn_ip.cache inadyn_time.cache
rm ddns.log
Log-Datei löschen
inadyn -u benutzername -p kennwort --verbose 5 --input_file inadyn.conf
benutzername und kennwort für den DDNS-Anbieter anpassen
Der Befehl inadyn löst die DDNS-Aktualisierung aus.
Hier können auch zusatzliche Optinen wie z.B. --verbose 5 angegeben werden.
cat ddns.log
Inhalt der Log-Datei anzeigen lassen
exit
Telnet-Sitzung beenden

Der Inhalt des ddns.log wird allerdings auch im Webinterface im Feld "DDNS Status" angezeigt.
Zusätzlich Optionen für den Befehl inadyn lassen sich im Feld "Additional DDNS Options" eintragen.
Ein sofortiges Ausführen des Befehls kann man mit dem Schalter [Apply Settings] auslösen.
(Bei Änderungen der Konfiguration zuvor noch auf [Save] klicken.)

Die Telnetsitzung kann man sich daher sparen eigentlich sparen.


1. Böse Falle im DD-WRT

Löscht man die ddns.log kommt die erste Irreführung:
Im Feld "DDNS Status" steht dann nicht nichts und auch nicht "no log entries", sondern
Connecting to server
Das ist aber inhaltlich falsch, hier wird nicht connected, da kann man warten bis man schwarz wird. Hier passiert einfach Nichts.


2. Böse Falle im DD-WRT

Löst man die Aktualisierung aus und hat dabei einen falschen Benutzernamen eingetragen, so endet die letzte Zeile der Statusanzeige mit den Worten:
updated successfully
Was auch immer erfolgreich sein mag, die Aktualisierung beim DynDNS-Anbieter ist es nicht.
Die Antwort des DynDNS-Servers wird hier nicht ausgegeben und die lautet u.U.
bad auth 0.0.0.0 (schlechte Authentifizierung = falscher Login)

Man sollte - zumindest in der Testphase - unbedingt die Zusatzoption
--verbose 5
ins Feld "Additional DDNS Options"eintragen.
(Mindestens --verbose 3)
Dann wird auch die Antwort des DynDNS-Servers als letzte Zeile ausgegeben.
Die Antwort muss entweder
good 82.149.225.21
oder
nochg 82.149.225.21
lauten, sonst hat's nicht funktioniert.

good = Aktualisierung durchgeführt
nochg = no change = alles in Ordnung, aber die IP war schon die Aktuelle

Warum die Serverantwort nicht auch bei Verboselevel <=2 (Ausführlichkeitsebene) ausgegeben wird ist mir unklar.
Die Serverantwort ist eigentlich die wichtigste Information und die sollte immer ausgegeben werden, wenn man die Ausgaben nicht explizit komplett unterdrücken möchte.
Naja, ich weiß es jetzt und Ihr wisst es jetzt auch.


Angabe der IP

Wie SlainteMhath schrieb, ist die Angabe der IP, die verwendet werden soll nicht nötig.
Der DynDNS-Server nimmt die IP von der der Aufruf erfolgt.
Danke für den Hinweis.

Zumindest bei Strato kann man das optional anders regeln.
Die zusätzliche Get-Variable myip= lässt es zu eine andere IP zur Aktualisierung vorzugeben.

Man kann also (beispielsweise per Browser) folgende URL aufrufen:

Aktualisierung mit der aktuellen WAN-IP
https://dyndns.strato.com/nic/update?hostname=sub.meinedomain.de
Dasselbe mit den Logindaten schon in der URL eingefügt
https://meinedomain.de:geheim@dyndns.strato.com/nic/update?hostname=sub.meinedomain.de
Aktualisierung mit einer manuell vorgegebenen IP
https://dyndns.strato.com/nic/update?hostname=sub.meinedomain.de&myip=82.149.225.21
Dasselbe mit den Logindaten schon in der URL eingefügt
https://meinedomain.de:geheim@dyndns.strato.com/nic/update?hostname=sub.meinedomain.de&myip=82.149.225.21

Diese vier Beispiele funktionieren auch mit http statt https.
Die Logindaten werden dann aber unverschlüsselt übermittelt.
Falls man gezungen sein sollte http zu verwenden, so sollte man zumindest unbedingt ein explizites DynDNS-Passwort bei Strato anlegen und das verwenden und nicht das Master-Passwort unverschlüsselt schicken.

Hier sind noch weiteren, optionalen Variablen zu finden:
https://help.dyn.com/remote-access-api/perform-update/
Für die einfache Umbiegung einer Sub-Domäne sind sie nicht notwendig.


DynDNS-Clients

Wieso finde ich eigentlich keinen kostenlosen DynDNS-Client für Windows?
Nicht, dass es immer für Alles eine kostenlose Variante geben muss, Programmierarbeit hat seinen Wert, aber gerade hier erscheint mir die Aufgabe doch so simplel, dass es mich einfach wundert, dass das Angebot dünn ist.
Mit beispielsweise wget als geplante Aufgabe wäre es technisch schnell erledigt.

Ein URL-Aufruf per C# wäre auch schnell programmiert.
Man müsste nur noch für die unterschiedlichen Dienstanbieter die jeweilige Syntax zusammensuchen und einen Timer einfügen, der die aktuelle WAN-IP ermittelt.

Vielleicht ist das Angebot auch so dünn, weil es mit einfachen Mitteln erledigt werden kann und es ohnehin am sinnvollsten ist, wenn die Aufgabe der Rouer übernimmt und nicht ein Tool auf einem angeschlossenen Rechner.

DD-WRT prüft mit den Defaulteinstellungen übrigens im 10-Minuten-Takt, ob sich die WAN-IP des Routers geändert hat.
Ob im Falle einer tatsächlichen Änderung diese erst in dieser Taktung bemerkt und beim Dienstanbieter aktualisiert wird, weiß ich nicht.
Falls die Reaktionszeit tatsächlich bis zu zehn Minuten lang sein sollte, wäre das für mich völlig akzeptabel.
Wem das nicht ausreichen sollte, der findet sicher Zusatzoptionen für inadyn/DD-WRT, die die Taktung erhöhen.

Gruß Frank
SlainteMhath
SlainteMhath 10.04.2018 um 13:44:14 Uhr
Goto Top
Schöne Anleitung, aber ganz ehrlich: wer sich 2018 noch per Telnet als root an Netzwerkgeräten anmeldet, dem gehört das LAN Kabel abgeschnitten...
Pedant
Pedant 10.04.2018 um 15:52:53 Uhr
Goto Top
Hallo Slainte,

sei nicht so streng.
root ist der einzige User mit dem telnet auf der Kiste nutzbar ist.
Der Telnetzugriff ist auch nur vom Lan aus möglich (zuhause im Einmann-Netzwerk).
Für Remote ist er deaktiviert.

Wenn Du mir dennoch das Netzwerkkabel abschneiden solltest - ich habe Klebeband.

Gruß Frank