DNS主从部署

DNS主从同步概念及原理

  DNS(Domain Name System),即域名系统。因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。DNS服务器的作用就是就好比生活中的电话簿、114查号台一样,为各种网络程序找到对应目标主机的IP地址或对应的主机域名。
  部署DNS主从服务器能有更好的容错能力,在主服务器崩溃的情况下,能使用从服务器来解析域名,从服务器还能减轻主服务器的负载。
  主从同步的原理:从服务器会监听主服务器的 TCP 53 端口,它会隔一段时间去探测主配置文件中的序列号,如果主端序列号更新后从端探测到会将主端内容同步到本地,主每次修改配置文件必须修改一下序列号,让序列号大于原来的序列号,主从同步主要根据序列号的变化。

DNS主从部署的环境

系统:centos6.5
主服务器:192.168.30.60 vm96-yw-65-test-3060
从服务器:192.168.30.59 vm99-lz-65-test-3059

DNS主从服务器的部署

关闭selinux和iptables或者添加安全规则,不然主从不能进行同步。

1、安装软件

yum install -y bind bind-utils bind-chroot
  • bind是主程序
  • bind-utils是工具包,包括dig、nslookup等NDS命令
  • bind-chroot为bind提供一个伪装的根目录以增强安全性(将“/var/named/chroot/”文件夹作为BIND的根目录)
  • /etc/named.conf,/etc/named.rfc1912.zones是主配置文件
  • /var/named/named.ca是根区域解析库文件
  • /var/named/named.localhost, /var/named/named.loopback 是本机和环回地址的解析库文件
  • rndc—remote name domain controller这是一个辅助管理工具,默认情况下与BIND安装在同一主机,而且只能通过127.0.0.1连接named进程,监听的端口号是TCP/953。

2、修改主服务器配置文件

  2.1、编辑/etc/named.conf
[root@vm96-yw-65-test-3060 ~]# vim /etc/named.conf
options {
        listen-on port 53 { any; };   ##修改为any,表示允许所有网段的主机。为安全考虑也可以改成自己所在的内网网段
        #listen-on-v6 port 53 { ::1; };  ##选择注释掉这一行,注释与否均可,这是监听ipv6的端口
        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     { any; };    ##改为any,表示接受所有网段
        recursion yes;   ##不修改,这个选项控制是否开启服务器的递归查询功能

        dnssec-enable no;   ##这部分是设置DNSSEC的。把它关掉,默认为yes。
        dnssec-validation no;  ##关掉,默认为yes。

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";
};

  只修改option段,其余段不变。options是全局配置,logging是日志配置,最后是区域解析库配置以及所包含的区域解析库文件配置。

  2.2、编辑/etc/named.rfc1912.zones

    在文件末尾添加一个正向解析区域和一个反向解析区域

[root@vm96-yw-65-test-3060 ~]# vim /etc/named.rfc1912.zones
zone "weli.com" IN {
    type master;   ###定义区域类型,type可选值为:hint(根的)|master(主的)|slave(辅助的)|forward(转发)
    file "weli.com.zone";
    allow-transfer { 192.168.30.59; };    ##指定允许转发的目标主机,即从服务器
};
zone "30.168.192.in-addr.arpa" IN {
    type master;
    file "2.zone";
    allow-transfer { 192.168.30.59; };
};

修改完成后,使用named-checkconf检查named.conf和named.rfc1912.zones两个文件,检查是否有语法错误,如果没有任何输出表明文件配置正确。

[root@vm96-yw-65-test-3060 ~]# named-checkconf
  2.3、在/var/named目录下创建正向解析库文件和反向解析库文件

    你的解析文件需要跟你在/etc/named.rfc1912.zones中添加的文件名字要一样,我的是weli.com.zone和2.zone

正向解析文件

[root@vm96-yw-65-test-3060 ~]# cd /var/named/
[root@vm96-yw-65-test-3060 named]# vim weli.com.zone
$TTL 600
@               IN      SOA     dns1.weli.com. mail.weli.com. (
                2018080728      ##serial,序列号,每次修改解析记得修改它让它大于原来的序列号
                2H    ## refresh,设置的更新周期
                10M   ## retry,更新失败时重试的周期
                1W    ## expire,过期时间
                1D    ## minimum,主服务器挂后,从服务器至多工作的时间
)
@               IN  NS          dns1.weli.com.
@               IN  NS          dns2.weli.com.
@               IN  MX  10      mail.weli.com.
dns1            IN  A           192.168.30.60
dns2            IN  A           192.168.30.59
mail            IN  A           192.168.30.60
www             IN  A           192.168.30.60

注:这个文件里所有的域名结尾的点号一定不能省略。
反向解析文件

