DNS主从配置详解

实验环境

主服务器:192.168.138.200
从服务器:192.168.138.201linux

bind安装

安装很简单,执行如下命令便可:
web

yum install -y bind

先看一下bind的版本和配置文件安装路径shell

# named -v
    BIND 9.9.4-RedHat-9.9.4-51.el7_4.2 (Extended Support Version) 
    # rpm -qc bind
    /etc/logrotate.d/named
    /etc/named.conf                 
    /etc/named.iscdlv.key
    /etc/named.rfc1912.zones        
    /etc/named.root.key
    /etc/rndc.conf                      
    /etc/rndc.key
    /etc/sysconfig/named
    /var/named/named.ca
    /var/named/named.empty
    /var/named/named.localhost
    /var/named/named.loopback

/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。windows

配置named.conf文件

这个配置文件主要分3段内容,options是全局配置,logging是日志配置,最后是区域解析库配置以及所包含的区域解析库文件配置。缓存

# cat /etc/named.conf
// 2个双//在这个配置文件中表示注释
options {
    //下面一行表示监听的端口和IP地址,其中2个{}内部两端都要有空格,IP地址要以;号结尾。
    这里的IP地址至少应该包含宿主机能够和外部通迅的地址,也能够包含一个本地回环地址供rndc工具使用。也能够简写成{ any; }
    每一个语句结束一样都要以;结尾,若是不须要监听IPV6能够注释掉或删除。
    listen-on port 53 { 192.168.138.200; 127.0.0.1; };
//  listen-on-v6 port 53 { ::1; };
    //下面一行表示named的工做目录为/var/named
    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";
    //下面一行表示容许哪些主机查询,改为any表示全部
    allow-query     { any; };
    //下面一行表示是否容许递归查询.
    recursion yes;
    dnssec-enable yes;
    dnssec-validation yes;
    /* Path to ISC DLV key */
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
//.表示根区域,这个区域是必需要有的
zone "." IN {
    type hint;        //hint表示根区域类型
    file "named.ca";    //指定根区域解析库文件名称所在位置,相对于/var/named
};
//指定区域文件名称,全部的区域定义均可以写在named.rfc1912.zones文件中
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

配置主服务器192.168.138.200

编辑/etc/named.rfc1912.zones在文件末尾添加一个正向解析区域和一个反向解析区域服务器

# cat /etc/named.rfc1912.zones
zone "0.in-addr.arpa" IN {
    type master;
    file "named.empty";
    allow-update { none; };
};
// 添加一个正向解析区域,并定义为主服务器
zone "frank.com" IN {
    type master;            //master表示主服务器
    file "frank.com.zone";  //指明区域解析库文件,相对于/var/named/
};
//添加一个反向解析区域,并定义为主服务器
zone "138.168.192.in-addr.arpa" IN {
    type master;
    file "138.zone";
};

建立frank.com.zone解析库文件session

# cat frank.com.zone 
$TTL 1D
frank.com.  IN SOA  ns.frank.com.    admin.frank.com. (
        201802001   ;序列号
        2H          ;刷新时间
        10M         ;重试时间间隔
        1W          ;过时时间
        1D          ;没法解析时否认答案的TTL值
        )
frank.com.       IN  NS  ns1.frank.com.
                 IN  NS  ns2.frank.com.
ns1.frank.com.   IN  A   192.168.138.200
ns2.frank.com.   IN  A   192.168.138.200
frank.com.       IN  MX 10  mx1.frank.com.
                 IN  MX 20  mx2.frank.com.
mx1.frank.com.   IN  A   192.168.138.200
mx2.frank.com.   IN  A   192.168.138.200
www.frank.com.   IN  A   192.168.138.200
master           IN CNAME   www.frank.com.
web              IN CNAME   www.frank.com.

建立138.zone反向解析库文件dom

# cat 138.zone 
$TTL 1d
@    IN  SOA     ns.frank.com. admin.frank.com. (
            201802001;
            2H;
            10M;
            1W;
            1D;
            )
                IN      NS  ns.frank.com.
200             IN      PTR www.frank.com.
200             IN      PTR ns.frank.com.

注意事项:工具

  • 区域解析库文件第一个记录必须是SOA记录,必须有NS记录而且正解区域要有NS记录的A记录,反解则不须要有NS记录对应的A记录。
  • $TTL表示宏定义,TTL(Time- To-Live),简单的说它表示一条域名解析记录在DNS服务器上缓存时间.当各地的DNS服务器接受到解析请求时,就会向域名指定的DNS服务器发出解析请求从而得到解析记录;在得到这个记录以后,记录会在DNS服务器中保存一段时间,这段时间内若是再接到这个域名的解析请求,DNS服务器将再也不向DNS服务器发出请求,而是直接返回刚才得到的记录;而这个记录在DNS服务器上保留的时间,就是TTL值。
  • 这个文件里全部的域名结尾的点号必定不能省略。
  • 区域解析库文件是放在/var/named目录下,由named进程是以named用户运行,还要让区域解析库文件的属组为named。
# ll /var/named
total 16
drwxrwx---. 2 named named   23 Feb 21 13:10 data
drwxrwx---. 2 named named   60 Feb 21 13:11 dynamic
-rw-r-----. 1 root  named 2281 May 22  2017 named.ca
-rw-r-----. 1 root  named  152 Dec 15  2009 named.empty
-rw-r-----. 1 root  named  152 Jun 21  2007 named.localhost
-rw-r-----. 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx---. 2 named named   44 Feb 21 13:14 slaves

检查配置文件语法oop

# named-checkconf
没有任何输出表示 /etc/named.conf没有语法错误
# named-checkzone "frank.com" "frank.com.zone"
zone frank.com/IN: loaded serial 201802001
OK
正向解析区域检查没问题
# named-checkzone "frank.com" "138.zone"
zone frank.com/IN: loaded serial 201802001
OK
反向解析区域检查没问题

启动named服务

# systemctl start named.service

使用dig测试
dig语法使用格式:
dig -t [SOA|A|CNAME|NS|MX] 域名 [@dns服务器地址] [+[no]trace|recurse]

dig -t A web.frank.com @192.168.138.200
; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.2 <<>> -t A web.frank.com @192.168.138.200
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40444
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;web.frank.com.         IN  A
;; 下面就是解析出的结果
;; ANSWER SECTION:
web.frank.com.      86400   IN  CNAME   www.frank.com.
www.frank.com.      86400   IN  A   192.168.138.200

;; AUTHORITY SECTION:
frank.com.      86400   IN  NS  ns2.frank.com.
frank.com.      86400   IN  NS  ns1.frank.com.

;; ADDITIONAL SECTION:
ns1.frank.com.      86400   IN  A   192.168.138.200
ns2.frank.com.      86400   IN  A   192.168.138.200

;; Query time: 0 msec
;; SERVER: 192.168.138.200#53(192.168.138.200)
;; WHEN: Wed Feb 21 12:35:24 CST 2018
;; MSG SIZE  rcvd: 144

到此DNS主服务器已经配置完毕并能正常工做。

从服务器配置192.168.138.201

编辑/etc/named.conf将监听IP地址改一下,其它不须要更改

# cat /etc/named.conf
    listen-on port 53 { 192.168.138.201; 127.0.0.1; };

编辑/etc/named.rfc1912.zones将type类型改成slave

# cat /etc/named.rfc1912.zones
zone "0.in-addr.arpa" IN {
    type master;
    file "named.empty";
    allow-update { none; };
};
// 添加一个正向解析区域,并定义为从服务器
zone "frank.com" IN {
    type slave;         //slave表示主服务器
    masters { 192.168.138.200; };   //指明主服务器IP
    file “slaves/frank.com";        //指定从服务区域解析库文件位置
};
//添加一个反向解析区域,并定义为主服务器
zone "138.168.192.in-addr.arpa" IN {
    type slave;
    masters { 192.168.138.200; };
    file "slaves/138.zone";
};

注意事项:从服务器的区域解析库文件应当是从主服务器加载过来的,因此无需建立区域解析库文件。
启动named服务

# systemctl start named

检查/var/named/slaves目录

# ll /var/named/slaves/
total 8
-rw-r--r--. 1 named named 268 Feb 21 13:14 138.zone
-rw-r--r--. 1 named named 554 Feb 21 13:14 frank.com.zone

这2个文件是自动从主服务器同步过来的。
使用dig验证

dig -t MX frank.com @192.168.138.201

; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.2 <<>> -t MX frank.com @192.168.138.201
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57146
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 5

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;frank.com.         IN  MX

;; ANSWER SECTION:
frank.com.      86400   IN  MX  10 mx1.frank.com.
frank.com.      86400   IN  MX  20 mx2.frank.com.

;; AUTHORITY SECTION:
frank.com.      86400   IN  NS  ns1.frank.com.
frank.com.      86400   IN  NS  ns2.frank.com.

;; ADDITIONAL SECTION:
mx1.frank.com.      86400   IN  A   192.168.138.200
mx2.frank.com.      86400   IN  A   192.168.138.200
ns1.frank.com.      86400   IN  A   192.168.138.200
ns2.frank.com.      86400   IN  A   192.168.138.200

;; Query time: 0 msec
;; SERVER: 192.168.138.201#53(192.168.138.201)
;; WHEN: Wed Feb 21 13:15:43 CST 2018
;; MSG SIZE  rcvd: 178

rndc命令使用

rndc reload:
重载主配置文件和区域解析库文件,能够不用重启named服务状况下更新主配置文件和区域解析库文件。
rndc reload zone_name:
重域指定区域
rndc retransfer zone:
手动启动区域传送,无论序号是否增长或减小
rndc notify zone:
手动通知区域
rndc reconfig:
重载主配置文件
rndc querylog:
开启或关闭查询日志

关于DNS服务器

  • DNS服务器主从服务器,通常状况下主从一同工做,在客户端通常会配有多个DNS地址,若是第一个DNS地址没法解析,那么第二DNS地址也是没法解析的,当第一个DNS地址联系不上时(宕机)才会联系第二个DNS地址并寻求解析。
  • DNS服务器若是自已没法解析时会去其它服务器查询,查询到了会缓存下来,当同一用户在缓存失效以前再次请求同一记录时会优先使用缓存回应给客户端。至于缓存多长时间大了和小了都有优势和缺点,通常互联网上的DNS缓存大概要2-4小时,也就是当你在互联网更改记录通常会2-4小时后才能生效。
  • DNS服务器也能够部署成为缓存服务器。
  • DNS服务器中的转发器,部署过windows服务器的都知道,若是本机解析不了的可使用转发器将请求转发到当地运营商的DNS服务器请求解析。

windows中的DNS服务器架设完成后,客户端会自动向DNS服务器注册,服务器端也会自动添加相应的A记录和PTR记录,linux系统当中是否是只能手动添加这些记录才能解析到局域网中的计算机名呢?

相关文章
相关标签/搜索