spdns Dynamic DNS Update-Client

Dyn stops its free service.

I’ve chosen Spdns as an alternative. A service of Secure Point GmbH .
One may invest up to 5 hosts there and can choose between several top-levels-domains.
Registration is simple and straightforward and requires only a username/password and an email-address for submission.
You can reach the service at spdns.de .

The only problem was that my router has no way to deal with this service.

So I have written a small, fast update client in C that easily can be compiled and installed on the BeagleBone Black, Banana Pi or Raspberry Pi.
The update client does not run as a daemon, but is controlled by a CRON job.
And if you landed on this page, it means that it is still running and works 😉
Each time the update client checks the current IP by calling a Web page that returns the IP address of the calling client, and only then performs an update if the IP has changed since the last call.
You can choose freely, on which side its own IP is checked. Tested are the sides of DynDNS http://checkip.dyn.com/ and the side of spdns.de http://checkip.spdns.de/.
Since the IP address is searched with a regular expression, it should also work for other sides.

The client now supports Basic Authentication for updating the IP, so it should also work with other services such as No-IP. This is not tested yet this since I have no account there.
If someone gives it a try a feedback would be nice if it worked .

I am not liable for errors contained herein or for any damages arising in connection with the use of the software.

Update 28.12.2014: Thanks to the support of Leitwolf this version has become much more user-friendly: you no longer have to fiddle around in the source code, but can (almost) make all the settings in the config file. For here again a big thanks!!

Installation for SPDNS in short!

  • Download the Binary: Download Binary-Paket
  • Umpack the compressed file with
    tar -zxvf spdnsUpdater_bin.tar.gz
  • Move the file „spdnsu.conf“ to the folder „/etc/“ with
    mv spdnsu.conf /etc/
  • Create a folder in your home-directory
    mkdir /home/YourUserName/updater
  • Move the binary „spdnsu“ to the folder with
     mv spdnsu /home/YourUserName/updater/
  • Make the file „spdnsu“ executable with
    chmod u+x /home/YourUserName/updater/spdnsu
  • Set the right permissions for the folder with
    chown -R YourUserName:YourUserName /home/YourUserName/updater/
  • Adjust the file „/etc/spdnsu.conf“:
    You can register up to 5 HOSTs. If Update-Tokens are used ( see this artikel ) set parameter „isToken = 1“. For authentication with username and password set „isToken = 0“.

    # path of log file. File must be writeable.
    logfile = /home/YourUserName/updater/spdnsu.log
    
    [HOST]
    host = host1.spdns.de
    user = username
    pwd  = password
    isToken = 1
    
    [HOST]
    host = host2.spdns.de
    user = username
    pwd  = password
    isToken = 1
    .
    .
    .
    
  • Become user YourUserName with
    su - YourUserName
  • Setting up the cron job::
    EDITOR=nano crontab -e

    Add here the following line

    */10 * * * * /home/YourUserName/updater/spdnsu 
  • For testing start the programe manually once with
    ./home/YourUserName/updater/spdnsu

    If everything goes right, 2 new files should have been created: The log-file ( /home/YourUserName/updater/spdnsu.log ) and the IP-file ( /tmp/spdnsuIP.cnf ). In the log file should be an entry, that the IP has been updated successfully and in the IP file should now be the current IP.

    Log-Datei:

    Log: IP from host host1.spdns.de updated to 111.222.333.444 	 Time: Mon Apr 28 21:55:37 2014
    Log: IP from host host2.spdns.de updated to 111.222.333.444 	 Time: Mon Apr 28 21:55:37 2014

    IP-Datei:

    currentIP=111.222.333.444
    

And done!!

If you want to change a little more, adjust or compile it yourself: here are the

Detailed Instructions

Download

The update client can be downloaded as source code or as a binary.

Source-Paket: Download Source-Paket
Binary-Paket: Download Binary-Paket

Installation

Each package consist of 2 files. spdnsUpdater.c and spdnsu.conf in the source package and spdnsu.conf and spdnsu in the the binary package.

  1. unpack
  2. First, the archive must be unpacked. For this purpose, enter

     tar-zxvf spdnsUpdater_src.tar.gz 

    for the source package or

     tar-zxvf spdnsUpdater_bin.tar.gz 

    for the binary package.

  3. Customize source code – only for the source package (optional)
  4. In this version is no longer necessary, because everything can be set in the config file. Only when you want to use your own host to check your IP, it must be entered in the list and the variable NUMBER_IP_HOSTS needs to be adjusted.

    So the Code line

    char * ipHost[NUMBER_IP_HOSTS] = { "checkip.spdns.de", "checkip.dyn.com", "checkip.dyn.org" }; 
    

    is changed to

    char * ipHost[NUMBER_IP_HOSTS] = { "my.updatehost.com", "checkip.spdns.de", "checkip.dyn.com", "checkip.dyn.org" }; 
    
  5. Compile – only for the source package (optional)
  6. The source file is compiled by using the command

    gcc spdnsUpdater.c -o spdnsu 

    .
    The option „-o spdnsu“ specifies the name of the compiled program. This is optional.

    Now copy the compiled file to the desired location and make it executable with the command

     chmod u+x spdnsu 

    .

  7. Configuration
  8. The following default values are now set for the program:

    • The config file: /etc/spdnsu.conf If you want to use a different path, the path to the config file can be passed to the the program as a command line parameter (spdnsu –configfile=/path/to/spdnsu.conf)
    • The log file: /home/pi/spdnsu.log If you want to use a different path, the path can be changed in the config file
    • The IP file: /tmp/spdnsuIP.cnf This file contains the current IP address. If you want to take a different path, the path can be changed in the config file
    • Update Host: update.spdnsu.de This is the update-host of the provider where the new IP address should be stored. By default it is set to SPDNS.de with the Update Host „update.spdns.de“

    So adjust the config-file to your needs and store it to a suitable place ( default is /etc/spdnsu.conf )

     
    # path of log file. File must be writeable.
    # logfile = /home/pi/spdnsu.log
    
    # the name of the file, where the current IP is stored. File must be writeable.
    # ipFile = /tmp/spdnsuIP.cnf
    
    [HOST]
    # URL for the Host to be updated, e.g. update.spdns.de (SPDNS) or dynupdate.no-ip.com (No-IP). 
    # updateHost = update.spdns.de
    host = host1.spdns.de
    user = user1
    pwd  = password1
    isToken = 1
    
    [HOST]
    # URL for the Host to be updated, e.g. update.spdns.de (SPDNS) or dynupdate.no-ip.com (No-IP)
    updateHost = dynupdate.no-ip.com
    host = host2.no-ip.com
    user = user2
    pwd  = password2
    isToken = 0
    .
    .
    .
    

    The entry „host“ is the complete name of your registered host whose IP needs to be kept up to date, something like „example.spdns.org“. In addition, the Username (user) and password (pwd) to the host.
    New:
    SPDNS offers the possibility not to transfer user name and password for authenticating when updating a host, but only the host name and an update token. This token is generated individually for each host in the Administration area on the side of SPDNS.de and is valid only for this host.
    If Update-Tokens are used, enter the Token in the password-field and set the value isToken to 1.
    For Informations to Update-Tokens see Article Update-Tokens from Securepoint.

  9. Test
  10. That’s all. With the command

    ./spdnsu [--configfile=/path/to/spdnsu.conf]

    start and test the program. If everything goes right, 2 new files should have been created: The log-file and the IP-file. In the log file should be an entry, that the IP has been updated successfully and in the IP file should now be the current IP.
    Log-File:

     Log: IP from host host1.spdns.de updated to 111.222.333.444 	 Time: Mon Apr 28 21:55:37 2014
    Log: IP from host host2.spdns.de updated to 111.222.333.444 	 Time: Mon Apr 28 21:55:37 2014

    IP-File:

    currentIP=111.222.333.444
    

    For safety, you should also check your account, if the update has actually worked.

