Запустите PHP внутри зоны DNS Bind 10

Я использую Linux CentOS 6.64 с BIND 10.1.2.

У меня есть дополнительная зона (list.example.com) внутри основного DNS (example.com)

Файл конфигурации привязки (named) /etc/named.conf включает зону:

zone "list.example.com" IN {
            type master;
    file "list-example-com.zone";
        allow-query { localhost; };
            allow-transfer { 127.0.0.1; };
    };

Список файлов зоны-example-com.zone выглядит следующим образом:

$TTL 86400      ; 1 day
@               IN SOA  ns1.example.com. hostmaster.example.com. (
                        2004032201 ; serial
                        7200       ; refresh (2 hours)
                        5400       ; retry (1.5 hours)
                        1814400    ; expire (3 weeks)
                        86400      ; minimum (1 day)
                        )
                IN NS   ns1.example.com.
;
                IN A    192.168.177.22
;
; -----------------------------------------------------------------
49.30.22.66       IN A    127.0.0.3
44.63.20.10       IN A    127.0.0.2
64.42.10.5        IN A    127.0.0.2
14.3.6.8          IN A    127.0.0.3

// AND OTHER 1000S OF RECORDS LIKE THAT!

Возьмем в качестве примера один из перекодированных IP-адресов.

«Поиск DNS» для IP 44.63.20.10 будет:

44.63.20.10.list.example.com и вернет 127.0.0.2 из DNS

Хорошо, теперь то, что я хочу сделать, это вместо того, чтобы перечислять 1000 записей IP, я просто хочу запустить файл PHP в named.conf, файле зоны или любом другом, чтобы выполнить некоторые коды и вернуть 127.0.0.2 для "DNS" из ИП 44.63.20.10

мой файл.php:

<?php

// Just need to get the required IP (44.63.20.10) and the DNS_TYPE of the request (A, TXT,...ect) then:
// Execute some PHP codes to do some stuff (including connect to mysql database..ect)
// If the IP is TRUE, then return: (44.63.20.10     IN DNS_TYPE    X)

?>

Я надеюсь, что это ясно для вас.

У меня есть собственный файл PHP, просто нужно знать, возможно ли это сделать? и если да, то как? Любая идея, пожалуйста?

Спасибо.


person user2203703    schedule 02.07.2015    source источник


Ответы (3)


Вы должны использовать полнофункциональный API BIND, который позволяет «плагину» заменить функцию внутренней базы данных BIND для назначенных зон и из BIND.

Вам нужно будет отредактировать исходные файлы BIND и makefile.in, а затем заново собрать BIND, включая ваши исходные файлы и файлы заголовков.

Чтобы начать работу с API, найдите файл db.h, который находится в каталоге bind-release/lib/dns/include/dns/db.h, где bind-release следует заменить на расположение и номер версии, в которую вы распаковали исходный код. распределение например /usr/src/bind/10.1.2

Вот копия http://pastebin.com/yTN5Aq03.

person Maroman    schedule 11.07.2015

С биндом это, насколько я знаю, невозможно.

Я бы рекомендовал использовать powerDNS.

PowerDNS более гибкий и может использовать базу данных. Я использую его, например, с базой данных MySQL.
Может быть, это именно то, что вам нужно, а может и нет. Но с гибкостью использования базы данных вы можете создать PHP-скрипт, который вставляет все в базу данных, проверяет ее и так далее.

person Blaatpraat    schedule 02.07.2015

Если вам нужно использовать bind, то должно работать что-то вроде следующего решения.

  1. Создайте скрипт для вывода файла зоны. Для этого можно использовать php или любой другой язык.
  2. После создания файла перезагрузите привязку, чтобы загрузить обновленный файл.
  3. Если эти данные регулярно изменяются, используйте cron для запуска обеих команд с 5-минутным интервалом или с другим интервалом, соответствующим вашим данным.
person datasage    schedule 05.07.2015