domain-name-system – 使用数据库后端和DLZ支持配置BIND

前端之家收集整理的这篇文章主要介绍了domain-name-system – 使用数据库后端和DLZ支持配置BIND前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
决定将我的基于 Windows的DNS服务器移动到linux.问题是我需要能够动态更新区域文件而无需重新启动绑定.似乎最流行的解决方案是为数据库服务器(postgresql,sqlite,MysqL)安装绑定驱动程序,然后更新区域文件.看起来很简单,但我不能让它为我的生活工作.

我目前正在使用亚马逊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

  1. //
  2. // named.conf
  3. //
  4. // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
  5. // server as a caching only nameserver (as a localhost DNS resolver only).
  6. //
  7. // See /usr/share/doc/bind*/sample/ for example named configuration files.
  8. //
  9.  
  10. options {
  11. listen-on port 53 { 127.0.0.1; };
  12. listen-on-v6 port 53 { ::1; };
  13. directory "/var/named";
  14. dump-file "/var/named/data/cache_dump.db";
  15. statistics-file "/var/named/data/named_stats.txt";
  16. memstatistics-file "/var/named/data/named_mem_stats.txt";
  17. allow-query { localhost; };
  18. recursion yes;
  19.  
  20. dnssec-enable yes;
  21. dnssec-validation yes;
  22. dnssec-lookaside auto;
  23.  
  24. /* Path to ISC DLV key */
  25. bindkeys-file "/etc/named.iscdlv.key";
  26. };
  27.  
  28. logging {
  29. channel default_debug {
  30. file "data/named.run";
  31. severity dynamic;
  32. };
  33. };
  34.  
  35. zone "." IN {
  36. type hint;
  37. file "named.ca";
  38. };
  39.  
  40. dlz "my.zone" {
  41. database "postgres 1
  42. {host=localhost port=5432 dbname=bind user=postgre password=****}
  43. {select zone from dns_records where zone = '%zone%'}
  44. {select ttl,type,mx_priority,case when lower(type)='txt' then '\"'
  45. || data || '\"' when lower(type)='soa' then data || ' ' || resp_person || ' '
  46. || serial || ' ' || refresh || ' ' || retry || ' ' || expire || ' ' || minimum
  47. else data end from dns_records where zone = '%zone%' and host = '%record%'}";
  48. };
  49.  
  50. include "/etc/named.rfc1912.zones";

从我的数据库输出

  1. zone | host | ttl | type | mx_priority | data | resp_person | serial | refresh | expire | minimum
  2. ------------+-------------+--------+------+-------------+------------------------+----------------------+--------+---------+--------+---------
  3. my.cloud | my.cloud. | 259200 | SOA | 0 | dns01.my.cloud. | it.cloud.com. | 1 | 28800 | 86400 | 28800
  4. my.cloud | my.cloud. | 259200 | NS | 0 | dns01.my.cloud. | | 0 | 0 | 0 | 0
  5. my.cloud | dns01 | 259200 | A | 0 | 127.0.0.1 | | 0 | 0 | 0 | 0
  6. (3 rows)

如果有人能指出我正确的方向,那么真正开放任何解决方案.我更喜欢使用MysqL作为数据库,因为我有使用postgresqlsqlite的经验.

解决方法

也许不是你问题的真正答案,但无论如何. (我最近也在调查这个问题,这是我的结论):

BIND9中的DLZ支持看起来更像是一个“补丁”.它没有很好的文档记录 – 在BIND ARM中没有一个关于它的单词.它似乎没有被广泛使用.查询性能很糟糕 – 根据这个benchmark,Postgresql将比正常的内存操作慢30倍(!). (基准是旧的,但没有理由认为事情有了很大的改善).

我不认为这是“最受欢迎的解决方案”.

其他选择:

BIND9支持动态更新.它文档齐全,使用广泛且易于实现.没有性能损失 – 所有查询仍然从内存中回答.由于不需要数据库,因此安装更简单.您使用DNS协议库(可能存在大多数语言,我自己使用PHP)或通过命令行nsupdate工具以编程方式执行更新.这是我推荐的解决方案.

如果你真的想要数据库 – PowerDNS似乎被设计为与数据库后端一起使用.它具有的功能可能有助于在使用数据库时不会完全牺牲性能,就像它可以缓存数据库查询一段时间而不是每次查询数据库.一些像样的DNS托管使用PowerDNS.

更具异国情调的选择 – BIND10,虽然仍在进行中,但开发人员声称人们实际上在生产中使用它.目前BIND10使用sqlITE后端.

猜你在找的HTML相关文章