1、概念介绍
DNS(Domain Name System)域名系统,是互联网的一项核心服务,可以作为域名和IP地址相互映射的一个分布式数据库,提供域名与IP地址的解析服务,能够使人们更加方便的使用域名访问互联网而不是记住繁琐的IP地址。
DNS 采用C/S架构
DNS 端口:
- udp/53 #是用来做DNS解析的
- tcp/53 #是用来做DNS主从复制(区域传输)
a. DNS 域名层次结构
DNS 系统采用的是分布式的解析方案,整个 DNS 架构是一种层次树状结构,这个树状结构称为 DNS 域名空间, 由于DNS 划分了域名空间,所以各机构可以使用自己的域名空间创建DNS信息。
域名分层作用:树状结构最顶层称为根域,用“.” 表示,相应服务器称为根服务器,整个域名空间解析权都归根服务器所有,但根服务器无法承担庞大的负载,采用“委派”机制,在根域下设置了一些顶级域,然后将不同顶级域解析权分别委派给相应的顶级域服务器,如将 com 域的解析全委派给 com 域服务器,以后但凡跟服务器收到以 com 结尾的域名解析请求,都会转发给com 域服务器,同理,为了减轻顶级域的压力,又下设了若干二级域,二级域又下设三级域或主机。
根域:位于域名空间最顶层,一般用一个“.” 表示,其记录着Internet 的重要DNS 信息,由Internet域名注册授权机构管理,该机构把域名空间各部分的管理责任分配给连接到Internet 的各个组织。(全球有13个根(root)服务器)
顶级域:一般代表一种类型的组织机构或国家地区,如net、com、org、edu、gov、mil、cn、jp、hk。顶级域的3 种类型:
- 组织域:采用3 个字符的代号,表示DNS 域中所包含的组织的主要功能或活动。
com 为商业机构组织 | mil 为军事机构组织 | int 为国际机构组织 |
edu 为教育机构组织 | net 为网络机构组织 | |
gov 为政府机构组织 | org 为非营利机构组织 |
- 地区域:采用两个字符的国家或地区代号。如cn 为中国,kr 为韩国,us 为美国。
- 反向域:这是个特殊域,名字为in-addr.arpa,用于将IP 地址映射到名字(反向查询)。
二级域:用来标明顶级域内的一个特定的组织,国家顶级域下面的二级域名由国家网络部门统一管理,如.cn 顶级域名下面设置的二级域名:.com.cn、.net.cn、.edu.cn
子域:二级域下所创建的各级域统称为子域,各个组织或用户可以自由申请注册自己的域名
主机:主机位于域名空间最下层,就是一台具体的计算机,如www、mail、都是具体的计算机名字,可用www.sina.com.cn.、mail.sina.com.cn. 来表示,这种表示方式称为 FQDN (完全合格域名),也是这台主机在域名中的全名。平时上网输入的网址都是 FQDN 名,如 www.sina.com.cn,其实表示我们要访问 “sina.com.cn” 域中一台名为 “www” 的计算机
b. DNS 名称服务器
DNS名称服务器保存有资源记录并能响应名称查询的计算机。如果DNS服务器负责管理一个或多个区域,就称此DNS服务器为这些区域的授权名称服务器。授权服务器负责管理所管辖的区域中的数据,并为查询的DNS客户提供这些数据。
DNS 名称服务器的类型:
- 主域名服务器: 主域名服务器负责存储授权区域的一切数据且管理该区域和对区域具有域名解析功能。
- 辅助域名称服务器:辅助名称服务器可以从主域名服务器中同步一整套区域信息。并且辅助名称服务器会定时从主名称服务器中更新数据,同时可以接受客户机的查询
- 唯高速缓存服务器:缓存服务器负责临时存储主域名服务器己解析过域名记录
每个区域必须有主域名服务器,另外每个区域建议至少要有一台辅助域名服务器,否则如果该区域的主域名服务器崩溃了,就无法解析该区域的名称。
辅助域名服务器的优点:
- 容错能力: 配置辅助域名服务器后,在该区域主服务器崩溃的情况下,客户机仍能解析该区域的名称。一般把主服务器和辅助服务器安装在不同子网上,这样如果到一个子网的连接中断,DNS 客户机还能直接查询另一个子网上的名称服务器
- 减少广域链路的通信量: 如果某个区在远程有大量客户机,用户就可以在远程添加该区的辅助服务器,并把远程的客户机配置成先查询这些服务器,这样就能防止远程客户机通过慢速链路通信来进行DNS 查询
- 减轻主服务器的负载:辅助服务器能回答该区的查询,从而减少该区主服务器必须回答的查询数。
DNS 缓存:
DNS服务器在解析客户机请求时,如果本地没有该DNS信息,则可以会询问其他DNS服务器,当其他域名服务器返回查询结果时,该DNS服务器会将结果记录在本地的缓存中,成为DNS缓存。当下一次客户机提交相同请求时,DNS 服务器能够直接使用缓存中的DNS 信息进行解析。
c. DNS 查询过程
通过8个步骤的解析过程就使得客户端可以顺利访问www.163.com 这个域名,但实际应用中,通常这个过程是非常迅速的。
⑴ 客户机提交域名解析请求,并将该请求发送给本地的域名服务器。
⑵ 当本地的域名服务器收到请求后,就先查询本地的缓存。如果有查询的DNS 信息记录,则直接返回查询的结果。如果没有该记录,本地域名服务器就把请求发给根域名服务器。
⑶ 根域名服务器再返回给本地域名服务器一个所查询域的顶级域名服务器的地址。
⑷ 本地服务器再向返回的域名服务器发送请求。
⑸ 接收到该查询请求的域名服务器查询其缓存和记录,如果有相关信息则返回客户机查询结果,否则通知客户机下级的域名服务器的地址。
⑹ 本地域名服务器将查询请求发送给返回的DNS 服务器。
⑺ 域名服务器返回本地服务器查询结果(如果该域名服务器不包含查询的DNS 信息,查询过程 将重复<6>、<7>步骤,直到返回解析信息或解析失败的回应)。
⑻ 本地域名服务器将返回的结果保存到缓存,并且将结果返回给客户机。
递归查询:递归查询是一种DNS 服务器的查询模式,在该模式下DNS 服务器接收到客户机请求,必须使用一个准确的查询结果(解析成功或解析失败)回复客户机。如果DNS 服务器本地没有存储查询DNS 信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。
迭代查询:DNS 服务器另外一种查询方式为迭代查询,当客户机发送查询请求时,DNS 服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台DNS 服务器提交请求,依次循环直到返回查询的结果为止。
上图中的步骤1和8就是递归查询,2、3、4、5、6、7是迭代查询过程
正向解析:正向解析是指域名到IP 地址的解析过程。
反向解析:反向解析是从IP 地址到域名的解析过程。反向解析的作用为服务器的身份验证。
d. DNS 资源记录
A 资源记录:A记录也称为主机记录,是使用最广泛的DNS记录,A记录把FQDN(完全合格的域名) 映射到IP 地址。 因为有此记录,所以DNS服务器能解析FQDN域名对应的IP 地址。它是域名和IP地址的对应关系,表现形式为 www.contoso.com.192.168.1.1
这就是一个A记录。
A记录除了进行域名和IP对应以外,还有一个高级用法,可以作为低成本的负载均衡的解决方案,比如说,www.contoso.com 可以创建多个相同A记录,对应多台物理服务器的IP地址,可以实现基本的流量均衡(轮询查询功能)。
CNAME 资源记录:别名记录(CNAME)资源记录创建特定FQDN 的别名。
PTR 资源记录:相对于A 资源记录,指针(PTR)记录把IP地址映射到FQDN。 用于反向查询,通过IP地址,找到域名。
NS记录:NS(Name Server)记录是域名服务器记录,用来指定该域名由哪些DNS服务器来进行解析。
SOA 资源记录:NS记录说明了有多台服务器在进行解析,但哪一个才是主服务器呢,NS并没有说明,这个就要看SOA记录了,名叫起始授权机构记录Start of Authority Record),SOA记录说明了在众多NS记录里那一台才是主要的服务器。NS记录和SAO记录是任何一个DNS区域都不可或缺的两条记录。
MX 资源记录:邮件交换(MX)资源记录,在使用邮件服务器的时候,MX记录是不可或缺的。
2、DNS 服务安装
BIND 全称为Berkeley Internet Name Domain(伯克利因特网名称域系统)。BIND 主要有三个版本:BIND4、BIND8、BIND9。
BIND8 融合了许多提高效率、稳定性和安全性的技术,而BIND9 增加了一些超前的理念:IPv6支持、密钥加密、多处理器支持、线程安全操作、增量区传送等等。
a. 安装BIND
yum -y install bind bind-chroot bind-utils
- bind 该包为DNS 服务的主程序包。
- bind-chroot 提高安全性。
- bind-utils 该包为客户端工具,提供了对dns服务器的测试工具程序,如nslookup等。
- bind-libs 提供了bind、bind-utils需要使用的库函数。
提示:bind-chroot是bind的一个功能,使bind可以在一个chroot 的模式下运行,为bind服务提供一个伪装的根目录(将/var/named/chroot/目录作为bind的根目录)。这样做的目的是为了提高安全性。因为在chroot的模式下,bind可以访问的范围仅限于这个目录的范围里,无法进一步提升,进入到系统的其他目录中。
b. 配置文件
/etc /named.conf 是BIND 的主配置文件,它包含了BIND的基本配置,但并不包括区域数据。
/var/named/ 目录为DNS数据库文件存放目录,每一个域文件都放在这里。
# 修改监听ip
vim /etc/named.confoptions {listen-on port 53 { 192.168.137.253; };}
c. 启动服务
# 启动named服务
systemctl start naemd
# 将服务设置自启动
systemctl enable naemd
# 查看服务状态
systemctl status named
# 查看DNS端口
netstat -antup | grep 53 | awk '/named/{print $0}'
# 查看named进程
ps -ef | grep named
# 在客户端配置DNS服务器地址
vim /etc/resolv.conf
nslookup www.baidu.com
3、实验1:主从服务器(主)
使用bind构建域名服务器时,主要涉及两种类型的配置文件:主配置文件和区域数据文件。
主配置文件用于设置named服务的全局选项、注册区域及访问控制等各种运行参数;区域数据文件用于存放某个dns区域的地址解析记录(正向记录或反向记录)
主配置文件中主要包括全局配置(options)、区域配置(zone)两个部分,每一条配置记录的行尾以分号“;”表示结束,以“#”号或“//”开始的部分表示注释文字(大段注释可以使用“/*………*/”的格式)
区域数据文件,每个区域数据文件对应一个dns解析区域,文件名和内容由该区域的管理员自行设置
a. 实验环境
主机名 | 角色 | IP地址 |
CentOS_Server | Dns主服务器 | 192.168.137.5 |
CentOS_Client | Dns从服务器 | 192.168.137.6 |
b. 需要解析的域名信息
公司域名test.com
网站服务器: www.test.com 192.168.1.20 192.168.1.21 192.168.1.22
ftp服务器:ftp.test.com 192.168.1.30
ftp别名服务器:ftpserver.test.com
邮件服务器:mail.test.com 192.168.1.40
c. /etc/named.conf
options {# 监听地址和端口listen-on port 53 { any; };# 监听IPv6地址和端口listen-on-v6 port 53 { any; };# 区域数据文件的默认存放位置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";# 递归查询recursing-file "/var/named/data/named.recursing";# 认证文件secroots-file "/var/named/data/named.secroots";# 设置允许DNS查询的客户端地址allow-query { any; };/* - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.- If you are building a RECURSIVE (caching) DNS server, you need to enable recursion. - If your recursive DNS server has a public IP address, you MUST enable access control to limit queries to your legitimate users. Failing to do so willcause your server to become part of large scale DNS amplification attacks. Implementing BCP38 within your network would greatlyreduce such attack surface */# DNS转发器.新增forwarders{ 8.8.8.8; 114.114.114.114; };# 设置递归查询recursion yes;# 设置是否启用DNSSEC支持,DNSSEC可以用来验证DNS数据的有效性dnssec-enable yes;# 设置是否启用DNSSEC确认,默认值为yes,可以选择autodnssec-validation yes;/* Path to ISC DLV key */bindkeys-file "/etc/named.root.key";managed-keys-directory "/var/named/dynamic";pid-file "/run/named/named.pid";session-keyfile "/run/named/session.key";
};logging {channel default_debug {file "data/named.run";severity dynamic;};
};zone "." IN {type hint;file "named.ca";
};# 正向test.com 区域
zone "test.com" IN {# 类型为主区域type master;# 区域数据文件名file "test.com.zone";# 允许区域传输的从dns服务器地址allow-transfer{ 192.168.137.6; };
};# 反向 192.168.137.0/24区域
zone "137.168.192.in-addr.arpa" IN {type master;file "192.168.137.arpa";allow-transfer { 192.168.137.6; };
};include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
- 根区域的区域数据文件默认是/var/named/named.ca,该文件记录了internet中13台根域服务器的域名和ip地址等相关信息。
# 主配置文件语法检测
named-checkconf /etc/named.conf
echo $?
d. 创建正向区域数据文件
区域数据配置文件通常位于/var/named/目录下,每个区域文件对应一个DNS解析区域,文件名要与named.conf中设置的一致。
cd /var/named
cp /var/named/named.localhost /var/named/hualu.com.zone
vim hualu.com.zone
$TTL 1D
@ IN SOA hualu.com. hualulemon.gmail.com. (0 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimum
hualu.com. IN NS dns.hualu.com.nds.hualu.com. IN A 192.168.137.5
www.hualu.com. IN A 192.168.137.100
hualu.history.com. IN A 192.168.137.102
ftp.hualu.com. IN CNAME ftp.hualu.com.
$TTL 1D | 设置有效地址解析记录的默认缓存时间,默认为1天也就是1D。 |
@ IN SOA hualu.com. hualu.gmail.com. | SOA标记,域名、管理邮箱 注:在此配置文件中写域名时,都把根. 也要写上。管理邮箱root.test.com.由于@有其他含义,所以用“.”代替@。 |
0 | 更新序列号,用于标示数据库的变更,可以在10位整数以内,如果存在辅助DNS区域,建议每次更新完数据库,手动加1. |
1D | 刷新时间,从域名服务器更新该数据库文件的间隔时间,默认为1天 |
1H | 重试延时,从域名服务器更新数据库失败以后,等待多长时间,默认为为1小时 |
1W | 失效时间,超过该时间仍无法更新数据库,则不再尝试,默认为一周 |
3H | 设置无效地址解析记录(该数据库中不存在的地址)默认缓存时间。设置无效记录,最少缓存时间为3小时。 |
NS(name server,域名服务器) | 域名服务器记录,用于设置当前域的DNS服务器的域名地址。 |
补充:泛域名解析,所谓“泛域名解析”是指:利用通配符* (星号)来做次级域名以实现所有的次级域名均指向同一IP地址。例如:* IN A 192.168.36.251
注意:在区域数据配置文件中,凡是不以点号“.”结尾的主机地址,系统在查找地址记录时都会自动将当前的域名作为后缀。例如,若当前的dns域为test.com.,则在文件中的主机地址“www”相当于www.test.com.。因此,当用完整的FQDN地址时,务必记得地址末尾的点号“.”不能省略
e. 创建反向区域数据文件
cp /var/named/named.localhost /var/named/192.168.137.arpa
vim 192.168.137.arpa
$TTL 1D
@ IN SOA hualu.com. hualu.gmail.com. (0 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumIN NS dns.hualu.com.
5 IN PTR dns.hualu.com.
201 IN PTR hualuenglish.com.
202 IN PTR hualumath.com.
f. 更改正反向区域文件权限
# 更改正向区域文件的所有组
chown root:named /var/named/hualu.com.zone # 更改反向区域文件的所有组
chown root:named /var/named/192.168.137.arpa
ll /var/named/
g. 测试区域文件语法是否正确
# 检查主配置文件语法是否错误
named-checkconf -z /etc/named.conf# 检查正向区域文件语法是否正确
named-checkzone hualu.com /var/named/hualu.com.zone
h. 客户端测试
# 更改dns 配置文件
vim /etc/resolv.confnameserver 192.168.137.5# 测试主服务器中的dns地址
nslookup www.hlmath.com
4、实验1:主从服务器(从)
主从时间一定要保持一致
a. 安装工具
# 安装dns服务
yum install -y bind bind-chroot bind-utils
b. 修改 named.conf
options {listen-on port 53 { any; };listen-on-v6 port 53 { any; };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";recursing-file "/var/named/data/named.recursing";secroots-file "/var/named/data/named.secroots";allow-query { any; };forwarders { 8.8.8.8; 114.114.114.114; };recursion yes;dnssec-enable yes;dnssec-validation yes;/* Path to ISC DLV key */bindkeys-file "/etc/named.root.key";managed-keys-directory "/var/named/dynamic";pid-file "/run/named/named.pid";session-keyfile "/run/named/session.key";
};logging {channel default_debug {file "data/named.run";severity dynamic;};
};zone "." IN {type hint;file "named.ca";
};zone "lemon.com" IN {type slave;file "slaves/lemon.com.zone";masters { 192.168.137.5; };
};zone "137.168.192.in-addr.arpa" IN {type slave;file "slaves/192.168.137.arpa";masters { 192.168.137.5; };
};
# 检查主配置文件语法是否正确
named-checkconf -z named.conf
# 重启服务并设置开机自启
systemctl restart named
systemctl enabled named
c. 查看区域配置文件
主配置文件配置完成后,重启服务,自动从主服务器中拉取区域配置文件。正向区域文件和反向区域配置文件中都是乱码。
dns服务器是有缓存的,如果想重新同步主服务器区域文件,请删除/var/named/slaves/下的同步文件,重启named
d. 测试从服务器DNS
# 修改测试主机的DNS为从服务器IP地址
vim /etc/resolv.confnameserver 192.168.137.6# 测试地址
nslookup www.hlmath.com