Назад | Перейти на главную страницу

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

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

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

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

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

Решение найдено в глубины панели запуска 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

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

Начать сначала !