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

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

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

Bind (named) config file/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 для "A DNS" IP 44.63.20.10

myfile.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 файл, просто нужно знать, можно ли это сделать? и если да, то как? Любая идея, пожалуйста?

Спасибо.

Ответы

Ответ 1

Вам необходимо использовать API функций BIND Full, который позволяет "подключаемому модулю" заменить внутреннюю базу данных 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

Ответ 2

С bind это, насколько мне известно, невозможно.

Решение, которое я бы рекомендовал, использует powerDNS.

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

Ответ 3

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

  • Создайте script для вывода файла зоны. Может использовать php или любой язык для этого.
  • После создания файла перезагрузка связывается для загрузки обновленного файла.
  • Если эти данные регулярно меняются, используйте cron для запуска обеих команд с интервалом в 5 минут или с чем-то соответствующим вашим данным.