[root@vm96-yw-65-test-3060 named]# vim 2.zone
$TTL 600
@    IN  SOA     dns1.weli.com. mail.weli.com. (
            2018080722;
            2H;
            10M;
            1W;
            1D;
            )
                IN      NS  dns1.weli.com.
                IN      NS  dns2.weli.com.
60              IN      PTR www.weli.com.
60              IN      PTR mail.weli.com.
60              IN      PTR dns1.weli.com.
59              IN      PTR dns2.weli.com.

  解析文件添加正常,记得修改权限,不然可能无法正常使用

[root@vm96-yw-65-test-3060 named]# chown root:named weli.com.zone
[root@vm96-yw-65-test-3060 named]# chown root:named 2.zone

  添加完毕,可以使用named-checkzone检查解析文件的正确性,显示OK即为正常可以使用。

[root@vm96-yw-65-test-3060 named]# named-checkzone "weli.com" weli.com.zone 
zone weli.com/IN: loaded serial 2018080728
OK
[root@vm96-yw-65-test-3060 named]# named-checkzone "30.168.192.in-addr.arpa" 2.zone 
zone 30.168.192.in-addr.arpa/IN: loaded serial 2018080722
OK

概念介绍:

  • 时间单位:M(分钟)、H(小时)、D(天)、W(周),默认单位是秒
  • 区域解析库文件第一个记录必须是SOA记录,必须有NS记录并且正解区域要有NS记录的A记录,反解则不需要有NS记录对应的A记录。
  • $TTL表示宏定义,TTL(Time- To-Live),dns记录在本地DNS服务器上保留的时间
  • @符号可代表区域文件/etc/named.conf里面定义的区域名称,即:”weli.com.”。
  • NS(Name Server):名称服务器,用来标示一个域的服务器名称
  • MX(Mail eXchanger):邮件交换器
    添加形式:ZONE NAME TTL IN MX pri(级别) VALUE
    优先级:0-99,数字越小级别越高
  • A(address):记录主机名称为IPv4
  • PTR(pointer):反向解析 指针记录
  • CNAME(Canonical NAME):别名记录
    添加样式:www2.magedu.com IN CNAME www.magedu.com.

  至此,DNS主服务器配置成功。可以使用dig命令测试能否正常工作。

## dig -t 测试正向解析
[root@vm96-yw-65-test-3060 named]# dig -t A web.weli.com @192.168.30.60

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> -t A web.weli.com @192.168.30.60
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 1287
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;web.weli.com.          IN  A

;; AUTHORITY SECTION:
weli.com.       600 IN  SOA dns1.weli.com. mail.weli.com. 2018080728 7200 600 604800 86400

;; Query time: 1 msec
;; SERVER: 192.168.30.60#53(192.168.30.60)
;; WHEN: Thu Aug  9 15:16:22 2018
;; MSG SIZE  rcvd: 76

## dig -x 测试反向解析
[root@vm96-yw-65-test-3060 named]# dig -x 192.168.30.59 @192.168.30.60

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> -x 192.168.30.59 @192.168.30.60
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25290
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;59.30.168.192.in-addr.arpa.    IN  PTR

;; ANSWER SECTION:
59.30.168.192.in-addr.arpa. 600 IN  PTR dns2.weli.com.

;; AUTHORITY SECTION:
30.168.192.in-addr.arpa. 600    IN  NS  dns2.weli.com.
30.168.192.in-addr.arpa. 600    IN  NS  dns1.weli.com.

;; ADDITIONAL SECTION:
dns1.weli.com.      600 IN  A   192.168.30.60
dns2.weli.com.      600 IN  A   192.168.30.59

;; Query time: 0 msec
;; SERVER: 192.168.30.60#53(192.168.30.60)
;; WHEN: Thu Aug  9 15:17:06 2018
;; MSG SIZE  rcvd: 136

  通常在应用中,DNS的反向解析并不是很重要,可以不配置,当服务器中有域名作为邮件服务器时,此时可以配置反向解析,因为邮件中过滤垃圾邮件的技术通常是解析邮箱地址,如果IP地址不能反解成一个域名则视为垃圾邮件。
  

DNS从服务器的部署

1、安装软件

yum install -y bind bind-utils bind-chroot

2、修改主服务器配置文件

  2.1、编辑/etc/named.conf

    修改下面三行即可

[root@vm99-lz-65-test-3059 ~]# vim /etc/named.conf
options {
        listen-on port 53 { any; };   ##考虑安全可只本机监听 
        ......
        dnssec-enable no;   
        dnssec-validation no; 
}
  2.2、编辑/etc/named.rfc1912.zones

    在文件末尾添加一个正向解析区域和一个反向解析区域

