Verwenden des dynamischen DNS-Clients dd-wrt mit CloudFlare

8

Ich versuche, den dynamischen DNS-Client auf meinem Router mit der Firmware dd-wrt (v24-sp2) zu konfigurieren, damit die IP-Adresse in einem der DNS-Einträge dynamisch geändert wird. Leider bin ich auf ein Problem gestoßen ... Hier ist eine Beispielanforderung von ihrer ddclient-Konfiguration :

https://www.cloudflare.com/api.html?a=DIUP&u=<my_login>&tkn=<my_token>&ip=<my_ip>&hosts=<my_record> 

Es funktioniert, wenn ich es im Browser verwende, aber in dd-wrt erhalte ich folgende Ausgabe:

Tue Jan 24 00:36:47 2012: INADYN: Started 'INADYN Advanced version 1.96-ADV' - dynamic DNS updater. 
Tue Jan 24 00:36:47 2012: I:INADYN: IP address for alias '<my_record>' needs update to '<my_ip>' 
Tue Jan 24 00:36:48 2012: W:INADYN: Error validating DYNDNS svr answer. Check usr,pass,hostname! (HTTP/1.1 303 See Other 
Server: cloudflare-nginx 
Date: Mon, 23 Jan 2012 14:36:48 GMT 
Content-Type: text/plain 
Connection: close 
Expires: Sun, 25 Jan 1981 05:00:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Location: https://www.cloudflare.com/api.html?a=DIUP&u=<my_login>&tkn=<my_token>&ip=<my_ip>&hosts=<my_record> 
Vary: Accept-Encoding 
Set-Cookie: __cfduid=<id>; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=.cloudflare.com 
Set-Cookie: __cfduid=<id>; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=.www.cloudflare.com 

You must include an `a' paramiter, with a value of DIUP|wl|chl|nul|ban|comm_news|devmode|sec_lvl|ipv46|ob|cache_lvl|fpurge_ts|async|pre_purge|minify|stats|direct|zone_check|zone_ips|zone_errors|zone_agg|zone_search|zone_time|zone_grab|app|rec_se

Die URL von "Ort" funktioniert einwandfrei und der Parameter "a" ist enthalten. Was ist das Problem?

römisch
quelle
Ich bin mir nicht sicher, was Sie hier erreichen wollen. Können Sie bitte klarer sein?
Chopper3
Ich versuche zu ändern Ein Datensatz in CloudFlare verwendet den Dienst im Router, der das Ändern von IP-Adressen verwaltet und Domäneninformationen dynamisch aktualisiert.
Roman
Ich habe das gleiche Problem, aber ich habe etwas gefunden, das uns helfen kann, in die richtige Richtung zu weisen. Die Eingabe derselben URL-Zeichenfolge in wget weist dasselbe Problem auf, Firefox jedoch nicht.
Hast du das jemals herausgefunden?
Bjtitus
Leider noch nicht. Ich habe ein einfaches Python-Skript geschrieben und es verwendet, um die IP manuell zu aktualisieren.
Roman

Antworten:

9

Ich glaube nicht, dass Sie es dort einrichten können, wo DD-WRT CloudFlare direkt aufruft. Ich habe es so konfiguriert, dass DD-WRT ein PHP-Skript auf einem Remote-Webserver aufruft, das dann die Client-IP erkennt und die Aktualisierungsanforderung über deren API an CloudFlare sendet.

DD-WRT DDNS-Einstellungen

DDNS Service: Custom
DYNDNS Server: <yourserver.com>
Username: <anything>
Password: <anything>
Host Name: <your domain name to update on cloudflare>
URL: /cloudflare_update.php?key=<your secret key>&hostname=

cloudflare_update.php

if(empty($_GET['key']) || ($_GET['key'] != "<your secret key>")) die;
$hostname = $_GET['hostname'];
$ip = $_SERVER['REMOTE_ADDR'];
$username = "<[email protected]>";
$api = "<your cloudflare api key>";
$curl = "https://www.cloudflare.com/api_json.html?a=DIUP&hosts=$hostname&u=$username&tkn=$api&ip=$ip";
$ch = curl_init($curl);
curl_exec($ch);
curl_close($ch);

Anstatt die HTTP-Basisauthentifizierung zu verwenden, verwende ich nur einen zufälligen Schlüssel.

Stellen Sie sicher, dass Sie den DNS-Eintrag für den Domainnamen erstellen, den Sie in CloudFlare aktualisieren möchten. Der Aktionsparameter DIUP aktualisiert nur die IP für einen Eintrag, der bereits vorhanden ist.

Superann
quelle
2
Vielen Dank für Ihren Vorschlag. Ich musste Ihren Code ein wenig korrigieren, da er meine IP-Adresse nicht richtig erkennen konnte. Ich habe Code aus dieser Antwort auf eine andere Frage verwendet. Hier ist das Ergebnis - https://gist.github.com/3149751 .
Roman
3

Wenn Sie das Update von Ihrem Router aus ausführen möchten, führt kein Weg daran vorbei, dass Sie in der Mitte ein kleines zusätzliches "Etwas" benötigen, um Ihren Anruf in das CloudFlare-Format zu konvertieren (wenn nur DNS-O-Matic sie hinzufügen würde ihre unterstützten Dienste ...). Anstatt selbst ein Zwischenskript hosten zu müssen, können Sie einfach Google AppEngine (kostenlos) verwenden, um diese erneute Veröffentlichung für Sie durchzuführen. Ich benutze das:

https://cloudflare-updater.appspot.com/

Okay, Sie müssen immer noch etwas anderes als CloudFlare aufrufen, um das Update herauszugeben, aber zumindest müssen Sie keinen zusätzlichen Host oder VPS usw. ausführen, um es selbst zu tun. Es ist vollständig transparent - das einzige Problem ist, dass Sie keine Fehler zurückerhalten, sodass Sie überprüfen müssen, ob es selbst funktioniert. Sobald es funktioniert, sollte es einfach laufen und laufen.

Johann
quelle
Ich habe den Fehler erhalten: Fehler beim Überprüfen der Antwort von DYNDNS svr. Überprüfen Sie usr, pass, hostname! (HTTP / 1.0 302 gefunden
ayr-ton
1

Zu bemerken, dass dies alles veraltet ist und jetzt v4-API-Code benötigt, um zu funktionieren.

oben getestet und es schlägt fehl - schlechter Benutzer, bestanden, xxxx Info.

Überprüfen dieser Methode https://github.com/ScottHelme/CloudFlareDDNS

viii
quelle
0

Es gelang, dies zum Laufen zu bringen: https://github.com/dcerisano/Cloudflare-dynamic-dns

Sobald Sie Ihr Cloudflare-Konto eingerichtet haben, sind die erforderlichen Informationen leicht zu finden:

Sie benötigen: Zonen-ID

Autorisierungsschlüssel (auch bekannt als Global API Key)

A-Record-ID für Ihre Domain (diese wird durch Ausführen des Skripts cloudflare-dns-id.sh erhalten) Ich musste das Skript ein wenig kürzen, damit es funktioniert.

curl -X GET " https://api.cloudflare.com/client/v4/zones/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx / dns_records?type=A&name=dynamic" \ -H "X-Auth-E-Mail: you@" "X-Auth-Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ -H "Inhaltstyp: application / json"

Ich habe beide Skripte in / jffs gespeichert, damit sie ausführbar sind.

In Bezug auf die Cloudflare-Seite richte ich gemäß diesem Handbuch nur die Cloudflare-Domäneneinträge ein:

https://support.opendns.com/hc/en-us/community/posts/115000937008-How-to-set-up-DNS-O-MATIC-for-Cloudflare-and-the-other-way-around- und-a-FritzBox

Bei Cloudflare müssen Sie folgende Datensätze festlegen:

  • Typ: A | Name: dynamisch | Wert: "Ihre WAN-IP" ***

  • Typ: CNAME | Name: "yourdomain.xyz" | Wert: dynamisch. ”Yourdomain.xyz”

  • Typ: CNAME | Name: www | Wert: "yourdomain.xyz"

Ich habe einen Cron-Job eingerichtet, um cloudflare-ddns.sh alle 5 Minuten auszuführen und nach IP-Änderungen zu suchen.

Mein DD-WRT-Router aktualisiert Cloudflare jetzt automatisch, wenn die WAN-IP geändert wird ...

Die Einrichtung dauert ungefähr 10 Minuten.

MikeK
quelle