DDNS Updater DDNS Updater 2: Wünsche und Verbesserungsvorschläge - Requests and suggestions

Andy+

Benutzer
Sehr erfahren
Mitglied seit
25. Jan 2016
Beiträge
5.357
Punkte für Reaktionen
481
Punkte
189
Bei denen bin ich auch. Jetzt hab ich gesehen, dass nur noch Reseller neue Konten anlegen können, die kostenlos sind, momentan ist das kein Thema, meine reichen noch. Deren Update URL sieht für die Synology zB. immer so aus

https://update.spdyn.de/nic/update?hostname=__HOSTNAME__&myip=__MYIP__

Für Strato dann

https://dyndns.strato.com/nic/update?hostname=__HOSTNAME__&myip=__MYIP__

Als Anbieter habe ich dann für jede Hinterlegung den Namen mit Nummer stehen SPDNS_01, SPDNS_02, SPDNS_03, .... , da DSM 6 und auch DSM 7 keine gleichnamigen Einträge ausgewählt werden können, die gehen genau 1 mal.

Eigentlich sehr einfach. Nur die Update-URL´s sind teils tricky. Ich habe mir zB. mal dynv6.com angeschaut, die arbeiten mit einem Token und wie da die URL aussehen muss, weiss ich noch nicht ganz, bislang bastel ich da noch dran rum.
 

kader

Benutzer
Mitglied seit
30. Mai 2012
Beiträge
198
Punkte für Reaktionen
12
Punkte
24
Eigentlich sehr einfach. Nur die Update-URL´s sind teils tricky. Ich habe mir zB. mal dynv6.com angeschaut, die arbeiten mit einem Token und wie da die URL aussehen muss, weiss ich noch nicht ganz, bislang bastel ich da noch dran rum.
Das kann ich bestätigen. Ich musste mich erst durch verschiedene Foren wühlen, um die richtige Lösung zu bekommen - kostete mich einige Stunden in der Nacht:

Zum Vergleich:
https://update.spdyn.de/nic/update?hostname=__HOSTNAME__&myip=__MYIP__
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.159
Punkte für Reaktionen
912
Punkte
424
Die Methode funktioniert nur mit ipv4, oder?
 

Andy+

Benutzer
Sehr erfahren
Mitglied seit
25. Jan 2016
Beiträge
5.357
Punkte für Reaktionen
481
Punkte
189

maulsim

Benutzer
Mitglied seit
24. Mai 2016
Beiträge
553
Punkte für Reaktionen
46
Punkte
48
Die Methode funktioniert nur mit ipv4, oder?
Ja, der Synology DDNS kann nur IPv4 ermitteln... außer für seinen eigenen ddns. Aber für Custom Update URLs steht nur IPv4 zur Verfügung
 

Andy+

Benutzer
Sehr erfahren
Mitglied seit
25. Jan 2016
Beiträge
5.357
Punkte für Reaktionen
481
Punkte
189
Im DDNS Updater 2 sehe ich aber auch keine IPv6-Adressen. Ich hatte bislang auch dort nicht den Eindruck, dass welche aktiv sind.
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.159
Punkte für Reaktionen
912
Punkte
424
Meine Frage war zugegeben zur Hälfte rhetorisch, weil ich mir sicher war, dass Synology IPv6 nur für den eigenen Dyndns Dienst unterstützt und sich vermutlich nichts dran geändert hatte in der Zwischenzeit.

DDNS Updater 2 unterstützt Sie aber, wenn es der entsprechende Dienst hergibt (IPv6 für Provideranschluss, Router, NAS mal vorausgesetzt).

Auch Docker Container wie https://hub.docker.com/r/qmcgaw/ddns-updater/ tun dies.

Von alleine, wenn man nicht den Internetanschluss via Assistenten mal neu einrichtet, ändert sich am lokalen Netz natürlich nix, wenn man da seit jeher nur ipv4 im Router aktiv hat.

Hängt halt von den jeweiligen Gegebenheiten ab, was eingesetzt werden kann und will.

IPv6 Verbreitung nach Google
https://www.google.de/ipv6/statistics.html
Mit knapp zwei Drittel für Deutschland spiegelt dies denke ich die Verteilung von DS Lite in Kabelnetzen, oftmals bei Glasfaser, und auch immer öfter bei xDSL (Telekom mal außen vor vermutlich) bei uns wieder. Zusammen mit der Bevorzugung der IPv6 Verbindung im Verkehr.
Die Masse ist eben der reine Konsum Schluss (eingehender Verkehr), die interessiert auch nicht wie die Technik und Protokolle dahinter aussehen, HAUPTSACHE Telefon, Youtube, Netflix, Deezer und Co. funktionieren.
 

