Использование динамического DNS-клиента dd-wrt с CloudFlare

8

Я пытаюсь настроить динамический DNS-клиент на моем маршрутизаторе с прошивкой dd-wrt (v24-sp2), чтобы он динамически изменял IP-адрес в одной из записей DNS. К сожалению, я столкнулся с проблемой ... Вот пример запроса из их конфигурации 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 из "Location" работает отлично, а параметр "a" включен. В чем проблема?

Роман
источник
Мне неясно, чего вы здесь добиваетесь, можете ли вы быть более ясным, пожалуйста.
Chopper3
Я пытаюсь изменить запись в CloudFlare, используя службу маршрутизатора, которая управляет изменением IP-адресов и динамически обновляет информацию о домене.
Роман
У меня та же проблема, но я нашел кое-что, что может помочь нам направить нас в правильном направлении. Ввод той же строки URL в wget представляет ту же проблему, но Firefox нет.
Вы когда-нибудь понимали это?
bjtitus
К сожалению, пока нет. Я написал простой скрипт на Python и использовал его для обновления IP вручную.
Роман

Ответы:

9

Я не думаю, что вы можете установить его так, чтобы DD-WRT напрямую вызывал CloudFlare. Я настроил его так, чтобы DD-WRT вызывал скрипт PHP на удаленном веб-сервере, который затем определяет IP-адрес клиента и отправляет запрос на обновление в CloudFlare через их API.

Настройки 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 я просто использую случайный ключ.

Убедитесь, что вы создали запись DNS для доменного имени, которое вы хотите обновить на CloudFlare; параметр действия DIUP обновит IP только для записи, которая уже существует.

superann
источник
2
Спасибо за ваше предложение. Мне пришлось немного исправить ваш код, потому что он не мог правильно определить мой IP-адрес. Я использовал код из этого ответа на другой вопрос. Вот результат - https://gist.github.com/3149751 .
Роман
3

Если вы хотите выполнить обновление с вашего маршрутизатора, то нет смысла тратить время на то, что вам нужно немного больше «чего-то» в середине, чтобы преобразовать ваш вызов в формат CloudFlare (если только DNS-O-Matic добавит их в их поддерживаемые услуги ...). Вместо того, чтобы самостоятельно размещать промежуточный скрипт, вы можете просто использовать Google AppEngine (это бесплатно), чтобы сделать эту повторную публикацию за вас. Я использую это:

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

Хорошо, вам все равно нужно вызвать что-то кроме CloudFlare, чтобы выпустить обновление, но по крайней мере вам не нужно запускать дополнительный хост или VPS и т. Д., Чтобы сделать это самостоятельно. Он полностью прозрачен - единственная проблема в том, что вы не получаете ошибок, поэтому вам нужно проверить, работает ли он самостоятельно. Как только он заработает, он должен просто бежать и бежать.

Johann
источник
Я получил ошибку: Ошибка при проверке ответа DYNDNS svr. Проверьте usr, пароль, имя хоста! (HTTP / 1.0 302 найдено
айр-тон
1

Заметьте, что все это устарело, и теперь для работы требуется код API v4.

проверено выше, это терпит неудачу - плохой пользователь, проход, информация хххх.

просмотр этого метода https://github.com/ScottHelme/CloudFlareDDNS

VIII
источник
0

Удалось заставить это работать, используя это: https://github.com/dcerisano/Cloudflare-dynamic-dns

После настройки учетной записи Cloudflare необходимую информацию легко найти:

Вам нужно: ID зоны

Ключ авторизации (он же Global api key)

Идентификатор A-записи для вашего домена (это получается с помощью скрипта cloudflare-dns-id.sh). Мне пришлось немного урезать скрипт, чтобы он работал.

curl -X GET " https://api.cloudflare.com/client/v4/zones/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/dns_records?type=A&name=dynamic " \ -H "X-Auth-Email: you@youremail.com" \ -H "X-Auth-Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ -H "Тип содержимого: 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- а-а-Fritzbox

В Cloudflare вы должны установить следующие рекорды:

  • Тип: A | Название: динамический | Значение: «ваш WAN IP» ***

  • Тип: CNAME | Имя: «yourdomain.xyz» | Значение: динамическое. ”Yourdomain.xyz”

  • Тип: CNAME | Имя: www | Значение: «yourdomain.xyz»

Я настраиваю задание cron для запуска cloudflare-ddns.sh каждые 5 минут для проверки изменений IP.

Мой маршрутизатор DD-WRT теперь автоматически обновляет Cloudflare при каждом изменении IP-адреса WAN ...

Вышеуказанное займет около 10 минут для настройки.

MikeK
источник