Добавить дополнительные зоны вне базы данных MySQL

Мне нужен сервер MySQL для моего DNS-сервера, поэтому я решил переключиться с Bind на PowerDNS, серверная часть MySQL которого несколько удобнее.

В основном: пользователи добавляют домены в мою базу данных с помощью веб-интерфейса, эти домены зарегистрированы и доступны для PowerDNS. Когда я запрашиваю DNS-сервер об этих доменах, я получаю правильный ответ. Работает как шарм.

Дело в том, что мне нужно добавить свои домены и зоны в мои DNS-реестры, и добавление их в базу данных нарушит логику моего приложения (только пользователи этого приложения должны добавлять домены). Я хотел бы добавить дополнительные домены и зоны в PowerDNS, не добавляя их непосредственно в свою базу данных.

Можно ли как-нибудь зарегистрировать дополнительные домены, например, в файле, который будет прочитан до того, как будет сделан любой запрос MySQL? Или, может быть, запасной файл, если среди моих записей MySQL ничего не найдено?

1 ответ

Решение

Решение найдено в недрах панели запуска PowerDNS! Существует способ чтения файлов данных DNS перед использованием бэкэнда MySQL, а это... использование двух бэкэндов! Цитирование:

Как описано в http://doc.powerdns.com/modules.html - просто не так много слов;) - PowerDNS может запускать любое количество разных или одинаковых бэкэндов через оператор запуска. Обычно это можно сделать в файле конфигурации pdns.conf вместо командной строки. Эти ответы будут исчерпаны для ответов на ваш DNS-запрос в том порядке, в котором они указаны в операторе запуска. Это означает, что если ваш первый бэкэнд в очереди может ответить на вопрос, он ответит, и если только четвертый в очереди сможет ответить на вопрос, у вас будет задержка прохождения цикла через первые три бэкэнда до тех пор, пока PowerDNS не отправит ответ. Поэтому крайне важно, чтобы ваши бэкэнды отвечали достаточно быстро там, где достаточно быстро получал бы, а ответ в <1 должен быть достаточным, чтобы быть совместимым с большинством рекурсивных серверов имен, однако быстрее, конечно, лучше.

Для моей проблемы я решил использовать:

  • Бэкэнд Bind, который служит приоритетным файловым бэкэндом.
  • Бэкэнд MySQL, который идет вторым.

В общем, все, что нужно, это небольшое изменение конфигурации в pdns.local:

launch=bind,gmysql

Я слышал, что вы можете быть более конкретным с (присваивает имена бэкэндам):

launch=bind:first,gmysql:second

Затем просто добавьте параметры для обоих бэкэндов:

# Bind backend configuration
bind-config=/path/to/your/zones/file

# MySQL configuration
gmysql-host=localhost
gmysql-port=
gmysql-dbname=db
gmysql-user=user
gmysql-password=passwd
gmysql-dnssec=no

Все, что вам нужно сделать, это создать файл зоны Bind (zone{} блоки), ссылаясь на специфичные для домена файлы (содержащие записи SOA, A, MX, NS, ...).

Запустить снова!

Другие вопросы по тегам