灵通163百科在线-实用的手机,证券免费资源网站

您现在的位置:首页 > 手机图文教程 > Linux智能教程 >

Bind基于DLZ实现智能DNS配置教程

教程来源:www.lt163.com     点击数:     更新时间:2017-11-14 01:02

简介:在我看来基于Bind的只能DNS方案主要包括两个部分:Geolocation和Dynamic Record。国内的业界对智能DNS的定位也无非这两点,但是我所理解的智能DNS是建立在这两条基础上的智能调度系统,比如我有三个负载能力不同的数据中心,DNS可以根据数据中心的metrics(这里可能包括带宽,服务能力等)实现流量的调度,限于个人水平个人未在这个方向有所实践,这个话题留作以后讨论,所以本文只针对前两个问题。由于Bind本身的配置可运维性比较差,这就引出本文主要讨论的DLZ。

原理:DLZ实际上就是扩展了Bind,将Zonefle的内容放到外部数据库里,然后给Bind配置查询语句从数据库里查询记录。当修改数据库里的记录信息的时候,无需重启Bind,下次客户请求时直接就能返回新的记录了。另外,DLZ本身不支持缓存,所以需要自己根据实际情况解决查询的问题。

安装:

注意:这里我以CentOS7上安装dlz-mysql模块为例。

安装依赖:yum install mariadb-devel gcc wget patch make

下载源码:

Bind9.8之前的版本需要打patch,具体可参考DLZ官方文档,Bind9.8之后(包括9.8)的版本已经集成DLZ:

wget ftp://ftp.isc.org/isc/bind9/9.10.1/bind-9.10.1.tar.gz 

tar xzf bind-9.10.1.tar.gz 

cd  bind-9.10.1 

配置:由于CentOS7目录结构上的变更,在编译dlz-mysql时会找不到库文件或者head文件,所以要做个软连接:

ln -s /usr/lib/mysql /usr/lib64/mysql 

./configure --prefix /opt/bind --with-dlz-filesystem --with-dlz-mysql 

编译:make

安装:make install

模型:

注意:DLZ没有限制用户的数据模型,你可以根据业务逻辑定义模型,然后构造自己的查询语句即可,官方给出了建议的模型.

建模:

Field Type Null Key Default Extra 

zone text YES  NULL  

host text YES  NULL  

type text YES  NULL  

data text     

ttl int(11) YES  NULL  

mx_priority text YES  NULL  

refresh int(11) YES  NULL  

retry int(11) YES  NULL  

expire int(11) YES  NULL  

minimum int(11) YES  NULL  

serial bigint(20) YES  NULL  

resp_person text YES  NULL  

primary_ns text YES  NULL  

zone 区域 

host 记录名 

type 记录类型 

data 记录值 

ttl 缓存时间 

mx_priority mx记录优先级 

refresh SOA记录的刷新时间 

retry SOA记录的重试时间 

expire SOA记录的过期时间 

minimum SOA记录的minimum 

serial SOA记录的序列号 

resp_person SOA记录的序列号 

primary_ns <尚不明确这个字段的意义> 

建库建表,新建数据库:

create database demo;

新建record表:

CREATE TABLE IF NOT EXISTS records ( 

  id int(10) unsigned NOT NULL AUTO_INCREMENT, 

  zone varchar(255) NOT NULL

  host varchar(255) NOT NULL

  type enum('A','MX','CNAME','NS','SOA','PTR','TXT','AAAA','SVR','URL'NOT NULL

  data varchar(255) NOT NULL

  ttl int(11) NOT NULL

  mx_priority int(11) DEFAULT NULL

  refresh int(11) DEFAULT NULL

  retry int(11) DEFAULT NULL

  expire int(11) DEFAULT NULL

  minimum int(11) DEFAULT NULL

  serial bigint(20) DEFAULT NULL

  resp_person varchar(64) DEFAULT NULL

  primary_ns varchar(64) DEFAULT NULL

  PRIMARY KEY (id),  --phpfensi.com 

  KEY type (type), 

  KEY host (host), 

  KEY zone (zone) 

) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 

新建acl表:

CREATE TABLE IF NOT EXISTS acl ( 

  id int(10) unsigned NOT NULL AUTO_INCREMENT, 

  zone varchar(255) NOT NULL

  client varchar(255) NOT NULL

  PRIMARY KEY (id), 

  KEY client (client), 

  KEY zone (zone) 

) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 

配置:GeoIP

这块目前还没有那么灵活,基本上都是基于acl来实现的,虽然最新版的bind 9.10支持maxmind的api来做Geo,但还是改写配置文件的方式,下面是一个示例:

acl "US" { 

     3.0.0.0/8; 

     4.0.0.0/25; 

     4.0.0.128/26; 

     4.0.0.192/28; 

     4.0.0.208/29; 

     4.0.0.216/30; 

     4.0.0.220/31; 

}; 

view "north_america" { 

      match-clients { US; CA; MX; }; 

      recursion no

      zone "foos.com" { 

            type master; 

            file "pri/foos-north-america.db"

      }; 

}; 

view "other" { 

      match-clients { any; }; 

      recursion no

      zone "foos.com" { 

            type master; 

            file "pri/foos-other.db"

      }; 

}; 

没有相关教程