Pull to refresh

Использование CloudFlare в качестве бесплатной альтернативы DynDNS

Недавно столкнулся с необходимостью доступа к серверу на Windows с динамическим IP. Беглый поиск по бесплатным альтернативам DynDNS привел к разным решениям, которые меня по тем или иным причинам не устраивали.

Описание решения


Доступ к серверу осуществляется по доменному имени, в качестве DNS-хостинга используется CloudFlare, о котором тут как-то уже писали. Беглый поиск по настройкам аккаунта привел меня к описанию API, из которого я понял, что зону можно обновлять без помощи web-интерфейса.

Для начала нам необходимо получить токен для доступа к API, он есть в настройках аккаунта CloudFlare, там же его можно изменить. Также, для прохождения авторизации при запросах к API необходимо использовать email, на который зарегистрирован ваш аккаунт CloudFlare.

После этого необходимо выполнить запрос всех параметров DNS для заданного нам домена, которые нам пригодятся в дальнейшем. Сделать это можно просто через адресную строчку бразуера:

https://www.cloudflare.com/api_json.html?a=rec_load_all&tkn=ваш_токен&email=ваш_emailm&z=ваш_домен

Ответ на этот запрос, на первый взгляд, может показаться непонятным. Нужно внимательно в него приглядеться и найти нужную нам А-запись (вообще, подразумевается, что она там одна). Для этой записи необходимо найти следующие параметры: rec_id, zone_name, name.

Далее, нам нужно определиться, как мы будем получать наш текущий внешний IP-адрес. Для решения этой задачи я воспользовался специальным сервисом от Яндекса.

Для того чтобы обращаться из командной строки к различным URL я использовал программу curl, которую предварительно скачал. Для корректной работы нам нужна версия с поддержкой SSL.

Программирование BAT-файла


Используя все вышеописанное формируем bat-файл и ставим его на исполнение каждые 5 минут в планировщике задач Windows.

@echo off

rem Обнуляем переменную IP на всякий случай
set IP=''

rem Задаем путь к curl, указываем ключ -s чтобы отключить лишний вывод
set curl=C:\Windows\System32\curl.exe -s

rem Задаем url для скачивания своего IP, воспользуемся сервисом от Яндекса
set ip_url=http://ipv4.internet.yandex.ru/api/v0/ip

rem Присваиваем результат выполнения команды curl переменной IP
for /F %%f in ('%curl% %ip_url%') DO set IP=%%f

rem Обрезаем от переменной IP слева и справа по одному символу, так как изначально Яндекс отдает значение в кавычках
set IP=%IP:~1,-1%

echo My IP: %IP%

set tkn=ваш_токен
set email=ваш_email
set a=rec_edit
set id=тут_вставляем_значение_rec_id_полученное_ранее
set z=тут_вставляем_значение_name_полученное_ранее
set type=A
set name=тут_вставляем_значение_zone_name_полученное_ранее
rem Service_mode выставляем в 0, это отключает встроенное в Cloudflare проксирование и выставляет для домена реальный IP
set service_mode=0
rem Минимальный TTL, который позволяет задать Clodflre - 120 секунд
set ttl=120
set content=%IP%

rem Запускаем обновление зоны с заданными параметрами, указываем ключ -k чтобы отключить проверку подлинности сертификатов домена Cloudflare
%curl% -k "https://www.cloudflare.com/api_json.html?tkn=%tkn%&email=%email%&a=%a%&id=%id%&z=%z%&type=%type%&name=%name%&service_mode=%service_mode%&ttl=%ttl%&content=%IP%"

Результат


Таким образом, в результате выполнения скрипта, каждые 5 минут будет обновляться DNS вашего доменного имени, куда будет записываться внешний IP-адрес компьютера, на котором выполняется скрипт.

После всего этого остается проблема, что при выполнении этого скрипта на рабочей машине каждые 5 минут на секунду будет появляться черное окошко с консолью. Так как я не работаю непосредственно за этим компьютером, то не стал решать эту проблему и оставил все как есть. Однако, если это необходимо, то решения есть, нужно просто воспользоваться поиском.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.