centos6下部署DNS服务

关于DNS

简单了解DNS

 当我们访问一个网站时候,其实底层的操作系统进行通信时还是通过IP地址来进行通信,这时候我们就需要有一个服务能将域名转换成对应的IP地址,或者反向的将IP地址转换成域名,这个服务就是DNS(Domain Name System)。

 DNS提供的服务就是在IP和域名之间进行转换,DNS服务是由DNS服务器来提供的,一般提供DNS服务的都有一个单独的DNS服务器,这个DNS服务器的作用就是用来保存我们的域名到其IP地址之间的解析,例如我们在访问 www.google.com 这个域名的时候,我们的主机首先会向一个DNS服务器发起一个DNS的请求,请求DNS服务器告诉我www.google.com这个域名的IP地址,此时DNS服务器就会给我们返回该域名的IP地址,这个时候我们再根据这个IP地址访问www.google.com这台服务器

DNS的域名解析过程

 首先,客户端检测自身缓存,如果没有,检测hosts文件,如果没有,客户端发出DNS请求翻译IP地址或者主机名。DNS服务器在收到客户机的请求后做如下操作:

  1)检查DNS服务器的缓存,若查到请求的地址或名字,即向客户机发出应答信息;

  2)若没有查到,则在数据库中查找,若查到请求的地址或名字,即向客户机发出应答信息;

  3)若没有查到,则将请求发给根域DNS服务器,并依序从根域查找顶级域,由顶级域查找二级域,二级域查找三级,直至找到要解析的地址或名字,即向客户机所在网络的DNS服务器发出应答信息,DNS服务器收  到应答后先在缓存中存储,然后将解析结果发给客户机。

  4)若没有找到,则返回错误信息。

DNS分类

 主DNS服务器:就是一台存储着原始资料的DNS服务。

 从DNS服务器:使用自动更新方式从主DNS服务器同步数据的DNS服务器。也称辅助DNS服务器。

 备注:一般生产环境,主DNS服务器做管理使用,从DNS服务器提供服务。

 缓存服务器:不负责本地解析,采用递归方式转发客户机查询请求,并返回结果给客户机的DNS服务器。同时缓存查询回来的记过,也叫递归服务器。

 转发器:这台DNS发现非本机负责的查询请求时,不再向根域发起请求,而是直接转发给指定的一台或者多台服务器。自身并不缓存查询结果。

DNS中记录类型

 SOA类型:可以理解为一段为自己dns做备注说明的文本,一般与ns一致。比如 dns.baidu.com  admin.baidu.com

 NS:域的授权名称服务器。比如 ns1.baidu.com  ns2.baidu.com

 MX:域的邮件交换器,要跟一个优先级值,值越小优先级越高

 A:ipv4主机地址

 AAAA:ipv6主机地址

 PTR:解析ip的指针,反向记录

 CNAME:权威(正式)名称,定义别名记录

DNS命名规范

 1.  26个英文字母

 2. “0,1,2,3,4,5,6,7,8,9,”十个数字

 3. “-”(英文中的连词号)

 4.  最多63字节长度

 备注:要不按照这个规范命名,bing支不支持? 支持,不合适,不建议。 非要不按照这个,怎么办? master-view文件上配置check-name ignore;

DNS的查询命令:dig  nslookup  host

 比如查询www.goser.com对应的ip地址,三个命令的查询方式为:

 dig  @192.168.1.120  www.goser.com

 nslookup  www.goser.com  192.168.1.120

 host www.goser.com  192.168.1.120

DNS的安装部署

环境准备:

1、部署的环境为centos6平台上安装bind的DNS服务,主dns服务器ip地址为:192.168.1.120,从dns服务器ip地址为:192.168.1.121

2、关闭selinux和iptables防火墙

3、下载阿里云的epel源

部署DNS主服务器

1、yum安装bind的dns服务工具

yum install -y bind-utils bind bind-devel bind-chroot

