CloudFlareでdd-wrtダイナミックDNSクライアントを使用する


8

dd-wrt(v24-sp2)ファームウェアを搭載したルーターで動的DNSクライアントを構成して、DNSレコードの1つで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」が含まれています。どうしたの?


ここで何を達成しようとしているのかわかりません。もっと明確にしてください。
Chopper3

変更中のIPアドレスを管理し、ドメイン情報を動的に更新するルーターのサービスを使用して、CloudFlareの変更Aレコードを試しています。
ローマ

私は同じ問題を抱えていますが、私たちを正しい方向に向けるのに役立つかもしれない何かを見つけました。wgetに同じURL文字列を入力しても同じ問題が発生しますが、Firefoxでは発生しません。

これを理解したことはありますか?
bjtitus

まだ、残念ながらできません。簡単なpythonスクリプトを作成し、それを使用して手動でIPを更新しました。
ローマ

回答:


9

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のみを更新します。


2
提案ありがとうございます。IPアドレスを正しく検出できなかったため、コードを少し修正する必要がありました。この回答のコードを別の質問に使用しました。これが結果です-https://gist.github.com/3149751
ローマ

3

ルーターから更新を実行する場合は、呼び出しをCloudFlare形式に変換するために途中に少し余分な「何か」が必要であるという事実を回避することはできません(DNS-O-Maticのみが追加する場合)サポートされているサービス...)。中間スクリプトを自分でホストする必要はなく、Google AppEngine(無料)を使用して、この再投稿を行うことができます。私はこれを使います:

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

さて、更新を発行するためにCloudFlare以外のものを呼び出す必要がありますが、少なくとも自分で行うために追加のホストやVPSなどを実行する必要はありません。完全に透過的です-唯一の問題は、エラーが返されないことです。そのため、自分で機能しているかどうかを確認する必要があります。動作している場合は、実行して実行する必要があります。


「DYNDNS svr回答の検証中にエラーが発生しました。usr、pass、hostnameを確認してください!(HTTP / 1.0 302が見つかりました
ayr-ton

1

これはすべて時代遅れであり、動作するようにv4 APIコードが必要になっていることに気づきました。

上記でテストすると失敗します-悪いユーザー、パス、xxxx情報。

このメソッドを確認する https://github.com/ScottHelme/CloudFlareDDNS


0

これを使用してこれを機能させることができました:https : //github.com/dcerisano/Cloudflare-dynamic-dns

Cloudflareアカウントを設定すると、必要な情報を簡単に見つけることができます。

必要なもの:ゾーンID

認証キー(別名グローバルAPIキー)

ドメインのAレコードID(これはcloudflare-dns-id.shスクリプトを実行して取得されます)機能させるためにスクリプトを少しトリミングする必要がありました。

curl -X GET " https://api.cloudflare.com/client/v4/zones/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/dns_records?type=A&name=dynamic " \ -H "X-Auth-Email:you@youremail.com" \ -H "X-Auth-Key:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ -H "Content-Type:application / json"

両方のスクリプトを/ jffsに保存して実行可能にしました。

物事のCloudflare側に関しては、このガイドに従って、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- and-a-FritzBox

Cloudflareでは、次のレコードを設定する必要があります。

  • タイプ:A | 名前:動的| 値:「your WAN IP」***

  • タイプ:CNAME | 名前:「yourdomain.xyz」| 値:dynamic。” yourdomain.xyz”

  • タイプ:CNAME | 名前:www | 値:「yourdomain.xyz」

cronジョブをセットアップして、5分ごとにcloudflare-ddns.shを実行し、IPの変更を確認します。

WANのIPが変更されると、DD-WRTルーターがCloudflareを自動更新するようになりました...

上記の設定には約10分かかります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.