Andy+

Benutzer
Sehr erfahren
Mitglied seit
25. Jan 2016
Beiträge
5.357
Punkte für Reaktionen
481
Punkte
189
Wie das schlussendlich richtig eingerichtet werden kann, dafür bin ich nun nicht der Experte. An meinem Telekomanschluss mit einer FB7590 habe ich IPv4 und IPv6 zur Verfügung. Bei Strato und SPDYN sehe ich nichts von IPv6-Adressen.

Aber deb Docker-Container werde ich mal testen, der sollte dann wohl auch auf DSM 7 laufen.
 

synfor

Benutzer
Sehr erfahren
Mitglied seit
22. Dez 2017
Beiträge
9.033
Punkte für Reaktionen
1.615
Punkte
308
@kader wolltest du in #142 nicht die von dir gefundene Update-URL mitteilen? Jedenfalls liest sich der Beitrag so. Außerdem ergibt die Vergleichs-URL alleine keinen Sinn. Womit soll die denn verglichen werden?
 

Andy+

Benutzer
Sehr erfahren
Mitglied seit
25. Jan 2016
Beiträge
5.357
Punkte für Reaktionen
481
Punkte
189
Ich hatte das so verstanden, dass er mit meinen vergleicht.
 

synfor

Benutzer
Sehr erfahren
Mitglied seit
22. Dez 2017
Beiträge
9.033
Punkte für Reaktionen
1.615
Punkte
308
@Andy+ seine Vergleichs-URL ist doch lediglich die Wiederholung deiner ersten URL. Außerdem endet der erste Absatz mit einem Doppelpunkt. Da sollte dann eigentlich so wie beim nächsten Absatz noch was kommen. Tut es aber nicht.
 

Andy+

Benutzer
Sehr erfahren
Mitglied seit
25. Jan 2016
Beiträge
5.357
Punkte für Reaktionen
481
Punkte
189

Der Container startet kurz und geht wieder auf Stop, ich nehme an, das hängt mit den Berechtigungen zusammen, vlt. passt auch die Dockerversion nicht zum Image.

Ein Versuch wars wert.
 

maulsim

Benutzer
Mitglied seit
24. Mai 2016
Beiträge
553
Punkte für Reaktionen
46
Punkte
48
Ich habe mir für Strato mal folgendes Skript auf Basis von diesem gebaut: https://gist.github.com/harald-aigner/2282735f202cbb38f6893d4daec6f5fe#file-spdyn_update-sh
Das Skript im Github ist für spDYN, macht aber nur IPv4. DIe Variante unten macht zusätzlich IPv6.

Aufgerufen wird das Skript dann über den Aufgabenmanager alle 5 Minuten mit dem Befehl
Bash:
bash /volume1/MEIN/PFAD/ZUM/SKRIPT/update_dyndns.sh mysubdomaintoupdate.mymaindomain.com mymaindomain.com
Für das Update mehrerer Domains wiederhole ich diesen Befehl im Skript-Feld des Aufgabenplanners einfach

Ich habe im Skript den UPDATE_TOKEN hinterlegt und der muss natürlich entsprechend korrekt gesetzt werden.
Die UPDATE_URL verweist entsprechend auf strato, könnte aber auch spDYN sein. Wobei dann die <MAIN_DOMAIN> nicht mehr gebraucht wird, sondern der Username die zu aktualisierende Domain ist (siehe Github-Link).

Hinweis: Ich bin kein Linux Skript Profi, gibt also sicherlich schönere Varianten, aber es tut seinen Dienst ;).

