在前面的文章中我们搭建了一个主从DNS,但是在实际的应用中,仅仅搭建起来是不够的,对DNS添加各种记录是日常维护DNS中比较常见的问题,如添加A记录,CNAME,MX,PTR等。


添加A记录

在主从的配置中,一般会对主DNS进行修改,从DNS同步主DNS的数据。

编辑master节点的zone配置文件,可以直接在末尾添加一行记录,同时将serial值 +1:

          2001      ; serial  # 将原来2000的serial值改为2001,使进行slave同步
$ORIGIN test.com.
shanks   A  1.2.3.4
op      A   1.2.3.4
t      A    1.2.3.4
trying  A   192.168.1.2  # 添加的一行记录

执行 rndc reload 使配置文件生效,此时,slave上的zone文件也会更新。

验证结果:

[root@DNS-Server ~]# host trying.test.com 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases: 
trying.test.com has address 192.168.1.2


添加CNAME记录

与添加A记录一样,在文件末尾追加一行记录:

tryingstuff  CNAME  trying.test.com.   # 末尾的“.” 不能忽略

将serial +1

执行rndc reload使配置文件生效。

验证结果:

[root@DNS-Server ~]# host tryingstuff.test.com 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases: 
tryingstuff.test.com is an alias for trying.test.com.
trying.test.com has address 192.168.1.2


添加MX记录

同理,修改zone 配置文件,serial +1, zone文件末尾加入一行结果:

# vim /var/named/chroot/etc/test.com.zone
mx  MX 3   192.168.1.100  # 3表示优先级,数字越低,优先级越高

执行rndc reload, 测试结果:

[root@DNS-Server ~]# host mx.test.com 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases: 
mx.test.com mail is handled by 3 192.168.1.100.test.com.


添加PTR记录

在很多场景中需要用到PTR反向解析,这里在原来的基础上添加PTR记录:

编辑master 上的view配置文件,加入PTR的zone:

[root@DNS-Server etc]# cat view.conf 
view "View-test" {
 zone "test.com" {
    type master;
    file "test.com.zone";
    allow-transfer {
    192.168.1.11;
};
  notify yes;
  also-notify {
    192.168.1.11;
};
};
zone "168.192.in-addr.arpa" {  # 这里是添加的反向解析域名,表示解析192.168段的主机
        type    master;
        file    "168.192.zone";  # zone 文件名
        allow-transfer {
                192.168.1.11;
        };
        notify  yes;
        also-notify {
                192.168.1.11;
        };
  };
};

在添加了PTR的域之后,需要在指定的168.192.zone 文件中指定解析的内容:

