DNS服务中几种常用服务的配置方法
DNS域名解析服务
域名作为替代IP地址的访问名称,构成是由顶级域名—代表国家,机构或组织等,二级域名—企业名称或品牌名称等,主机名—www或主机所提供的服务名称等自主命名组成,相较于IP地址,域名更容易被理解和记忆。
鉴于互联网中的域名和 IP 地址对应关系数据库太过庞大, DNS 域名解析服务采用了类似目录树的层次结构来记录域名与 IP 地址之间的对应关系,从而形成了一个分布式的数据库系统,如下图所示:
DNS服务器的类型
- 主服务器: 在特定区域内具有唯一性,负责维护该区域内的域名与 IP 地址之间的对应关系。
- **从服务器:**从主服务器中获得域名与 IP 地址的对应关系并进行维护,以防主服务器宕机等情况。
- 缓存服务器: 通过向其他域名解析服务器查询获得域名与 IP 地址的对应关系,并将经常查询的域名信息保存到服务器本地,以此来提高重复查询时的效率
简单来说,主服务器是用于管理域名和 IP 地址对应关系的真正服务器,从服务器帮助主服务器“打下手”,分散部署在各个国家、省市或地区,以便让用户就近查询域名,从而减轻主服务器的负载压力。缓存服务器不太常用,一般部署在企业内网的网关位置,用于加速用户的域名查询请求。
DNS服务器解析分类
- SOA:描述域管理NS,主从DNS服务器同步参数
- NS:域DNS服务器FQDN
- A:域名到IP的映射
- MX:域邮件服务器
- CNAME:域名别名
- PTR:IP到域名的映射
DNS服务器的解析过程
DNS 域名解析服务采用分布式的数据结构来存放海量的“区域数据”信息,在执行用户发起的域名查询请求时,具有递归查询和迭代查询两种方式。所谓递归查询,是指 DNS 服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果 DNS 服务器本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结果提交给用户。而迭代查询则是指, DNS 服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台 DNS 服务器的地址,用户再向这台 DNS 服务器提交请求,这样依次反复,直到返回查询结果。
向 DNS 服务器发起域名查询请求的流程
Bind服务程序的主要配置文件
-
主配置文件(/etc/named.conf): 只有 58 行,而且在去除注释信息和空行之后,实际有效的参数仅有 30 行左右,这些参数用来定义 bind 服务程序的运行。
-
区域配置文件(/etc/named.rfc1912.zones): 用来保存域名和 IP 地址对应关系的所在位置。类似于图书的目录,对应着每个域和相应 IP 地址所在的具体位置,当需要查看或修改时,可根据这个位置找到相关文件。
-
数据配置文件目录(/var/named): 该目录用来保存域名和 IP 地址真实对应关系的数据配置文件
例子1:DNS正向解析
1.安装bind服务程序
yum -y install bind*
2.配置主配置文件
vim /etc/named.conf #修改主配置文件中的如下两行
listen-on port 53 { any; }; #监听所有地址的53端口
allow-query { any; }; #允许所有人请求
检查配置文件参数是否有错误,执行如下命令:
named-checkconf -z /etc/named.conf
3.编辑区域配置文件
vim /etc/named.rfc1912.zones #向区域配置文件最后面添加如下内容
zone "test.com" IN {
type master;
file "test.com.zone";
allow-transfer {none;};
};
4.编辑数据配置文件
cd /var/named/
cp -a named.localhost test.com.zone
vim test.com.zone
$TTL 1D
@ IN SOA test.com. admin.test.com. (200 1H 15M 1W 1D)
@ IN NS www.test.com. # 表示当前区域名称邮件中用"."代替
www IN A 172.16.56.3 # 一个主机名配置三个IP,起到负载均衡的作用
www IN A 172.16.56.4
www IN A 172.16.56.5
- 200更新***,10位以内的正整数
- 1H刷新时间,重新下载地址数据的时间
- 15M重试延时,下载失败后的重试间隔
- 1W失效时间,超过改时间无法下载就放弃
- 1D无效解析记录生存周期
5.重启服务,验证正向解析
systemctl restart named
systemctl enable named
验证:
[[email protected] named]# nslookup
> www.test.com
Server: 172.16.56.132
Address: 172.16.56.132#53
Name: www.test.com
Address: 172.16.56.4
Name: www.test.com
Address: 172.16.56.5
Name: www.test.com
Address: 172.16.56.3
例子2:DNS反向解析
1.编辑区域配置文件
vim /etc/named.rfc1912.zones #向区域配置文件最后面添加如下内容
zone "56.16.172.in-addr.arpa" IN {
type master;
file "172.16.56.arpa";
allow-transfer {none;};
};
2.编辑数据配置文件
cp -a named.loopback 172.16.56.arpa
vim 172.16.56.arpa
$TTL 1D
@ IN SOA test.com. admin.test.com. (200 1H 15M 1W 1D)
@ IN NS www.test.com.
3 IN PTR www.test.com.
3.重启服务,验证反向解析
systemctl restart named
验证:
[[email protected] named]# nslookup
> 172.16.56.3
Server: 172.16.56.132
Address: 172.16.56.132#53
3.56.16.172.in-addr.arpa name = www.test.com.
例子3:部署从服务器
1.在主服务器的区域配置文件中允许该从服务器的更新请求
vim /etc/named.rfc1912.zones
zone "test.com" IN {
type master;
file "test.com.zone";
allow-transfer { 172.16.56.131; };
};
zone "56.16.172.in-addr.arpa" IN {
type master;
file "172.16.56.arpa";
allow-transfer { 172.16.56.131; };
};
2.在从服务器中安装bind服务,并且在从服务器中填写主服务器的 IP 地址与要抓取的区域信息
yum -y install bind*
vim /etc/named.conf
listen-on port 53 { any; }; #监听所有地址的53端口
allow-query { any; }; #允许所有人请求
vim /etc/named.rfc1912.zones
zone "test.com" IN {
type slave;
masters { 172.16.56.132; };
file "slaves/test.com.zone";
};
zone "56.16.172.in-addr.arpa" IN {
type slave;
masters { 172.16.56.132; };
file "slaves/172.16.56.arpa";
};
3.重启,检验解析结果
cd /var/named/slaves
ls
172.16.56.arpa test.com.zone
验证:
[[email protected] slaves]# nslookup
> www.test.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: www.test.com
Address: 172.16.56.4
Name: www.test.com
Address: 172.16.56.5
Name: www.test.com
Address: 172.16.56.3
> 172.16.56.3
Server: 127.0.0.1
Address: 127.0.0.1#53
3.56.16.172.in-addr.arpa name = www.test.com.
例子4:安全的加密传输
域名解析服务是互联网基础设施中重要的一环,几乎所有的网络应用都依赖于 DNS 才能正常运行。如果 DNS 服务发生故障,那么即便 Web 网站或电子邮件系统服务等都正常运行,用户也无法找到并使用它们了。bind 服务程序为了提供安全的解析服务,已经对 TSIG(RFC 2845)加密机制提供了支持。TSIG 主要是利用了密码编码的方式来保护区域信息的传输(Zone Transfer),即 TSIG 加密机 制保证了 DNS 服务器之间传输域名区域信息的安全性。
接下来的实验依然使用了之前的两台已经搭好的主从服务器。
1.在主服务器中生成秘钥
dnssec-****** 命令用于生成安全的 DNS 服务**,其格式为“ dnssec-****** [参数]”,常用的参数以及作用如下表所示。
参数 | 作用 |
---|---|
-a | 指定加密算法,包括 RSAMD5(RSA)、 RSASHA1、 DSA、 NSEC3RSASHA1、 NSEC3DSA等 |
-b | **长度(HMAC-MD5 的**长度在 1~512 位之间) |
-n | **的类型(HOST 表示与主机相关) |
#使用下述命令生成一个主机名称为 master-slave 的 128 位 HMAC-MD5 算法的**文件
dnssec-****** -a HMAC-MD5 -b 128 -n HOST master-slave
ls -al Kmaster-slave.+157+17661.*
-rw-------. 1 root root 56 12月 19 23:17 Kmaster-slave.+157+17661.key
-rw-------. 1 root root 165 12月 19 23:17 Kmaster-slave.+157+17661.private
#查看私钥文件内容
cat Kmaster-slave.+157+17661.private
Private-key-format: v1.3
Algorithm: 157 (HMAC_MD5)
Key: R9hs875WLZJAMTW/h2+hSw== #cp下来,一会儿要将其写入传输配置文件中
Bits: AAA=
Created: 20181220040818
Publish: 20181220040818
Activate: 20181220040818
2.在主服务器中创建**验证文件
cd /var/named/chroot/etc/
vim transfer.key
key "master-slave" {
algorithm hmac-md5;
secret "9hs875WLZJAMTW/h2+hSw==";
};
chown root:named transfer.key
chmod 640 transfer.key
ln transfer.key /etc/transfer.key
3.开启并加载Bind服务的秘钥验证功能
vim /etc/named.conf
include "/etc/transfer.key"; #在主服务器的主配置文件中加载**验证文件
options {
...
allow-transfer { key master-slave; }; #只允许带有 master-slave **认证的 DNS 服务器同步数据配置文件
...
}
systemctl restart named #修改完后,重启服务
4.清空DNS从服务器同步目录中所有的数据配置文件,然后再次重启Bind服务程序
rm -rf /var/named/slaves/*
systemctl restart named
ls /var/named/slaves/ #查看发现没有从主服务器那更新到
5.配置从服务器,使其支持秘钥验证
cd /var/named/chroot/etc
vim transfer.key
key "master-slave" {
algorithm hmac-md5;
secret "9hs875WLZJAMTW/h2+hSw==";
};
chown root:named transfer.key
chmod 640 transfer.key
ln transfer.key /etc/transfer.key
6.开启并加载服务器的秘钥验证功能
vim /etc/named.conf
include "/etc/transfer.key";
options {
...
server 172.16.56.132
{
keys { master-slave; };
};
...
};
systemctl restart named
ls /var/named/slaves/ #DNS 从服务器同步域名区域数据
172.16.56.arpa test.com.zone
例子5:部署缓存服务器
DNS 缓存服务器(Caching DNS Server)是一种不负责域名数据维护的 DNS 服务器。简单来说,缓存服务器就是把用户经常使用到的域名与 IP 地址的解析记录保存在主机本地,从而提升下次解析的效率。 DNS 缓存服务器一般用于经常访问某些固定站点而且对这些网站的访问速度有较高要求的企业内网中,但实际的应用并不广泛。而且,缓存服务器是否可以成功解析还与指定的上级 DNS 服务器的允许策略有关,因此当前仅需了解即可。
域名服务器本身自带域名缓存服务器的配置,不用调整即可使用,使用迭代查询方法返回IP。缓存服务器一般用于企业内网,旨在降低内网用户查询 DNS 的时间消耗。为了更加贴近真是环境,实现外网查询功能,需要给服务器装两网卡,分别模拟内网和外网。
1.配置系统的双网卡参数
主机名称 | IP地址 |
---|---|
缓存服务器 | 内网:172.16.56.132;外网:192.168.43.27 |
客户端 | 172.16.56.131 |
2.在 bind 服务程序的主配置文件中添加缓存转发参数
vim /etc/named.conf
allow-query { any; }; #大概在此位置下添加如下一条
forwarders { 210.73.64.1; }; #如果不想迭代查询根,可以配置此选项,添加查询的dns服务器
3.重启DNS服务,验证结果
systemctl restart named
[[email protected] ~]# nslookup
> server 172.16.56.132
Default server: 172.16.56.132
Address: 172.16.56.132#53
> www.test.com
Server: 172.16.56.132
Address: 172.16.56.132#53
Name: www.test.com
Address: 172.16.56.4
Name: www.test.com
Address: 172.16.56.3
Name: www.test.com
Address: 172.16.56.5
> www.linuxprobe.com
Server: 172.16.56.132
Address: 172.16.56.132#53
Non-authoritative answer:
www.linuxprobe.com canonical name = www.linuxprobe.com.w.kunlunno.com.
Name: www.linuxprobe.com.w.kunlunno.com
Address: 27.221.30.46
> 8.8.8.8
Server: 172.16.56.132
Address: 172.16.56.132#53
Non-authoritative answer:
8.8.8.8.in-addr.arpa name = google-public-dns-a.google.com.
Authoritative answers can be found from:
8.in-addr.arpa nameserver = r.arin.net.
8.in-addr.arpa nameserver = x.arin.net.
8.in-addr.arpa nameserver = y.arin.net.
8.in-addr.arpa nameserver = u.arin.net.
8.in-addr.arpa nameserver = z.arin.net.
8.in-addr.arpa nameserver = arin.authdns.ripe.net.
例子6:分离解析技术
主机名称 | IP地址 |
---|---|
DNS服务器 | LAN:192.168.43.27 WAN:172.16.56.132 |
客户机 | LAN:192.168.43.100 WAN:172.16.56.100 |
1.修改 bind 服务程序的主配置文件
vim /etc/named.conf #修改如下内容
listen-on port 53 { any; }; #监听所有地址的53端口
allow-query { any; }; #允许所有人请求
#删除如下内容:
zone "." IN {
type hint;
file "named.ca";
};
2.编辑区域配置文件
vim /etc/named.rfc1912.zones
acl "WAN" { 192.168.43.0/24; };
acl "LAN" { 172.16.56.0/24; };
view "LAN"{
match-clients { "LAN"; };
zone "test.com" {
type master;
file "test.com.zone.lan";
};
};
view "WAN" {
match-clients { "WAN"; };
zone "test.com" {
type master;
file "test.com.zone.wan";
};
};
3.建立数据配置文件
cd /var/named
cp -a named.localhost test.com.zone.lan
cp -a named.localhost test.com.zone.wan
vim test.com.zone.wan
$TTL 1D
@ IN SOA test.com. admin.test.com. (200 1H 15M 1W 1D)
@ IN NS www.test.com.
www IN A 192.168.43.3
www IN A 192.168.43.4
www IN A 192.168.43.5
vim test.com.zone.lan
$TTL 1D
@ IN SOA test.com. admin.test.com. (200 1H 15M 1W 1D)
@ IN NS www.test.com.
www IN A 172.16.56.3
www IN A 172.16.56.4
www IN A 172.16.56.5
4.重新启动named服务程序,验证结果
systemctl restart named
验证结果:
LAN:
[[email protected] ~]# nslookup
> server 172.16.56.132
Default server: 172.16.56.132
Address: 172.16.56.132#53
> www.test.com
Server: 172.16.56.132
Address: 172.16.56.132#53
Name: www.test.com
Address: 172.16.56.4
Name: www.test.com
Address: 172.16.56.5
Name: www.test.com
Address: 172.16.56.3
WAN:
[email protected]:~$ nslookup
> server 192.168.43.27
Default server: 192.168.43.27
Address: 192.168.43.27#53
> www.test.com
Server: 192.168.43.27
Address: 192.168.43.27#53
Name: www.test.com
Address: 192.168.43.4
Name: www.test.com
Address: 192.168.43.5
Name: www.test.com
Address: 192.168.43.3