bwi*_*ght 7 postgresql domain-name-system bind amazon-ec2 amazon-web-services
决定将我基于 Windows 的 DNS 服务器移至 linux。问题是我需要能够动态更新区域文件而不必重新启动绑定。似乎最流行的解决方案是为数据库服务器( postgresql、sqlite、mysql)安装绑定驱动程序,然后更新区域文件。看起来很简单,但我无法让它为我的生活工作。
我目前正在使用 Amazon Linux 发行版,但我也尝试了 RHEL 6.2 中的所有内容,但都没有成功。
我尝试了几种不同的方法。第一个是使用源代码更改来编译绑定以支持 mysql 支持http://pbraun.nethence.com/doc/net/bind-mysql.html。这与更改一起编译得很好,我没有收到任何错误,但是在运行make install所有二进制文件后被复制到 /usr/local/sbin 但我似乎无法启动我运行的守护进程service named start,它只是告诉我没有名为(没有双关语意)。其次,没有生成任何配置文件。所以我创建了一个名为.conf 的文件并将其放入 /etc/named.conf 然后运行/usr/local/sbin/named-checkconf它告诉我它找不到文件 /etc/named.conf 所以我不知道。
接下来我尝试安装包 bind-sdb 并使用 postgresql。安装的软件包
yum -qy bind bind-sdb bind-utils postgresql postgresql-server
按照http://bind-dlz.sourceforge.net/postgresql_example.html上的步骤我创建了一个新的 postgre 数据库和表等。下面是我当前的 named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { localhost; };
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
dlz "my.zone" {
database "postgres 1
{host=localhost port=5432 dbname=bind user=postgre password=****}
{select zone from dns_records where zone = '%zone%'}
{select ttl, type, mx_priority, case when lower(type)='txt' then '\"'
|| data || '\"' when lower(type)='soa' then data || ' ' || resp_person || ' '
|| serial || ' ' || refresh || ' ' || retry || ' ' || expire || ' ' || minimum
else data end from dns_records where zone = '%zone%' and host = '%record%'}";
};
include "/etc/named.rfc1912.zones";
Run Code Online (Sandbox Code Playgroud)
我的数据库表的输出
区 | 主机| ttl | 类型 | mx_priority | 数据| resp_person | 系列 | 刷新 | 过期 | 最低限度 ------------+-------------+--------+------+------- ------+------------------------+----- ----+--------+---------+--------+--------- my.cloud | 我的云。| 259200 | SOA | 0 | dns01.my.cloud。| it.cloud.com。| 1 | 28800 | 86400 | 28800 my.cloud | 我的云。| 259200 | NS | 0 | dns01.my.cloud。| | 0 | 0 | 0 | 0 my.cloud | dns01 | 259200 | 一个 | 0 | 127.0.0.1 | | 0 | 0 | 0 | 0 (3 行)
如果有人能指出我正确的方向,那么真的可以接受任何解决方案。我更喜欢使用 MySQL 作为数据库,因为我有 0 次使用 postgresql 或 sqlite 的经验。
San*_*an4 11
也许不是你问题的真正答案,但无论如何。(我最近也在调查这个问题,这是我的结论):
BIND9 中的 DLZ 支持看起来更像是一个“补丁”。它没有很好的记录 - 在 BIND ARM 中没有一个字关于它。它似乎没有被广泛使用。查询性能很糟糕——根据这个基准,PostgreSQL将比正常的内存操作慢30 倍(!)。(基准是旧的,但没有理由假设情况会大幅改善)。
我不认为这是“最受欢迎的解决方案”。
其他选项:
BIND9 支持动态更新。它有据可查、使用广泛且易于实现。没有性能损失 - 所有查询仍然从内存中回答。安装更简单,因为不需要数据库。您可以使用 DNS 协议库(可能存在于大多数语言中,我自己使用 PHP)或通过命令行nsupdate工具以编程方式执行更新。这是我推荐的解决方案。
如果你真的想要数据库 - PowerDNS 似乎被设计为与数据库后端一起使用。它具有在使用数据库时可能有助于不完全牺牲性能的功能,例如它可以缓存数据库查询一段时间而不是每次查询数据库。一些不错的 DNS 托管使用 PowerDNS。
更多奇特的选项 - BIND10,虽然仍在进行中,但开发人员声称人们实际上在生产中使用它。目前 BIND10 使用 SQLITE 后端。
| 归档时间: |
|
| 查看次数: |
27221 次 |
| 最近记录: |