DNS介绍
DNS是什么?dns.lyjingqu.cnDNS 是域名系统 (Domain Name System) 的缩写,它是由解析器和域名服务器组成的,又名“域名解析服务器”. DNS有什么作用?靠它把你要访问的网址找到然后把信息送到你电脑上。
简单来说就是:把域名转换成网络可以识别的ip地址,再通过IP地址访问主机。 这种由文字组成的名称,显而易见要更容易记忆。
DNS的定义:
- DNS是“域名系统”的英文缩写。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
- DNS服务使用TCP和UDP的53端口,TCP的53端口用于连接DNS服务器,UDP的53端口用于解析DNS。
- 每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
端口大致了解:
http tcp 80 https tcp 443
DHCP(udp协议)的67端口(服务端)68端口(客户端)
FTP协议(用来传输文件的协议)(使用tcp协议,端口20 (传输文件数据),端口21号(传输ftp控制指令)
DNS TCP 53(用于连接dns服务器) udp 53(解析DNS记录)
FQDN【完整合格域名或者叫完全合格域名】
DNS系统的作用
正向解析:根据域名查找对应的IP地址
反向解析:根据IP地址查找对应的域名
DNS系统的分布式数据架构
树状结构最顶层称为根域,用“.”表示,相应服务器称为根服务器,整个域名空间解析权都归根服务器所有,但根服务器无法承担庞大的负载,采用“委派”机制,在根域下设置了一些顶级域,然后将不同顶级域解析权分别委派给相应的顶级域服务器,如将com域的解析权委派给com域服务器,以后但凡根服务器收到以com结尾的域名解析请求,都会转发给com域服务器,同样道理,为了减轻顶级域的压力,又下设了若干二级域,二级域又下设三级域或主机
根域
位于域名空间最顶层,一般用一个 “.” 表示
顶级域
一般代表一种类型的组织机构或国家地区,
如 .net(网络供应商)、.com(工商企业)、.org(团体组织)、.edu(教育机构)、.gov(政府部门)、.cn(中国国家域名)
二级域
用来标明顶级域内的一个特定的组织,国家顶级域下面的二级域名由国家网络部门统一管理,
如 .cn 顶级域名下面设置的二级域名:.com.cn、.net.cn、.edu.cn
子域
二级域下所创建的各级域统称为子域,各个组织或用户可以自由申请注册自己的域名
主机
主机位于域名空间最下层,就是一台具体的计算机,
如 www、mail都是具体的计算机名字,可用www.sina.com.cn.、mail.sina.com.cn. 来表示,这种表示方式称为 FQDN (完全合格域名,是指包含了所有域的主机名,其中包括根域),也是这台主机在域名中的全名
递归解析 迭代解析
递归解析
用户访问域名 --> [本地缓存域名服务器] --> 根域服务器 --> 顶级域服务器 --> [二级域服务器] --> 子域服务器 --> 通过主机名解析出IP地址
<-- <-- <-- <-- <-- <--
-
客户机先去查找本机的/etc/hosts 文件,看文件中是否存在该域名和IP地址的映射记录。如果有就调用,没有就进行下一步。
-
客户机请求本地域名服务器(LDNS)来解析这个域名,主机要求本地域名服务器直接返回最终结果。在返回结果之前,客户机将完全处于等待状态,不再二次请求。统一由本地域名服务器向各级域名服务器转发请求。
-
本地域名服务器收到客户机的请求后,先查询自己的缓存信息,如果有这个域名的映射记录则返回结果,没有则进行下一步。
-
本地域名服务器请求根域名服务器解析这个域名,根域名告诉本地域名服务器去找对应的一级域名服务器。
-
本地域名服务器请求一级域名服务器解析这个域名,一级域名服务器告诉它去找对应的二级域名服务器。
-
本地域名服务器请求二级域名服务器解析这个域名,二级域名服务器告诉它去找对应的子域名服务器。
-
本地域名服务器请求子域名服务器解析这个域名,子域名服务器返回对应的IP地址。
-
本地域名服务器将IP地址记录到缓存中,并返回给客户机。客户机根据收到的IP地址访问该网站。
迭代解析
用户访问域名 --> [本地缓存域名服务器] --> 根域服务器
<--
--> 顶级域服务器
<--
--> [二级域服务器]
<--
--> 子域服务器
<-- 通过主机名解析出IP地址
-
客户端向本机配置的本地名称服务器(在此仅以首先DNS服务器为例进行介绍,其它备用DNS服务器的解析流程完全一样)发出DNS域名查询请求。
-
本地名称服务器收到请求后,先查询本地的缓存,如果有该域名的记录项,则本地名称服务器就直接把查询的结果返回给客户端;如果本地缓存中没有该域名的记录,则向DNS客户端返回一条DNS应答报文,报文中会给出一些参考信息,如本地名称服务器上的根名称服务器地址等。**
-
DNS客户端在收到本地名称服务器的应答报文后,会根据其中的根名称服务器地址信息,向对应的根名称服务器再次发出与前面一样的DNS查询请求报文。
-
根名称服务器在收到DNS查询请求报文后,通过查询自己的DNS数据库得到请求DNS域名中顶级域名所对应的顶级名称服务器信息,然后以一条DNS应答报文返回给DNS客户端。
-
DNS客户端根据来自根名称服务器应答报文中的对应顶级名称服务器地址信息,向该顶级名称服务器发出与前面一样的DNS查询请求报文。
-
顶级名称服务器在收到DNS查询请求后,先查询自己的缓存,如果有所请求的DNS域名的记录项,则相接把对应的记录项返回给DNS客户端,否则通过查询后把对应域名中二级域名所对应的二级名称服务器地址信息以一条DNS应答报文返回给DNS客户端。
-
然后DNS客户端继续按照前面介绍的方法一次次地向三级、四级名称服务器查询,直到最终的权威名称服务器返回到最终的记录。
递归解析与迭代解析区别
- 递归: 重复调用函数自身实现循环称为递归;
- 迭代: 利用变量的原值推出新值称为迭代,或着说迭代是函数内某段代码实现循环;
| 定义 | 优点 | 缺点 | |
|---|---|---|---|
| 递归 | 重复调佣函数自身实现 | a.用有限的循环语句实现无限集合;b.代码容读:c.大问题转化成小问题,减少了代码量。 | a.递归不断调用函数,浪费空;b.容易造成堆栈溢出 |
| 迭代 | 利用变量的原值推出新值;函数内某段代码实现循环。 | a.效率高,运行时间只随循环的增加而增加;b.无额外开销。 | a.代码难理解;b.代码不如递归代码简洁;c.编写复杂问题时,代码逻辑不易想出 |
两者关系:a.递归中一定有迭代,但是迭代中不一定有递归;大部分可以相互转换。b.相对来说,能用迭代不用递归(因为递归不断调用函数,浪费空间,容易造成堆栈溢出)
DNS服务器类型
-
主域名服务器:负责维护一个区域的所有域名信息,是特定的所有信息的权威信息源,数据可以修改。构建主域名服务器时,需要自行建立所负责区域的地址数据文件。
-
从域名服务器:当主域名服务器出现故障、关闭或负载过重时,从域名服务器作为备份服务提供域名解析服务。从域名服务器提供的解析结果不是由自己决定的,而是来自于主域名服务器。构建从域名服务器时,需要指定主域名服务器的位置,以便服务器能自动同步区域的地址数据库。
-
缓存域名服务器:只提供域名解析结果的缓存功能,目的在于提高查询速度和效率,但没有域名数据库。它从某个远程服务器取得每次域名服务器查询的结果,并将它放在高速缓存中,以后查询相同的信息时用它予以响应。缓存域名服务器不是权威性服务器,因为提供的所有信息都是间接信息。构建缓存域名服务器时,必须设置根域或指定其他DNS服务器作为解析来源。
-
转发域名服务器:负责所有非本地域名的本地查询。转发域名服务器接到查询请求后,在其缓存中查找,如找不到就将请求依次转发到指定的域名服务器,直到查找到结果为止,否则返回无法映射的结果。
根域名服务器
-
IPv4的根名称服务器: 全世界只有13台IPv4根域名服务器。1个为主根服务器在美国。其余12个均为辅根服务器,其中9台在美国,欧洲2个(位于英国和瑞典),亚洲1个位于日本。
-
IPv6的根名称服务器:全球共25台,中国1主3从,美国1主2从。
-
根域名服务器一旦有任何异常对整个互联网影响都非常大。目前全球有了许多的根域名服务器镜像服务器,这点增加了容错率。
一级DNS服务器: 专门负责一级域名(顶级域名)
| 一级域名 | 含义 |
|---|---|
| .com | 商业机构,但个人也可以注册 |
| .net | 网络服务机构 |
| .edu | 教育机构 |
| .int | 国际机构 |
| .org | 非营利性组织 |
| .gov | 政府机构 |
| .mil | 军事机构 |
国家顶级域名
| 域名 | 含义 |
|---|---|
| .cn | China,中国 |
| .jp | Japan,日本 |
| .uk | 英国 |
| .us | 美国 |
二级DNS服务器:用作二级域名解析
| 二级域名 | 含义 |
|---|---|
| .com.cn | 中国商业组织 |
| .edu.cn | 中国教育机构 |
| .org.cn | 中国非盈利组织 |
| .net.cn | 中国运营商 |
字域名服务器:处理三级一下的域名解析
hosts(作映射)
在没有DNS解析的情况下/etc/hosts/直接通过IP地址解析到相关的主机
如果不想通过DNS去访问某个网站,想速度快一点可以将该网页的IP地址+主机名写入
/etc/hosts/直接加速访问该网页
不仅仅Linux中有
hosts文件,在Windows之中也是有hosts文件的
实验 构建DNS域名解析服务器步骤
正向解析
- 安装
bind软件包
[root@localhost ~]#yum install -y bind
- 查询
bind软件配置文件所在路径
[root@localhost ~]#rpm -qc bind
- 修改主配置文件
[root@localhost ~]#vim /etc/named.conf
12 options {
13 listen-on port 53 { 192.168.85.20; }; //监听53端口,ip地址使用提供服务的本地IP,也可用any表示所有
14 # listen-on-v6 port 53 { ::1; }; //ipv6行如果不适用可以注释掉或者直接删除
15 directory "/var/named"; //区域数据文件的默认存放位置
16 dump-file "/var/named/data/cache_dump.db"; //域名缓存数据库文件的位置
17 statistics-file "/var/named/data/named_stats.txt"; //状态统计文件的位置
18 memstatistics-file"/var/named/data/named_mem_stats.txt"; //内存统计文件的位置
19 allow-query { 192.168.80.0/24; 172.16.100.0/24; }; //允许使用本DNS解析服务的网段,也可以用any代表所有
50 };
51
52 zone "." IN { //正向解析"."根区域
53 type hint; //类型为根区域
54 file "named.ca"; //区域数据文件为"named.ca"J记录了13台根域服务器的域名和IP地址等信息
55 };
56
57 include "/etc/named.rfc1912.zones"; //包含区域配置文件里的所有文件
- 修改区域配置文件,添加正向区域配置
[root@localhost ~]#vim /etc/named.rfc1912.zones
19 zone "localhost" IN {
20 type master;
21 file "named.localhost";
22 allow-update { none; }; 按照这个模板复制过来使用
23 };
24
25 zone "wang.com" IN { //正向解析benet.com”区域
26 type master; //#类型为主区域
27 file "wang.com.zone"; //指定区域数据文件为benet.com.zone
28 # allow-update { none; }; //暂不使用直接注释掉
29 };
- 配置正向区域数据文件
[root@localhost named]#vim wang.com.zone
1 $TTL 1D //#有效解析记录的生存周期
2 @ IN SOA wang.com adnin.wang.com. ( //“@”符号表示当前的DNS区域名
3 6542165 ; serial //更新序列号,可以是 10 位以内的整数
4 1D ; refresh //刷新时间,重新下载地址数据的间隔
5 1H ; retry //重试延时,下载失败后的重试间隔
6 1W ; expire //失效时间,超过该时间仍无法下载则放弃
7 3H ) ; minimum //无效解析记录的生存周期
8 NS benet.com //记录当前区域的DNS服务器的名称
9 A 192.168.85.20 //记录主机IP地址
10 IN MX 10 mail.benet.com //MX为邮件交换记录,数字越大优先级越低
11 www IN A 192.168.85.30 //记录正向解析www.benet.com对应的IP
12 mail IN A 192.168.85.40
13 news IN CNAME WWW //CNAME使用别名,ftp是www的别名
14 * IN A 192.168.85.50 //泛域名解析,“*”代表任意主机名
//“@”这里是一个变量,当前DNS区域名
//SOA记录中的更新序列号用于同步主、从服务器的区域数据,当从服务器判断区域更新时,若发现主服务器中的序列号与本地区域数据中的序列号相同,则不会进行下载。
//“benet.com.”此为完全合格域名(FQDN),后面有个“.”不能漏掉
//“admin.benet.com.”表示管理员邮箱,这里的“@”符号已有其他含义,所以用“.”代替
- 启动服务,关闭防火墙
排错
如果服务启动失败,可以查看日志文件来排查错误
tail -f /var/log/messages
vim /var/log/messages
如果服务启动卡住,可以执行下面命令解决
rndc-confgen -r /dev/urandom -a
比如说不小心删掉了一个符号
重启服务的时候就会报错
可以进入日志系统
有一个提示
按照提示修改回来
在刷新一下启动服务,就不会报错了
- 在客户端的域名解析配置文件中添加DNS服务器地址
[root@localhost named]#vi /etc/resolv.conf //修改完后立即生效
[root@localhost named]#vim /etc/sysconfig/network-scripts/ifcfg-ens33
重启网卡
[root@localhost named]#systemctl restart network
- 测试DNS解析
[root@localhost named]#host www.wang.com
[root@localhost named]#nslookup www.wang.com
反向解析
- 修改区域配置文件
[root@localhost named]#vim /etc/named.rfc1912.zones
方向解析的文件写在最底下,不能和正向解析在一起
zone "85.168.192.in-addr.arpa" IN { //方向解析的地址倒过来写
type master;
file "wang.com.zone.local"; //指定区数据文件为wang.com.zone.local
- 配置方向区域数据文件
复制文件
$TTL 1D
@ IN SOA wang.com. admin.wang.benet.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS wang.com.
A 192.168.85.20
20 IN PTR www.wang.com.
10 IN PTR nba.wang.com.
PTR为反向指针,反向解析192.168.85.20地址结果为www.wang.com.
- 重启服务进行测试
搭建主从服务器
- 修改主域名服务器的区域配置文件,修改正、反向区域配置
- 修改从域名服务器的主配置文件
正常yum安装bind程序
修改从域名服务器配置文件
- 修改从域名服务器区域配置文件,添加正、反区域配置
重启服务(主从都要)
测试结果(客户主机来测试主从服务器)
改一下IP
客服端可以分别解析
分离解析
分离解析的域名服务器实际也就是主域名服务器,这里主要是根据不同的客户端提供不同的域名解析记录。 比如来自内网和外网的不同网段地址区域的客户机请求解析同一域名时,为其提供不同的解析结果,得到不同的IP地址。 在网关服务器搭建DNS分离解析,使局域网主机解析www.kgc.com为192.168.178.20,外网主机解析www.kgc.com为12.0.0.1。
实验
1.为网关服务器配置双网卡
在光机状态下添加一块网卡,重启系统
修改网段使两张网卡处于不同网段
如果使用
ifconfig直接修改网卡只是临时修改
重启就会自动还原到最初的地址
[root@localhost ~]# systemctl restart network
修改网卡ens33
复制一份网卡配置信息
[root@localhost etc]# cd /etc/sysconfig/network-scripts/
复制配置文件
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens36
[root@localhost network-scripts]# vim ifcfg-ens33
[root@localhost network-scripts]# vim ifcfg-ens36
修改好以后重启一下网卡
[root@localhost network-scripts]# systemctl restart network
关闭防火墙
[root@localhost network-scripts]# systemctl stop firewalld
[root@localhost network-scripts]# setenforce 0
挂载
[root@localhost ~]# mount /dev/cdrom /mnt
mount: /dev/sr0 写保护,将以只读方式挂载
此时如果安装不起来bind的软件 请自行安装本地yum
然后再去安装bind的软件即可
[root@localhost ~]# yum -y install bind
ens33配置信息
ens36配置信息
如果想用虚拟机来连接修改配置器
、
安装软件
修改主配置文件
[root@localhost ~]# vim /etc/named.conf
修改区域配置文件
vim /etc/named.rfc1912.zones
view "lan" { #定义内网view,view代表容器分割
match-clients { 192.168.85.0/24; }; #匹配内网网段 #设置要解析的区域
zone "wang.com" IN {
type master;
file "wang.com.zone.lan"; #数据配置文件
};
zone "." IN { #可将根域配置从主配置文件剪切过来,dd+p #hint是根区域类型
file "named.ca";
};
};
view "wan" { #定义外网view
match-clients { any; }; #匹配除了内网网段以外的任意地址
zone "benet.com" IN {
type master;
file " wang.com.zone.wan";
};
};
#注意:一旦启用view,所有的zone必须都在view下,所以要把系统默认的自检用的zone也放在view下或者删除
修改区域数据配置文件
[root@localhost ~]# cd /var/named
[root@localhost named]# cp -a named.localhost wang.com.zone.lan
[root@localhost named]# cp -a named.localhost wang.com.zone.wan
保证权限属性相同
[root@localhost named]# vim wang.com.zone.lan
[root@localhost named]# vim wang.com.zone.wan