Utilisation du client DNS dynamique dd-wrt avec CloudFlare

8

J'essaie de configurer le client DNS dynamique sur mon routeur avec le micrologiciel dd-wrt (v24-sp2) afin qu'il change dynamiquement l'adresse IP dans l'un des enregistrements DNS. Malheureusement j'ai rencontré un problème… Voici un exemple de requête de leur configuration ddclient :

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

Cela fonctionne si je l'utilise dans le navigateur, mais en dd-wrt j'obtiens cette sortie:

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

L'URL de "Location" fonctionne parfaitement et le paramètre "a" est inclus. Quel est le problème?

romain
la source
Je ne sais pas ce que vous essayez de réaliser ici, pouvez-vous être plus clair s'il vous plaît.
Chopper3
J'essaie de changer un enregistrement dans CloudFlare en utilisant un service dans un routeur qui gère les adresses IP changeantes et met à jour les informations de domaine de manière dynamique.
Roman
J'ai le même problème mais j'ai trouvé quelque chose qui pourrait nous aider à nous orienter dans la bonne direction. La saisie de la même chaîne d'URL dans wget présente le même problème, mais pas Firefox.
Avez-vous déjà compris cela?
bjtitus
Pas encore, malheureusement. J'ai écrit un simple script python et je l'ai utilisé pour mettre à jour IP manuellement.
Roman

Réponses:

9

Je ne pense pas que vous puissiez le configurer où DD-WRT appelle CloudFlare directement. La façon dont je l'ai configuré est d'avoir DD-WRT appeler un script PHP sur un serveur Web distant, qui détecte ensuite l'adresse IP du client et envoie la demande de mise à jour à CloudFlare via leur API.

Paramètres DD-WRT DDNS

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);

Au lieu d'utiliser l'authentification de base HTTP, j'utilise simplement une clé aléatoire.

Assurez-vous de créer l'entrée DNS pour le nom de domaine que vous souhaitez mettre à jour sur CloudFlare; le paramètre d'action DIUP ne mettra à jour l'IP que pour une entrée qui existe déjà.

superann
la source
2
Merci pour votre suggestion. J'ai dû corriger un peu votre code car il ne pouvait pas détecter correctement mon adresse IP. J'ai utilisé le code de cette réponse à une autre question. Voici le résultat - https://gist.github.com/3149751 .
Roman
3

Si vous souhaitez exécuter la mise à jour à partir de votre routeur, il est impossible de contourner le fait que vous avez besoin d'un petit quelque chose en plus au milieu pour convertir votre appel au format CloudFlare (si seulement DNS-O-Matic les ajoutait à leurs services pris en charge ...). Plutôt que d'avoir à héberger vous-même un script intermédiaire, vous pouvez simplement utiliser Google AppEngine (qui est gratuit) pour effectuer cette nouvelle publication pour vous. J'utilise ceci:

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

D'accord, vous devez toujours appeler autre chose que CloudFlare pour publier la mise à jour, mais au moins vous n'avez pas besoin d'exécuter un hôte supplémentaire ou VPS, etc. pour le faire vous-même. C'est complètement transparent - le seul problème est que vous ne recevez pas d'erreurs, vous devez donc vérifier que cela fonctionne vous-même. Une fois qu'il fonctionne, il devrait simplement fonctionner et fonctionner.

Johann
la source
J'ai reçu l'erreur: Erreur lors de la validation de la réponse svr DYNDNS. Vérifiez usr, passez, nom d'hôte! (HTTP / 1.0 302 trouvé
ayr-ton
0

Géré pour que cela fonctionne en utilisant ceci: https://github.com/dcerisano/Cloudflare-dynamic-dns

Une fois que vous avez configuré votre compte Cloudflare, les informations requises sont faciles à localiser:

Vous avez besoin de: ID de zone

Clé d'autorisation (aka Global api key)

ID A-record pour votre domaine (obtenu en exécutant le script cloudflare-dns-id.sh) J'ai dû couper un peu le script pour le faire fonctionner.

curl -X GET " https://api.cloudflare.com/client/v4/zones/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/dns_records?type=A&name=dynamic " \ -H "X-Auth-Email: [email protected]" \ -H "X-Auth-Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ -H "Content-Type: application / json"

J'ai stocké les deux scripts dans / jffs pour les rendre exécutables.

En ce qui concerne le côté Cloudflare, j'ai configuré, conformément à ce guide, uniquement les enregistrements de domaine Cloudflare:

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

Chez Cloudflare, vous devez définir les enregistrements suivants:

  • Type: A | Nom: dynamique | Valeur: «votre IP WAN» ***

  • Type: CNAME | Nom: «votredomaine.xyz» | Valeur: dynamique. "Votredomaine.xyz"

  • Type: CNAME | Nom: www | Valeur: "votredomaine.xyz"

J'ai configuré un travail cron pour exécuter cloudflare-ddns.sh toutes les 5 minutes pour vérifier les modifications IP.

Mon routeur DD-WRT met désormais à jour automatiquement Cloudflare chaque fois que l'IP WAN est modifiée ...

La configuration ci-dessus prend environ 10 minutes.

MikeK
la source