Сегодня у нас продолжение статьи про octoDNS, начатой ранее:
DNS (Domain Name System) — компьютерная распределённая система для получения информации о доменах. Чаще всего используется для получения IP-адреса по имени хоста, получения информации о маршрутизации почты и/или обслуживающих узлах для протоколов в домене.
Сегодня я загружу DNS зону в DNS хостинг посредством octoDNS, и по ходу действий буду писать эту инструкцию. Зону я взял у bind9 сервера.
Небольшое отступление про бесплатные DNS хостинги
Многие хостинги предоставляют DNS сервер бесплатно при размещении у них домена. Однако, у нас речь именно про DNS хостинг.
1cloud.ru
https://1cloud.ru/services/dns
Вам не всегда требуется использовать octoDNS для того чтобы загружать DNS зоны в свой DNS хостинг. Если у вас небольшая DNS зона с несколькими записями, то иногда проще вручную создать их через web-интерфейс хостинга.
К примеру, у 1cloud.ru имеется бесплатный DNS хостинг. Мой домен живёт там.
Не рекламы ради пишу, ребята действительно не требуют финансовых вложений за эту услугу. Достаточно регистрации. Не потребуется каких-либо активаций платных продуктов, так и написано:
Для клиентов 1cloud аренда DNS-сервера в нашем облаке абсолютно бесплатна. Для этого не нужно подключать наши коммерческие услуги, такие как аренда выделенного сервера. Достаточно просто зарегистрироваться в нашей Панели и делегировать ваш домен на наши DNS-серверы.
Помимо web-интерфейса сервис может выкачать записи вашей зоны, если ваш DNS сервер уже где-то хостится. Вы можете быстро и без финансовых превозмогающих усилий развернуть свои небольшие DNS зоны.
Однако, у каждое бесплатной морковки имеются минусы. При попытке указать достаточно большую DNS зону я словил ошибку, которая гласила, что сервис может выкачать не более 50 записей зоны. А ручками вносить не менее 50 записей DNS зоны как-то не хочется. Какой-то автоматизации в работе с зонами DNS я там не нашёл.
Так что если у вас большие DNS зоны или требуется автоматизация через API или octoDNS — это в другие DNS хостинги.
cloudflare.com
В аккаунте с бесплатным тарифом доступен DNS хостинг. Это, наверное, сервис вне конкуренции за единственным моментом, который может сыграть роль при вашем выборе, он находится не в РФ.
А так его вполне можно использовать для личных или любительских проектов, не являющихся критически важными для бизнеса. К примеру, я его использую как DNS для моих домашних сервисов.
Nginx Proxy Manager — настраиваем SSL для всех сайтов домашней лаборатории
И выкачивать ваши доменные записи сервис умеет. И octoDNS. И защита имеется. Про ограничения ничего в документации не нашёл. Сам с большими зонами там работать не пробовал.
selectel.ru
https://selectel.ru/services/additional/dns/
Давайте будем честными и назовём DNS хостинг от Selectel не совсем бесплатным. Дело в том, что:
DNS-хостинг предоставляется бесплатно в дополнение к другим платным продуктам или услугам. Перед началом использования DNS вам необходимо пополнить баланс
А если закопаться в документацию, то можно узнать и сумму пополнения:
Сервис предоставляется бесплатно в дополнение к другим платным продуктам или услугам. Чтобы получить доступ к сервису, завершите регистрацию и пополните баланс на минимальную сумму 100 ₽.
Да-да, я пополнил баланс на 100 рублей и DNS хостинг активировался. Теперь к минусам:
- Выкачивать ваши доменные записи сервис самостоятельно не умеет.
- DNS Selectel нельзя использовать в качестве вторичного DNS.
- А я добавлю что и в качестве только авторитетного DNS его нельзя использовать, вы не сможете изменить рутовые NS записи и задать какой-то сторонний вторичный DNS, если это вам понадобится.
Плюсы:
- Можно добавлять записи через Web.
- Не ограничено количество доменных зон, а также количество ресурсных записей в зоне.
- Серверы защищены межсетевым экраном от DDoS-атак.
- В сервисе работают четыре авторитетных NS-сервера.
- API, Terraform, octoDNS, ExternalDNS для Kubernetes.
Выгрузка DNS на DNS хостинг через octoDNS
Давайте проверим, получится ли выгрузить большую DNS зону с помощью octoDNS на хостинг. Было бы интересно и с cloudflare попробовать, но сегодня поработаем именно с Selectel. Зря я что ли деньги платил?
Задача простая. Имеется файл зоны из bind9, нужно загрузить его на DNS хостинг.
Установка octoDNS
Установить octoDNS:
sudo apt-get update
sudo apt-get install python3 virtualenv
sudo apt-get install python3-pipСоздать директорию для работы с octoDNS с папками config и zones:
mkdir -p ~/octodns/{config,zones}
cd ~/octodnsСоздать виртуальную среду для работы с octoDNS:
virtualenv env
source env/bin/activateУстановить octoDNS в виртуальную среду:
pip3 install octodnsУстановить Selectel-провайдер для octoDNS:
pip3 install octodns_selectelПроверить, что Selectel-провайдер установился корректно:
pip3 list | grep octodns-selectelРабота с файлом зоны
Скачать файл зоны в директорию ~/octodns/zones. Перейти в директорию ~/octodns/zones:
cd ~/octodns/zonesСоздать файл конфигурации import_config.yaml:
---
processors:
no-root-ns:
class: octodns.processor.filter.IgnoreRootNsFilter
providers:
selectel:
class: octodns_selectel.SelectelProvider
token: <x_auth_token>
zonefile:
class: octodns_bind.ZoneFileSource
directory: ./zones
check_origin: false
zones:
<example.com>.:
sources:
- zonefile
processors:
- no-root-ns
targets:
- selectel- <x_auth_token> — IAM-токен для проекта, в который нужно перенести данные
- <example.com> — имя домена (зоны), которую нужно перенести
IAM-токен получить не так просто. Для начала нужно создать сервисную учётную запись с правами вносить изменения в проект.
https://docs.selectel.ru/access-control/user-types/#service-users
После этого можно получить IAM-токен для проекта, он действует 24 часа:
https://docs.selectel.ru/api/authorization/#get-iam-token-project-scoped
Выполните запрос:
curl -i -XPOST \
-H 'Content-Type: application/json' \
-d '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"<username>","domain":{"name":"<account_id>"},"password":"<password>"}}},"scope":{"project":{"name":"<project_name>","domain":{"name":"<account_id>"}}}}}' \
'https://cloud.api.selcloud.ru/identity/v3/auth/tokens'- <username> — имя сервисного пользователя. Посмотреть имя можно в панели управления: в верхнем меню нажмите Аккаунт и перейдите в раздел Пользователи → вкладка Сервисные пользователи (раздел доступен только Владельцу аккаунта и Администратору пользователей)
- <account_id> — номер аккаунта панели управления. Можно посмотреть в панели управления в правом верхнем углу (в запросе встречается два раза)
- <password> — пароль сервисного пользователя, можно посмотреть при создании пользователя или изменить на новый
- <project_name> — имя проекта
При успешной авторизации вернется ответ с кодом 201 Created в формате:
HTTP/2 201
X-Subject-Token: tokenВ заголовке X-Subject-Token находится токен.
Заполнили import_config.yaml, идём дальше.
Перейти в директорию ~/octodns:
cd ~/octodnsЗапустить импорт:
octodns-sync --config-file=./config/import_config.yaml --doitСначала зона у меня не импортировалась. У сервисного пользователя не хватило прав, пришлось расширить ему права.
После этого большая зона импортировалась только частично. Я тестировать не реально большой зоне. После нескольких запусков импорта догрузились оставшиеся DNS записи.
Естественно, NS записи при импорте были заменены на NS серверы Selectel.
Заключение
Мы с вами выгрузили DNS зону с помощью octoDNS и познакомились с некоторыми бесплатными или почти бесплатными DNS хостингами. Если знаете ещё достойных кандидатов, накидывайте в комментариях. А мы прощаемся с вами, нам еще жалеть о потраченный 100 рублях.
P.S.
И не успел я ещё опубликовать статью, как мне позвонил менеджер Selectel и сказал, что DNS хостинг у них после Нового Года станет платным. Бесплатный тариф тоже останется, но непонятно с какими ограничениями. Вот такой вот пердимонокль...