2、配置dns主配置文件

 安装完BIND以后,BIND的主配置文件通常是保存在两个位置:

  /etc/named.conf  -BIND服务主配置文件

  /var/named/  -域的zone配置文件

 但是我们如果在安装了 bind-chroot 这个程序以后,BIND的主配置文件存放位置就变了,此时BIND的主配置文件会被封装到一个伪根目录内,此时的配置文件位置为:

  /var/named/chroot/etc/named.conf  -BIND服务主配置文件

  /var/named/chroot/var/named  -域的zone配置文件

 为什么安装了bind-chroot以后,BIND的主配置文件的存放位置变了呢?这里就涉及到了一个伪根的知识,chroot是通过将相关文件封装到一个伪根目录内,已达到安全防护的目的,一旦该程序被攻破,将只能访问到伪根目录内的内容,而并不是真实的根目录。我们知道Linux的根目录是 / ,我们的服务如果安装了chroot这个程序,此时我们的服务的配置文件都会被安装到我们的伪根里面,会在里面生成一个与原来服务完全相同的一个目录体系结构。我们知道 /var/named/chroot 这个肯定不是我们的根目录,但是如果在安装了chroot以后,该服务的根目录就会把 /var/named/chroot 当成是自己的根目录,这样就可以对我们的真实根目录进行保护,所以建议大家在安装网络服务时最好都附带安装上chroot这个程序

 修改/etc/named.conf配置文件,将其内容全部删除,创建新内容如下:

options {
  version "1.1.1";
  listen-on port 53 {any;};
  directory "/var/named/chroot/etc/";
  pid-file "/var/named/chroot/var/run/named/named.pid";
  allow-query { any; };
  Dump-file "/var/named/chroot/var/log/binddump.db";
  Statistics-file "/var/named/chroot/var/log/named_stats";
  zone-statistics yes;
  memstatistics-file "log/mem_stats";
  empty-zones-enable no;
  forwarders {202.96.209.5;202.96.209.6; };
};

key "rndc-key" {
        algorithm hmac-md5;
        secret "Eqw4hClGExUWeDkKBX/pBg==";
};

controls {
       inet 127.0.0.1 port 953
               allow { 127.0.0.1; } keys { "rndc-key"; };
 };

