Зачем делегировать домен

Причин для этого у каждого может быть несколько. Вы зарегистрировали бесплатно домен или он у вас на паркинге у регистратора и регистратор не предоставляет бесплатно поддержку почты с вашим доменным именем. Или вас не устраивает сама процедура настройки доменных записей. Может хочется больше, каких то дополнительных услуг, причем бесплатно. Для меня например приоритетом было то что бы сервис днс поддерживал: 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

После того как указаны адреса NameServer cloudflare у вашего регистратора, нажать кнопку Done, check nameservers

Попадем на страницу, где предложат рекомендации по конфигурации, лишним не будет. Жмем Configuration recommendations. И активируем два пункта.

Enable Always Use HTTPS - что бы все запросы перенаправлялись по защищенному протоколу https.

Enable Auto Minify - Уменьшает размер файла исходного кода Javascript, CSS и HTML на вашем веб-сайте.

Нажать кнопку Check nameservers для проверки передачи управления доменом.

Немного подождав придет письмо об успешном делегировании домена. Поэтому можно спокойно заниматься своими делами.

Настройки DNS записей в личном кабинете cloudflare

Слева в меню выбираем DNS в разделе DNS management for имя-домена нажать +Add record

Type Name (required) IPv4 address (required) Proxy status TTL
A @ айпи-сервера Proxied Auto
Cancel Save

В столбце Type выбрать А. Name (required) поставить @ - обозначает корень домена. IPv4 address (required) - пишем айпи адрес сайта. Proxy status - оставляем проксирование или по желанию снимаем галку. TTL - время жизни записи будет выставлено автоматически. Нажать в углу Save - сохранить.

И добавляем поддомен (субдомен) WWW , что бы к серверу можно было обращаться по старинке через три дабл ви.

По той же схеме +Add record, только в этот раз сделаем алиас вместо записи А выбрать CNAME

Type Name (required) IPv4 address (required) Proxy status TTL
CNAME www имя-домена Proxied Auto
Cancel Save

В итоге должно получится;

Type Name Content Proxy status TTL Actions
A @ айпи-сервера Proxied Auto Edit
CNAME www имя-домена Proxied Auto Edit

Для редактирования записи, в столбце 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

Подключаемся по SSH к серверу. И делаем запрос.

 curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \
     -H "Authorization: Bearer <token secret>" \
     -H "Content-Type:application/json" | jq

token secret - токен который недавно получили в рабочем варианте примерно так:

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 идентификаторов

Для работы скрипта необходимы идентификаторы доменов. object_id - для каждой зоны свой. Набираем запрос

curl -X GET "https://api.cloudflare.com/client/v4/zones/" \
     -H "Authorization: Bearer c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
     -H "Content-Type:application/json" | jq 

После Bearer свой токен на редактирование днс записей.

Над строкой

"name": "ваш_домен",

Находится запись “id”: после нее запоминаем набор цифр и букв.

Скрипт изменения записи А (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

Сохраняем файл Ctrl+O, и закрываем Ctrl+X.

Делаем файл исполняемым.

chmod +x ./cloudflare.sh

И тут появилась ложка дёгтя, оказывается cloudflare раньше не брал на обслуживание домены из зон .cf, .ga, .gq, .ml, .tk теперь берет, но с таким условием, что они не обслуживаются через API. Жаль, буду искать дальше днс хостеров по своим требованиям.

"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

Прокомментировать можно

без регистрации здесь