[root@DNS-Server etc]# cat 168.192.zone 
$TTL 3600       ; 1 hour
@                 IN SOA  op.test.com. dns.test.com. (
                                2000       ; serial
                                900        ; refresh (15 minutes)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      op.test.com.
100.1   IN   PTR   a.test.com.  # 添加的反向解析记录,对应的IP为 192.168.1.100

修改master上PTR zone文件的属性:

chown named.named 168.192.zone 
rndc reload


此时slave上的节点是不会同步master上的PTR zone文件的,需要先设置zone配置文件。

修改slave节点/var/named/chroot/etc/view.confg的配置,增加PTR的zone配置:

    zone "168.192.in-addr.arpa" {
       type slave;
       masters {192.168.1.10;};
       Masterfile-Format Text;
       file "slave.168.192.zone";
};

执行rndc reload,同步PTR zone文件,此时,在slave上就可以看到slave同步的文件了。

[root@DNS-Slave ~]# cat /var/named/chroot/etc/slave.168.192.zone 
$ORIGIN .
$TTL 3600; 1 hour
168.192.in-addr.arpa    IN SOA    op.test.com. dns.test.com. (
2001       ; serial
900        ; refresh (15 minutes)
600        ; retry (10 minutes)
86400      ; expire (1 day)
3600       ; minimum (1 hour)
)
    NS    op.test.com.
$ORIGIN 168.192.in-addr.arpa.
100.1    PTR    a.test.com.

测试解析结果:

[root@DNS-Slave ~]# host 192.168.1.100 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases: 
100.1.168.192.in-addr.arpa domain name pointer a.test.com. #返回的结果正确


使用DNS实现服务的负载均衡

对于一个域名多个IP 的情况,DNS会对多个IP进行轮询,这样就实现了负载均衡功能。DNS只会按照自身的配置信息进行轮询,不会探测后端的服务节点是否可用。

直接在master上的ZONE配置文件上添加一条A 记录,serial 值+1 即可。

t  A   192.168.1.111
[root@DNS-Server etc]# host t.test.com 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases: 
t.test.com has address 192.168.1.111   # 反回了两行信息
t.test.com has address 1.2.3.4


配置DNS视图(智能DNS)

智能DNS是指通过判断用户的来源,返回给用户一个最佳的服务站点。简单来说就是让联通和电信的不同用户在访问相同的站点时,分别将请求解析到与用户网络相同的服务器上来提升用户的体验。只能DNS还可以探测后端节点的运行状态,如果发现后端有节点故障,会将请求发送到能提供正常服务的主机上。

配置智能DNS,修改master上的/etc/named.conf 文件:

vim /etc/named.conf
acl group1 {               # 在原来的基础上增加两个group的配置,加在include之前
   192.168.1.10;           # 在两个group中分别指定两个不同的DNS服务器.
};
acl group2 {
  192.168.1.11;
};

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


编辑master节点上的view.conf 文件,添加group,将之前的view.conf 文件清空:

[root@DNS-Server etc]# cat view.conf
view "GROUP1" {
    match-clients { group1;};
    zone "viewtest.com" {
      type master;
      file "group1.viewtest.com.zone";
};
};
view "GROUP2" {
     match-clients { group2;};
     zone "viewtest.com" {
     type master;
     file "group2.viewtest.com.zone";
};
};

分别创建两个指定的zone文件:

[root@DNS-Server ~]# cat /var/named/chroot/etc/group1.viewtest.com.zone 
$ORIGIN .
$TTL 3600 ; 1 hour
viewtest.com  IN SOA op.viewtest.com dns.viewtest.com. (
          2007 ; serial
          900       ; refresh  (15 minutes)
          600       ; retry (10 minutes)
          86400     ; expire (1 day)
          3600      ; minimum (1 hour)
          )
     NS    OP.viewtest.com.
$ORIGIN viewtest.com.
view    A   1.2.3.4
op      A   1.2.3.4
[root@DNS-Server ~]# cat /var/named/chroot/etc/group2.viewtest.com.zone 
$ORIGIN .
$TTL 3600 ; 1 hour
viewtest.com  IN SOA op.viewtest.com dns.viewtest.com. (
          2007 ; serial
          900       ; refresh  (15 minutes)
          600       ; retry (10 minutes)
          86400     ; expire (1 day)
          3600      ; minimum (1 hour)
          )
     NS    OP.viewtest.com.
$ORIGIN viewtest.com.
view    A   1.2.100.100
op      A   1.2.100.100

两个文件的指定解析的IP不同。

更改两个文件的权限,并重启named:

 chown  named.named group*
 systemctl restart named

测试结果,以192.168.1.10作为客户端,对DNS发起解析请求:

[root@DNS-Server ~]# host view.viewtest.com 192.168.1.10
Using domain server:
Name: 192.168.1.10
Address: 192.168.1.10#53
Aliases: 
view.viewtest.com has address 1.2.3.4

 以192.168.1.11作为客户端,对DNS发起解析请求:

[root@DNS-Slave ~]# host view.viewtest.com 192.168.1.10
Using domain server:
Name: 192.168.1.10
Address: 192.168.1.10#53
Aliases: 
view.viewtest.com has address 1.2.100.100

不同的客户端解析的结果不一样,这样就达到了我们的要求。

智能DNS解析的过程:

1、在named.conf 文件中定义了两个group,group1 包含了192.168.1.10的客户端,group2 包含了192.168.1.11的客户端。这两个group 就对来源IP进行了区分,不同group的来源IP使用不同的zone文件进行解析。

2、当在192.168.1.10 (11)上请求解析view.viewtest.com 时,发现此IP属于group1(group2),于是去查看 /var/named/chroot/etc/view.conf这个文件。

3、在view.conf文件中,分别指定了解析group1和group2中需要解析的zone文件,于是,系统会根据来源IP自动选择其对应的zone文件。

4、在group1和group2的zone文件中,分别指定了view.viewtest.com对应的解析记录,分别为1.2.3.4 和1.2.100.100。 系统读取各自对应的zone文件,返回客户端不同的解析结果。


小提示:

此处清空了view.conf文件的同步配置,可以按照原来的方式,将同步参数加入。针对每个定义的域进行同步设置。