我目前正在使用亚马逊Linux发行版,但我已经尝试了RHEL 6.2中的所有内容,但没有更多的运气.
我尝试过几种不同的方法.第一个是编译绑定与MysqL支持http://pbraun.nethence.com/doc/net/bind-mysql.html的源代码更改.这编译很好的变化,我没有错误但运行make install后所有的二进制文件都被复制到/usr/local / sbin但我不能似乎启动守护进程我运行名为start的服务,它只是告诉我没有名为named的服务(没有双关语意).其次,没有生成任何配置文件.所以我创建了一个名为.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";
zone | host | ttl | type | mx_priority | data | resp_person | serial | refresh | expire | minimum ------------+-------------+--------+------+-------------+------------------------+----------------------+--------+---------+--------+--------- my.cloud | my.cloud. | 259200 | SOA | 0 | dns01.my.cloud. | it.cloud.com. | 1 | 28800 | 86400 | 28800 my.cloud | my.cloud. | 259200 | NS | 0 | dns01.my.cloud. | | 0 | 0 | 0 | 0 my.cloud | dns01 | 259200 | A | 0 | 127.0.0.1 | | 0 | 0 | 0 | 0 (3 rows)
如果有人能指出我正确的方向,那么真正开放任何解决方案.我更喜欢使用MysqL作为数据库,因为我有使用postgresql或sqlite的经验.
解决方法
BIND9中的DLZ支持看起来更像是一个“补丁”.它没有很好的文档记录 – 在BIND ARM中没有一个关于它的单词.它似乎没有被广泛使用.查询性能很糟糕 – 根据这个benchmark,Postgresql将比正常的内存操作慢30倍(!). (基准是旧的,但没有理由认为事情有了很大的改善).
我不认为这是“最受欢迎的解决方案”.
其他选择:
BIND9支持动态更新.它文档齐全,使用广泛且易于实现.没有性能损失 – 所有查询仍然从内存中回答.由于不需要数据库,因此安装更简单.您使用DNS协议库(可能存在大多数语言,我自己使用PHP)或通过命令行nsupdate工具以编程方式执行更新.这是我推荐的解决方案.
如果你真的想要数据库 – PowerDNS似乎被设计为与数据库后端一起使用.它具有的功能可能有助于在使用数据库时不会完全牺牲性能,就像它可以缓存数据库查询一段时间而不是每次查询数据库.一些像样的DNS托管使用PowerDNS.
更具异国情调的选择 – BIND10,虽然仍在进行中,但开发人员声称人们实际上在生产中使用它.目前BIND10使用sqlITE后端.