运行 PHP 在 DNS 区域中绑定 10
Run PHP inside DNS zone Bind 10
我正在使用 linux CentOS 6.64 和 BIND 10.1.2
我在主 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; };
};
区域文件列表-示例-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 的 "A DNS lookup" 将是:
44.63.20.10.list.example.com 并将 return 来自 DNS
的 127.0.0.2
好的,现在我想做的是,我不想列出 1000 条 IP 记录,我只想 运行 PHP 文件 named.conf、区域文件或任何其他文件执行一些代码和 return 127.0.0.2 for "A DNS" of 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 文件,只是想知道是否可以这样做?如果是,那么如何?
有什么想法吗?
谢谢。
据我所知,使用 bind 这是不可能的。
我推荐的解决方案是使用 powerDNS。
PowerDNS 更灵活,可以使用数据库。例如,我将它与 MySQL 数据库一起使用。
也许这正是您想要的,也许不是。但是通过使用数据库的灵活性,您可以创建一个 PHP 脚本,将所有内容插入数据库并检查它,等等。
如果您必须使用 bind
,那么类似下面的解决方案应该可行。
- 构建一个脚本来输出区域文件。可以使用 php 或几乎任何语言来执行此操作。
- 生成文件后重新加载绑定以加载更新后的文件。
- 如果此数据定期更改,请使用 cron 运行 以 5 分钟或适合您的数据的时间间隔执行这两个命令。
您必须使用 BIND 完整功能 API,它允许 'plug-in' 替换指定区域和来自 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
我正在使用 linux CentOS 6.64 和 BIND 10.1.2
我在主 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; };
};
区域文件列表-示例-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 的 "A DNS lookup" 将是:
44.63.20.10.list.example.com 并将 return 来自 DNS
的 127.0.0.2好的,现在我想做的是,我不想列出 1000 条 IP 记录,我只想 运行 PHP 文件 named.conf、区域文件或任何其他文件执行一些代码和 return 127.0.0.2 for "A DNS" of 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 文件,只是想知道是否可以这样做?如果是,那么如何? 有什么想法吗?
谢谢。
据我所知,使用 bind 这是不可能的。
我推荐的解决方案是使用 powerDNS。
PowerDNS 更灵活,可以使用数据库。例如,我将它与 MySQL 数据库一起使用。
也许这正是您想要的,也许不是。但是通过使用数据库的灵活性,您可以创建一个 PHP 脚本,将所有内容插入数据库并检查它,等等。
如果您必须使用 bind
,那么类似下面的解决方案应该可行。
- 构建一个脚本来输出区域文件。可以使用 php 或几乎任何语言来执行此操作。
- 生成文件后重新加载绑定以加载更新后的文件。
- 如果此数据定期更改,请使用 cron 运行 以 5 分钟或适合您的数据的时间间隔执行这两个命令。
您必须使用 BIND 完整功能 API,它允许 'plug-in' 替换指定区域和来自 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