文章目录
一、DNS域名系统
1.DNS的概念
DNS是"域名系统(Domain Name system)”的英文缩写。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址。
ps:(另外全世界目前只有13台的根域名服务器,一个主根服务器,12个辅根服务器)
2.DNS的使用的协议以及端口号
DNS服务器提供域名解析服务使用的协议为DNS协议,默认端口号为53。DNS服务器都是使用TCP和UDP的53端口,TCP的53端口用于连接DNS服务器,UDP的53端口用于解析DNS。
3.DNS的作用
TCP是用来做区域传送,多用于主从同步
在一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息。
UDP是用来做DNS解析的
域名通常由一个完全合格域名(FQDN)标识。FQDN能准确表示出其相对于DNS域树根的位置,也就是节点到DNS树根的完整表述方式,从节点到树根采用反向书写,并将每个节点用"."分隔。对于google域
来说,其完全正式域名为www.google.com.
,其中google
为 com域
的子域,其表示方法为google.com
,而 www
为 google域
中的子域。
4.域名体系结构
域名通常是由根域、顶级域、二级域、子域、主机名组成。其中根域、顶级域、子域、主机名是必不可少的。如果顶级域是一些机构组织,子域就是二级域。具体的域名结构如下:
http://主机名或者三级域.子域.二级域.顶级域 根域/
注意:所有的域名必须以.
结尾
例如
http://www.sina.com.cn./
其中各个域名的含义
域名等级 | 含义 |
---|---|
根域名 | 位于域名空间最顶层,一般用一个".”表示 |
顶级域名(一级域名) | 一般代表一种类型的组织机构或国家地区。 例如: .net (网络供应商)、.com (工.商企业)、.org (团体组织)、.edu (教育机构)、.gov (政府部门)、.cn (中国国家域名) |
二级域名 | 用来标明顶级域内的一个特定的组织,国家顶级域下面的二级域名由国家网络部门统一管理。 例如: .cn 顶级域名下面设置的二级域名: .com.cn 、.net.cn 、.edu.cn |
子域 | 二级域下所创建的各级域统称为子域,各个组织或用户可以自由申请注册自己的域名 |
主机名或者三级域 | 主机位于域名空间最下层,就是一台具体的计算机, 如 www 、mail 都是具体的计算机名字,可用www.sina.com.cn. 、 mail.sina.com.cn. 来表示,这种表示方式称为FQDN(完全合格域名,是指包含了所有域的主机名,其中包括根域),也是这台主机在域名中的全名。 |
每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
5.DNS服务器类型
-
主域名服务器:负责维护一个区域的所有域名信息,是特定的所有信息的权威信息源,数据可以修改。构建主域名服务器时,需要自行建立所负责区域的地址数据文件。
-
从域名服务器:当主域名服务器出现故障、关闭或负载过重时,从域名服务器作为备份服务提供域名解析服务。从域名服务器提供的解析结果不是由自己决定的,而是来自于主域名服务器。构建从域名服务器时,(需要指定主域名服务器的位置,以便服务器能自动同步区域的地址数据库。
-
缓存域名服务器:只提供域名解析结果的缓存功能,目的在于提高查询速度和效率,但没有域名数据库。它从某个远程服务器取得每次域名股务器查询的结果,并将它放在高速缓存中,以后查询相同的信息时用它予以响应。缓存域名服务器不是权威性服务器,因为提供的所有信息都是间接信息。构建缓存域名服务器时,必须设置根域或指定其他DNs服务器作为解析来源。
-
转发域名服务器:负责所有非本地域名的本地查询。转发域名服务器接到查询请求后,在其缓存中查找,如找不到就将请求依次转发到指定的域名服务器,直到查找到结果为止,否则返回无法映射的结果。
二、域名解析
1.解析方式
正向解析:根据域名查找对应的IP地址。
大部分DNS解析都是正向解析,即根据DNS域名查询对应的IP地址及其他相关信息。正向解析又称标准查询。正向解析记录存储在正向解析区域文件中。
反向解析:根据IP地址查找对应的域名。
有时我们也会用到反向解析,即通过IP地址查询对应的域名,最典型的就是判断IP地址所对应的域名是否合法。
2.DNS解析过程
树状结构最顶层称为根域,用.
表示,相应服务器称为根服务器,整个域名空间解析权都归根服务器所有,但根服务器无法承担庞大的负载,采用委派机制,在根域下设置了一些顶级域,然后将不同顶级域解析权分别委派给相应的顶级域服务器,如将com域
的解析权委派给com域服务器
,以后但凡根服务器收到以com
结尾的域名解析请求,都会转发给com域服务器
,同样道理,为了减轻顶级域的压力,又下设了若干二级域,二级域又下设三级域或主机。
换句话来说,域名通常是由根域、顶级域、二级域、子域、主机名组成,通过DNS域名解析把相关请求发送给根域服务器解析,由于根域服务器拥有整个域名空间解析权,根域服务器又解不了庞大数据,它会根据顶级域将相关解析请求转发给相应的顶级域服务器,顶级域服务器又会根据二级域将相关解析请求转发给相应的二级域服务器,二级域服务器又会根据子域将相关解析请求转发给相应的子域服务器,子域服务器中存储IP地址和主机名的映射关系,会根据主机名解析出IP地址,最后会通过IP地址返回给客户端,客户端就会通过IP地址访问主机。
3.DNS查询模式
递归查询
主机向本地域名服务器的查询一般都是采用递归查询。
所谓递归查询就是:客户端会在根域服务器前架设一个本地域名服务器,之前解析过的域名会存放在本地域名服务器,方便后期查询相同域名直接从本地域名服务器读取结果,无需再次递归查询。若没有本地域名服务器,客户端想要请求访问某个网址会先发送解析请求给根域服务器,根域服务器会根据请求发送给顶级域服务器,顶级域会根据二级域/子域发送给二级域/子域服务器,子域服务器会根据主机名解析出IP地址并将结果层层返回,最终由根域服务器返回结果给客户端。
递归查询的方式会给服务器造成大量负载,因为域名请求会等待域名服务器找到对应的IP地址再返回,这个过程中TCP会一直处于连接状态。而TCP是通过53端口来连接DNS服务器,即客户端通过53端口连接根域服务器,此过程中TCP一直处于连接状态,而一个主机最多能连接65535个TCP连接。服务器如果都通过递归查询的话,会造成崩溃现象。
简单来说就是客端发送请求后自己只用等待结果即可,中间具体过程交给域名服务器实现。
迭代查询
DNS服务器另外一种更加优化的查询方式为迭代查询。
所谓迭代查询就是:当客户端想要查询域名时会在根域服务器前架设一个本地域名服务器,之前解析过的域名会存放在本地域名服务器,方便后期查询相同域名直接从本地域名服务器读取结果,无需再次解析查询。若没有本地域名服务器,首先会发送请求给根域服务器,根域服务器并不会将请求发送给顶级域服务器,而是响应给本地域名服务器,告诉本地域名服务器去找顶级域服务器查询。接着本地域名服务器会发送请求给顶级域服务器,顶级域服务器会响应给本地域名服务器,告诉本地域名服务器去找二级域服务器查询。然后本地域名服务器会发送请求给二级域服务器,二级域服务器会响应给本地域名服务器,告诉本地域名服务器去找三级域服务器查询。最后通过三级域服务器找到IP地址,并返回给本地域名服务器,由本地域名服务器解析结果返回给客户端。
简答来说就是客户端的请求需要自己挨个去域名服务器查询才能得到结果,域名服务器没有结果时候只会给你提供其它服务器的地址,而不会帮你去请求查询,这与递归截然相反。
三、域名服务器的部署
构建主域名服务器
使用一台服务端构建主域名服务器
安装bind软件包
[root@host ~]# yum install -y bind
配置正向解析
查看需要修改的配置文件所在路径
[root@host ~]# rpm -qc bind #查询bind软件配置文件所在路径
/etc/logrotate.d/named
/etc/named.conf #主配置文件
/etc/named.iscdlv.key
/etc/named.rfc1912.zones #区域配置文件
/etc/named.root.key
/etc/rndc.conf
/etc/rndc.key
/etc/sysconfig/named
/var/named/named.ca
/var/named/named.empty
/var/named/named.localhost #区域数据配置文件
/var/named/named.loopback
修改主配置文件
[root@host ~]# vim /etc/named.conf
options {
listen-on port 53 { 192.168.145.15; }; #监听53端口,ip地址使用提供服务的本地IP即可,也可以用any代表所有
#listen-on-v6 port 53 { ::1; }; #ipv6行如不使用可以注释掉或者删除
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 { any; }; #允许使用本DNS解析服务器的网段,也可以用any代表所有
}
修改区域配置文件,添加区域配置
[root@host ~]# vim /etc/named.rfc1912.zones
zone "accp.com" IN { #正向解析"accp.com"区域
type master; #类型为主区域
file "accp.com.zone"; #指定区域数据文件为accp.com.zone
allow-update { none; };
};
配区域数据文件
[root@host ~]# cd /var/named/
[root@host named]# ll
总用量 16
drwxrwx---. 2 named named 6 1月 26 00:48 data
drwxrwx---. 2 named named 6 1月 26 00:48 dynamic
-rw-r-----. 1 root named 2253 4月 5 2018 named.ca
-rw-r-----. 1 root named 152 12月 15 2009 named.empty
-rw-r-----. 1 root named 152 6月 21 2007 named.localhost
-rw-r-----. 1 root named 168 12月 15 2009 named.loopback
drwxrwx---. 2 named named 6 1月 26 00:48 slaves
[root@host named]# cp -p named.localhost accp.com.zone #保留源文件的权限和属主的属性复制
[root@host named]# ll
总用量 20
-rw-r-----. 1 root named 152 6月 21 2007 accp.com.zone
drwxrwx---. 2 named named 6 1月 26 00:48 data
drwxrwx---. 2 named named 6 1月 26 00:48 dynamic
-rw-r-----. 1 root named 2253 4月 5 2018 named.ca
-rw-r-----. 1 root named 152 12月 15 2009 named.empty
-rw-r-----. 1 root named 152 6月 21 2007 named.localhost
-rw-r-----. 1 root named 168 12月 15 2009 named.loopback
drwxrwx---. 2 named named 6 1月 26 00:48 slaves
[root@host named]# vim accp.com.zone
$TTL 1D #有效解析记录的生存周期
@ IN SOA @ admin.accp.com. ( #“@”符号表示当前的DNS区域名,正向解析不需要修改
0 ; serial #更新序列号,可以是 10 位以内的整数
1D ; refresh #刷新时间,重新下载地址数据的间隔
1H ; retry #重试延时,下载失败后的重试间隔
1W ; expire #失效时间,超过该时间仍无法下载则放弃
3H ) ; minimum #无效解析记录的生命周期
NS accp.com. #记录当前区域的DNS服务器的名称
A 192.168.145.15 #记录主机的IP地址
www IN A 192.168.145.22 #记录正向解析www.accp.com对用的ip地址
mail IN A 192.168.145.33
ftp IN CNAME www #CNAME使用别名,ftp是www的别名
* IN A 192.168.145.44 #泛域名解析,“*“代表任意主机名
@
这里是一个变量,当前DNS区域名/
SOA
记录中的更新序列号用于同步主、从服务器的区域数据,当从服务器判断区域更新时,若发现主服务器中的序列号与本地区域数据中的序列号相同,则不会进行下载。
accp.com.
此为完全合格域名(FQDN),后面有个.
不能漏掉/
adin.benet.com.
表示管理员邮箱,这里的@
符号已有其他含义,所以用.
代替。
启动服务
[root@host named]# systemctl restart named
关闭防火墙和seten服务,防火墙默认53号端口关闭,默认客户机无法连接服务器
[root@host ~]# systemctl stop firewalld.service
[root@host ~]# setenforce 0
在客户端的域名解析配置文件中添加DNS服务器地址
[root@host named]# vim /etc/resolv.conf #修改完后立即生效
# Generated by NetworkManager
nameserver 192.168.145.15
~
也可以修改/etc/sysconfig/network-scripts/ifcfg-ens32
中的DNS1参数,修改完后需要重启网卡systemctl restart network
。
测试DNS解析
[root@host named]# nslookup www.accp.com
Server: 192.168.223.100
Address: 192.168.223.100#53
Name: www.accp.com
Address: 192.168.223.22
[root@host named]# host news.accp.com
news.accp.com has address 192.168.223.44
解析地址可以通过nslookup
、host
、dig
命令来查看。
配置反向解析
修改区域配置文件,添加区域配置
[root@host ~]# vim /etc/named.rfc1912.zones
zone "145.168.192.in-addr.arpa" IN { #反向解析"192.168.223"网段区域,网段反着写
type master;
file "accp.com.zone.local"; #指定区域数据文件为accp.com.zone.local
allow-update { none; };
};
配区域数据文件
[root@host ~]# cd /var/named/
[root@host named]# ls
accp.com.zone dynamic named.empty named.loopback
data named.ca named.localhost slaves
[root@host named]# cp -p named.localhost accp.com.zone.local #保留源文件的权限和属主的属性复制
[root@host named]# vim accp.com.zone.local
$TTL 1D
@ IN SOA accp.com. admin.accp.com. ( #“accp.com”表示当前的DNS区域名,反向解析需要修改
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS accp.com.
A 192.168.223.100
100 IN PTR www.accp.com.
200 IN PTR news.accp.com.
启动服务
[root@host named]# systemctl restart named
测试DNS解析
[root@host named]# nslookup 192.168.145.200
200.223.168.192.in-addr.arpa name = news.accp.com.
构建从域名服务器
使用另一台客户机构建从域名服务器
从域名服务器操作步骤
安装bind软件包
[root@host ~]# yum install - y bind
关闭防火墙和seten服务,防火墙默认53号端口关闭,默认客户机无法连接服务器
[root@host ~]# systemctl stop firewalld.service
[root@host ~]# setenforce 0
修改主配置文件
[root@host ~]# vim /etc/named.conf
options {
listen-on port 53 { any; };
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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; };
}
修改区域配置文件
[root@host ~]# vim /etc/named.rfc1912.zones
//正向解析
zone "accp.com" IN {
type slave; #类型为从区域
masters { 192.168.145.15; }; #指定主域服务器的位置
file "slaves/accp.com.zone"; #用于复制从主域服务器的文件存放位置
};
//反向解析
zone "145.168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.145.15; };
file "slaves/accp.com.zone.local";
allow-update { none; };
};
主域名服务器操作步骤
修改区域配置文件
[root@host ~]# vim /etc/named.rfc1912.zones
//正向解析配置
zone "accp.com" IN {
type master;
file "accp.com.zone";
allow-transfer { 192.168.145.30; }; #允许指定的从域名服务器从accp.com获取配置
};
//反向解析配置
zone "145.168.192.in-addr.arpa" IN {
type master;
file "accp.com.zone.local";
allow-transfer { 192.168.145.30; }; #允许指定的从域名服务器从accp.com获取配置
};
重启服务,关闭防火墙服务
[root@host ~]# systemctl restart named
[root@host ~]# systemctl stop firewalld.service
[root@host ~]# setenforce 0
在从域名服务器测试
[root@host ~]# cd /var/named/
[root@host named]# ls
data dynamic named.ca named.empty named.localhost named.loopback slaves
[root@host named]# ls slaves/
accp.com.zone accp.com.zone.local
[root@host named]#