DNS域名解析服务
DNS(Domain Name System,域名系统)
为了降低用户访问网络资源的门槛,DNS技术应运而生
简单来说,用户在浏览器中输入域名或IP地址时,DNS服务器将域名解析为IP地址(正向解析),或将IP地址解析为域名(反向解析),然后就可直接访问指定的网站了
DNS域名解析服务是一个分布式的数据库系统
域名后缀一般分为国际域名和国内域名。原则上域名后缀都有严格的定义,但在实际使用时可不必严格遵守
.com(商业组织)、.org(非营利组织)、.gov(政府部门)、.net(网络服务商)、.edu(教研机构)、.pub(公共大众)、.cn(中国国家顶级域名)
由于全球庞大的请求数量无法被某一台服务器全部处理掉,DNS提供了三种类型的服务器:
主服务器:在特定区域内具有唯一性,负责维护该区域内的域名与IP地址之间的对应关系
从服务器:从主服务器中获得域名与IP地址的对应关系并进行维护,以防主服务器宕机等情况
缓存服务器:通过向其他域名解析服务器查询获得域名与IP地址的对应关系,并将经常查询的域名信息保存到服务器本地,以此来提高重复查询时的效率
主服务器是用于管理域名和IP地址对应关系的真正服务器;
从服务器的数据来源于主服务器,分散部署在各个国省市区,以便让用户就近查询域名,从而减轻主服务器的负载压力;
缓存服务器不太常用,一般部署在企业内网的网关位置,用于加速用户的域名查询请求DNS域名解析服务采用分布式的数据结构来存放海量的“区域数据”信息,在执行用户发起的域名查询请求时,具有递归查询和迭代查询两种方式
递归查询是指DNS服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果DNS服务器本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结果提交给用户
迭代查询是指DNS服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台DNS服务器的地址,用户再向这台DNS服务器提交请求,这样依次反复,直到返回查询结果
域名解析服务是互联网基础设施中重要的一环,几乎所有的网络应用都依赖于DNS才能正常运行
安装Bind服务程序
- BIND(Berkeley Internet Name Domain,伯克利因特网名称域)服务是全球范围内使用最广泛、最安全可靠且高效的域名解析服务程序
- 在生产环境中安装部署bind服务程序时加上chroot(俗称牢笼机制)扩展包,可有效地限制bind服务程序,使其仅能对自身的配置文件进行操作,确保整个服务器的安全
- 在Linux系统中,bind服务程序的名称是named
1 | yum install -y bind-chroot |
主配置文件(/etc/named.conf):文件中的参数用来定义bind服务程序的运行
区域配置文件(/etc/named.rfc1912.zones):用来保存域名和IP地址对应关系的所在位置。类似于图书的目录,对应着每个域和相应IP地址所在的具体位置,当需要查看或修改时,可根据这个位置找到相关文件
数据配置文件目录(/var/named):该目录用来保存域名和IP地址真实对应关系的数据配置文件
修改主配置文件,将第11行和第17行的地址均修改为any
1 | vim /etc/named.conf |
服务类型有三种,分别为hint(根区域)、master(主区域)、slave(辅助区域),其中常用的master和slave指的就是主服务器和从服务器
配置文件的参数写错,可执行
named-checkconf
命令检查主配置文件语法或参数的错误;named-checkzone
命令检查数据配置文件语法或参数的错误
正向解析——域名→IP
编辑区域配置文件:在文件最下面添加信息
1
2
3
4
5
6
7vim /etc/named.rfc1912.zones
......
zone "zengzhilai.com" IN {
type master; # 服务类型
file "zengzhilai.com.zone"; # 域名与IP地址规则保存的文件位置
allow-update{none;}; # 允许哪些客户机动态更新解析信息
};编辑数据配置文件:复制一份正向解析的模板文件(named.localhost),然后编辑数据配置文件,配置完成重启named服务
cp
的-a参数:保留原始文件的所有者、所属组、权限属性等信息,以便让bind服务程序顺利读取文件内容1
2
3
4
5
6
7cd /var/named
ls -al named.localhost
-rw-r-----. 1 root named 152 Jun 21 2007 named.localhost
cp -a named.localhost zengzhilai.com.zone
ls
chroot dynamic named.empty named.loopback zengzhilai.com.zone
data named.ca named.localhost slaves1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16vim zengzhilai.com.zone
TTL 1D
@ IN SOA zengzhilai.com. root.zengzhilai.com. (
#授权信息开始 #DNS区域的地址 #域名管理员的邮箱(不要用@符合)
0 ; serial #更新序列号
1D ; refresh #更新时间
1H ; retry #重试延时
1W ; expire #失效时间
3H ) ; minimum #无效解析记录的缓存时间
NS ns.zengzhilai.com. #域名服务器记录
ns IN A 192.168.40.131 #地址记录(ns.zengzhilai.com.)
IN MX 10 mail.zengzhilai.com. #邮箱交换记录
mail IN A 192.168.40.131 #地址记录(mail.linuxprobe.com.)
www IN A 192.168.40.131 #地址记录(www.linuxprobe.com.)
bbs IN A 192.168.40.131 #地址记录(bbs.linuxprobe.com.)
systemctl restart named关闭防火墙或开放53号端口,以便外网访问
1
systemctl stop iptables
Linux本机作客户端,检验解析结果:
Linux中指定DNS服务器,重启网卡后失效(恢复原样)
1
2vim /etc/resolv.conf
nameserver 192.168.40.131nslookup
命令检测能否从DNS服务器中查询到域名与IP地址的解析记录,可更准确地检验DNS服务器是否已经能够为用户提供服务1
2
3
4
5
6
7
8
9
10
11
12
13nslookup
www.zengzhilai.com
Server: 192.168.40.131
Address: 192.168.40.131#53
Name: www.zengzhilai.com
Address: 192.168.40.131
bbs.zengzhilai.com
Server: 192.168.40.131
Address: 192.168.40.131#53
Name: bbs.zengzhilai.com
Address: 192.168.40.131Windows10作客户端,检验解析结果
Windows10客户端指定DNS服务器
在cmd中用ping命令查询检测
1
2
3
4
5
6
7
8
9
10
11
12C:\Users\赖增智>ping www.zengzhilai.com
正在 Ping www.zengzhilai.com [192.168.40.131] 具有 32 字节的数据:
来自 192.168.40.131 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.40.131 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.40.131 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.40.131 的回复: 字节=32 时间<1ms TTL=64
192.168.40.131 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
反向域名——IP→域名
- 反向解析一般用于对某个IP地址上绑定的所有域名进行整体屏蔽,屏蔽有某些域名发送的垃圾邮件
- 反向解析也可针对某个IP地址进行反向解析,大致判断有多少个网站在上面运行
- 当购买虚拟主机时,可使用这一功能验证虚拟主机提供商是否有严重的超售问题
编辑区域配置文件:在正向解析参数后添加反向解析参数
1
2
3
4
5
6
7
8
9
10
11
12vim /etc/named.rfc1912.zones
......
zone "zengzhilai.com" IN {
type master;
file "zengzhilai.com.zone";
allow-update{none;};
};
zone "40.168.192.in-addr.arpa" IN {
type master;
file "192.168.40.arpa";
};编辑数据配置文件:从目录/var/named复制一份反向解析模板文件(named.loopback),然后填写参数,重启named服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17cd /var/named
cp -a named.loopback 192.168.40.arpa
vim 192.168.40.arpa
TTL 1D
@ IN SOA zengzhilai.com. root.zengzhilai.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns.zengzhilai.com.
ns A 192.168.40.131
131 PTR ns.zengzhilai.com. #PTR为指针记录,仅用于反向解析中
131 PTR mail.zengzhilai.com.
131 PTR www.zengzhilai.com.
132 PTR bbs.zengzhilai.com.
systemctl restart namedLinux本机作客户端,检验解析结果
在正向解析中指定了DNS服务器(重启网卡恢复原样),此处不需要再指定
1
2
3
4
5
6
7
8
9
10
11
12
13nslookup
192.168.40.131
Server: 192.168.40.131
Address: 192.168.40.131#53
131.40.168.192.in-addr.arpa name = mail.zengzhilai.com.
131.40.168.192.in-addr.arpa name = www.zengzhilai.com.
131.40.168.192.in-addr.arpa name = ns.zengzhilai.com.
192.168.40.141
Server: 192.168.40.131
Address: 192.168.40.131#53
141.40.168.192.in-addr.arpa name = bbs.zengzhilai.com.
部署从服务器
主服务器与从服务器分别使用的操作系统与IP地址信息:(/etc/redhat-release
文件可查看当前系统版本的详细信息)
主机名称 | 操作系统 | IP地址 |
---|---|---|
主服务器 | RHEL7.0 | 192.168.40.131 |
从服务器 | RHEL6.8 | 192.168.40.123 |
清空主服务器已有的防火墙规则链,以防影响实验
1
2
3
4
5iptables -F
iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
......修改 主服务器 的区域配置文件:允许该从服务器的更新请求,即修改allow-update 参数,然后重启named服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14vim /etc/named.rfc1912.zones
......
zone "zengzhilai.com" IN {
type master;
file "zengzhilai.com.zone";
allow-update{ 192.168.40.123; };
};
zone "40.168.192.in-addr.arpa" IN {
type master;
file "192.168.40.arpa";
allow-update{ 192.168.40.123; };
};
systemctl restart named在 从服务器 中填写主服务器的IP地址与要抓取的区域信息,然后重启named服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16vim /etc/named.rfc1912.zones
......
zone "zengzhilai.com" IN {
type slave; #服务类型是slave(从)
masters { 192.168.40.131; }; #主服务器的IP地址
file "slaves/zengzhilai.com.zone";#同步数据配置文件后要保存到的位置,在/var/named目录
};
zone "40.168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.40.131; };
file "slaves/192.168.40.arpa";
};
service named restart
停止 named: [确定]
启动 named: [确定]检验解析结果
查看自动从主服务器上同步的数据配置文件
1
2ls /var/named/slaves
192.168.40.arpa zengzhilai.com.zone指定从服务器的DNS服务器
1
2vim /etc/resolv.conf
nameserver 192.168.40.1231
2
3
4
5
6
7
8
9
10
11
12
13
14nslookup
www.zengzhilai.com
Server: 192.168.40.123
Address: 192.168.40.123#53
Name: www.zengzhilai.com
Address: 192.168.40.131
192.168.40.131
Server: 192.168.40.123
Address: 192.168.40.123#53
131.40.168.192.in-addr.arpa name = mail.zengzhilai.com.
131.40.168.192.in-addr.arpa name = www.zengzhilai.com.
131.40.168.192.in-addr.arpa name = ns.zengzhilai.com.
安全的加密传输
互联网中的绝大多数DNS服务器(超过95%)都是基于BIND域名解析服务搭建的,而bind服务程序为了提供安全的解析服务,已经对TSIG(RFC 2845)加密机制提供了支持
TSIG主要是利用了密码编码的方式来保护区域信息的传输(Zone Transfer),即TSIG加密机制保证了DNS服务器之间传输域名区域信息的安全性
接上面的实验,同样使用这两台服务器:
主机名称 | 操作系统 | IP地址 |
---|---|---|
主服务器 | RHEL7.0 | 192.168.40.131 |
从服务器 | RHEL6.8 | 192.168.40.123 |
删除从服务器获取到的数据配置文件
1
2
3
4
5ls -l /var/named/slaves/
总用量 8
-rw-r--r-- 1 named named 456 8月 22 11:27 192.168.40.arpa
-rw-r--r-- 1 named named 409 8月 22 11:27 zengzhilai.com.zone
rm -rf /var/named/slaves/*在主服务器生成密钥:用
dnssec-keygen [参数]
命令生成安全的DNS服务密钥生成一个主机名称为master-slave的128位HMAC-MD5算法的密钥文件
1
2
3
4
5
6
7
8
9
10
11
12
13dnssec-keygen -a HMAC-MD5 -b 128 -n HOST master-slave
Kmaster-slave.+157+31244
ls -al Kmaster-slave.+157+31244.*
-rw-------. 1 root root 56 Aug 22 19:35 Kmaster-slave.+157+31244.key
-rw-------. 1 root root 165 Aug 22 19:35 Kmaster-slave.+157+31244.private
cat Kmaster-slave.+157+31244.private
Private-key-format: v1.3
Algorithm: 157 (HMAC_MD5)
Key: GGdhTVxB0keBPsMZpRLixg==
Bits: AAA=
Created: 20190822113520
Publish: 20190822113520
Activate: 20190822113520dnssec-keygen
命令的参数说明:参数 作用 -a 指定加密算法,包括RSAMD5(RSA)、RSASHA1、DSA、NSEC3RSASHA1、NSEC3DSA等 -b 密钥长度(HMAC-MD5的密钥长度在1~512位之间) -n 密钥的类型(HOST表示与主机相关) 在主服务器中创建密钥验证文件tansfer.key,并将密钥名称、加密算法和私钥加密字符串写入传输配置文件
为安全起见,将文件所属组修改成named,并将文件权限设置得要小一点,且硬链接到/etc目录中
1
2
3
4
5
6
7
8
9cd /var/named/chroot/etc/
vim transfer.key
key "master-slave" {
algorithm hmac-md5;
secret "GGdhTVxB0keBPsMZpRLixg==";
};
chown root:named transfer.key
chmod 640 transfer.key
ln transfer.key /etc/transfer.key主服务器开启并加载Bind服务的密钥验证功能
修改主服务器的主配置文件的2行,重启named服务:
第18行:只允许带有master-slave密钥认证的DNS服务器同步数据配置文件
第58行:加载密钥验证文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17vim /etc/named.conf
......
10 options {
11 listen-on port 53 { any; };
12 listen-on-v6 port 53 { ::1; };
13 directory "/var/named";
14 dump-file "/var/named/data/cache_dump.db";
15 statistics-file "/var/named/data/named_stats.txt";
16 memstatistics-file "/var/named/data/named_mem_stats.txt";
17 allow-query { any; };
18 allow-transfer { key master-slave; };
......
55
56 include "/etc/named.rfc1912.zones";
57 include "/etc/named.root.key";
58 include "/etc/transfer.key";
systemctl restart named
至此,DNS主服务器的TSIG密钥加密传输功能就已经配置完成
重启从服务器的bind服务程序,发现已不能再自动获取到数据配置文件了
配置从服务器,使其支持密钥验证(与主服务器配置相似)
1
2
3
4
5
6
7
8
9cd /var/named/chroot/etc/
vim transfer.key
key "master-slave" {
algorithm hmac-md5;
secret "GGdhTVxB0keBPsMZpRLixg==";
};
chown root:named transfer.key
chmod 640 transfer.key
ln transfer.key /etc/transfer.key从服务器开启并加载从服务器的密钥验证功能
修改从服务器的主配置文件的2行,重启named服务:
第9行:加载密钥验证文件
第40~42行:主服务器的IP地址和密钥名称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
42vim /etc/named.conf
......
9 include "/etc/transfer.key";
10 options {
11 listen-on port 53 { any; };
12 listen-on-v6 port 53 { ::1; };
13 directory "/var/named";
14 dump-file "/var/named/data/cache_dump.db";
15 statistics-file "/var/named/data/named_stats.txt";
16 memstatistics-file "/var/named/data/named_mem_stats.txt";
17 allow-query { any; };
18 recursion yes;
19
20 dnssec-enable yes;
21 dnssec-validation yes;
22 /* Path to ISC DLV key */
23 bindkeys-file "/etc/named.iscdlv.key";
24
25 managed-keys-directory "/var/named/dynamic";
26 };
27
28 logging {
29 channel default_debug {
30 file "data/named.run";
31 severity dynamic;
32 };
33 };
34
35 zone "." IN {
36 type hint;
37 file "named.ca";
38 };
39
40 server 192.168.40.131 {
41 keys { master-slave; };
42 };
43
44 include "/etc/named.rfc1912.zones";
45 include "/etc/named.root.key";
service named restart
停止 named: [确定]
启动 named: [确定]DNS从服务器同步域名区域数据
1
2ls /var/named/slaves/
192.168.40.arpa zengzhilai.com.zone
注意:
由于两台服务器的时间不一致导致出现了下面的错误:时钟不同步clocks are unsynchronized
(/var/log/message
文件可查看错误):
最简单的方法是:用date
命令使服务器时间一致,例:date -s "2019/8/23/ 16:49"