Как управлять днс записями в cloudflare
Зачем делегировать домен
Причин для этого у каждого может быть несколько. Вы зарегистрировали бесплатно домен или он у вас на паркинге у регистратора и регистратор не предоставляет бесплатно поддержку почты с вашим доменным именем. Или вас не устраивает сама процедура настройки доменных записей. Может хочется больше, каких то дополнительных услуг, причем бесплатно. Для меня например приоритетом было то что бы сервис днс поддерживал: API для изменения доменных записей и почту для моего домена. Cloudflare - подходит под мои требования.
Скажу сразу очень много чего есть из бесплатных дополнительных услуг, подробно их еще не тестировал, но выглядит все многообещающим.
Регистрация в cloudflare
Прежде чем пользоваться услугами нужно пройти простую процедуру создания аккаунта. Переходим по ссылке.
Регистрация аккаунта
Вводим в поле Email ваш действующий почтовый адрес на который придет письмо для подтверждения вашей почты.
В поле Password пароль, который должен быть не менее 8 символов, которые включают в себя цифры и спецсимволы.
Жмем кнопку Create Account
В пришедшем письме лучше все таки перейти по ссылке или вставить в браузер.
Сразу после регистрации попадаем в личный кабинет, в котором можно уже произвести передачу управления на данный днс сервис.
Делегирование домена в cloudflare
В личном кабинете ничего лишнего, все по делу. Разобраться в навигации и что за что отвечает, плотно посидев за день можно. Справочной информации хватает. Русский язык не поддерживается, так что юзаем плагин переводчик для браузера. Некоторые вещи интуитивно понятны, но есть моменты, которые становятся ясны, только в результате эксперимента. Ничего не боимся жмем смело по кнопкам и ссылкам, как говорится нажимая на кнопки вы не делаете компьютеру больно. Приобретаем опыт и знания.
Добавление домена
Находим справа кнопку +Add a Site или в меню наверху она же продублирована.
В поле Enter your site (example.com): вводим ваш домен. Смело жмем кнопку Add a Site.
На выбор предлагается несколько тарифных планов, выбираем Free нажав кнопку Get started
Редактирование текущих записей DNS
Произойдет сканирование текущих днс записей. Если все устраивает оставляем как есть. Записи A, AAAA и CNAME по умолчанию будут проксироваться, т.е. весь трафик с сервера будет идти через cloudflare. Благодаря этому приобретаются некоторые не бесполезные возможности защита трафика и его ускорение благодаря кэшированию сайта на серверах cloudflare. Если не устраивает, что трафик будет проходить через прокси, в строке записи нажать на оранжевую кнопку в столбце Proxy status . Запись поменяет статус с Proxied на DNS only. В последствии при необходимости проксирование можно включить.
Проверив текущие записи, если они есть, нажать Continue
Передача управления
Собственно само делегирование сводится к изменению адресов NS. Как поменять адреса серверов имен для бесплатного домена зарегистрированного на freenom. Если у вас другой регистратор домена, то смотрим в инструкциях регистратора или обратитесь в службу поддержки.
Заменить NS на:
Код: Выделить всё
lily.ns.cloudflare.com
paul.ns.cloudflare.com
Попадем на страницу, где предложат рекомендации по конфигурации, лишним не будет. Жмем Configuration recommendations. И активируем два пункта.
Enable Always Use HTTPS - что бы все запросы перенаправлялись по защищенному протоколу https.
Enable Auto Minify - Уменьшает размер файла исходного кода Javascript, CSS и HTML на вашем веб-сайте.
Нажать кнопку Check nameservers для проверки передачи управления доменом.
Немного подождав придет письмо об успешном делегировании домена. Поэтому можно спокойно заниматься своими делами.
Настройки DNS записей в личном кабинете cloudflare
Слева в меню выбираем DNS в разделе DNS management for имя-домена нажать +Add record
Cancel Save
В столбце Type выбрать А. Name (required) поставить @ - обозначает корень домена. IPv4 address (required) - пишем айпи адрес сайта. Proxy status - оставляем проксирование или по желанию снимаем галку. TTL - время жизни записи будет выставлено автоматически. Нажать в углу Save - сохранить.
И добавляем поддомен (субдомен) WWW , что бы к серверу можно было обращаться по старинке через три дабл ви.
По той же схеме +Add record, только в этот раз сделаем алиас вместо записи А выбрать CNAME
Cancel Save
В итоге должно получится;
Для редактирования записи, в столбце Actions нажать Edit в нужной строке.
Теперь сайт, сервер или приложение доступно под своим доменным именем.
Автоматическое изменение днс записей при помощи API в cloudflare
Как писал ранее меня интересует изменение записи А поскольку мой сервер с белым динамическим айпи. Для тех у кого статический белый айпи далее можно не читать, у вас и так все хорошо. С помощью API можно делать все то же самое, что и через дашбоард, для полного ознакомления с возможностями можно почитать документацию с примерами
Получение токена
Что бы не подвергать опасности свои регистрационные данные аккаунта, необходимо создать токен. Есть несколько видов токенов предназначенных для определенных целей. Можно создать с помощью готового шаблона, что и сделаем, а можно самому определить за что будет отвечать токен.
Входим в личный кабинет и после этого жмем на эту ссылку или в правом верхнем углу жмем иконку с человечком и выбираем My Profile потом слева в меню API Tokens. Потом нажать на кнопку Create Token.
Создадим токен для редактирования записей днс, выбрав шаблон Edit zone DNS нажав в этой строке кнопку Use template.
На странице создания токена все оставляем по умолчанию, только в разделе Zone Resources вместо Specific zone выбрать All zones from an account и соответственно выбрать аккаунт, он у меня один, а вот бесплатных доменов несколько. Жмем Continue to summary покажут дерево какие зоны доступны для редактирования, если все устраивает нажать Create Token. Сгенерируется токен, который нужно скопировать и запомнить в надежном месте. Потом его больше ни где не посмотреть, если только не сделать новый токен или перевыпустить старый.
Проверка работы токена
Для работы с API необходимо, что бы было установлено curl и jq
Код: Выделить всё
sudo apt update
sudo apt install curl
sudo apt install jq
Код: Выделить всё
curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \
-H "Authorization: Bearer <token secret>" \
-H "Content-Type:application/json" | jq
Код: Выделить всё
curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \
-H "Authorization: Bearer c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
-H "Content-Type:application/json" | jq
Код: Выделить всё
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 184 0 184 0 0 180 0 --:--:-- 0:00:01 --:--:-- 180
{
"result": {
"id": "100bf38cc8393103870917dd535e0628",
"status": "active"
},
"success": true,
"errors": [],
"messages": [
{
"code": 10000,
"message": "This API Token is valid and active",
"type": null
}
]
}
Для работы скрипта необходимы идентификаторы доменов. object_id - для каждой зоны свой. Набираем запрос
Код: Выделить всё
curl -X GET "https://api.cloudflare.com/client/v4/zones/" \
-H "Authorization: Bearer c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
-H "Content-Type:application/json" | jq
Над строкой
Код: Выделить всё
"name": "ваш_домен",
Скрипт изменения записи А (IP-адреса)
Алгоритм довольно простой. Что бы часто не беспокоить постоянными перезаписями, получаем текущую запись А сравниваем ее с реальным на этот момент айпи адресом сервера, если совпадает - все хорошо, если нет - меняем в записи А айпи адрес на текущий момент айпи сервера.
Создаем исполняемый bash скрипт, который будет запускать cron каждую минуту, вполне достаточно.
Код: Выделить всё
nano cloudflare.sh
Код: Выделить всё
#!/bin/bash
DOMAIN=ваш_домен
TOKEN=токен
OBJECT_ID=object_id
MYIP=`curl -s 'http://ipinfo.io/ip'`
NSIP=`curl -X GET 'https://api.cloudflare.com/client/v4/zones/'$OBJECT_ID'/dns_records?type=A' \
-H 'Authorization: Bearer '$TOKEN'' \
-H 'Content-Type:application/json' | jq '.result[] | .content' |sed 's/"//g'`
if [ $MYIP == $NSIP ]
then
exit 1
else
#Эта запись пока вызывает сомнение, потому что пока не проверить
#На выходе предупреждение о бесплатных доменах
curl -X POST 'https://api.cloudflare.com/client/v4/zones/'$OBJECT_ID'/dns_records?type=A' \
-H 'Authorization: Bearer '$TOKEN'' \
-H 'Content-Type:application/json'
--data '{'type':'A','name':'$DOMAIN','content':'$MYIP','ttl':30,'proxied':true}'
fi
exit 1
Делаем файл исполняемым.
Код: Выделить всё
chmod +x ./cloudflare.sh
Код: Выделить всё
"message": "You cannot use this API for domains with a .cf, .ga, .gq, .ml, or .tk TLD (top-level domain). To configure the DNS settings for this domain, use the Cloudflare Dashboard."
Для тех, кто делегирует другие доменные зоны остаётся только добавить файл cloudflare.sh в cron
Код: Выделить всё
crontab -e
Код: Выделить всё
MAILTO=""
*/1 * * * * путь/к/файлу/cloudflare.sh