在 DNS 区域绑定 10 中运行 PHP

2022-08-30 23:43:28

我使用的是 Linux CentOS 6.64 和 BIND 10.1.2

我在主 DNS 中有一个附加区域 (list.example.com) (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; };
    };

区域文件列表-示例-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作为示例

IP 44.63.20.10 的“DNS 查找”将是:

44.63.20.10.list.example.com,并将从 DNS 返回 127.0.0.2

好吧,现在我想做的是,我不想列出1000s的IP记录,我只想在name.conf,zone文件或任何其他文件中运行PHP文件来执行一些代码,并为IP 44.63.20.10的“A DNS”返回127.0.0.2

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

您必须使用 BIND 全函数 API,该 API 允许“插件”替换 BIND 针对指定区域和 BIND 的内部数据库函数。

您需要编辑 BIND 源文件并 makefile.in 然后重新构建 BIND,包括源文件和头文件。

要从API开始,请找到位于bind-release/lib/dns/include/dns/db.h目录中的文件db.h,其中bind-release应替换为您解压缩源代码分发的位置和版本号,例如/usr/src/bind/10.1.2

这是一个副本 http://pastebin.com/yTN5Aq03


答案 2

据我所知,使用绑定是不可能的。

我建议的解决方案是使用powerDNS

PowerDNS更灵活,并且能够使用数据库。例如,我正在将其与MySQL数据库一起使用。
也许这是你想要的直接,也许它不是。但是,由于可以灵活地使用数据库,您可以创建一个PHP脚本,该脚本将所有内容插入数据库中并进行检查,依此类推。


推荐