Usando o cliente DNS dinâmico dd-wrt com CloudFlare

8

Estou tentando configurar o cliente DNS dinâmico em meu roteador com o firmware dd-wrt (v24-sp2) para que ele altere dinamicamente o endereço IP em um dos registros DNS. Infelizmente, encontrei um problema… Aqui está um exemplo de solicitação da configuração ddclient :

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

Funciona se eu usá-lo no navegador, mas no dd-wrt eu recebo essa saída:

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

O URL de "Location" funciona perfeitamente e o parâmetro "a" está incluído. Qual é o problema?

    
por Roman 23.01.2012 / 15:54

3 respostas

9

Eu não acho que você pode configurá-lo onde DD-WRT chama CloudFlare diretamente. A maneira como eu o configurei é fazer com que o DD-WRT chame um script PHP em um servidor da web remoto, que detecta o IP do cliente e envia a solicitação de atualização para o CloudFlare por meio de sua API.

Configurações do DDNS do 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);

Em vez de usar a autenticação básica HTTP, basta usar uma chave aleatória.

Certifique-se de criar a entrada DNS para o nome de domínio que deseja atualizar no CloudFlare; o parâmetro de ação DIUP só atualizará o IP para uma entrada que já existe.

    
por 08.07.2012 / 10:35
3

Se você deseja executar a atualização do seu roteador, não há como evitar o fato de que você precisa de um pouco de 'algo' no meio para converter sua chamada para o formato CloudFlare (se apenas DNS-O-Matic adicioná-los aos seus serviços suportados ...). Em vez de ter que hospedar um script intermediário, basta usar o Google AppEngine (que é gratuito) para fazer essa postagem novamente para você. Eu uso isso:

link

Ok, você ainda precisa chamar algo diferente de CloudFlare para emitir a atualização, mas pelo menos não precisa executar um host extra ou VPS, etc. para fazer isso sozinho. É completamente transparente - o único problema é que você não recebe um erro retornado, então você precisa verificar se ele está funcionando. Quando estiver funcionando, ele deve ser executado e executado.

    
por 08.06.2013 / 04:59
1

Percebendo que tudo isso está desatualizado e agora requer que o código da v4 api funcione.

testado acima e falha - mau usuário, passe, xxxx info.

revisando este método link

    
por 28.06.2018 / 18:55