在 DNS 区域绑定 10 中运行 PHP

Posted

技术标签:

【中文标题】在 DNS 区域绑定 10 中运行 PHP【英文标题】:Run PHP inside DNS zone Bind 10 【发布时间】:2015-09-19 18:54:55 【问题描述】:

我正在使用带有 BIND 10.1.2 的 linux CentOS 6.64

我在主 DNS (example.com) 中有一个额外的区域 (list.example.com)

绑定(命名)配置文件 /etc/named.conf 包含区域:

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

Zone文件list-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 作为示例

IP 44.63.20.10 的“DNS 查找”将是:

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

好的,现在我想要做的是,我不想列出 1000 条 IP 记录,我只想在 named.conf、区域文件或任何其他文件中运行 php 文件来执行一些代码并返回 127.0.0.2 表示“A IP 44.63.20.10 的 DNS”

我的文件.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】:

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

我推荐的解决方案是使用powerDNS。

PowerDNS 更加灵活,并且能够使用数据库。例如,我将它与 MySQL 数据库一起使用。 也许这就是你想要的,也许不是。但是由于使用数据库的灵活性,您可以创建一个 PHP 脚本,将所有内容插入数据库中并检查它,等等。

【讨论】:

【参考方案2】:

如果你必须使用bind,那么类似下面的解决方案应该可以工作。

    构建脚本以输出区域文件。可以使用 php 或几乎任何语言来执行此操作。 生成文件后,重新加载绑定以加载更新的文件。 如果此数据定期更改,请使用 cron 以 5 分钟间隔或适合您的数据的方式运行这两个命令。

【讨论】:

【参考方案3】:

您必须使用 BIND Full function 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的副本

【讨论】:

以上是关于在 DNS 区域绑定 10 中运行 PHP的主要内容,如果未能解决你的问题,请参考以下文章

未绑定未解析某些域

Nginx怎么绑定二级域名 绑了没法PHP

域名绑定和域名解析(DNS)有什么不同?(转载)

绑定到 UserControl 中声明的 Storyboard 的属性

PHP PostgreSQL PDO 无法使用 LIKE 绑定参数

php pdo 参数绑定