Menggunakan dd-wrt Dynamic DNS client dengan CloudFlare

8

Saya mencoba mengkonfigurasi Dynamic DNS client pada router saya dengan firmware dd-wrt (v24-sp2) sehingga secara dinamis akan mengubah alamat IP di salah satu catatan DNS. Sayangnya saya mengalami masalah ... Berikut ini contoh permintaan dari konfigurasi ddclient mereka :

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

Ini berfungsi jika saya menggunakannya di browser, tetapi di dd-wrt saya mendapatkan output ini:

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 dari "Lokasi" berfungsi dengan baik dan parameter "a" disertakan. Apa masalahnya?

Roma
sumber
Saya tidak jelas apa yang ingin Anda capai di sini, dapatkah Anda lebih jelas?
Chopper3
Saya mencoba mengubah catatan di CloudFlare menggunakan layanan di router yang mengelola perubahan alamat IP dan memperbarui informasi domain secara dinamis.
Roman
Saya memiliki masalah yang sama tetapi saya menemukan sesuatu yang dapat membantu mengarahkan kita ke arah yang benar. Memasukkan string URL yang sama di wget menunjukkan masalah yang sama tetapi firefox tidak.
Apakah Anda pernah memikirkan hal ini?
bjtitus
Sayangnya, belum. Saya menulis skrip python sederhana dan menggunakannya untuk memperbarui IP secara manual.
Roman

Jawaban:

9

Saya tidak berpikir Anda dapat mengaturnya di mana DD-WRT memanggil CloudFlare secara langsung. Cara saya mengonfigurasinya adalah meminta DD-WRT memanggil skrip PHP pada server web jarak jauh, yang kemudian mendeteksi IP klien dan mengirimkan permintaan pembaruan ke CloudFlare melalui API mereka.

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

Alih-alih menggunakan HTTP auth basic, saya hanya menggunakan kunci acak.

Pastikan Anda membuat entri DNS untuk nama domain yang ingin Anda perbarui di CloudFlare; parameter tindakan DIUP hanya akan memperbarui IP untuk entri yang sudah ada.

Superann
sumber
2
Terima kasih atas saran Anda. Saya harus memperbaiki kode Anda sedikit karena tidak dapat mendeteksi alamat IP saya dengan benar. Saya menggunakan kode dari jawaban ini ke pertanyaan lain. Inilah hasilnya - https://gist.github.com/3149751 .
Roman
3

Jika Anda ingin menjalankan pembaruan dari router Anda, maka tidak ada cara untuk mengatasi kenyataan bahwa Anda memerlukan sedikit 'sesuatu' di tengah untuk mengubah panggilan Anda ke dalam format CloudFlare (jika hanya DNS-O-Matic yang akan menambahkannya ke layanan yang didukung mereka ...). Daripada harus meng-host skrip perantara sendiri, Anda bisa menggunakan Google AppEngine (gratis) untuk melakukan posting ulang untuk Anda. Saya menggunakan ini:

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

Oke, Anda masih harus memanggil sesuatu selain CloudFlare untuk mengeluarkan pembaruan tetapi setidaknya Anda tidak perlu menjalankan host tambahan atau VPS dll untuk melakukannya sendiri. Ini benar-benar transparan - satu-satunya masalah adalah Anda tidak mendapatkan kesalahan dikembalikan sehingga Anda perlu memeriksa itu berfungsi sendiri. Setelah berfungsi, ia harus dijalankan dan dijalankan.

Johann
sumber
Saya mendapat kesalahan: Kesalahan memvalidasi DYNDNS jawaban svr. Periksa usr, pass, nama host! (HTTP / 1.0 302 Ditemukan
ayr-ton
0

Berhasil membuatnya berfungsi menggunakan ini: https://github.com/dcerisano/Cloudflare-dynamic-dns

Setelah pengaturan akun Cloudflare Anda, info yang diperlukan mudah ditemukan:

Anda membutuhkan: ID Zona

Kunci otorisasi (alias Kunci api global)

ID A-record untuk domain Anda (ini diperoleh dengan menjalankan skrip cloudflare-dns-id.sh) Saya harus sedikit memangkas skrip untuk membuatnya berfungsi ..

curl -X DAPATKAN " https://api.cloudflare.com/client/v4/zones/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/dns_records?type=A&name=dynamic " \ -H "X-Auth-Email: [email protected]" \ -H "X-Auth-Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ -H "Tipe-Konten: application / json"

Saya menyimpan kedua skrip di / jffs yang membuatnya dapat dieksekusi.

Dalam hal sisi Cloudflare, saya mengatur sesuai panduan ini hanya untuk catatan domain Cloudflare:

https://support.opendns.com/hc/en-us/community/posts/115000937008-Bagaimana- untuk-set-up-DNS-O-MATIC-for-Cloudflare-and-the-other-way-around- dan-a-FritzBox

Di Cloudflare Anda harus mengatur catatan berikut:

  • Jenis: A | Nama: dynamic | Nilai: "IP WAN Anda" ***

  • Ketik: CNAME | Nama: "domainAnda.xyz" | Nilai: dinamis. "Yourdomain.xyz"

  • Ketik: CNAME | Nama: www | Nilai: "domainAnda.xyz"

Saya menyiapkan tugas cron untuk menjalankan cloudflare-ddns.sh setiap 5 menit untuk memeriksa perubahan IP.

Router DD-WRT saya sekarang secara otomatis memperbarui Cloudflare setiap kali IP WAN diubah ...

Pengaturan di atas membutuhkan waktu sekitar 10 menit.

MikeK
sumber