Uso del cliente DNS dinámico dd-wrt con CloudFlare

8

Estoy tratando de configurar el cliente DNS dinámico en mi enrutador con el firmware dd-wrt (v24-sp2) para que cambie dinámicamente la dirección IP en uno de los registros DNS. Desafortunadamente, encontré un problema ... Aquí hay una solicitud de ejemplo de su configuración de ddclient :

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

Funciona si lo uso en el navegador, pero en dd-wrt obtengo esta salida:

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

La URL de "Ubicación" funciona perfectamente y el parámetro "a" está incluido. ¿Cuál es el problema?

romano
fuente
No tengo claro lo que está tratando de lograr aquí, ¿puede ser más claro, por favor?
Chopper3
Estoy intentando cambiar un registro en CloudFlare usando el servicio en el enrutador que gestiona el cambio de direcciones IP y actualiza la información del dominio de forma dinámica.
Roman
Tengo el mismo problema pero encontré algo que puede ayudarme a orientarnos en la dirección correcta. Ingresar la misma cadena de URL en wget exhibe el mismo problema pero firefox no.
¿Alguna vez resolviste esto?
bjtitus
Todavía no, desafortunadamente. Escribí un script simple de Python y lo usé para actualizar IP manualmente.
Romano

Respuestas:

9

No creo que pueda configurarlo donde DD-WRT llama a CloudFlare directamente. La forma en que lo configuré es hacer que DD-WRT llame a un script PHP en un servidor web remoto, que luego detecta la IP del cliente y envía la solicitud de actualización a CloudFlare a través de su API.

Configuración 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 = "<[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);

En lugar de usar la autenticación básica HTTP, solo uso una clave aleatoria.

Asegúrese de crear la entrada DNS para el nombre de dominio que desea actualizar en CloudFlare; el parámetro de acción DIUP solo actualizará la IP para una entrada que ya existe.

superann
fuente
2
Gracias por tu sugerencia. Tuve que arreglar un poco tu código porque no podía detectar mi dirección IP correctamente. Usé el código de esta respuesta a otra pregunta. Aquí está el resultado: https://gist.github.com/3149751 .
Roman
3

Si desea ejecutar la actualización desde su enrutador, entonces no hay forma de evitar el hecho de que necesita un 'algo' extra en el medio para convertir su llamada al formato CloudFlare (si solo DNS-O-Matic los agregaría a sus servicios soportados ...). En lugar de tener que alojar un script intermedio usted mismo, simplemente puede usar Google AppEngine (que es gratuito) para hacer esta nueva publicación por usted. Yo uso esto:

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

De acuerdo, todavía tiene que llamar a algo más que CloudFlare para emitir la actualización, pero al menos no necesita ejecutar un host adicional o VPS, etc. para hacerlo usted mismo. Es completamente transparente: el único problema es que no se devuelven los errores, por lo que debe verificar que funcione usted mismo. Una vez que está funcionando, simplemente debe ejecutarse y ejecutarse.

Johann
fuente
Obtuve el error: Error al validar la respuesta DYNDNS svr. Compruebe usr, pase, nombre de host! (HTTP / 1.0 302 encontrado
ayr-ton
0

Logramos que esto funcione usando esto: https://github.com/dcerisano/Cloudflare-dynamic-dns

Una vez que haya configurado su cuenta de Cloudflare, la información requerida es fácil de localizar:

Necesitas: ID de zona

Clave de autorización (también conocida como clave API global)

ID de registro A para su dominio (esto se obtiene ejecutando el script cloudflare-dns-id.sh) Tuve que recortar un poco el script para que funcione.

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 "Tipo de contenido: aplicación / json"

Almacené ambos scripts en / jffs haciéndolos ejecutables.

En términos del lado de Cloudflare, configuré según esta guía solo para los registros de dominio de 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- y-a-FritzBox

En Cloudflare debe establecer los siguientes registros:

  • Tipo: A | Nombre: dinámico | Valor: "su IP WAN" ***

  • Tipo: CNAME | Nombre: "tudominio.xyz" | Valor: dinámico ".dominio.xyz"

  • Tipo: CNAME | Nombre: www | Valor: "tudominio.xyz"

Configuré un trabajo cron para ejecutar cloudflare-ddns.sh cada 5 minutos para verificar los cambios de IP.

Mi enrutador DD-WRT ahora actualiza automáticamente Cloudflare cada vez que se cambia la IP de WAN ...

Lo anterior tarda unos 10 minutos en configurarse.

MikeK
fuente