logging {
  channel warning {
    file "/var/named/chroot/var/log/dns_warning" versions 10 size 10m;
    severity warning;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  channel general_dns {
    file "/var/named/chroot/var/log/dns_log" versions 10 size 100m;
    severity info;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  category default {
    warning;
  };
  category queries {
    general_dns;
  };
};

include "/var/named/chroot/etc/view.conf";

3、配置rndc.key文件

vim /etc/rndc.key
key "rndc-key" {
        algorithm hmac-md5;
        secret "Eqw4hClGExUWeDkKBX/pBg==";
};

4、配置rndc.conf文件

vim /etc/rndc.conf
key "rndc-key" {
        algorithm hmac-md5;
        secret "Eqw4hClGExUWeDkKBX/pBg==";
};
 
options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};

5、配置view.conf文件

vim  /var/named/chroot/etc/view.conf

view "View" {
  zone "goser.com" {
        type    master;
        file    "goser.com.zone";
        allow-transfer {
                192.168.1.121;
        };
        notify  yes;
        also-notify {
                192.168.1.121;
        };
  };
};

6、配置域文件goser.com.zone

vim  /var/named/chroot/etc/goser.com.zone

$ORIGIN .
$TTL 3600       ; 1 hour
goser.com                  IN SOA  ns1.goser.com. dns.goser.com. (
                                2000       ; serial
                                900        ; refresh (15 minutes)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      ns1.goser.com.
$ORIGIN goser.com.
a             A       1.2.3.4
ns1              A       1.2.3.4

 Serial:只是一个序号,但这个序号可被用来作为slave与master更新的依据。

  举例来说,master序号为2001但slave序号为2000时,那么这个zone file的资料就会被传送到slave来更新了。由于这个序号代表新旧资料,通常我们建议你可以利用日期来设定。例如上面的资料是在2017/10/20所写的第一次,所以用2017102001作为序号代表。(yyyymmddnn,nn代表这一天是第几次修改)

7、修改目录权限并启动dns服务,并使用dig、nslookup、host来测试配置是否生效

cd /var && chown -R named.named named/
/etc/init.d/named start
chkconfig named on

#测试
dig @127.0.0.1 a.goser.com
nslookup  a.goser.com  192.168.1.120
host  a.goser.com  192.168.1.120

 注意事项:修改好配置文件后,一定要增加serial的值,还要执行rndc  reload的命令,让主服务的配置同步到从服务的配置

部署DNS从服务器

1、yum安装bind的dns服务工具

yum install  bind-utils  bind bind-devel bind-chroot -y

2、配置named.conf文件

options {
  version "1.1.1";
  listen-on port 53 {any;};
  directory "/var/named/chroot/etc/";
  pid-file "/var/named/chroot/var/run/named/named.pid";
  allow-query { any; };
  Dump-file "/var/named/chroot/var/log/binddump.db";
  Statistics-file "/var/named/chroot/var/log/named_stats";
  zone-statistics yes;
  memstatistics-file "log/mem_stats";
  empty-zones-enable no;
  forwarders {202.96.209.5;202.96.209.6; };
};

key "rndc-key" {
        algorithm hmac-md5;
        secret "Eqw4hClGExUWeDkKBX/pBg==";
};

controls {
       inet 127.0.0.1 port 953
               allow { 127.0.0.1; } keys { "rndc-key"; };
 };

logging {
  channel warning {
    file "/var/named/chroot/var/log/dns_warning" versions 10 size 10m;
    severity warning;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  channel general_dns {
    file "/var/named/chroot/var/log/dns_log" versions 10 size 100m;
    severity info;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  category default {
    warning;
  };
  category queries {
    general_dns;
  };
};

include "/var/named/chroot/etc/view.conf";

3、配置rndc.key文件

vim /etc/rndc.key
key "rndc-key" {
        algorithm hmac-md5;
        secret "Eqw4hClGExUWeDkKBX/pBg==";
};

4、配置rndc.conf文件

vim /etc/rndc.conf
key "rndc-key" {
        algorithm hmac-md5;
        secret "Eqw4hClGExUWeDkKBX/pBg==";
};
 
options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};

  备注:主从DNS主机配置named.conf、rndc.key、rndc.conf文件一样

5、配置view.conf文件

vim  /var/named/chroot/etc/view.conf

view "SlaveView" {
  zone "goser.com" {
        type    slave;
        masters {192.168.1.120; };
        file    "slave.goser.com.zone";
  };
};

6、修改目录权限并启动dns服务

cd /var && chown -R named.named named/
/etc/init.d/named start
chkconfig named on

 配置好如上配置后,在主dns服务上执行rndc  reload后,从dns服务上会自动生成slave.goser.com.zone的域配置文件,这样就表示主从实现了同步

在主dns服务上添加A、CNAME、MX、PTR记录

 在主dns上添加A、CNAME、MX,并验证是否同步到从DNS服务上

vim  /var/named/chroot/etc/goser.com.zone

$ORIGIN .
$TTL 3600       ; 1 hour
goser.com                  IN SOA  ns1.goser.com. dns.goser.com. (
                                2004       ; serial
                                900        ; refresh (15 minutes)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      ns1.goser.com.
$ORIGIN goser.com.
a             A       1.2.3.4
a             A       192.168.122.100
ns1              A       1.2.3.4
cname           CNAME   a.goser.com.
mx              MX 5    192.168.122.101

#重启rndc,使配置生效,并同步到slave服务端
rndc  reload

#验证操作
dig @192.168.1.120 cname.goser.com
dig @192.168.1.121 cname.goser.com
host mx.lnh.com 192.168.1.120  #验证mx记录用dig不起作用,要用host命令
host mx.lnh.com 192.168.1.121

 在DNS主服务上添加PTR记录,在view.conf文件中配置PTR的zone配置

vim  /var/named/chroot/etc/view.conf 

view "View" {
  zone "goser.com" {
        type    master;
        file    "goser.com.zone";
        allow-transfer {
                192.168.1.121;
        };
        notify  yes;
        also-notify {
                192.168.1.121;
        };
  };
  zone "168.192.in-addr.arpa" {
        type    master;
        file    "168.192.zone";
        allow-transfer {
                192.168.1.121;
        };
        notify  yes;
        also-notify {
                192.168.1.121;
        };
  };
};

 编辑master节点/var/named/chroot/etc/168.192.zone

vim  /var/named/chroot/etc/168.192.zone

$ORIGIN .
$TTL 3600       ; 1 hour
goser.com                  IN SOA  ns1.goser.com. dns.goser.com. (
                                2000       ; serial
                                900        ; refresh (15 minutes)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      ns1.goser.com.
102.122         IN      PTR     a.goser.com.

 修改168.192.zone文件属主

chown named.named 168.192.zone
rndc reload

 编辑slave节点/var/named/chroot/etc/view.conf,加入ptr的zone配置

vim  /var/named/chroot/etc/view.conf 

view "SlaveView" {
  zone "goser.com" {
        type    slave;
        masters {192.168.1.120; };
        file    "slave.goser.com.zone";
  };
  zone "168.192.in-addr.arpa" {
        type    slave;
        masters {192.168.1.120; };
        file    "slave.168.192.zone";
  };
};

 这时候在slave从dns服务上执行rndc reload,slava节点/var/named/chroot/etc目录下会按照slave的view.conf配置定义的反向域文件自动生成slave.168.192.zone文件。

 测试方向解析是否生效,是否可以通过IP地址来方向解析成域名:

host  192.168.122.102  192.168.1.120
host  192.168.122.102  192.168.1.121

让DNS实现负载均衡功能

 在 /var/named/chroot/etc/goser.com.zone域文件中再添加一个A记录

vim  /var/named/chroot/etc/goser.com.zone

$ORIGIN .
$TTL 3600       ; 1 hour
goser.com                  IN SOA  ns1.goser.com. dns.goser.com. (
                                2005       ; serial
                                900        ; refresh (15 minutes)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      ns1.goser.com.
$ORIGIN goser.com.
a             A       1.2.3.4
a             A       192.168.122.100
a              A       192.168.122.102
ns1              A       1.2.3.4
cname           CNAME   a.goser.com.
mx              MX 5    192.168.122.101

 执行rndc reload并用nslookup命令来验证a.goser.com域名对应的三个ip地址的轮询,这样就起到类似于lvs一样的负载均衡效果,多执行几次nslookup命令,可以看到三个ip地址的顺序变化。第一个ip起作用

nslookup  a.goser.com  127.0.0.1  

Name:   a.goser.com
Address: 192.168.122.100
Name:   a.goser.com
Address: 192.168.122.102
Name:   a.goser.com
Address: 1.2.3.4

配置DNS为智能DNS

 编辑master节点/var/named/chroot/etc/named.conf,在include上面添加(对客户端IP分组)

#这里的ip地址为dns服务器的地址,测试环境中让其作为客户端ip来使用
acl group1 {
  192.168.1.120;
};
acl group2 {
  192.168.1.121;
};

 备份旧的view.conf文件,创建一个新的view.conf文件,让其实现智能DNS功能

 cp  view.conf view.conf.bak

 编辑master节点/var/named/chroot/etc/view.conf

view  "GROUP1" {
  match-clients { group1; };
  zone "viewgoser.com" {
        type master;
        file "group1.viewgoser.com.zone";
  };
};
view  "GROUP2" {
  match-clients { group2; };
  zone "viewgoser.com" {
        type master;
        file "group2.viewgoser.com.zone";
  };
};

 这里的view.conf文件没有做同步到slave服务端的配置,这里只做测试就没配置,如果想让slave服务端也同步这种配置的话,可以在view.conf文件中加入allow-transfer和also-notify配置选项

 编辑master节点/var/named/chroot/etc/下的group1.viewgoser.com.zone和group2.viewgoser.com.zone两个域文件

vim  /var/named/chroot/etc/group1.viewgoser.com.zone

$ORIGIN .
$TTL 3600       ; 1 hour
viewgoser.com                  IN SOA  ns1.viewgoser.com. dns.viewgoser.com. (
                                2005       ; serial
                                900        ; refresh (15 minutes)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      ns1.viewgoser.com.
$ORIGIN viewgoser.com.
view             A       192.168.122.1
ns             A       192.168.122.1


vim  /var/named/chroot/etc/group2.viewgoser.com.zone

$ORIGIN .
$TTL 3600       ; 1 hour
viewgoser.com                  IN SOA  ns1.viewgoser.com. dns.viewgoser.com. (
                                2005       ; serial
                                900        ; refresh (15 minutes)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      ns1.viewgoser.com.
$ORIGIN viewgoser.com.
view             A       192.168.122.2
ns             A       192.168.122.2

 修改文件属主,加载配置

chown  named.named /var/named/chroot/etc/group1.viewlnh.com.zone   /var/named/chroot/etc/group2.viewlnh.com.zone

rndc reload

 测试,在192.168.1.120主机上执行host view.viewgoser.com 192.168.1.120,解析的ip地址为192.168.122.1

host  view.viewgoser.com 192.168.1.120
Using domain server:
Name: 192.168.1.120
Address: 192.168.1.120#53
Aliases: 

view.viewgoser.com has address 192.168.122.1

 测试,在192.168.1.121主机上执行host view.viewgoser.com 192.168.1.120,解析的ip地址为192.168.122.2

host  view.viewgoser.com 192.168.1.120
Using domain server:
Name: 192.168.1.120
Address: 192.168.1.120#53
Aliases: 

view.viewgoser.com has address 192.168.122.2

压测

 通过bind的queryperf工具来做dns的压力测试工具,安装queryperf工具如下:

cd /usr/local/src/
wget http://ftp.isc.org/isc/bind9/9.9.1-P1/bind-9.9.9-P1.tar.gz
tar -xvf bind-9.9.9-P1.tar.gz
cd /usr/local/src/bind-9.9.9-P1/contrib/queryperf
./configure
make

#此目录下生成queryperf文件
cp queryperf /usr/bin

 压测自己创建的DNS服务,创建一个文件test.txt,内容如下(前面为域名,后面为A记录)

vim  test.txt
view.viewgoser.com  A
view.viewgoser.com  A
view.viewgoser.com  A
view.viewgoser.com  A

 执行命令: /usr/bin/queryperf -d test.txt -s 192.168.1.120,返回的结果类似于Queries per second:   16077.170418 qps可以看到每秒支持的并发量。

如何让自己搭建的DNS服务对外提供服务

 要想让自己的dns服务对外提供dns服务的话,首先要在域名服务商注册域名,对购买好的域名做ns修改

实现web管理DNS服务

 通过github开源出来的DNS Web管理工具https://github.com/shanks1127/dns  ,可以方便DN运维人员轻易的管理DNS服务器,比如域名的增删改查,是不是很类似于数据库的操作?没错,就是将DNS的记录保存在数据库当中,修改DNS解析的时候先将域名保存在数据库,然后读取数据库记录生成DNS文件,这样的好处是数据库可以持久化保存DNS记录,并且将文件从数据库保存在文件当中又不影响DNS解析性能

 部署过程参考地址:http://blogs.studylinux.net/?p=4545

 

posted @ 2017-12-16 22:47  goser  阅读(361)  评论(0)    收藏  举报