DD-WRT DDNS 设置

DD-WRT DDNS 设置

我正在尝试使用 dd-wrt ​​(v24-sp2) 固件在路由器上配置动态 DNS 客户端,以便它能够动态更改 DNS 记录中的 IP 地址。不幸的是,我遇到了一个问题……以下是他们发出的示例请求ddclient 配置

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

如果我在浏览器中使用它,它可以工作,但在 dd-wrt ​​中我得到这个输出:

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

“Location” 中的 URL 运行正常,并且包含参数“a”。问题出在哪里?

答案1

我认为您不能将其设置为 DD-WRT 直接调用 CloudFlare。我配置的方式是让 DD-WRT 调用远程 Web 服务器上的 PHP 脚本,然后该脚本检测客户端 IP 并通过其 API 将更新请求发送到 CloudFlare。

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

我没有使用 HTTP 基本身份验证,而是使用随机密钥。

确保您为要在 CloudFlare 上更新的域名创建了 DNS 条目;DIUP 操作参数将仅更新已存在的条目的 IP。

答案2

如果您想从路由器执行更新,那么就无法回避这样一个事实:您需要在中间添加一些额外的“东西”来将您的调用转换为 CloudFlare 格式(如果 DNS-O-Matic 能将它们添加到其支持的服务中……)。您不必自己托管中间脚本,只需使用 Google AppEngine(免费)为您执行此重新发布即可。我使用这个:

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

好的,您仍然需要调用 CloudFlare 以外的其他程序来发布更新,但至少您不需要运行额外的主机或 VPS 等来自己执行此操作。它是完全透明的 - 唯一的问题是您没有收到返回的错误,因此您需要自己检查它是否正常工作。一旦它正常工作,它应该会一直运行下去。

答案3

注意到这一切都已经过时了,现在需要 v4 api 代码才能工作。

上述测试失败-错误的用户、密码、xxxx 信息。

回顾此方法 https://github.com/ScottHelme/CloudFlareDDNS

答案4

我刚刚成功做到了这一点,效果非常好。设置如下:

用户名必须是主域名。密码是具有区域 -> DNS 读取和编辑权限的用户 API 令牌。主机名是您要更新的域名。您必须启用使用 SSL。

我还确保在路由器中启用了 SSL 证书。通过转到管理 -> 管理 -> Web 访问来执行此操作。然后将 HTTPS 设置为协议。我认为这会使连接更安全 ;)1

相关内容