Bash:
#!/bin/sh
if [ $# -ne 2 ]
then
  echo "Usage: $0 <HOST_NAME> <MAIN_DOMAIN>"
  exit 1
fi

HOST_NAME=$1
MAIN_DOMAIN=$2
UPDATE_TOKEN="MYVERYSECRETUPDATETOKENOFSTRATO"
DATE=`date "+%Y-%m-%d %H:%M:%S"`
UPDATE_URL="https://dyndns.strato.com/nic/update"
CHECK_IP4_URL="http://checkip4.spdyn.de"
CHECK_IP6_URL="http://checkip6.spdyn.de"
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"


ip4_file="$SCRIPT_DIR/${HOST_NAME}_ip4"
ip6_file="$SCRIPT_DIR/${HOST_NAME}_ip6"
old_ip4="<not available>"
old_ip6="<not available>"

if [ -r ${ip4_file} ]
then
  old_ip4=$(cat ${ip4_file})
fi
if [ -r ${ip6_file} ]
then
  old_ip6=$(cat ${ip6_file})
fi

ip4=$(curl -s ${CHECK_IP4_URL})
ip6=$(curl -s ${CHECK_IP6_URL})
if [ -z "${ip4}" ] || [ -z "${ip6}" ]
then
  echo "${DATE}: error retrieving IP"
  exit 1
fi
if [ "${ip4}" = "${old_ip4}" ] && [ "${ip6}" = "${old_ip6}" ]
then
  echo "${DATE}: no IP change (${ip4}, ${ip6})"
  exit 0
fi

echo "${DATE}: detected new IP: ${old_ip4} -> ${ip4} and ${old_ip6} -> ${ip6}"
echo "${ip4}" > "${ip4_file}"
echo "${ip6}" > "${ip6_file}"
response=$(curl -u "${MAIN_DOMAIN}:${UPDATE_TOKEN}" "${UPDATE_URL}?hostname=${HOST_NAME}&myip=${ip4},${ip6}")
echo "${DATE}: response: ${response}"
 
  • Like
Reaktionen: philipprem

Andy+

Benutzer
Sehr erfahren
Mitglied seit
25. Jan 2016
Beiträge
5.357
Punkte für Reaktionen
481
Punkte
189
Ich habe nochmals probiert, kein Erfolg, mit dem DSM 7 das gleiche. Findet in der Config jemand den Fehler?

Code:
{
   "cap_add" : null,
   "cap_drop" : null,
   "cmd" : "",
   "cpu_priority" : 50,
   "devices" : null,
   "enable_publish_all_ports" : false,
   "enable_restart_policy" : false,
   "enabled" : true,
   "entrypoint_default" : "/updater/app",
   "env_variables" : [
      {
         "key" : "PATH",
         "value" : "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
      },
      {
         "key" : "CONFIG",
         "value" : ""
      },
      {
         "key" : "PERIOD",
         "value" : "5m"
      },
      {
         "key" : "UPDATE_COOLDOWN_PERIOD",
         "value" : "5m"
      },
      {
         "key" : "PUBLICIP_FETCHERS",
         "value" : "all"
      },
      {
         "key" : "PUBLICIP_HTTP_PROVIDERS",
         "value" : "all"
      },
      {
         "key" : "PUBLICIPV4_HTTP_PROVIDERS",
         "value" : "all"
      },
      {
         "key" : "PUBLICIPV6_HTTP_PROVIDERS",
         "value" : "all"
      },
      {
         "key" : "PUBLICIP_DNS_PROVIDERS",
         "value" : "all"
      },
      {
         "key" : "PUBLICIP_DNS_TIMEOUT",
         "value" : "3s"
      },
      {
         "key" : "HTTP_TIMEOUT",
         "value" : "10s"
      },
      {
         "key" : "DATADIR",
         "value" : "/updater/data"
      },
      {
         "key" : "LISTENING_PORT",
         "value" : "8000"
      },
      {
         "key" : "ROOT_URL",
         "value" : "/"
      },
      {
         "key" : "BACKUP_PERIOD",
         "value" : "0"
      },
      {
         "key" : "BACKUP_DIRECTORY",
         "value" : "/updater/data"
      },
      {
         "key" : "LOG_LEVEL",
         "value" : "info"
      },
      {
         "key" : "LOG_CALLER",
         "value" : "hidden"
      },
      {
         "key" : "SHOUTRRR_ADDRESSES",
         "value" : ""
      },
      {
         "key" : "TZ",
         "value" : ""
      }
   ],
   "exporting" : false,
   "id" : "xxxxxxxxxxxxxxxxxxxxxxx",
   "image" : "qmcgaw/ddns-updater:latest",
   "is_ddsm" : false,
   "is_package" : false,
   "links" : [],
   "memory_limit" : 0,
   "name" : "qmcgaw-ddns-updater",
   "network" : [
      {
         "driver" : "bridge",
         "name" : "bridge"
      }
   ],
   "network_mode" : "bridge",
   "port_bindings" : [
      {
         "container_port" : 8000,
         "host_port" : 8010,
         "type" : "tcp"
      }
   ],
   "privileged" : false,
   "shortcut" : {
      "enable_shortcut" : false
   },
   "use_host_network" : false,
   "volume_bindings" : [
      {
         "host_volume_file" : "/docker/ddnsupdater",
         "mount_point" : "/updater/data",
         "type" : "rw"
      }
   ]
}

Das habe ich auch getestet, gleiches Ergebnis:

# Owned by user ID of Docker container (1000)
chown -R 1000 data
# all access (for creating json database file data/updates.json)
chmod 700 data
# read access only
chmod 400 data/config.json
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.159
Punkte für Reaktionen
912
Punkte
424
Habs per docker-compose am Laufen, im Host Mode.

Code:
version: "3.7"
services:
  ddns-updater:
    image: qmcgaw/ddns-updater
    container_name: ddns
    network_mode: host
    dns:
      - 9.9.9.9
      - 1.1.1.1
    volumes:
      - /volume1/docker/ddns:/updater/data
    environment:
      - CONFIG=
      - PERIOD=5m
      - UPDATE_COOLDOWN_PERIOD=5m
      - PUBLICIP_FETCHERS=all
      - PUBLICIP_HTTP_PROVIDERS=all
      - PUBLICIPV4_HTTP_PROVIDERS=all
      - PUBLICIPV6_HTTP_PROVIDERS=all
      - PUBLICIP_DNS_PROVIDERS=all
      - PUBLICIP_DNS_TIMEOUT=3s
      - HTTP_TIMEOUT=10s

      # Web UI
      - LISTENING_PORT=8000
      - ROOT_URL=/

      # Backup
      - BACKUP_PERIOD=0 # 0 to disable
      - BACKUP_DIRECTORY=/updater/data

      # Other
      - LOG_LEVEL=info
      - LOG_CALLER=hidden
      - SHOUTRRR_ADDRESSES=
    restart: always

Code:
drwx------  1 1000 users  104 Dec  6  2021 .
drwxr-xr-x+ 1 root root    96 Jul  2 17:11 ..
-rwx------  1 root root  1685 Nov 19  2021 backup.json
-r--------  1 1000  1000 1685 Nov 19  2021 config.json
-rw-r--r--  1 root root   805 Dec  6  2021 docker-compose.yml
-rw-------  1 1000  1000 4244 Oct 24 09:03 updates.json
 
Mitglied seit
04. Jan 2016
Beiträge
4
Punkte für Reaktionen
1
Punkte
1
Ich habe endlich auf DSM 7 (bzw. 7.1 aktualisiert) und wollte nun endlich auch einmal das DDNS-Problem angehen, um die DS per IPv6 anzusprechen. Für die Fritzbox nutze ich nsupdate.info, wo das auch seit über 8 Jahren mit IPv4 und IPv6 läuft.
Ich habe ein 6 Jahre altes Bash-Skript ergoogelt, und frage mich, ob das funktionieren könnte? Und es dann einfach per chmod ausführbar machen und dann per crontab alle 5 Minuten oder so aufrufen. Im Kommentar zu dem Skript ist eine Version, die auch IPv6 kann. Die Sache ist ja eigentlich ganz einfach - warum sollte das unter DSM7.1 nicht mehr funktionieren?
https://gist.github.com/raphiz/837453f189dca966a69c
 

Andy+

Benutzer
Sehr erfahren
Mitglied seit
25. Jan 2016
Beiträge
5.357
Punkte für Reaktionen
481
Punkte
189
Da hilft wohl nur testen .... ;)
 
