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.