Beiträge von tsc23

    Ich gebe Dir nur diese Hinweise, warum ich netcup für DynDNS nicht empfehlen würde:

    Die Zonen der Domains werden nur alle 10-20 Minuten neu geladen, Updates brauchen also relativ lange.
    Die TTL der Domains steht standardmäßig auf 24h und kann nur für die ganze Domain geändert werden.
    Und das leidige Thema DNSSEC, bei dem die Domain sporadisch gar nicht mehr auflöst…

    Danke für den Hinweis!

    Zu 1.

    Kann ich so nicht bestätigen. Bei meinen Tests wurde alles innerhalb der eingestellten TTL von 5min aktualisiert. Und selbst wenn es etwas länger dauert ist es halb so schlimm.

    Zu 2.

    Auch nicht schlimm, für mich

    Zu 3.

    Nutze ich nicht

    Naja, dyndns können sie schon, sie haben halt nur keine klassische Update URL. Haben viele andere ja auch nicht, und ist ggf. auch ein latentes Sicherheitsrisiko, je nach Implementierung, deshalb haben viele andere das auch nicht mehr. Die API ist dokumentiert, Referenzimplementierungen sind verfügbar. Was willst du noch? Dass dein regex nicht funktioniert, ist nicht Netcups Schuld.

    Naja, so einfach ist das nicht.
    Wenn das richtig gemacht ist, also mit Username, Passwort oder API Key, ist das kein Sicherheitsrisiko.

    Meiner Meinung nach ist es eben Standard, wenn ich Domains anbiete muss ich eben DynDNS anbieten.
    Meine Meinung, wie schon gesagt ;)

    Dann halt z.B. deSEC.io und einen CNAME-Record setzen?

    Alternativ: Nameserver von deSEC für die Domain verwenden, die haben auch dafür eine API.

    Ich habe halt gerne alles bei einem Anbieter und nicht über mehrere verstreut.

    Für mich ist es mehr Aufwand, bei Problemen mehrere Stellen abklappern zu müssen.

    Ich meine man kann sich den Kopf an einem Lösungsweg einrennen oder sehr lange dafür brauchen. Oder man sucht nach einer "Umgehungsstraße". Mit den controllerbasieren VPN Lösungen ist die Notwendigkeit für DynDNS (wenn es darum geht, Services zu Hause zu erreichen) nahezu weg. Für Hosting ist der bescheidene heimische Upload auch wegen den wechselnden IPs eher nicht zu erreichen (dafür gibts ja Netcup). Und für den bescheidenen Rest an Usecases tut es imho auch eine der genannten Möglichkeiten.

    Klar gibt es immer einfachere Wege, die aber nicht unbedingt besser sein müssen.

    Mit "controllerbasierten VPN Lösungen" möchte ich nicht anfangen ;)

    Und ich wollte das jetzt unbedingt zum laufen bekommen, das ganze Script war ja schon soweit fertig, bis auf das eine Problem ;)


    Aber es gibt sehr sehr gute Neuigkeiten!

    Mit Hilfe der User aus dem Mikrotik Forum, habe ich eine Lösung erarbeitet um die Rückmeldung von der DNS API richtig auszulesen um die ID zu bekommen.
    Ganz neben bei ist mir dabei aufgefallen, das das JSON von der API nicht ganz sauber ist. (war aber nicht das Problem)

    Das am Anfang der API Rückmeldung mitgeschickte "data=" ist nicht so ganz JSON konform, das darf man wegschmeißen bevor man den String einließt 8)

    Klar ein Programmierer sieht das sofort, ich als Laie aber nicht :saint:


    Jedenfall habe ich jetzt ein komplett funktionierendes Script, was DNS Records wirklich überschreibt und nicht neu anlegt

    ... und ein volles API Log :D


    Ich werde es noch aufräumen und dann auf github hochladen.

    Das Script darf dann gerne jeder für seinen Mikrotik Router verwenden :thumbup:

    Kostengünstigste Variante: einen anderen DynDNS Service holen (z.B. kostenfrei https://freedns.afraid.org/ oder halt No-IP.com oder andere) und im DNS Server einen CNAME Record der eigenen Domain auf die Subdomain des DynDNS Providers setzen.

    Davon möchte ich ja gerade Weg, ich hatte die ganze Zeit afraid.org, doch deren Server werden immer langsamer bzw, die aktualisierung der IP funktioniert manchmal nicht.

    DynDNS mit Cloudflare (das Umstellen darauf ist angesichts der vielen Netcup DNS Probleme sowieso sinnvoll: https://developers.cloudflare.com/dns/manage-dns…c-ip-addresses/ . In dem Fall bekommt man auch API Support für Let's Encrypt DNS Authentication mit dazu, sehr praktisch um z.B. mit dem Nginx Proxy Manager auf Docker Wildcard Zertifikate zu ziehen und automatisch zu aktualisieren.

    Da wäre ich wieder da, wo ich aktuell bin, eine API welche ich wieder selbst ansteuern muss.
    Wass wieder Arbeit ist und wahrscheinlich genauso gut/schlecht funktioniert wie bei netcup.

    Das ist mir schon klar. Deshalb hatte ich ja im oben verlinkten Script nachgesehen, wie die das Problem gelöst haben, weil die müssen das ja auch mal gehabt haben. Und die lesen die Einträge aus, modifizieren nur die IP-Adresse im Array und schreiben es zurück.

    Du schreibst es ja selbst "modifizieren nur die IP-Adresse im Array und schreiben es zurück" dabei wird dann auch die ID wieder mit zurück geschrieben, da es ja das gleiche Array nur eben mit anderer IP ist.

    Zumindest verstehe ich das so.

    Ich habe es jetzt nochmal komplett von Hand getestet:

    - mit ID wird der Eintrag modifiziert

    - ohne ID wird er neu angelegt, zusätzlich zum vorherigen

    Steht übrigens so auch in der API Doku:

    "leave id empty for new records"


    Wie kam es überhaupt zu dem Missverständnis? Ich hatte ja weiter oben ein paar mal auf dieses Script referenziert, woraufhin Olivetti fragte, welches Script ich denn meine, und ich hab es verlinkt, woraufhin du schriebst, dass das Script nicht funktioniert. Ist natürlich grundsätzlich richtig, aber es funktioniert bei dir nicht, weil dir der LUA Support fehlt, und nicht, weil das Script grundsätzlich falsch implementiert ist. Und deshalb kann man halt mal nachschauen, wie die das Problem gelöst haben, und sich ggf. Impulse für die eigene Entwicklung holen.

    Ja da gab es ein Missverständnis 😅

    Aber die Ursache des Problems ist, das netcup kein DynDNS kann, was meiner Meinung heutzutage Standard ist.

    Das es eine API gibt ist ja grundsätzlich nichts schlechtes!

    Aber das ich als Kunde hier die Arbeit von netcup mache und ein Script für eine Funktion schreiben muss welche ich quasi überall einfach nutzen kann, ist meiner Meinung nach nicht so ganz "ok".

    Aber genug gemeckert!

    Ich habe jetzt noch die schlauen Köpfe im Mikrotik Forum darauf angesetzt, mich zu unterstützen.

    https://forum.mikrotik.com/viewtopic.php?t=199699&sid=20832797e662822d8ad270f3680bc83e

    Parallel dazu habe ich mir Mal die Preise beim Hoster meines Bekannten eingeholt und festgestellt, das da nicht viel Unterschied zu netcup ist.

    Ich dafür aber einen funktionierenden dyndns Dienst bekomme, denn ich nicht erst selbst "programmieren" muss.

    Ich zahle dann eben 33ct für die Domain im Monat anstatt 18ct wie bei netcup.

    Wenn ich das Mal wie ein BWLer rechne, keine Angst bin selbst keiner, dann müsste ich die Zeit die ich bis jetzt schon investiert habe gegenrechnen.

    Dann könnte ich die Domain beim anderen Anbieter mehrere Jahrzehnte bezahlen und habe immer noch Geld gespart.

    Ich werde nun aber noch bis Ende der Woche versuchen, das zum Laufen zu bekommen.

    Wenn es dann immer noch nicht funktioniert, werde ich das Script euch mit entsprechendem Warnhinweis zur Verfügung stellen.

    Auch werde ich wahrscheinlich meine Domains zu dem anderen Hoster umziehen, damit ich DynDNS ganz einfach (so wie es sein sollte) nutzen kann.

    frank_m

    Ich habe mir die bash und Python DDNS Scripte für netcup zu verwendet, da diese für mich verständlicher waren ;)

    Mein script ist quasi fertig, nur das mit der Record ID fehlt eben noch!

    Das ist unbedingt notwendig,

    da die netcup API ohne die ID nicht kapiert das der DNS Record schon vorhanden ist.

    Sie überschreibt diesen nicht, sondern legt diesen erneut an :rolleyes:

    Mein script habe ich noch nicht veröffentlicht, da ich die Gefahr sehe, das es jemand verwendet und sich die ganze DNS Records zerschießt.

    Ich werde jetzt Mal mit meinem Problem mit Regex im Mikrotik Forum anfragen.

    Ich komme mit deren angepassten Regex Variante einfach nicht zurecht, wahrscheinlich ist nur ein Zeichen oder so falsch.

    Ich gebe Rückmeldung wenn ich das Script komplett fertig habe.

    Das Problem ist, das alles was vom Server zurück kommt in ein Array geschrieben wird, das einen seltsamen Aufbau hat :rolleyes:

    In Zelle 1 kommt die komplette API Rückmeldung

    In Zelle 2 kommt immer "downloaded=0;status=finished"

    Um das ganze weiter bearbeiten zu können muss ich die Zelle 1 aus dem Array herauslösen und in einen String speichern.

    Den kann ich dann nach dem entsprechenden Inhalt durchsuchen.

    Für die Session ID hab ich das ganz einfach gelöst.

    Ich gebe ihm einfach vor, das er aus dem erstellten String den Inhalt von Zeichen 233 bis Zeichen 283 in eine eigene Variable kopiert.
    Ist zwar nicht oprimal, da aber die Rückmeldung vom Server immer gleich ist, geht das so aktuell.

    Bei den DNS Record IDs geht das natürlich nicht, da diese immer unterschiedlich sind.
    Hier kann ich nur mit Regex suchen und das dann in eine eigene Variable kopieren.

    Und nur daran hängt es noch, da ich kein Programmierer bin dauert alles etwas länger ^^

    Also die Urschae ist wohl, das jeder DNS Eintrag eine ID hat.

    Diese muss vor dem Ändern einmal ausgelesen werden und bei der Änderung mitgeschickt werden.

    Das Problem ist nur, man kann nur alle DNS Einträge zusammen auslesen und bekommt dann eine entsprechende Ausgabe.

    In dieser Ausgabe muss dann nach der ID gesucht werden.

    Den passenden Regex Filter habe ich schonmal zusammengebastelt und getestet:

    Code
    /"id":"(?:\d{8})","hostname":"wurst"/gm


    Das Problem an dem ich jetzt sitze ist, das im RouterOS Script zu nutzen.
    Einige Zeichen sind beim "Mirkotik" Regex wohl anders :rolleyes:

    Update 3:

    So das Script ist soweit fertig :thumbup:

    Bis auf den Problem, das der DNS Record immer noch ein weiteres mal erstellt wird :(

    Wie habt ihr das gelöst?

    Wäre es eine Möglichkeit den alten Record zu löschen und den neuen dann zu erstellen?

    Funktiosweise des Scripts für Mikrotik RouterOS:

    - überprüfen ob die WAN IP mit der IP des DNS Eintrags der Domain übereinstimmt.

    - entscheiden ob eine Änderung durchgeführt werden muss

    - Ergebnis ins Log schreiben

    - DNS Eintrag per API ändern wenn nötig

    Update:

    Ich bin jetzt soweit, das ich den DNS Record über die API an Netcup senden kann :)

    Nur gibt es noch ein Problem dabei, es wird der Record zusätzlich angelegt, anstatt den vorhandenen zu ändern.

    D.h. existiert schon folgender Eintrag:

    Host Type Destination
    wurst A 1.1.1.1


    Wird daraus:

    Host Type Destination
    wurst A 1.1.1.1
    wurst A 2.2.2.2


    Mein befehl sieht aktuell folgendermaßen aus:

    Code
    http-data="{\"action\": \"updateDnsRecords\", \"param\": {\"apikey\": \"$APIkey\", \"apisessionid\": \"$SessionId\", \"customernumber\": \"$Number\",\"clientrequestid\": \"\" , \"domainname\": \"$Domain\", \"dnsrecordset\": { \"dnsrecords\": [ {\"id\": \"\", \"hostname\": \"$Hostname\", \"type\": \"$Type\", \"priority\": \"$Prio\", \"destination\": \"$Destination\", \"deleterecord\": \"false\", \"state\": \"yes\"} ]}}}" url="https://ccp.netcup.net/run/webservice/servers/endpoint.php?JSON"

    Was fehlt, damit der Record aktualisiert anstatt zusätzlich hinzugefügt wird?

    2. Frage:
    Gibt es irgendwo eine ausführliche Doku zur API?
    Im Wiki gibts nur diese "Kurzzusammenfassung", ich hab mir die Befehle nun aus anderen Projekten abgeschaut, angepasst.
    Ist aber nicht unbedingt einfach, das von anderen Programiersprachen zu übersetzen :(

    Eine Update URL gibt es nicht fürs Netcup dyndns, dass muss über die API bedient werden. Von daher scheiden integrierte dyndns Updater üblicherweise aus. Ggf. geht was mit Scripten, was auch immer das RouterOS als Script-Sprache unterstützt.

    Deshalb habe ich je auch gefragt, ob schonmal jemand ein Script für Mikrotiks routeros erstellt hat ;)

    ich würde mir routeros nicht mehr antun und gleich auf openwrt umflashen,

    dann kann man auch curl, jq etc. installieren und das problem in der bash lösen.

    Ich komme mit routeros super zurecht, bis auf das scripting :)

    Edit:

    So ich habe es jetzt immerhin soweit hinbekommen, das ich mich in der API einloggen kann mit einem routeros script.

    Mal sehen ob ich den rest auch noch im Laufe der nächten Tage hinbekomme :/

    Der funktioniert leider nicht richtig, da er Probleme mit dem Doppelnat hat (das ich zum aktuellen Zeitpunkt auch nicht ändern kann).

    Aktuell behelfe ich mir mit einer Subdomain eines Bekannten (der ist bei einem andern Hoster), welche durch einen simplen Webcall URL Aufruf die IP Änderung in den DNS Records übernimmt:

    https://docs.cpanel.net/cpanel/domains/dynamic-dns/


    Ist aber eigentlich nur eine vorrübergehende Notlösung.

    Moin,

    ich stehe aktuell vor einem Problem.

    Ich musste an meinem Offsite Standort die Technik austauschen. Also von einem raspberry Pi zu einem Mikrotik Hex als VPN Gateway.

    Für die DynDNS Aktualisierung über die netcup API hatte ich auf dem Pi den netcup-dyndns Docker Container verwendet
    https://hub.docker.com/r/b2un0/netcup-dyndns

    Der Mikrotik Router unterstützt keine Docker Container, da er eine mips CPU hat und routeros hier kein Docker zur Verfügung gestellt.

    Nun bin ich auf der Suche nach einer Lösung auf folgendes script für dyndns auf routeros gestoßen
    https://forum.mikrotik.com/viewtopic.php?t=180358

    Leider funktioniert das script nicht, weil wahrscheinlich Fehler drin sind.
    Ich habe mich versucht in die scripting Sprache von Mikrotik und JSON einzuarbeiten, bekomme es aber nicht auf die Kette.

    Hat jemand von euch ggf. ein dyndns Script auf Mikrotik RouterOS laufen, und kann dieses zur Verfügung stellen?

    Oder kann irgendwie weiterhelfen?

    Danke schon mal im Vorraus!