Utilizzo del client DNS dinamico dd-wrt con CloudFlare


8

Sto provando a configurare il client DNS dinamico sul mio router con il firmware dd-wrt (v24-sp2) in modo da cambiare dinamicamente l'indirizzo IP in uno dei record DNS. Purtroppo ho riscontrato un problema ... Ecco una richiesta di esempio dalla loro configurazione ddclient :

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

Funziona se lo uso nel browser, ma in dd-wrt ottengo questo output:

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 di "Posizione" funziona perfettamente e il parametro "a" è incluso. Qual è il problema?


Non sono chiaro cosa stai cercando di ottenere qui, puoi essere più chiaro per favore.
— Chopper3,

Sto provando a cambiare un record in CloudFlare utilizzando il servizio nel router che gestisce la modifica degli indirizzi IP e aggiorna le informazioni del dominio in modo dinamico.
— Roman

Ho lo stesso problema ma ho trovato qualcosa che potrebbe aiutarci a indicarci la giusta direzione. L'immissione della stessa stringa URL in wget presenta lo stesso problema, ma Firefox no.

L'hai mai capito?
— bjtitus,

Purtroppo non ancora. Ho scritto un semplice script Python e lo utilizzo per aggiornare manualmente l'IP.
— Roman

Risposte:


9

Non credo che tu possa impostarlo dove DD-WRT chiama CloudFlare direttamente. Il modo in cui l'ho configurato è di fare in modo che DD-WRT chiami uno script PHP su un server Web remoto, che quindi rileva l'IP client e invia la richiesta di aggiornamento a CloudFlare tramite la loro API.

Impostazioni DDNS DD-WRT

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 = "<yourcloudflareusername@email.com>";
$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);

Invece di usare l'autenticazione di base HTTP, utilizzo semplicemente una chiave casuale.

Assicurati di creare la voce DNS per il nome di dominio che desideri aggiornare su CloudFlare; il parametro di azione DIUP aggiornerà l'IP solo per una voce già esistente.


2
Grazie per il tuo suggerimento. Ho dovuto correggere un po 'il tuo codice perché non riusciva a rilevare correttamente il mio indirizzo IP. Ho usato il codice di questa risposta per un'altra domanda. Ecco il risultato: https://gist.github.com/3149751 .
— Roman,

3

Se si desidera eseguire l'aggiornamento dal router, non è possibile aggirare il fatto che è necessario un piccolo "qualcosa" nel mezzo per convertire la chiamata nel formato CloudFlare (se solo DNS-O-Matic li aggiungesse a i loro servizi supportati ...). Invece di dover ospitare uno script intermedio tu stesso puoi semplicemente utilizzare Google AppEngine (che è gratuito) per fare questo post-post per te. Io lo uso questo:

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

Va bene, devi ancora chiamare qualcosa di diverso da CloudFlare per emettere l'aggiornamento, ma almeno non è necessario eseguire un host aggiuntivo o VPS ecc. Per farlo da soli. È completamente trasparente - l'unico problema è che non viene restituito un errore, quindi è necessario verificare che funzioni da soli. Una volta che funziona dovrebbe funzionare.


Ho ricevuto l'errore: errore durante la convalida della risposta svr DYNDNS. Controlla usr, pass, hostname! (HTTP / 1.0 302 Trovato
— ayr-ton


0

Gestito per farlo funzionare usando questo: https://github.com/dcerisano/Cloudflare-dynamic-dns

Dopo aver configurato l'account Cloudflare, le informazioni richieste sono facili da individuare:

È necessario: ID zona

Chiave di autorizzazione (nota anche come chiave API globale)

ID record A per il tuo dominio (questo si ottiene eseguendo lo script cloudflare-dns-id.sh) Ho dovuto tagliare un po 'lo script per farlo funzionare.

curl -X GET " https://api.cloudflare.com/client/v4/zones/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/dns_records?type=A&name=dynamic " \ -H "X-Auth-Email: you@youremail.com" \ -H "X-Auth-Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ -H "Tipo di contenuto: application / json"

Ho archiviato entrambi gli script in / jffs rendendoli eseguibili.

In termini di aspetti di Cloudflare, ho impostato come da questa guida solo i record di dominio 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- e-un-FritzBox

Su Cloudflare devi impostare i seguenti record:

  • Tipo: A | Nome: dinamico | Valore: "il tuo IP WAN" ***

  • Tipo: CNAME | Nome: "tuodominio.xyz" | Valore: dinamico. "Tuodominio.xyz"

  • Tipo: CNAME | Nome: www | Valore: "yourdomain.xyz"

Ho impostato un processo cron per eseguire cloudflare-ddns.sh ogni 5 minuti per verificare la presenza di modifiche IP.

Il mio router DD-WRT ora aggiorna automaticamente Cloudflare ogni volta che si modifica l'IP WAN ...

Quanto sopra richiede circa 10 minuti per l'installazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.