精解Linux RHEL 6.x DNS 服务器
=============================================
一、DNS的原理
二、缓存服务器
三、DNS的测试工具
四、DNS主从服务器
五、DNS的转发
六、DNS的子域授权
七、DNS的acl规则和view视图
八、DNS的日志系统的使用
=================================================
一、DNS的原理
DNS (Domain Name Server) 域名解析服务,他可以完成域名与IP地址的互换,可以通过IP地址解析到域名,也可以通过域名解析到IP地址,IP地址是平面结构,且不容易记住,DNS是层次化的结构,便于记忆。
DNS的层次化
1)根域:根域位于层次结构的最顶部并用小句点“.”表示全球有十三个根服务器,一个主根服务器,十二个辅助根服务器。
2)顶级域:顶级域是按照组织类别或地理位置来划分的
.gov | 政府组织 |
.com | 商业组织 |
.net | 网络中心 |
.org | 非营利性组织 |
.edu | 教育部门 |
.cn .uk .us | 国家国别的代码,cn表示中国,uk表示英国,us表示美国 |
3)二级域:由国际域名组织为互联网中的个人或部门指定和登记的二级域
(如51cto.com,sohu.com)
DNS的查询方式
迭代查询:本地域名服务器向根域名服务器的查询通常是采用迭代查询。当根域名服 务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地 域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询
递归查询:主机向本地域名服务器的查询一般都是采用递归查询。如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的份,向其他根域名服务器继续发出查询请求报文会给客户端一个准确的返回结果,无论是成功与否。
步骤1:当客户端在IE输入www.baidu.com,客户端去请求本地域服务器解析,此过程为发
起递归查询。
步骤2:本地服务器接到查询请求后,查看区域文件,发现不是自己管制的区域,则发
送给根域进行解析。此过程为迭代查询。
步骤3:根域服务接收到 请求后,查看区域文件,回复请求的主机,去找.com域服务器。此
过程是迭代查询。
步骤4:本地域服务器,接收到根域服务器的回复后,去找.com域服务器,请求解析。此过
程序是迭代查询。
步骤5:.com服务器接收到请求之后,查看自己的区域文件,回复主机去找
baidu.com域服务,此过程是迭代查询。
步骤6:本地域服务器,接收到.com域服务器的回复后,去找baidu.com域服务器,
请求解析,此过程是迭代查询。
步骤7:baidu.com域服务器接收到请求后,查看自己的区域文件,发现是自己所管制
的区域,然后查看区域解析文件,把对应的IP地址发送给请求的服务器,此过
程是迭代查询。
步骤8:本地服务器接收到baidu.com域服务器的回复,把FQDN对应IP地址传送给客
户端,此过程为递归查询。
DNS的解析类型
FQDN:(Fully Qualified Domain Name)完全合格域名,由主机名+域名组成
(如www.51cto.com)
正向解决:FQDN----->IP,把完全合格域名,解析为IP地址
方向解析:IP-------->FQDN,把IP解析为完全合格域名。
Linux服务器实现DNS服务器的软件有bind、powerdns,此博客主要讲bind。
bind的相关软件包
bind:提供域名服务的主程序和相关文件
bind-libs:提供域名服务器所依赖的库文件
bind-utils:提供了对DNS服务的测试工具程序
rpm -qc 包名 查看包安装生成的文件清单
rpm -qi 包名 查看包的摘要信息
二、缓存服务器
1)安装软件包
yum -y install bind
2)bind配置文件
安装完后,会用到四个配置文件,四个配置文件的关系
3)DNS bind named的关系
DNS是一个服务,是提供域名解析的服务;
bind是实现这个服务的软件包;
named是dns这个服务的守护进程
4)配置缓存服务器的思路
把客户端发送的请求,转发给能解析到的服务器
在主配置文件里面修改 (/etc/named.conf)
开启服务, service named start(/etc/rc.d/init.d/named start)
第一次需要开启服务,之后只需要加载配置文件即可
service named reload (rndc reload)
named-checkconf
三、DNS的测试工具
[root@jie2 data]# rpm -ql bind-utils
/usr/bin/dig #dig测试命令工具
/usr/bin/host #host测试命令工具
/usr/bin/nslookup #nslookup测试命令工具
/usr/bin/nsupdate
/usr/share/man/man1/dig.1.gz
/usr/share/man/man1/host.1.gz
/usr/share/man/man1/nslookup.1.gz
/usr/share/man/man1/nsupdate.1.gz
命令的使用用法:
dig [option] 资源记录类型名称 [@server-ip]
option:
[ -t type] 指定类型
[-x addr] 指定IP
资源记录类型名称:
NS :对应DNS服务器的FQDN
A :代表"主机名称"与"IP"地址的对应关系, 作用是把名称转换成IP地址
PTR:代表"IP地址"与"主机名"的对应关系,作用刚好与A记录相反
[@server-ip]:
不写IP,默认是本地服务器的IP
用@server-ip,指定服务器的IP
eg:dig -t A www.51cto.com @172.16.0.1
host [option] 资源记录类型名称 [server-ip]
eg:host -t A www.51cto.com 172.16.0.1
nslookup FQDN [server-ip]
eg: nslookup www.51cto.com 172.16.0.1
四、DNS主从服务器
Master的配置
配置完成后,检查语法是否错误,然后加载配置文件即可。
Slave的配置
[root@jie3 ~]# cd /var/named/slaves/
[root@jie3 slaves]# ls
jie.com.zone
[root@jie3 slaves]#
小结:在实际工作中,可以把Master作为正向区域的主,反向作为slave的从。
五、DNS的转发
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
26
27
28
29
30
31
32
|
###jie.com服务器的主配置文件###########
options {
//
listen-on port 53 { 127.0.0.1; };
//
listen-on-v6 port 53 { ::1; };
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 { localhost; };
recursion
yes
;
forward only;
//
只允许转发
forwarders { 172.16.122.4; };
//
转发到ltt.com服务上
//
dnssec-
enable
yes
;
//
关于安全的文件都注释掉
//
dnssec-validation
yes
;
//
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-
file
"/etc/named.iscdlv.key"
;
//
managed-keys-directory
"/var/named/dynamic"
;
};
logging {
channel default_debug {
file
"data/named.run"
;
severity dynamic;
};
};
zone
"."
IN {
type
hint;
file
"named.ca"
;
};
include
"/etc/named.rfc1912.zones"
;
//include
"/etc/named.root.key"
;
######区域文件和区域解析文件还是之前的文件内容##############
|
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
##########ltt.com服务器的主配置文件######################
options {
//
listen-on port 53 { 127.0.0.1; };
//
listen-on-v6 port 53 { ::1; };
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 { localhost; };
//
recursion
yes
;
allow-recursion { 172.16.22.2; };
//
只为jie.com服务器进行递归查询
//
dnssec-
enable
yes
;
//
dnssec-validation
yes
;
//
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-
file
"/etc/named.iscdlv.key"
;
//
managed-keys-directory
"/var/named/dynamic"
;
};
logging {
channel default_debug {
file
"data/named.run"
;
severity dynamic;
};
};
zone
"."
IN {
type
hint;
file
"named.ca"
;
};
include
"/etc/named.rfc1912.zones"
;
//include
"/etc/named.root.key"
;
##############ltt.com服务器的区域配置文件的部门内容###################
zone
"ltt.com"
IN {
type
master;
file
"ltt.com.zone"
;
};
#################ltt.com服务器的区域解析文件的内容###################
cat
/var/named/ltt
.com.zone
$TTL 1D
@ IN SOA dns.ltt.com. admin.ltt.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS dns.ltt.com.
dns IN A 172.16.122.4
www IN A 172.16.122.40
www IN A 172.16.122.140
www IN A 172.16.122.240
ftp
IN A 172.16.122.200
mail IN A 172.16.122.250
###注意文件的属组和权限######################3
|
[root@PC ~]# grep -v "^#" /etc/resolv.conf | grep -v "^$"
search com
nameserver 172.16.22.2
[root@PC ~]# host -t A www.ltt.com
www.ltt.com has address 172.16.122.240
www.ltt.com has address 172.16.122.40
www.ltt.com has address 172.16.122.140
小结:实际工作中,你的转发的IP一般设置为运营商的DNS服务器的IP地址,运营商的DNS服务器可以接受你的转发
六、DNS的子域授权
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#######父域的主配置文件和区域配置文件还是之前的不需要改动######
#########修改区域解析库文件vim /var/named/jie.com.zone#########
$TTL 6400
@ IN SOA dns.jie.com. admin.jie.com. (
2013081401 ;serial numbel
2h ;refresh
time
5m ;retry
time
7d ;expire
time
1d ;minimum
)
IN NS dns.jie.com.
dns.jie.com. IN A 172.16.22.2
www IN A 172.16.22.2
www IN A 172.16.22.20
www IN A 172.16.22.200
ftp
IN A 172.16.22.220
son IN A 172.16.122.4
#添加子域的A记录
IN NS son.jie.com.
#添加子域的NS记录
dns IN A 172.16.122.4
|
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
###子域的主配置文件/etc/named.conf#########
options {
//
listen-on port 53 { 127.0.0.1; };
//
listen-on-v6 port 53 { ::1; };
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 { localhost; };
recursion
yes
;
dnssec-
enable
yes
;
dnssec-validation
yes
;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-
file
"/etc/named.iscdlv.key"
;
managed-keys-directory
"/var/named/dynamic"
;
};
logging {
channel default_debug {
file
"data/named.run"
;
severity dynamic;
};
};
zone
"."
IN {
type
hint;
file
"named.ca"
;
};
include
"/etc/named.rfc1912.zones"
;
include
"/etc/named.root.key"
;
#####子域的区域配置文件/etc/named.rfc1912.com添加一点内容########
zone
"son.jie.com"
IN {
type
master;
file
"son.jie.com.zone"
;
};
########子域的区域解析库文件/var/named/son.jie.com.zone添加一点内容####
$TTL 1D
@ IN SOA dns.son.jie.com. admin.son.jie.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS dns.son.jie.com.
dns IN A 172.16.122.4
www IN A 172.16.122.40
www IN A 172.16.122.140
www IN A 172.16.122.240
ftp
IN A 172.16.122.200
mail IN A 172.16.122.250
|
父域的测试:父域是直接可以解析子域的,子域默认是不能解析父域
[root@jie2 named]# host -t A www.son.jie.com
www.son.jie.com has address 172.16.122.240
www.son.jie.com has address 172.16.122.40
www.son.jie.com has address 172.16.122.140
子域也能解析父域,①可以把子域的DNS指向父域,②在子域上面做转发,父域接收子域的转发请求
七、DNS的acl规则和view视图
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
###jie.com服务器的主配置文件######
options {
//
listen-on port 53 { 127.0.0.1; };
//
listen-on-v6 port 53 { ::1; };
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 { localhost; };
recursion
yes
;
dnssec-
enable
yes
;
dnssec-validation
yes
;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-
file
"/etc/named.iscdlv.key"
;
managed-keys-directory
"/var/named/dynamic"
;
};
logging {
channel default_debug {
file
"data/named.run"
;
severity dynamic;
};
};
include
"/etc/named.rfc1912.zones"
;
include
"/etc/named.root.key"
;
######区域配置文件######################
view LAN {
zone
"."
IN {
#把主配置文件的根域放到了区域配置文件中
type
hint;
file
"named.ca"
;
};
zone
"localhost.localdomain"
IN {
type
master;
file
"named.localhost"
;
allow-update { none; };
};
zone
"localhost"
IN {
type
master;
file
"named.localhost"
;
allow-update { none; };
};
zone
"1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa"
IN {
type
master;
file
"named.loopback"
;
allow-update { none; };
};
zone
"1.0.0.127.in-addr.arpa"
IN {
type
master;
file
"named.loopback"
;
allow-update { none; };
};
zone
"0.in-addr.arpa"
IN {
type
master;
file
"named.empty"
;
allow-update { none; };
};
match-clients { 172.16.22.0
/16
; };
#当匹配这个网段的IP访问jie.com服务器时,返回172.16.22.128
zone
"jie.com"
IN {
type
master;
file
"lan.jie.com"
;
};
};
view WAN {
match-clients { any; };
#其他任何网段访问时返回1.1.1.128
zone
"jie.com"
IN {
type
master;
file
"wan.jie.com"
;
};
};
#######区域解析库文件的内容#################
#############/var/named/lan.jie.com#####################
$TTL 1D
@ IN SOA dns.jie.com. admin.jie.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS dns.jie.com.
dns IN A 172.16.22.128
www IN A 172.16.22.128
ftp
IN A 172.16.22.128
mail IN A 172.16.22.128
www IN A 172.16.22.1
#############/var/named/wan.jie.com#####################
$TTL 1D
@ IN SOA dns.jie.com. admin.jie.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS dns.jie.com.
dns IN A 1.1.1.128
www IN A 1.1.1.128
ftp
IN A 1.1.1.128
mail IN A 1.1.1.128
www IN A 1.1.1.1
|
验证:
[root@LanPC ~]# ifconfig | grep -A 1 eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:9C:14:36
inet addr:172.16.22.3 Bcast:172.16.255.255 Mask:255.255.0.0
[root@LanPC ~]# host -t A www.jie.com 172.16.22.2
Using domain server:
Name: 172.16.22.2
Address: 172.16.22.2#53
Aliases:
www.jie.com has address 172.16.22.128
www.jie.com has address 172.16.22.1
[root@WanPC ~]# ifconfig | grep -A 1 eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:D1:6F:09
inet addr:192.168.0.4 Bcast:192.168.255.255 Mask:255.255.0.0
[root@WanPC ~]# host -t A www.jie.com 172.16.22.2
Using domain server:
Name: 172.16.22.2
Address: 172.16.22.2#53
Aliases:
www.jie.com has address 1.1.1.1
www.jie.com has address 1.1.1.128
八、DNS的日志系统的使用
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
26
27
28
29
30
31
32
33
34
35
36
37
|
####此实验是接着上面的实验内容####################
#######修改主配置文件####################
options {
//
listen-on port 53 { 127.0.0.1; };
//
listen-on-v6 port 53 { ::1; };
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 { localhost; };
recursion
yes
;
dnssec-
enable
yes
;
dnssec-validation
yes
;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-
file
"/etc/named.iscdlv.key"
;
managed-keys-directory
"/var/named/dynamic"
;
};
logging {
channel default_debug {
file
"data/named.run"
;
severity dynamic;
};
channel querylog {
file
"/var/log/bindquery.log"
versions 3 size 10M;
severity dynamic;
print-
time
yes
;
print-category
yes
;
print-severity
yes
;
};
category queries { querylog; };
};
include
"/etc/named.rfc1912.zones"
;
include
"/etc/named.root.key"
;
##########其它文件不需要修改
touch
/var/log/bindquery
.log
chown
named:named
/var/log/bindquery
.log
|
验证:
[root@LanPC ~]# host -t A ftp.jie.com 172.16.22.2
Using domain server:
Name: 172.16.22.2
Address: 172.16.22.2#53
Aliases:
ftp.jie.com has address 172.16.22.128
[root@LanPC ~]# host -t A www.jie.com 172.16.22.2
Using domain server:
Name: 172.16.22.2
Address: 172.16.22.2#53
Aliases:
www.jie.com has address 172.16.22.1
www.jie.com has address 172.16.22.128
[root@jie2 log]# cat /var/log/bindquery.log
08-Aug-2013 06:27:51.720 queries: info: client 172.16.22.3#36432: view LAN: query: ftp.jie.com IN A + (172.16.22.2)
08-Aug-2013 06:27:52.406 queries: info: client 172.16.22.3#34500: view LAN: query: ftp.jie.com IN A + (172.16.22.2)
08-Aug-2013 06:27:52.880 queries: info: client 172.16.22.3#34935: view LAN: query: ftp.jie.com IN A + (172.16.22.2)
08-Aug-2013 06:31:27.921 queries: info: client 172.16.22.3#38660: view LAN: query: ftp.jie.com IN A + (172.16.22.2)
08-Aug-2013 06:31:34.402 queries: info: client 172.16.22.3#52686: view LAN: query: www.jie.com IN A + (172.16.22.2)
可以生成日志
小结:DNS实现CDN会用到view,理清楚配置文件之间的关系。当服务开启不了时多查看日志(/var/log/messages),注意配置文件的语法格式。博客内容有点多,望各位博友能多多指点