在前面的文章中我们搭建了一个主从DNS,但是在实际的应用中,仅仅搭建起来是不够的,对DNS添加各种记录是日常维护DNS中比较常见的问题,如添加A记录,CNAME,MX,PTR等。
添加A记录
在主从的配置中,一般会对主DNS进行修改,从DNS同步主DNS的数据。
编辑master节点的zone配置文件,可以直接在末尾添加一行记录,同时将serial值 +1:
1
|
2001 ; serial
# 将原来2000的serial值改为2001,使进行slave同步
|
1
2
3
4
5
|
$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文件也会更新。
验证结果:
1
2
3
4
5
6
|
[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记录一样,在文件末尾追加一行记录:
1
|
tryingstuff CNAME trying.
test
.com.
# 末尾的“.” 不能忽略
|
将serial +1
执行rndc reload使配置文件生效。
验证结果:
1
2
3
4
5
6
7
|
[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文件末尾加入一行结果:
1
2
|
# vim /var/named/chroot/etc/test.com.zone
mx MX 3 192.168.1.100
# 3表示优先级,数字越低,优先级越高
|
执行rndc reload, 测试结果:
1
2
3
4
5
6
|
[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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
[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 文件中指定解析的内容:
1
2
3
4
5
6
7
8
9
10
11
|
[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文件的属性:
1
2
|
chown
named.named 168.192.zone
rndc reload
|
此时slave上的节点是不会同步master上的PTR zone文件的,需要先设置zone配置文件。
修改slave节点/var/named/chroot/etc/view.confg的配置,增加PTR的zone配置:
1
2
3
4
5
6
|
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同步的文件了。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[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.
|
测试解析结果:
1
2
3
4
5
6
|
[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 即可。
1
|
t A 192.168.1.111
|
1
2
3
4
5
6
7
|
[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 文件:
1
|
vim
/etc/named
.conf
|
1
2
3
4
5
6
7
8
|
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 文件清空:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[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文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[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
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[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:
1
2
|
chown
named.named group*
systemctl restart named
|
测试结果,以192.168.1.10作为客户端,对DNS发起解析请求:
1
2
3
4
5
6
|
[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发起解析请求:
1
2
3
4
5
6
|
[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文件的同步配置,可以按照原来的方式,将同步参数加入。针对每个定义的域进行同步设置。
本文转自 酥心糖 51CTO博客,原文链接:http://blog.51cto.com/tryingstuff/1880669