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

Причин для этого у каждого может быть несколько. Вы зарегистрировали бесплатно домен или он у вас на паркинге у регистратора и регистратор не предоставляет бесплатно поддержку почты с вашим доменным именем. Или вас не устраивает сама процедура настройки доменных записей. Хочется что бы все было на родном языке. Может хочется больше, каких то дополнительных услуг, причем бесплатно. Для меня например приоритетом было то что бы сервис днс поддерживал: API для изменения доменных записей и почту для моего домена. 1cloud — частично подходит по моим требованиям. Мне понравилась простота управления записями днс и главное управление при помощи API. Так же возможность делать любые типы записей и устанавливать TTL минимум 1 секунда, для динамического айпи более чем достаточно. Все остальные услуги платные более мне и не нужно. Документация на русском языке, управление так же на русском.

Регистрация в 1cloud

Прежде чем пользоваться услугами нужно пройти процедуру создания аккаунта. Кроме указания своего е-майла, нужно будет сообщить номер своего телефона. Так же на выбор можно зарегистрироваться чрез аккаунты вк, гугла, яндекса, маилру и одноклассников. Переходим по ссылке.

Регистрация аккаунта

Вводим в поле Email ваш действующий почтовый адрес на который придет письмо для подтверждения вашей почты.

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

Для окончательной регистрации требуется ввести Имя и номер телефона, на который поступит звонок, последние шесть цифр входящего номера нужно будет ввести в соответствующее поле.

Настройка профиля

После успешной регистрации попадаем в панель управления. Первым делом жмем в правом верхнем углу на ваш логин выбираем из вывалившегося списка Настройки. Вкладка Безопасность меняем пароль входа в панель управления. Старый пароль указываем, который пришел в письме. И дважды вводим желаемый пароль. Для пущей безопасности можно включить двухфакторную аутентификацию на выбор: через приложение или смс.

Переходим на вкладку API-ключ генерируем апи-ключ нажав кнопку Сгенерировать ключ запоминаем его нам он пригодится в дальнейшем.

Делегирование домена в 1cloud

Панель управления проста и интуитивна понятна. Все на русском языке.

Добавление домена

Слева в меню выбрать Сети и доставка контента - DNS . Нажать Добавление домена . В графу Доменное имя второго уровня. Например: 1cloud.ru пишем свой домен. IP адрес сервера - пишем соответственно айпи по которому расположен сервер. Узнать текущий внешний айпи сервера можно зайдя на него по SSH и набрать в терминале:

wget -q -O - ifconfig.me/ip

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

Заполнив поля нажать кнопку Добавить домен

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

Передача управления

Собственно само делегирование сводится к изменению адресов NS. Как поменять адреса серверов имен для бесплатного домена зарегистрированного на freenom. Если у вас другой регистратор домена, то смотрим в инструкциях регистратора или обратитесь в службу поддержки.

Заменить NS на:

ns01.1cloud.ru
ns02.1cloud.ru

Придется подождать до 24 часов, пока управление доменной зоной передастся на 1cloud, по факту бывает и быстрее.

Настройки DNS записей в панели управления 1cloud

В панели управления выбрать домен для редактирования записей нажав на его имя. Нажать на кнопку Создать запись . Выбрать нужную запись. Запись А уже создана автоматически. Создадим запись CNAME. Заполнив поля.

Мнемоническое имя: www.

Каноническое имя или @ : @ или имя домена

TTL: выбрать 30 секунд. Для статического айпи адреса сервера указать 1 день.

Нажать кнопку Создать запись

Автоматическое изменение днс записей при помощи API в 1cloud

Как писал ранее меня интересует изменение записи А поскольку мой сервер с белым динамическим айпи. Для тех у кого статический белый айпи далее можно не читать, у вас и так все хорошо. С помощью API можно делать все то же самое, что и через панель управления, для полного ознакомления с возможностями можно прочитать документацию

Для работы с API необходимо, что бы было установлено curl и jq

sudo apt update
sudo apt install curl
sudo apt install jq

Получить токена

Зайти в панель управления.В правом верхнем углу нажать на ник и выбрать Настройки, потом вкладку API-ключ скопировать ключ или Сгенерировать ключ и скопировать. Он пригодится при создании скрипта.

Получение ID записей А и ID домена

Для того что бы поменять айпи адрес доменной зоны нужно узнать id этой записи. Подключаемся по SSH к серверу. И делаем запрос, где token API-ключ, который получили ранее:

curl -X GET -H 'Content-Type: application/json' -H 'Authorization: Bearer token' "https://api.1cloud.ru/Dns/" | jq

В ответе ищем :

        "ID":"1",
        "TypeRecord":"A",

Запоминаем ID . Для каждой доменной зоны свой ID записи А

Так же ищем ID доменов

    "ID": 1,
    "Name": "имя_домена",

Скрипт изменения записи А (IP-адреса)

Алгоритм довольно простой. Что бы часто не беспокоить постоянными перезаписями, получаем текущую запись А сравниваем ее с реальным на этот момент айпи адресом сервера, если совпадает — все хорошо, если нет — меняем в записи А айпи адрес на текущий момент айпи сервера.

Создаем исполняемый bash скрипт, который будет запускать cron каждую минуту, вполне достаточно.

nano 1cloud.sh

Копируем и вставляем сам скрипт:

#!/bin/bash
TOKEN=token
ID_A=id-a
ID_DOMAIN=id-domain
TTL=30

MYIP=`curl -s 'http://ipinfo.io/ip'`
NSIP=`curl -X GET -H 'Content-Type: application/json' -H 'Authorization: Bearer '$TOKEN'' "https://api.1cloud.ru/Dns/Record/"$ID_A"" | jq '.IP' | sed 's/"//g'`

if [ $MYIP == $NSIP ]
		then 
			exit 1
		else
        
curl -X PUT -H 'Content-Type: application/json' -H 'Authorization: Bearer '$TOKEN'' "https://api.1cloud.ru/dns/recorda/"$ID_A"" -d '{"DomainId":"'$ID_DOMAIN'", "IP":"'$MYIP'", "Name":"@","TTL":"'$TTL'"}' | jq

fi
exit 1

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

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

chmod +x ./1cloud.sh

TTL может принимать значения только: 1с, 5с, 30с, 1м, 5м, 10м, 15м, 30м, 1ч, 2ч, 6ч, 12ч, 1д все указывается в секундах

30с 10м 15м 30м 12ч
1 5 30 60 300 600 900 1800 3600 7200 21600 43200 86400

Если будет задано другое не табличное значение по умолчанию установится 1ч

Скрипт можно улучшить, например задавать только токен и имя домена с TTL , а остальные ID соответствующие доменной зоны скрипт будет парсить автоматически. Если у кого есть желание может поделится своим вариантом.

Установка автоматического исполнения скрипта

Добавляем файл 1cloud.sh в задачу cron

crontab -e

В конце вставляем запись, которая будет вызывать скрипт каждую минуту.

MAILTO=""
*/1 * * * * путь/к/файлу/1cloud.sh

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

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