DDNS Updater 2, DDNS und Script

RalfPeter

Benutzer
Mitglied seit
02. Apr 2014
Beiträge
286
Punkte für Reaktionen
21
Punkte
24
Heute habe ich mich mit dem Problem beschäftigt, dass ja nach dem Update auf DSM 7 der DDNS Updater 2 offenbar nicht mehr funktioniert. Das ist für mich besonders tragisch, da ich von meinem Provider eine lokale IPv4 bekomme und eine öffentliche IPv6 und somit mein NAS nur per IPv6 von ausserhalb meines Netzwerkes erreichbar ist. Naja vielleicht noch per QuickConnect, was ich aber nicht dauerhaft benutzen möchte.

Also habe ich mich mit dem DDNS der Synology beschäftigt. Bei einem neuen Eintrag sehe ich beide IP-Adressen.
Zwischenablage02.jpg

Das sieht vielversprechend aus, dachte ich. Habe meine Daten eingetragen, Verbindungstest ok. Allerdings wird nur die IPv4 beim DynDNS-Provider (für mich Strato) gesetzt.

Neuer Versuch, diesmal die IPv4 im DDNS Fenster auf 0.0.0.0 gesetzt. Sah wieder super aus.
Zwischenablage01.jpg

Es bleibt nur die IPv6 Adresse im Dialog übrig. Wieder die Verbindungsdaten eingetragen, aktiviert und ... Netzwerkfehler. Es wird gar keine IP in die Query eingetragen :-(
Ob das Problem bei mir liegt oder bei Synology kann ich leider nicht herausfinden. Auch weiß ich nicht, ob das Problem unter DSM 7 noch existiert.

Also habe ich mal ein wenig über Skripte recherchiert, die sich mit DDNS befassen. Ich habe (hoffe ich) eine Lösung per Taskmanager mit einem Shell-Skript gefunden / probiert. Ob es stabil ist und tut was es soll, kann ich nur durch probieren über die Kommandozeile sagen: es scheint zumindest das zu tun was es soll: es setzt bei Strato meine IPv6 Adresse in meine dort gemietete Domain.

Für alle Interessierten und diejenigen, die sich besser mit Netzwerk, IPv6 und insbesondere Unix-Skripting auskennen hier der Code. Ich hoffe, dass es jemandem hilft oder dass es konstruktive Anmerkungen dazu geben wird. Bitte wohlwollend prüfen und gerne Anmerkungen in diesem Thread. Danke!

Bash:
##=============================================================================================
## DDNS Script
##
## Aktuelle IPv6 der Synology ermitteln ip -6 addr show dev <interface> scope global dynamic
##
## https://ihredomain.de:DynDNS-Passwort@dyndns.strato.com/nic/update?hostname=subdomain.ihredomain.de&myip=192.XXX.X.X,2003:8106:1234:5678:abcd:ef01:2345:6789
##
##=============================================================================================

user='<meinuser>'
password='<meindyndnspasswort>'
hosts='<meinhost1>,<meinhost2>,<meinhost3>'
interface='<meinnetzinterface>'
## ich habe ein Bond, das ich hier mit bond0 angegeben habe

last_ipv6_file='/volume1/homes/admin/lastipv6.log'
last_cmd6_file='/volume1/homes/admin/lastcmd6.log'

updateurl="https://${user}:${password}@dyndns.strato.com/nic/update?hostname=${hosts}&myip="
outsideipv6="$(ip -6 addr show dev ${interface} scope global dynamic| sed -e's/^.*inet6 \([^ ]*\)\/.* scope global.*$/\1/;t;d')"

if [[ -f ${last_ipv6_file} ]]; then
  lastipv6=$( cat ${last_ipv6_file} )
fi

if [[ -z "${lastipv6}" ]] ||  [[ "${lastipv6}" != "${outsideipv6}" ]] || test $( find "${last_ipv6_file}" -mmin +10080 ); then
 echo $(date '+%Y.%m.%d %H:%M:%S') "=============================================================" >> ${last_cmd6_file}
 echo $(date '+%Y.%m.%d %H:%M:%S') "Start des DynDNS Aufrufes - IPv6 changed or over one week old" >> ${last_cmd6_file}
 echo $(date '+%Y.%m.%d %H:%M:%S') ${updateurl}${outsideipv6} >> ${last_cmd6_file}
 curlout="$(ip -6 addr show dev ${interface} scope global dynamic)"
 echo $(date '+%Y.%m.%d %H:%M:%S') "$curlout" >> ${last_cmd6_file}
 curlout="$( curl "${updateurl}${outsideipv6}" )"
 echo $(date '+%Y.%m.%d %H:%M:%S') "$curlout" >> ${last_cmd6_file}
 echo ${outsideipv6} > ${last_ipv6_file}
 echo $(date '+%Y.%m.%d %H:%M:%S') "Ende des DynDNS Aufrufes" >> ${last_cmd6_file}
fi

Im Aufgabenplaner habe ich einen neue Aufgabe angelegt (benutzerdefiniertes Skript". Dieses wird alle 15 min aufgerufen. Da ich mir die letzte (hoffentlich erfolgreich) gesetzte IPv6 in einer Datei merke, weiß ich, ob die Adresse upgedatet werden muss.

Ich freue mich auf eure Anmerkungen!
 
Zuletzt bearbeitet:

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.310
Punkte für Reaktionen
2.869
Punkte
423
Ich mach das Update bei Strato einfach auf der Fritzbox mit einer benutzerdefinierten Update-URL
Code:
https://dyndns.strato.com/nic/update?hostname=<domain>&myip=<ipaddr>,<ip6addr>
So kann ich steuern, ob nur IPv4, IPv6 oder beide aktualisiert werden.

Auf der DS gehen benutzerdefinierte Update-URLs mit Bordmitteln auch, aber scheinbar gibt es dort nur einen Platzhalter für IPv4.
1642354184887.png
 

RalfPeter

Benutzer
Mitglied seit
02. Apr 2014
Beiträge
286
Punkte für Reaktionen
21
Punkte
24
@Benares: das mit der Fritzbox macht nur für IPv4 Sinn. Aber auch nur dann, wenn es eine öffentliche IPv4 ist.
Mit dem setzen der IPv6 über die Fritzvox setzt du die IP der Fritzbox in deine Domain, aber nicht die IPv6 deines NAS. Noch dazu, wenn du ein ping auf die Domain machst, bekommst du die IPv4 zurück, die bei mir eben eine nicht öffentlich erreichbare ist (Dual Stack bzw Dual Stack lite)

Auf der DS gehen beide IP Versionen, aber nicht über DDNS der DS, wie ich oben geschrieben habe. In der Update- Url gibt es bei dyndns2 immer nur einen Parameter myip. Wenn man hier die IPv6 übergibt, wird der AAAA Record gesetzt oder bei einer IPv4 der A-Record, oder beide, bzw bei gleicher IP Version die erste übergebene.

Danke für deine Hilfe, das habe ich schon alles ohne Erfolg probiert. Leider.
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.310
Punkte für Reaktionen
2.869
Punkte
423
Verstehe, aber macht es wirklich Sinn, in diesem Fall die IPV6 des NAS bei der Domain einzutragen?
Ich meine, vielleicht will man ja auch mal anderswo hin.
Ich muss zugeben, mit IPv6 hab ich mich noch nicht wirklich beschäftigt.
 

RalfPeter

Benutzer
Mitglied seit
02. Apr 2014
Beiträge
286
Punkte für Reaktionen
21
Punkte
24
Jedes Gerät in deinem Netzwerk bekommt eine eigene öffentliche IPv6. Also "mal woanders hin" läßt sich sehr viel leichter lösen als mit IPV4, z.b über Subdomain, der man die Adresse des entsprechenden Gerätes zuweist. Ports sind nicht mehr der Begrenzer.

Aber ich bin auch (leider) ein Anfänger bei diesem Thema. Immer wenn ich etwas gelesen habe und glaubte zu verstehen, merkte ich, dass ich keine Ahnung habe :).
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.310
Punkte für Reaktionen
2.869
Punkte
423
Ein recht interessante Diskussion.

Bei IPv4 hatte man ja eine externe IPv4 und hat das "dahinter" mit unterschiedlichen Ports/-Weiterleitungen und/oder Reverse-Proxy organisiert.
Bei IPv6 hat plötzlich jedes Geräte "dahinter" seine eigene IPv6. Bräuchte man dann nicht für jedes Gerät eine eigene (Sub-)Domain mit jeweils eigener Aktualisierung?
Ich sehe schon, ich muss mich damit auch mal näher beschäftigen :unsure:
 

RalfPeter

Benutzer
Mitglied seit
02. Apr 2014
Beiträge
286
Punkte für Reaktionen
21
Punkte
24
.. vor allem wenn der Provider keine öffentliche IPv4 mehr liefert. Und die IPv4 sind "verbraucht", alle vergeben, nichts mehr frei. ...
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.310
Punkte für Reaktionen
2.869
Punkte
423
Das würde mir auch stinken. Ohne öffentliche IPv4 geht wohl einiges (noch) nicht :rolleyes:
Da bin ich froh, dass ich bei 1&1 noch primär IPv4 habe und IPv6 auch so halbwegs läuft, wenn auch nur über 6to4-Tunnel.
 

OlafR

Benutzer
Mitglied seit
22. Dez 2020
Beiträge
2
Punkte für Reaktionen
0
Punkte
1
Hervorragender Ansatz von Dir, @RalfPeter dies über ein Script zu erledigen!
Ich kannte (und nutze) aktuell dafür den DDNS-Updater 2, der ja wie bekannt nicht mehr unter DSM 7 läuft. Da ich das Problem mit dem DynDNS von IPv6 Adressen noch nicht lösen konnte, läuft die Kiste bei mir nach wie vor unter DSM 6.2.4.

Alternativ zum DDNS-Updater 2 gibt es noch eine Lösung via Docker. Diese habe ich aber noch nicht probiert, da ich eher auf der Suche nach einer schlanken Lösung via Script war/bin.
Insofern bin ich für Dein Script sehr dankbar.
Jetzt muss ich es nur noch schaffen (jemanden finden), der Dein Script für den DynDNS-Service von All-Inkl.com anpasst, dann kann ich auch auf DSM 7 migrieren.
 

RalfPeter

Benutzer
Mitglied seit
02. Apr 2014
Beiträge
286
Punkte für Reaktionen
21
Punkte
24
Schau doch mal auf der Seite des Anbieters:
1642428534710.png

Die Update-url ist

Code:
http://<username>:<password>@dyndns.kasserver.com/

Damit kann man das Script sehr leicht anpassen, oder was fehlt dir noch?
 

RalfPeter

Benutzer
Mitglied seit
02. Apr 2014
Beiträge
286
Punkte für Reaktionen
21
Punkte
24
Generell kann ich dir auch beim Anpassen helfen. Vor dem Umstieg auf DSM 7 wäre es nur gut, wenn jemand der DSM 7 bereits nutzt das Skript mal unter DSM 7 testet und überprüft. Denn wenn DSM 7 erstmal drauf ist, gibt es (fast) kein Zurück.
 

synfor

Benutzer
Sehr erfahren
Mitglied seit
22. Dez 2017
Beiträge
8.589
Punkte für Reaktionen
1.434
Punkte
288
Das meinen die hoffentlich nicht ernst.
 

RalfPeter

Benutzer
Mitglied seit
02. Apr 2014
Beiträge
286
Punkte für Reaktionen
21
Punkte
24
@synfor: was meint wer nicht ernst? Meinst du kasserver? Per http dyndns setzen?
 

synfor

Benutzer
Sehr erfahren
Mitglied seit
22. Dez 2017
Beiträge
8.589
Punkte für Reaktionen
1.434
Punkte
288
HTTP und die Art und Weise der Authentifizierung. Letzere ist bei HTTP(S) nicht vom Standard abgedeckt.
 

RalfPeter

Benutzer
Mitglied seit
02. Apr 2014
Beiträge
286
Punkte für Reaktionen
21
Punkte
24
http finde ich auch seltsam, bei Strato ist es https mit folgender update-url:

Code:
"https://${user}:${password}@dyndns.strato.com/nic/update?hostname=${hosts}&myip="
 

synfor

Benutzer
Sehr erfahren
Mitglied seit
22. Dez 2017
Beiträge
8.589
Punkte für Reaktionen
1.434
Punkte
288
Passwort und Benutzername vor der Domain ist bei HTTP(S) nicht von den Standards abgedeckt und braucht einen Client, der das unterstützt. Mal schnell per Browser ein Update durchführen ist nicht.
 

RalfPeter

Benutzer
Mitglied seit
02. Apr 2014
Beiträge
286
Punkte für Reaktionen
21
Punkte
24
Habe ich ausprobiert: geht! Mit Google Chrome zumindest.

Im Skript benutze ich "curl" genau mit dieser url. Aber sicher habe ich zu wenig Ahnung davon und es funktioniert nur durch Zufall?
 

synfor

Benutzer
Sehr erfahren
Mitglied seit
22. Dez 2017
Beiträge
8.589
Punkte für Reaktionen
1.434
Punkte
288
Hätte nicht erwartet, dass das ein Browser überhaupt noch kann. HTTP oder HTTPS?
 

RalfPeter

Benutzer
Mitglied seit
02. Apr 2014
Beiträge
286
Punkte für Reaktionen
21
Punkte
24
Ich habe es nur mit https ausprobiert, da die o.g. url explizit bei Strato aufgeführt wird.

Siehe hier: DynDNS mit Strato
 

Clamsy

Benutzer
Mitglied seit
31. Mrz 2022
Beiträge
51
Punkte für Reaktionen
2
Punkte
8
Hi @RalfPeter

Vielen Dank für das Skript. Es funktioniert bei mir tadellos mit deinem Strato Script für IPv6.

Nur eine Verständnisfrage - Bis dato konnte ich immer mit IPv4 arbeiten, jetzt bin ich aber bald auf Glasfaser und muss ja sozusagen über IPv6 gehen. Muss ich denn jetzt überhaupt noch zusätzlich die IPv4 updaten, und reicht es in Zukunft aus nur die IPv6 im Update zu haben.

(Ich bereite mich gerade schon auf den Wechsel auf Glasfaser vor in 7 Tagen ist es so weit. Daher weiß ich noch nicht wie es funktioniert und stelle vermutlich zu doofe Fragen)

Also was passiert, wenn ich durch einen Reconnect der Fritzbox eine neue IPv4 erhalte? Erhalte ich dann auch auf der Synology eine neue IPv6 dass ich das überhaupt mit dem Script updaten muss? So wie ich verstanden habe, hat die Synology doch immer die gleiche IPv6, wozu bräuchte ich dann dieses Update-Skript?

Kann ich dann die IPv4 Ports-Routen zur NAS eliminieren, oder müssen diese auch noch bestehen bleiben?

Irgendwie bin ich wohl gerade noch in böhmischen Dörfern unterwegs, und dort gibt es nur Bücher mit 7 Siegel. :-D
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat