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

//
// 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作为数据库,因为我有使用postgresqlsqlite的经验.

解决方法

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

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

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

其他选择:

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

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

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

猜你在找的HTML相关文章