Mitglied seit
04. Jan 2016
Beiträge
4
Punkte für Reaktionen
1
Punkte
1
Ja, bin gerade dabei. Habe das Skript mit Änderungen jetzt prinzipiell zum funktionieren gebracht, aber es gibt noch einige Teile, die mir noch nicht gefallen.

Ein Problem war, dass der DNS-Server Fritzbox bei einem von der Synology aus gesendeten nslookup mydomain.nsupdate.info nur die IPv4-Adresse und nicht die globale IPv6-Adresse geliefert hat. Das ist im Normalfall vermutlich sinnvoll, damit es keine Probleme gibt, intern auf ein Gerät zuzugreifen. Aber hier wird die Anfrage (per "socket.getaddrinfo") nur aus dem Grund gemacht, um zu überprüfen, welche IPv6-Adresse der DNS-Server gespeichert hat, so dass nur bei einer Änderung ein Update durchgeführt wird.

Daher nutze ich nun nslookup mit awk, um einen anderen DNS-Server spezifizieren zu können, der diese Filterung nicht durchführt. Das ist vermutlich nicht ganz so fehlersicher wie "getaddrinfo". Vermutlich sollte man hier sowieso bei den Variablen noch einen Check durchführen, ob es gültige IPv4 und IPv6 Strings sind.

Das IPv6-Skript im Kommentar war auch sehr gehackt und es der Output ins Log war noch nicht gut für IPv6 angepasst.

Und generell wird das Update am 1. des Monats immer ausgeführt. Schlecht wenn man das Skript per crontab alle 5 oder 10 Minuten aufrufen möchte.
 


 

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