Router
將 dd-wrt 動態 DNS 客戶端與 CloudFlare 一起使用
我正在嘗試使用 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
來自“位置”的 URL 完美執行,並且包含參數“a”。有什麼問題?
我不認為你可以在 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 = "<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);
我沒有使用 HTTP 基本身份驗證,而是使用隨機密鑰。
確保為要在 CloudFlare 上更新的域名創建 DNS 條目;DIUP 操作參數只會更新已存在條目的 IP。