简述DNS服务器原理
一、简介
DNS,全称Domain Name System,域名系统,是一个记录域名和Ip地址相互映射的一个系统,能够将用户访问互联网时使用的域名地址转换成对应的IP地址,而不用使用者去记住数量众多的IP地址。通过域名得到域名对应的IP地址的过程被称为域名解析。DNS运行于UDP协议之上,使用的端口为53。
二、DNS原理简述
DNS域名解析过程(图片来源网络)1、DNS域名
DNS在网络中存在着数量众多的域名,如.com、.org等,而域名系统中是以层级树状结构划分域名的,类似于下图:
域名的划分(图片来源网络)
位于域名系统的顶端为根域名,而后为一级域名.net、.com、.org等,再往下则为二级域名,如.qq、.ibm等。而位于域名系统最底层的为主机名,如www,finance等。一个合法的域名格式,应遵循FQDN(Full Qualified Domain Name)格式,以域名系统的级别从低到高,从左往右编写,如:www.qq.net.
、www.sina.org.
。
2、DNS的查询方式
DNS的查询方式有两种,分别为递归查询(recursion)和迭代查询(iteration)。
递归查询:客户端发起一个DNS解析请求,若本地DNS服务器若不能为客户端直接解析域名,则域名服务器会代替客户端(下级服务器)向域名系统中的各分支的上下级服务器进行递归查询,直到有服务器响应回答了该请求后,将该请求结果返回客户端。在此期间,客户端将一直处于等待状态。
迭代查询:客户端(下级服务器)发起一个DNS解析请求后,若上级DNS服务器并不能直接提供该DNS的解析结果,则该上级DNS服务器会告知客户端(下级服务器)另一个可能查询到该DNS解析结果的DNS服务器IP,客户端(下级服务器)再次向这个DNS服务器发起解析请求,如此类推,直到查询到对应的结果为止。
通常递归查询这种方式用于PC机与本地DNS服务器之间的查询,而递归查询则多用于DNS服务器之间的查询,如下图:
迭代与递归查询
3、DNS服务器的类型
DNS服务器的类型可以分为:主名称服务器、辅助名称服务器和缓存名称服务器。主名称服务器至少负责解析一个域内的域名,维护所负责解析的域的数据库,可对该域数据库进行读写操作;辅助名称服务器则负责从主名称服务器或其他辅助名称服务器中复制相关解析库,为主名称服务器缓解解析压力;而缓存名称服务器则不负责域名解析,仅仅作为缓存,加快解析速度。
4、DNS的正向解析与反向解析
在DNS服务器中逻辑上存在着两个区域,一个是正向解析区域,另一个是反向解析区域。正向解析区域即我们通常所说的域名解析,而反向解析指的是IP反向解析,即通过查询IP地址的PTR记录来得到该IP地址所指向的域名记录。而PTR记录为邮件交换记录的一种,另一种为A记录。A记录解析域名到IP地址,而PTR记录则负责解析IP地址到域名。
三、DNS服务的配置文件
在开始部署搭建DNS主从服务器前,我们先来学习下与DNS配置相关的配置文件。在Centos 系统中与DNS服务相关的配置文件包括:/etc/named.conf主配置文件、/etc/named.rfc1912.zones区域管理文件和/var/named/目录下的区域数据库文件。主配置文件/etc/named.conf和/etc/named.rfc1912.zones设置了DNS服务器能够管理哪些区域并且指定了这些区域对应的区域数据文件的存放路径和名称。
下面我们来学习相应的配置文件。
1、/etc/named.conf
主配置文件包含着三个段落,分别为全局配置段、日志配置段和区域配置段。如下示例:
options {
listen-on port 53 { 127.0.0.1; }; #设置监控能与外部主机通信的IP地址
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; #学习时建议关闭
bindkeys-file "/etc/named.iscdlv.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 { #根区域,包含着多个DNS顶级域信息
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones"; #把区域管理文件的内容包含进此文件
include "/etc/named.root.key";
在编辑完成主配置文件后,可使用命令named-checkconf [/etc/named.conf]
对主配置文件进行语法检查。
2、/etc/named.rfc1912.zones
此文件为区域管理文件,用以保存主机负责解析或转发的区域,为/etc/named.conf所调用。其常见内容如下:
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; };
};
zone "magedu.com" IN {
type master;
file "magedu.zone";
allow-update { none; };
};
其中zone名称以in-addr.apra
结尾的为反向解析区域,其命名格式为IP网段的反写.in-addr.apra
,剩下的zone则为正向解析区域。其中区域内的可设置选项包括:
type:设置此区域的类型,包括master(主名称服务器)、slave(辅助名称服务器)、forward(转发域)、hint(根域名服务器);
file FILENAME:指定区域数据文件的相对路径,目录路径由主配置文件/etc/named.conf所指定;
allow-update:是否允许客户主机或服务器自行更新DNS记录,上述为不允许更新DNS记录;
3、区域数据文件
区域数据文件存放在/var/named目录下,文件大体分为正向解析区域文件和反向解析区域文件,通常该文件内容如下:
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1
PTR localhost.
第一行为设定TTL的值,定义区域数据文件里面的各项记录的宏。
第二行为SOA起始授权记录,一个区域解析库有且只能有一个SOA记录,而且必须放在第一条;上述@表示当前区域的名称。
往下第三到第七行定义了服务器同步信息的相关设置,其含义如下:
serial:表示配置版本的序列号,通常情况下,序列号sn遵循“年+月+日+编号”的格式,在修改了区域文件后需要手动修改序列号;
refresh:设置DNS服务器进行同步的间隔时间,只针对本区域文件总定义的NS记录的所有主机;
retry:表示同步更新失败之后,进行重试的间隔时间;
expire:表示同步更新失败之后,多长时间清楚对应的记录,又称过期时间;
minimum:指高速缓存否定回答的存活时间;
往下就是针对域名解析的设置,按照类型可划分为以下几类:
NS记录:表示当前区域中的某个DNS服务器的名字,一个区域可有多个NS记录,如:
magedu.com. 86400 IN NS ns1.magedue.com.
magedu.com. 86400 IN NS ns2.magedue.com.
MX记录:表示当前区域的某个邮件交换器的主机名;MX记录可以有多个,但每个MX记录之间应有一个数字表示其优先级,如:
magedu.com. IN MX 10 mx1.magedu.com.
magedu.com. IN MX 20 mx1.magedu.com.
A记录:表示主机名对应的IP地址,一个主机名可对应多个IP地址,如:
www.magedu.com IN A 1.1.1.1
www.magedu.com IN A 1.1.1.2
bbs.magedu.com IN A 1.1.1.1
AAAA记录:ipv6的A记录;(暂不常用)
PTR记录:反向地址解析记录,用于将IP地址反解析成域名,常见于反向解析区域文件中,如:
80 IN PTR www.magedu.com.
70 IN PTR www.magedu..com.
CNAME记录:域名的别名记录,用于记录某个主机域名的别名,如:
web.magedu.com IN CNAME www.magedu.com.
在编辑完成相应的区域数据文件后,可使用named-checkzone DOMAIN ZONE_FILE
命令检查相应的区域数据文件。
四、使用实例
1、创建正向解析区域文件
首先编辑主配置文件/etc/named.conf中的全局配置,设置监听服务器IP地址及允许DNS查询请求等设置:
[root@localhost named]# vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
recursion no;
dnssec-enable no;
dnssec-validation no;
然后编辑/etc/named.rfc1912.zones文件,设置正向区域:
[root@localhost named]# vim /etc/named.rfc1912.zones
zone "magedu.com" IN {
type master;
file "magedu.com.zone";
allow-update { none; };
};
随后在/var/named/目录下创建区域数据文件magedu.com.zone:
[root@localhost named]# vim /var/named/magedu.com.zone
$TTL 3600
@ IN SOA ns.magedu.com. 10XXXXXX83.qq.com. (
20180421
1D
1H
1W
3H
)
@ IN NS ns.magedu.com.
magedu.com. IN MX 10 mx1.magedu.com.
magedu.com. IN MX 20 mx2.magedu.com.
mx1 IN A 192.168.0.1
mx2 IN A 192.168.0.2
ns IN A 192.168.0.188
qq IN A 114.114.114.114
www IN A 199.247.21.135
web IN CNAME www
最后检查相关配置文件是否有错误:
[root@localhost named]# named-checkconf /etc/named.conf
[root@localhost named]# named-checkzone magedu.com /var/named/magedu.com.zone
zone magedu.com/IN: loaded serial 20180421
OK
如没有报错,重启加载启动named服务:
[root@localhost named]# systemctl restart named
在其他主机上验证解析结果:
[root@localhost ~]# nslookup
> server 192.168.0.188
Default server: 192.168.0.188
Address: 192.168.0.188#53
> set q=A
> www.magedu.com
Server: 192.168.0.188
Address: 192.168.0.188#53
Name: www.magedu.com
Address: 199.247.21.135
> mx1.magedu.com
Server: 192.168.0.188
Address: 192.168.0.188#53
Name: mx1.magedu.com
Address: 192.168.0.1
> web.magedu.com
Server: 192.168.0.188
Address: 192.168.0.188#53
web.magedu.com canonical name = www.magedu.com.
Name: www.magedu.com
Address: 199.247.21.135
> qq.magedu.com
Server: 192.168.0.188
Address: 192.168.0.188#53
Name: qq.magedu.com
Address: 114.114.114.114
> www.magedu.com
Server: 192.168.0.188
Address: 192.168.0.188#53
Name: www.magedu.com
Address: 199.247.21.135
解析成功。
2、创建反向解析区域文件
在上述案例1的基础上,首先在/etc/named.rfc1912.zones中编辑添加反向区域:
zone "0.168.192.in-addr.arpa" IN {
type master;
file "192.168.0.zone";
allow-update { none; };
};
然后在/var/named目录下生成反向区域文件192.168.0.zone:
[root@localhost named]# vim /var/named/192.168.0.zone
$TTL 3600
@ IN SOA ns.magedu.com. 10XXXXXXX3.qq.com. (
20180421
1D
1H
1W
3H
)
@ IN NS ns.magedu.com.
ns IN A 192.168.0.188
1 IN PTR mx1.magdu.com.
2 IN PTR mx2.magdu.com.
188 IN PTR ns.magedu.com.
随后使用命令检查相应的配置文件:
[root@localhost named]# named-checkconf /etc/named.conf
[root@localhost named]# named-checkconf /etc/named.rfc1912.zones
[root@localhost named]# named-checkzone 0.168.192.in-addr.arpa /var/named/192.168.0.zone
zone 0.168.192.in-addr.arpa/IN: loaded serial 20180421
OK
如无报错,则重新启动named服务:
[root@localhost named]# systemctl restart named
在其他主机上测试结果:
[root@localhost ~]# nslookup
> server 192.168.0.188
Default server: 192.168.0.188
Address: 192.168.0.188#53
> set q=NS
> 192.168.0.1
Server: 192.168.0.188
Address: 192.168.0.188#53
1.0.168.192.in-addr.arpa name = mx1.magdu.com.
> 192.168.0.188
Server: 192.168.0.188
Address: 192.168.0.188#53
188.0.168.192.in-addr.arpa name = ns.magedu.com.
> 192.168.0.2
Server: 192.168.0.188
Address: 192.168.0.188#53
2.0.168.192.in-addr.arpa name = mx2.magdu.com.
>
反向解析成功。