Set up the CRON job

If everything worked, now the corresponding CRON job needs to be set up, so that the IP-Check and the Update are done periodically.

For this use the command

crontab -e

to open the table with the cron jobs (crontab) in the default text editor.

If the programm is to be started every 10 minutes, add the line

*/10 * * * * /home/pi/spdnsu [--configfile=/path/to/spdnsu.conf]

The path „/home/pi/spdnsu“ needs to be adapted to your system. And if the path to the config file is not /etc/spdnsu.conf, it must be set.

A more detailed description of cron can be found here

Now save the file and you’re ready!

For questions or problems just leave a comment .

102 Gedanken zu “spdns Dynamic DNS Update-Client

  1. Moin,

    die korrekte Domain zur Anzeige der eigenen IP ist „checkip.spdns.de“. Die anderen Hosts hatten nur funktioniert, weil es der Default-VHost war. Das haben wir umgestellt, daher die Verwirrung.

  2. Tach auch, kann es sein das Token nicht korrekt verarbeitet werden? Mit dem Account-PW klappt es, mit einem extra generiertem Token (eigentlich eine super Sache!) leider nicht.

    Lg Jack

    • Hey Jack

      Ehrlich gesagt hab ich mich mit diesem Token noch nicht beschäftigt. Danke für den Hinweis.
      Es kann sein, dass das Token in der Update-URL stehen und als Klartext gesendet werden muss. Ich mach ja erst das Base64-Encoding mit Nutzernamen und Passwort und schicke es dann mit.
      Ich werde das mal klären und die neuen Sourcen dann hier rein stellen. Schau einfach in ein paar Tagen nochmal vorbei.

      Bjoern

    • Hey Jack

      Hat ein wenig länger gedauert, ich hab gerade viel um die Ohren.
      Der Fehler lag darin, dass bei Einsatz des Tokens nicht der Nutzername, sondern der Host eingetragen werden muss.
      Das hatte ich völlig übersehen – Danke an Erik für den Hinweis.

      Die neuen Dateien stehen jetzt zum Download bereit.

      Gruß Bjoern

  3. Update 22.09.14

    Nach dem Hinweis von Jack, dass die Update-Token nicht unterstützt werden, habe ich das Programm angepasst, so dass das jetzt auch funktioniert.
    Gleichzeitig habe ich die Update-Url von SPDNS „update.spdns.de“ korrigiert.

    Wer die alte Version weiter nutzen und trotzdem mit Update-Tokens arbeiten möchte, muss in der Config-Datei den Nutzernamen mit dem Hostnamen und das Passwort mit dem Update-Token ersetzen.

    Zu Update-Tokens siehe Artikel Update-Tokens von Securepoint.

  4. Moin Björn,

    mir gefällt das kleine Tool und ich nutze es auf dem Raspi. Ich habe ein paar Änderungen am Source gemacht die ich gerne zurückgeben würde. Kann man dir auch eine Mail schicken? Impressum habe ich keines gefunden ^^

  5. Hi,
    vielen Dank für das fast nützliche Programm. Fast nützlich bei mir, da ich mich mit DS-Lite rumschlagen darf und bisher nur die vierstellige IP übermittelt wird. Gibts einen Trick wie ich das auch mit einer sechsstelligen schaffe?
    Schönes Wochenende!

    • Moin

      Wenn du eine IP-V6 Adresse meinst, musst du „nur“ die RegEx in der Funtion „checkIP“ umbauen. Das steht noch auf meiner ToDo-Liste, aber leider sind regular Expressions so gar nicht mein Spezialgebiet. Ich hab mir die hier zusammengebaut nach den Anleitungen auf dieser Seite http://www.zytrax.com/tech/web/regex.htm.

      Aber vielleicht kommt ja hier jemand vorbei, der helfen kann. Sonst kannst du auch im Netz suchen. Ein paar Anleitungen waren dort auch zu finden.

      Wenn du das hin bekommst, werd ich den Code gerne erweitern, so dass das Programm mit beiden klar kommt.

      Gruß Bjoern

  6. Hi Namensvetter,
    danke für das Programm, ich musste es ja gleich mal ausprobieren. Wenn ich aber meine Config-Datei nicht in /etc habe sondern direkt daneben und dann mit ./spdnsUpdater –configfile ./spdnsu.conf aufrufe, bekomme ich „Speicherzugriffsfehler (Speicherabzug geschrieben)“
    Das selbe, wenn ich den absoluten Pfad angebe. Vielleicht kannst du da noch mal dran?
    Viele Grüße

    • Klar .. mach ich natürlich .. Ich komme aber erst morgen dazu.

      Aber noch kurz zur Info?
      Wenn du die Konfig in /etc/ hast läuft es?
      Und worauf hast du es denn laufen?

      Gruß Bjoern

        • Ah, OK.

          Ich fürchte, dann wirst du dir leider die Sourcen runter laden und selbst kompilieren müssen. Die Anleitung dazu steht auch im Artikel weiter unten.
          Die Datei ist nämlich auf einem Raspberry für Raspberrys, also ARM-Prozessoren kompiliert worden, und die haben eine etwas unterschiedliche libc. Ich denke mal, dass es deshalb bei der Parameterübergabe mit –configfile knallt.
          Auf meinen Pi’s konnte ich den Fehler nämlich nicht nachvollziehen.

          Gruß Bjoern

          • Leider ist es tatsächlich so gewesen, dass ich es direkt selbst kompiliert habe… Ich glaube auch kaum, dass das ARM-Kompilat auf einem x86 laufen würde, schon allein wegen des unterschiedlichen Prozessor-Befehlssatzes…
            Aber es läuft ja auch so, wenn ich es in dem Standard-Pfad lege.

          • Schade – ich hatte ehrlich gehofft, dass es so einfach wäre 🙂
            Dann muss ich doch nochmal nachsehen – aber da komme ich im Moment nicht wirklich zu.

            Gruß Bjoern

  7. Hallo zusammen,

    bin dringend auf der Suche nach genau so einem Tool. Leider bekomme ich es auf dem Raspberry Pi nicht zum laufen.

    Beim Schritt
    Einen Ordner im home-Verzeichnis erstellen mit
    mkdir /home/YourUserName/updater

    Bekomme ich die Fehlermeldung dass es dieses Verzeichnis nicht gibt.

    An welchen Stellen weicht denn die Anleitung ab?

    Würde mich sehr freuen wenn ich das Tool irgenwie auf meinem Pi zum laufen bekomme.

    Gruß Daniel

    • Hey Daniel

      Du musst den Teil mit YourUserName mit einem existierenden Nutzernamen ersetzen .. Auf dem Raspberry ist das dann der User „pi“ .. falls du keine weiteren Nutzer angelegt hast.
      Also wäre der Befehl für dich
      mkdir /home/pi/updater

      Gruß Bjoern

  8. Hey.. danke für die flotte Antwort. Hatte ich ganz übersehen.
    Bin jetzt etwas weiter , bekomme aber beim Punkt

    ./home/pi/updater/spdnsu

    Den Hinweiß :
    pi@raspberrypi ~ $ ./home/pi/updater/spdnsu
    -bash: ./home/pi/updater/spdnsu: No such file or director

    Wo kann ich noch was falsch gemacht haben?

    Gruß Daniel

  9. Na das sieht so aus, als ob entweder die Datei, das Verzeichnis oder Beides noch nicht da ist.
    Also wenn du mit

    mkdir /home/pi/updater

    das Verzeichnis angelegt hast, musst du die Datei spdnsu noch dort rein kopieren ..

    Das sollte schon helfen 🙂

    Gruß Bjoern

  10. Hallo,
    Ich habe ein raspi 2 mit ubuntu Mate.
    Ich habe das Binary herunter geladen und auch alles wie du es in der anleitung beschrieben hast durchgeführt.

    Allerdings werden keine Log dateien erstellt wenn ich die spdnsu ausführe. Woran liegt das? In der conf habe ich den pfad für die logdatei angepasst.

    • Hallo Florian

      Also wenn da da einfach nur keine Log-Datei erscheint, könnte es einfach schon daran liegen, dass vielleicht der Pfad zur Log-Datei falsch ist oder du keine Schreibrechte an dem Ort hast, wo die Log-Datei geschrieben werden soll.

      Wenn du das Programm in der Konsole aufrufst und etwas stimmt nicht, kämen entweder Fehler in der Konsole oder in der Log-Datei. Allerdings überprüfe ich nicht, ob die Log-Datei schreibbar ist .. das könnte ich in der Tat noch nachholen.

      Ich hoffe, du kommst damit weiter.

      Gruß Bjoern

  11. Hallo Bjoern,

    habe das Skript soweit jetzt am laufen. Eine letze Frage hätte ich allerdings noch :).
    Wie kann ich denn das Update Intervall ändern?

    habe jetzt einfach statt */10 * * * * /home/YourUserName/updater/spdnsu */5 * * * * /home/YourUserName/updater/spdnsu

    eingegeben.. geht das so?

    Beste Grüße

  12. hm.. der Job wird aber leider weder mit den 10 min noch mit den 5m ausgeführt und die IP wird nur aktualisiert wenn ich den Raspberry Pi neustarte.

  13. Hallo,

    die Anleitung hat mir sehr geholfen. Allerdings bekomme ich in der Log-Datei immer eine Fehlermeldung
    Fri Sep 11 23:05:12 2015 – The IP didn’t change since the last update.
    Fri Sep 11 23:05:12 2015 – An invalid username and / or an invalid password has been entered.

    ich verwende Token und habe somit unter user ebenso den Host angegeben

    wenn ich ./home/pi/updater/spdnsu ausführen möchte, bekomme ich auch folgende Meldung -bash: ./home/pi/updater/spdnsu: No such file or directory

    auch aktualisiert sich die log-Datei nicht durch den cronjob, nur wenn ich den RaspPi neu starte.

    Was mache ich falsch

    Gruß
    Andreas

    • Hey Andreas

      Ich denke, die Fehlermeldung
      Fri Sep 11 23:05:12 2015 – The IP didn’t change since the last update.
      kommt daher, dass die Datei spdnsuIP.cnf nicht angelegt werden konnte. Check bitte mal, ob die Datei vorhanden ist.

      Auch wenn du Tokens verwendest musst du unter user deinen Benutzernamen eingeben – das sollte das Problem beheben.

      Wenn ./home/pi/updater/spdnsu nicht funktioniert schau bitte mal, ob die Datei ausführbar ist, also wenn du auf der Konsole ls -l eingibst, sollte das ungefähr so aussehen:
      -rwxr-xr-x 1 root root 19095 Dez 27 2014 spdnsu*
      Wichtig ist da das x

      Ich hoffe, das hilft dir weiter

      Gruß Bjoern

  14. Hallo,

    Den Link, den Du oben genannt hast (http://wiki.securepoint.de/index.php/SPDNS_Update-Tokens) sagt aus, das unter Benutzername ebenfalls der Hostname eingegeben werden soll

    Im DynDNS-Client werden die Zugangsdaten jetzt wie folgt hinterlegt (alle anderen Einstellungen können der SPDNS FAQ entnommen werden):
    Hostname = Hostname
    Benutzername = Hostname
    Kennwort = Update-Token

    Die Datei/Ordner Rechte habe ich nochmal geprüft. Die sind alle OK.
    Es wird nur bei Neustart des RaspPi eine Log Datei angelegt, bzw. aktualisiert.

    Ich weiss jetzt nicht weiter Werde es morgen nochmal versuchen

    • Hallo Andreas

      Ja, sorry. Stimmt – ich habe gerade nochmal in den Code geschaut: wenn tokens verwendet werden nutze ich den Nutzernamen gar nicht, sondern verwende den Host.
      Daran kann es also wirklich nicht liegen.

      Sorry!

      Hast du mal geschaut, ob die Datei spdnsuIP.cnf angelegt wurde?

      Ich schreibe übrigens nicht ständig in die Log-Datei. Nur bei Fehlern oder wenn die IP-Adresse upgedatet wurde.

      Wenn du Token nutzt, hast du in der Konfig-Datei isToken=1 gesetzt ?

  15. Das Ganze ist wesentlich simpler mittels Bash-Skript zu lösen.

    Einfach per Cron-Job laufen lassen:

    #!/bin/bash
    #

    # spdns.de external ip update script

    # spdns host vars
    # Hier Host und Token eintragen:
    dns_host=“meinserver.spdns.de“
    dns_token=“abcd-efgh-ijkl“

    # define response file (derived from script file)
    response_file=“$(readlink -f $0).response“

    # get external ip
    external_ip=`wget „http://checkip4.spdns.de“ -O „-“ –quiet`

    # send update request
    spdns_response=`wget –user=$dns_host –password=$dns_token „https://www.spdns.de/nic/update?hostname=$dns_host&myip=$external_ip“ -O „-“ –quiet`

    # display response
    [[ ! „`/usr/bin/tty`“ == „not a tty“ ]] && echo „“
    [[ ! „`/usr/bin/tty`“ == „not a tty“ ]] && echo „spdns update response: $spdns_response“
    [[ ! „`/usr/bin/tty`“ == „not a tty“ ]] && echo „“

    # save result into file
    echo „$spdns_response“ > $response_file

    # done
    exit 0

  16. [HOST]
    host = host1.spdns.de
    user = username
    pwd = password
    isToken = 1

    [HOST]
    host = host2.spdns.de
    user = username
    pwd = password
    isToken = 1

    was genau muss hier ich eingeben?

    ich habe mich da jetzt angemeldet auf der seite https://www.spdns.de

    wie gehe ich jetzt vor?

    • Hey Sven

      Also es gibt ja für SPDNS zwei Möglichkeiten für das Update:

      1. Normal mut Nutzernamen und Passwort
      Dann ist:
      host: Deine Adresse(URL), die du bei spdns angemeldet hast
      user: dein Nutzername, den du bei spdns hast
      pwd: dein Passwort bei spdns
      In dem Fall ist isToken=0 zu setzen.

      2. Mit Update-Token
      Schau dir dazu auch mal noch den Artikel hier an: http://wiki.securepoint.de/index.php/SPDNS_Update-Tokens
      Dann ist:
      host: Deine Adresse(URL), die du bei spdns angemeldet hast
      user: kann frei bleiben
      pwd: das bei spdns generierte Update-Token

      Die Methode mit dem Update-Token ist die bevorzugte, weil sichere Methode.

      Wenn noch Fragen sind, melde dich einfach noch mal

      Gruß Bjoern

  17. nebenbei, wie starte ich das programm?

    als beispiel
    ./spdnsu [–configfile=/path/to/spdnsu.conf]

    Fehlermeldung: „-su: /spdnsu: Datei oder Verzeichnis nicht gefunden“
    das gleiche hatte ich bei dem befehl davor auch schon

    ./home/YourUserName/updater/spdnsu

    • Hallöchen nochmal

      Wenn du dem Beispiel gefolgt bist, musst du bei ./home/YourUserName/updater/spdnsu noch den Teil „YourUserName“ mit deinem eigenen Nutzernahmen – beim Raspberry ist das in der Regel „pi“ oder auf der Banane vermutlich „sven“ oder „root“ ersetzen.

      Dann sollte es klappen

      Gruß Bjoern

      • zsh: datei oder Verzeichnis nicht gefunden: ./home/root/updater/spdnsu
        kommt als fehlermeldung immer noch….

        ich will endlich auf meinen server von außerhalb zugreifen 🙁

  18. erstmal danke björn, muss ich mal die tage testen. habe eine andere frage,

    und zwar ein kollege von mir hat es auch eingerichtet… er bekommt aber keine verbindung, wenn er den erstellten link bei spdns.de eingibt…

    kann es sein, weil der server owncloud zum beispiel unter https://IP-Addresse/owncloud
    liegt? sprich die seite spdns.de leitet ja nur an die ip weiter, aber unter der ip ist es ja quasi nicht zu erreichen?

  19. Hallo Bjoern,
    nun habe ich alles schön eingerichtet und beim Start ./spnsu wird auch die spdnsuIP.cnf erzeugt. Ich habe die Variante mit Token(1) verwendet und die bei spdns.de erzeugte TOKEN als Passwort eingetragen. Nun ist mir aufgefallen, daß die Aussage :

    Das Token für diesen Host wurde am 29.10.2015 um 19:16:47 Uhr erzeugt und seitdem 1 mal benutzt – zuletzt am 29.10.2015 um 19:59:33 Uhr

    nicht mit dem Start von ./spnsu ausgelöst wurde sondern mit einem
    ping auf den Host xx-xx.spdns.de . Kann es sein,daß der Start mit ./spnsu gar nicht stattfindet ? Allerdings gibt es auch keine Fehlermeldung – Fazit = es wird keine Log erzeugt – auch nicht nach reboot vom raspi (wie weiter oben beschrieben)

    • Hey Peter

      Das sollte völlig normal sein, denn es wird nur ein Request an spdns geschickt, wenn sich die IP-Adresse geändert hat. Vorher checkt er lediglich alle x Minuten, ob sich was geändert hat.

      In der Regel sollte dein Rechner nur 1mal am Tag einen Update-Request an spdns senden und das auch protokollieren.

      Ist also alles in Ordnung 🙂

      Gruß Bjoern

  20. Hi Bjoern,
    erstmal Hut ab für den Aufwand, den du dir hier machst!

    jetzt mein Problem: ich bekomme die Meldung, wenn ich spdnsu direkt ausführen will:
    „Error reading the config file in /etc/spdnsu.conf“

    mein Config-File schaut folgendermaßen aus (es ist in /etc):
    „““
    # path of log file. File must be writeable.
    # logfile = /home/pi/spdnsu.log

    # the name of the file, where the current IP is stored. File must be writeable.
    # ipFile = /tmp/spdnsuIP.cnf

    [HOST]
    # URL for the Host to be updated, e.g. update.spdns.de (SPDNS) or dynupdate.no-ip.com (No-IP).
    updateHost = update.spdns.de
    host = kalmero.spdns.org
    user = kalmero
    pwd = *********************+
    isToken = 0

    [HOST]
    # URL for the Host to be updated, e.g. update.spdns.de (SPDNS) or dynupdate.no-ip.com (No-IP)
    #updateHost = dynupdate.no-ip.com
    #host = host2.no-ip.com
    #user = user2
    #pwd = blah
    #isToken = 0
    „““
    Wär cool, wenn du kurz mal drüber schauen könntest, ob ich irgendwas elementares übersehen habe.
    vielen Dank dir!
    Maxi

    • Hey Maxi

      Also die Config sieht erstmal völlig OK aus!
      Sehe keinen Fehler.

      Was du noch machen könntest ist, mal explizit eine Log-Datei angeben. Die muss beschreibbar sein. Dann könntest du das Programm nochmal von Hand starten und in der Log-Datei mal nachsehen, ob dort noch irgendwelche Fehlermeldungen auftauchen. Dort schreibe ich dann die kompletten Fehlermeldungen rein. Vielleicht finden wir so raus, was ihm an der Datei nicht passt 🙂

      Gruß Bjoern

      • Hi Bjoern!
        danke für den Tipp, hab ich gemacht. Hier ist die Ausgabe, nachdem ich das Programm einmal manuell mit dem Kommano „./spdnsu“ gestartet habe:
        „““
        Mon Feb 1 07:40:34 2016 – ‚host‘ is not specified, check the config file
        Mon Feb 1 07:40:34 2016 – Error reading the config file in /etc/spdnsu.conf
        „““
        irgendwelche Ideen, woran das liegen könnte?

        • Moin

          Also das Einzige, was mir noch auffällt und was du noch versuchen könntest: entfern bitte mal die Leerzeichen vor und nach dem ‚=‘ und entfern mal den Kommentar.
          Also

          [HOST]
          updateHost=update.spdns.de
          host=kalmero.spdns.org
          user=kalmero
          pwd=*********************
          isToken=0

          Ich bin mir ziemlich sicher, dass ich das eigentlich berücksichtigt habe, aber einen anderen Unterschied zu meiner Config sehe ich da gerade echt nicht mehr.

          Gruß Bjoern

          • Hi Bjoern,
            es funktioniert jetzt, allerdings lag es nicht an den Leerzeichen.
            Was ihn offenbar gestört hat, war, dass da unter dem zweiten [HOST] alles auskommentiert war. Ich habe nun alles, was ich nicht brauche, gelöscht und fertig!

            Danke nochmal für deinen Support!
            Maxi

          • Hey Maxi

            Super und danke fürs Feedback.
            Da hätte ich natürlich auch drauf kommen können 🙂
            Werde das bei Gelegenheit vielleicht mal nachbessern.

            Gruß Bjoern

  21. Bei mir klappt es leider auch nicht … meine Config ist wie folgt:
    /etc/spdnsu.conf
    ——————————————-
    logfile = /home/odroid/updater/spdnsu.log
    ipFile = /home/odroid/updater/spdnsuIP.cnf
    [winniehome]
    updateHost = checkip.spdns.de
    host = winniehome.spdns.de
    user = user1
    pwd =
    isToken = 1
    ——————————————-
    — Error reading the config file in checkip.spdns.de
    and in the Logfile it always says:

    Fri Jan 29 15:04:34 2016 – ‚host‘ is not specified, check the config file
    Fri Jan 29 15:04:34 2016 – Error reading the config file in checkip.spdns.de

    (tried update.spdns AND checkip.spdns.de … same result)

    • Hey

      Problem erkannt.
      Du musst in der Config
      [winniathome] durch
      [HOST]

      Ersetzen. Dann sollte das schon funktionieren. Das ist ein fester Begriff, nach dem in der Datei gesucht wird.

      Gruß Bjoern.

  22. toller Guide

    habs auf meiner QNAP in nem Ubuntu Container laufen

    laut Anleitung nochmal im Ubuntu Container kompiliert damits auf x86 läuft und alles ist gut 🙂

    Danke dafür 😉

  23. Hallo Bjoern,

    vielen Dank für deine ausführliche und verständliche Anleitung – ich hatte sehr viel Freude daran sie auf meinem Raspberry Pi2 umzusetzen!

    Beim letzten und entscheidensten Schritt bekomme ich jedoch immer eine Fehlermeldung: -su: ./home/ts3/updater/spdnsu: No such file or directory

    Die Kommentare habe ich alle studiert und konnte mit den Hinweisen den Fehler einfach nicht finden:
    – die korrekten Verzeichnisse existieren
    – die spdnsu ist kopiert / existiert
    – die berechtigung ist gesetzt (chown und chmod als root ausgeführt)
    -> -rwxr-xr-x 1 ts3 ts3 19095 Dec 28 2014 spdnsu
    – spdnsuIP.cnf wurde angelegt
    -> -rw-r–r– 1 ts3 users 24 Apr 26 19:05 spdnsuIP.cnf
    – habe es mit dem pi user und einem neu erstellten user versucht

    Ich werde einfach nicht schlau daraus, was das Problem sein soll.

    Vielen Dank und Gruss
    Tobster

    • Hey Tobster

      Also wenn du das so aufrufst

      -su: ./home/ts3/updater/spdnsu
      

      könnte das Problem der Punkt am Anfang sein, also das ./ vor home.
      Der Punkt am Anfang bedeutet, dass er im aktuellen Verzeichnis anfängt, zu suchen.
      Versuch das mal, ohne Punkt, also

      -su: /home/ts3/updater/spdnsu
      

      Wenn das nicht hilft, würde mich mal interessieren, was passiert, wenn du das Programm direkt aus dem Verzeichnis startest.
      Also:

      cd /home/ts3/updater/
      ./spdnsu
      

      Bitte beachten, dass in diesem Fall der Punkt wieder davor gehört.

      Wenn auch das nicht geht, meld dich einfach noch mal.

      Gruß Bjoern

  24. Hallo Björn,
    vielen Dank für die ausführliche Beschreibung! Die Einrichtung hat wunderbar geklappt. Allerdings habe ich die folgende Warnmeldung bei Aufruf der Admin-Seite meines Hosts bekommen:

    „Bitte verwenden Sie als Update-Server in Ihrem Client „update.spdyn.de“ (Aktuelle Einstellung: update.spdns.de)“

    Wie kann ich den Update-Server einstellen? Gibt es dafür einen speziellen Eintrag in der spdnsu.conf Datei?

    Vielen Dank,
    Dirk

    • Hey Dirk

      OK, das ist neu .. per default ist der damals gültige „update.spdns.de“ eingestellt.
      Du kannst das aber in der spdnsu.conf überschreiben mit dem Parameter „updateHost“

      Das müsste dann in etwa so aussehen:
      [HOST]
      updateHost = update.spdyn.de
      host= ******
      user=******
      pwd=********
      isToken=

      Das sollte dann funktionieren.

      Gruß Bjoern

  25. # path of log file. File must be writeable.
    logfile = /home/pi/updater/spdnsu.log

    # the name of the file, where the current IP is stored. File must be writeable.
    ipFile = /home/pi/updater/spdnsuIP.cnf

    [HOST]
    # URL for the Host to be updated, e.g. update.spdns.de (SPDNS) or dynupdate.no-$
    updateHost = update.spdyn.de
    host = xxx.spdns.de
    user = xxx
    pwd = xxx
    isToken = 1

    Hallo bei mir wird keine log Datei erstellt, die cnf Datei schon mit der aktuellen IP.
    Auf der Website wird auch keine Aktualisierung angezeigt. Eine Fehlermeldung gibt es auch nicht.

    • Hallo mbi

      OK, wenn die Datei mit der IP erstellt wird, scheinen die Pfade ja zu stimmen.
      Die Config-Datei sieht auch soweit gut aus.
      Ich sehe, dass isToken = 1 eingestellt ist .. benutzt du das Update-Token oder gehst du über Nutzernahme/Passwort?
      Ist die Config-Datei unter /etc/spdnsu.conf gespeichert?

      Ansonsten sehe ich erstmal keine Fehler.

      Gruß Bjoern

  26. Wäre es denn möglich das auch auf einer VU Plus Box mit Enigma2 (ich glaube mipsel) zum Laufen zu bringen?
    Gruss Robi

    • Hey Robi

      Musste erstmal schauen, was das ist. 🙂
      Also ich denke schon, dass das möglich ist. Es wird zwar vermutlich nicht möglich sein, den Code auf der Box selbst zu kompilieren, aber du kannst es ja auf einer anderen Linux-Maschine machen und dann übertragen. Wie man den Code kompiliert, steht ja in der Anleitung .. Wie man mit gcc Cross-Compiled musst du leider googlen .. das kann ich dir so aus dem Kopf auch nicht sagen.

      Gruß Bjoern

  27. Huhu Bjoern,

    bei spdns/spdyn hat sich die Update URL geändert. Habe ich so im Sourcecode auch eingetragen (update.spdyn.de), aber das kleine Programm will einfach nicht 🙁

    Gruß Mark

  28. Hallo Bjoern!

    Vielen Dank für das hilfreiche Tool!

    Leider funktioniert es nicht zuverlässig bei mir.
    Der Crontab wird nicht ausgeführt…

    Was kann ich tun, damit er alle 10 Minuten ausgeführt wird?

    • Hey OK

      Woran machst du das fest, dass der Cron-Job nicht ausgeführt wird?
      Wenn du dich auf das Log-File beziehst: dort schreibe das Programm nur rein, wenn sich die IP geändert hat und wenn das Programm eine Aktualisierung durchgeführt hat. Das sollte in der Regel 1mal in 24 Stunden vorkommen.
      Ansonsten siehst du dort nichts .. es sei denn, es ist ein Fehler aufgetreten.

      Gruß Bjoern

  29. Hallo Bjoern!

    Ich dachte, dass es so sei weil kein Eintrag im Log-File stand. Alle 10 Minuten ist übrigens laut der Hilfe respektive FAQ von Spdyn.de nicht sinnvoll, da bei zu häufigen Anfragen (ohne Änderung der Ip Adresse) der Anfragende blockiert wird. Habe das Update-Intervall daher auf jede Stunde gestellt (mindestens 30 Minuten Pause ist die Empfehlung).

    Danke dir!

    • Hey OK.

      Du kannst das ruhig auf 10 Minuten lassen. Damit stellst du nur ein, in welchem Intervall die IP überprüft wird. Das ist unbegrenzt. Ein Request mit einem IP-Update wird nur an SPDNS geschickt, wenn sich die IP geändert hat.

      Gruß bjoern

  30. Hallo Bjoern!

    leider bekomme ich es nicht zum Laufen. Auf das Verzeichnis (rapberry) etc darf ich nicht schreiben. Also habe ich die .conf in das Updater Verzeichnis gelegt.
    Das Ganze dann mit :
    ./home/pi/updater/spdnsu –configfile=./home/pi/updater/spdnsu.conf.
    Aber immer die Meldung Error reading the config file in etc/spdnsu.conf

    Wenn ich direkt in das Updater Verzeichnis gehe und spdnsu aufrufe bekomme ich die Fehlermeldung: No such File
    obwohl laut dir die Datei vorhanden ist.

    Was mach ich falsch ?

    Was muss ich in den Cronjob eintragen (Fullpath)?

    Grüße und Besten Dank

    Marcus

    • Hey Markus

      Da sind 2 kleine Fehlerchen in deinem Aufruf:
      1. lass die Punkte am Anfang weg
      2. vor das congfile kommen 2 Minus-Zeichen (sorry, das sieht man auf der Seite echt schlecht).
      Also der Aufruf:
      /home/pi/updater/spdnsu –configfile=/home/pi/updater/spdnsu.conf

      Sollte dann funktionieren.

      Wenn du die Config-Datei doch nacch /etc kopieren möchtest, muss du das mit

      sudo cp /home/pi/updater/spdnsu.conf /etc/

      Damit erhältst du kurz root rechte.

      Ich hoffe, damit kommst du weiter

      Gruß Bjoern

  31. Hallo Bjoern,

    danke für die schnelle Antwort. Habe jetzt laut deiner Hilfe die CONF-Datei nach ETC verschoben.
    Das mit der Parameterübergabe hat leider nicht funktioniert (Invalid comand line option specified)

    Werde gleich mal testen ob es mit dem Update klappt.

    Also noch mal vielen Danke für deine Mühe

    Marcus

    • Hey Markus

      Ich hatte leider in der Kommando-Zeile einen kleinen Typo eingebaut .. irgendwie vermurkst das WordPress hier die Eingabe, wenn man zwei Minuszeichen hinter einander packt.
      Daher nochmal:
      /home/pi/updater/spdnsu --configfile=/home/pi/updater/spdnsu.conf

      Damit sollte es jetzt eigentlich klappen ..

      Bjoern

    • Ich schreibe nur ins Log-File, wenn ein Fehler auftritt oder wenn sich die IP geändert hat und upgedated wurde ..

      Allerdings sollte er beim ersten Aufruf etwas ins Log-File schreiben, da ja noch keine IP gespeichert ist ..

  32. hallo,

    danke für die info, habe darauf basierend ein bash shell script geschrieben,
    nicht elegant, funktioniert aber, ist ausbaufähig 🙂

    #!/bin/bash

    my_host=“deinhost.spdns.eu“
    user=“username“
    pass=“passwort“
    datum=`date +%A,%d.%m.%Y_%H:%M`

    # externe ip holen
    ip=`curl -4 -s checkip.spdyn.de`

    # das file .ext_ip4 merkt sich die aktuelle ip
    if [ -f /root/.ext_ip4 ]
    then
    alt_ip=`cat /root/.ext_ip4`
    if [ „$alt_ip“ == „$ip“ ]
    then
    # ip unverändert, abbruch
    logger „ip4 unverändert am $datum“
    exit 1
    else
    echo „ip4 verändert, wird aktualisiert am $datum“
    # aktualisierung, hier könnte man den Rückgabewert good? auswerten
    logger `curl -u $user:$pass -4 -s „http://update.spdns.de/nic/update?hostname=$my_host&myip=$ip“`
    #ip merken
    echo $ip > /root/.ext_ip4
    fi
    else
    # erster lauf, keine .ext_ip4 da…
    echo $ip > /root/.ext_ip4
    logger `curl -u $user:$pass -4 -s „http://update.spdns.de/nic/update?hostname=$my_host&myip=$ip“`
    fi

  33. Hallo,

    leider sind die mit

    logger `curl

    beginnenden zeilen umgebrochen worden, das

    /nic/update?hostname=$my_host&myip=$ip“`

    gehört zur logger `curl zeile.

  34. Hallo Bjoern,

    habe das ganze jetzt auf UpdateToken umhestellt. Jetzt hat es beim manuellen Update funktioniert. Allerdings ist mir noch nicht ganz klar was ich unter UpdateHost eintragen muss. Irgendwie beim Probieren habe ich das einigemale umgestellt.
    und weiß nicht mehr was zu Erfolg geführt hat.

    Hoffe, der Cronjob läuft. Kann ich das irgendwie sehen?

    Grüße

    Marcus

    • Hey Marcus

      Das sieht gut aus! Ich hab gerade noch mal in meine Konfig rein geschaut. Ich habe bei user meinen normalen Nutzernamen stehen, aber ich glaube, den nutze ich beim Update-Token gar nicht. Aber sonst scheint alles zu stimmen.

      Um zu sehen, ob der Cron läuft, kannst du einfach mal deinen Router kurz ausschalten, damit er eine neue IP bekommt und dann in deinem Account bei SPDNS schauen, ob die IP aktualisiert wird.

      Gruß Bjoern

  35. Hallo!
    komm mal gleich zur Sache!
    Ich will auch gerne meinen Account bei SPDNS.DE (SPDYN.DE) über so ein kleines teil aktualisieren.
    Mach ich jetzt ja mit einen Laptop, das leider immer eingeschaltet sein muss.
    Würde es gern mit einem Raspberry Pi umsetzten das teil klingt interessant.
    Wäre der „Vilros Raspberry Pi 3“ dafür tauglich?
    Gefunden hab ich ihn da: https://www.amazon.de/Vilros-Raspberry-Pi-Complete-Kit-Enthalt/dp/B01DC6MKAQ/ref=sr_1_2?ie=UTF8&qid=1482767257&sr=8-2&keywords=raspberry+pi

    Enthält- Raspberry Pi 3 Model B–1GB
    Raspberry Pi 3 Gehause Case–klar transparent
    16GB Micro SD Card Voristalliert mit „NOOBS‘
    Europaischen (EU) USB Netzteil Labegerat (2.5 AMP)
    HDMI Kabel–Heatsink fur Raspberry Pi (1 Big 1 Small)

    Ich kenne mit mit so teilen leider nicht aus 🙁

    Danke für eure Unterstützung
    Timi_Who

    • Moin Timi_Who

      Natürlich ist der dafür mehr als tauglich .. Wenn du nur Deine IP aktuell halten willst, ist der dafür sogar schon überdimensioniert 🙂
      Aber der Update-Client hier läuft auch auf diesem Raspberry. Wenn du bei der Installation Hilfe brauchst, sag einfach Bescheid.

      Gruß Bjoern

  36. Hallo Bjoern!

    Danke für die rasche Antwort!
    Ja ich weis das es etwas überdimensioniert ist, aber vielleicht ergeben sich ja noch ein paar andere „Projekte“
    Auf das Angebot für die Installations Unterstützung werde ich sicher zurückkommen, Linux ist nicht so mein Ding.

    Frohe Weihnachtsfeiertage und guten Rutsch euch allen.

    LG Timi_Who

  37. Hallo Bjoern!

    Wollte Dir mitteilen das Hardware eingetroffen ist und sich der „spdns Dynamic DNS Update-Client“ mittels der Anleitung hier und etwas WWW ohne große Probleme einrichten hat lassen!

    Vielen dank für das tolle Tool!!!!!

    Timi_Who

  38. Mein Raspi meldet eine veraltete IP-Adresse an SPDNS, obwohl über die Seite checkip4.spdyn.de die korrekte IP angezeigt wird. In der spdnsuIP.cnf wird ebenfalls eine veraltete IP-Adresse angegeben?!? Wenn ich die Datei lösche und den Check wiederhohle, wird die Datei spdnsuIP.cnf neu angelegt, aber mit der veralteten IP-Adresse…

    Das gleiche Problem habe ich, wenn ich das script von x29a verwende….

    Was kann das sein???

  39. Noch ein Nachtrag,

    mit dem Befehl wget checkip4.spdyn.de erhalte ich eine andere IP-Adresse, wie wenn ich im Browser die Seite checkip4.spdyn.de öffne. Ist das ein cache-Problem?

    Gruß, Marco

  40. Hallo,
    könnte man das Script an passen ?

    16.04.2017 14:35:23 Bitte verwenden Sie als Update-Server in Ihrem Client „update.spdyn.de“ (Aktuelle Einstellung: update.spdns.de)
    Danke

  41. Hi,

    bei mir funktioniert das Script nicht mit 3 [HOST]-Eintraegen.

    Gibt es da was Spezielles zu beachten?

    Danke.

    Gruss

    Ralf

    • Hallo Ralf,
      Nein, eigentlich gibt es da nichts weiter zu beachten. Läuft bei mir mit 5 Einträgen.
      Vielleicht mal die Syntax checken und ins Logfile schauen, ob da was drin steht.

      Gruß vom Bjoern

  42. Moin,

    für IPv6-only Registrierungen scheint das Update nicht bei spnds.de anzukommen. IPv4 ist ok.

    Liegt es wirklich nur an einer RegEx im C Quellkode? Ich würde gerne weiterhelfen, wenn ich mit der Nase auf die Stelle gestossen werden.

    Gäbe es außer mit _spdnsu_ noch eine andere Möglichkeit, manuell die IPv6 mit Token zu aktualisieren? Ein _curl_ Kommandozeilen Aufruf wäre für’s Erste auch gut genug.

    Besten Danke, Axel.

    • Hey Axel
      Sorry für die späte Antwort, ich war im Urlaub.
      Ja, es liegt nur an der RegEx im Code. Den hab ich aber gerade nicht im Kopf bzw. zur Hand. Ich möchte mich aber sowieso in nächster Zeit damit beschäftigen.
      Ansonsten sind hier in den Kommentaren ein paar Shell-Scripte, die das auch leisten sollen. Die hab ich aber selbst nicht getestet.

      Gruß vom Bjoern

Schreibe einen Kommentar