[root@vm99-lz-65-test-3059 ~]# vim /etc/named.rfc1912.zones
zone "weli.com" IN {
    type slave;
    masters { 192.168.30.60; };   ##主服务器的IP
    file "slaves/weli.com.zone";  ##同步过来的文件存放位置
};
zone "30.168.192.in-addr.arpa" IN {
    type slave;
    masters { 192.168.30.60; };
    file "slaves/2.zone";
};

  修改完成后,使用named-checkconf检查named.conf和named.rfc1912.zones两个文件,检查是否有语法错误,如果没有任何输出表明文件配置正确。

[root@vm99-lz-65-test-3059 ~]# named-checkconf

3、启动从服务器上的服务

[root@vm99-lz-65-test-3059 ~]# /etc/init.d/named start

  启动后可以看到/var/named/slaves下出现主服务器上的解析文件,表示已经同步过来了。如果不行,在主服务器上重启下服务再观察。
  

4、同步模式

  当你修改了主服务器上的解析文件,并修改了序列号后,它不会立刻同步到从服务器上,是根据你/etc/named.rfc1912.zones中设置的刷新时间来判断什么时候同步,此时你想马上同步过去,就需要重启named服务或者reload一下named服务,这里,教大家使用rndc来重新加载配置。
  rndc(Remote Name Domain Controllerr)是一个远程管理bind的工具,通过这个工具可以在本地或者远程了解当前服务器的运行状况,也可以对服务器进行关闭、重载、刷新缓存、增加删除zone等操作。
  使用rndc可以在不停止DNS服务器工作的情况进行数据的更新,使修改后的配置文件生效。在实际情况下,DNS服务器是非常繁忙的,任何短时间的停顿都会给用户的使用带来影响。因此,使用rndc工具可以使DNS服务器更好地为用户提供服务。

4.1、rndc配置文件建立

  自建conf文件,先删除初始的key文件,不然会报错

[root@vm96-yw-65-test-3060 ~]# rm -f /etc/rndc.key
[root@vm96-yw-65-test-3060 ~]# rndc-confgen -r/dev/urandom >/etc/rndc.conf
[root@vm96-yw-65-test-3060 ~]# cat /etc/rndc.conf
# Start of rndc.conf
key "rndc-key" {
        algorithm hmac-md5;
        secret "7oiMvt8PJLJUWCyyJXlLZw==";
};

options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};
# End of rndc.conf

# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
#       algorithm hmac-md5;
#       secret "7oiMvt8PJLJUWCyyJXlLZw==";
# };
# 
# controls {
#       inet 127.0.0.1 port 953
#               allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf
4.2、将rndc管理秘钥文件加入到DNS配置文件中

  将上面生成的conf文件中的部分写入到/etc/named.conf中,记得去掉注释

[root@vm96-yw-65-test-3060 ~]# vim /etc/named.conf

.......

zone "." IN {
        type hint;
        file "named.ca";
};

key "rndc-key" {
      algorithm hmac-md5;
      secret "7oiMvt8PJLJUWCyyJXlLZw==";
};

controls {
      inet 0.0.0.0 port 953    ##改为0.0.0.0允许所有管理DNS
              allow { 192.168.30.59; 192.168.30.60; 127.0.0.1; } keys { "rndc-key"; };   ##allow中限定管理DNS的IP
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
4.3、设置从服务器通过rndc来管理主DNS服务器

  将主服务器上创建的秘钥复制过来放在从服务器的/etc/rndc.key中,注释或删除掉原来的秘钥

[root@vm99-lz-65-test-3059 ~]# vim /etc/rndc.key
key "rndc-key" {
        algorithm hmac-md5;
        secret "7oiMvt8PJLJUWCyyJXlLZw==";
};
4.4、从服务器上重启named服务并测试管理主服务器
[root@vm99-lz-65-test-3059 ~]# /etc/init.d/named restart
[root@vm99-lz-65-test-3059 ~]# rndc -s 192.168.30.60 status
version: 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6
CPUs found: 8
worker threads: 8
number of zones: 21
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running

  当主DNS服务器上的解析文件修改后,只需执行rndc reload就可以重新加载配置文件,从服务器就能立刻更新解析文件。
  

rndc常用命令

语法:rndc [-b source-address] [-c config-file] [-k key-file] [-s server] [-p port] {command}

rndc -h 获取帮助
reload #重新装载配置文件及区域解析库文件
reload zone #只装载指定区域解析库文件
refresh zone #维护
retransfer zone #在不检查序列号的情况下直接传送一个区域数据文件
notify zone #重新通知区域数据文件
reconfig #只重新装载配置文件及新增的区域
querylog #启用或关闭查询日志,默认关闭
stop #将更新信息发送给服务器,然后关闭DNS服务器
trace level #指明调试级别,不跟数字逐级增加,可以明确指定(如trace 3)
notrace #关闭调试
flush #清除服务器缓存

你可能感兴趣的:(服务)