名字解析的作用:
TCP/IP网络中,设备之间的通信依赖IP地址来实现,但是IP地址不好记忆,所以就将每一台设备用一个名字来进行标识,但是这个名字计算机不能解析。所以就需要借助名字解析服务来实现将名字解析为IP地址。
主机名和域名的联系
主机名:
主机名:计算机的名字,用于唯一标识一台设备
域名:
域名:domain name,是由一串用点分隔的名字,表示互联网上的一台或者一组设备。
完全限定域名:FQDN
FQDN:full qualified domain name,完全限定域名。FQDN=主机名+域名
一个域下面就包含了很多主机。比如baidu.com这个域名下面可能就包含了www.baidu.com,mail.baidu.com等主机名。
例如:如www.baidu.com. 就是一个完全限定域名(注意最后有一个点,默认结尾点可以省略不写。最末尾的点所有名称的最上级的根)。
在查看完全限定域名时,主机名通常位于域名之前。
主机名表示用于将用户传送到某个地址或位置的网络或系统。
域名代表用户正在访问的站点或项目。
比如www.baidu.com就告诉我们,baidu.com这个域中,有一台名叫www的机器.
常见的www就是主机名,标识的对应主机,还有blog、study等都是主机名。
#www
www:World Wide Web,万维网。由www客户端和www服务端组成。
#www客户端指的是设备上的浏览器。
#www服务端指的是服务器(存放资源的主机)。
#www经常被简称作web,所以www客户端、www服务端又叫web客户端、web服务端
#www的作用就是:web客户端访问web服务端
#所以www表示访问指定web服务器上面的资源,故www表示的是一台主机。
范例
#www.baidu.com
. #根域
|
|
gov edu com net org cn #顶级域:最初只有七个
|
|
360 baidu google sougou #二级域
|
|
www #主机
域名的分类
-
根域
-
顶级域
-
二级域
-
....
-
最多可达到127级域名
#常见的顶级域名
com(商业公司)、
net(互联网组织)、
edu(教育)、
org(非营利性组织)、
int(internet)、
mil(军事)、
gov(政府)、
cn(国家地区域名,cn表示中国)
DNS:Domain Name Server
利用名称分布式的特性,在每一级域都搭建对应的DNS服务器,每个DNS服务器只负责一部分名称和ip的解析。
DNS服务器存放的是它的下级域DNS的名称和IP。如果一个DNS的下级是主机,就存放主机的名称和ip
DNS查询的类型
-
递归查询
-
迭代查询
递归查询:一般客户机和本地DNS服务器之间属于递归查询,即当客户机向DNS服务器发出请求后, 若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到最终的肯定或否定的结
果后转交给客户机。此查询的源和目标保持不变,为了查询结果只需要发起一次查询
迭代查询:一般情况下(有例外)本地的DNS服务器向其它DNS服务器的查询属于迭代查询,如:若对
方不能返回权威的结果,则它会向下一个DNS服务器(参考前一个DNS服务器返回的结果)再次发起
进行查询,直到返回查询的结果为止。此查询的源不变,但查询的目标不断变化,为查询结果一般需要发起多次查询.
DNS名称请求的流程
1.客户端需要解析一个名称会先查询hosts文件,如无对应内容就下一步
2.查询本地的缓存(linux默认没有设置缓存,windows默认设置了缓存)
3.向指定的DNS服务器发起请求,如果这个DNS服务器没找到就像根查找,然后进行迭代查询,找到结果以后由这个DNS返回给客户端
#权威DNS:存放要访问的域名和ip的对应关系的服务器就叫做权威DNS服务器
缓冲和缓存
缓存:Cache,为了提升性能开辟一块空间,缓存是将反复使用的数据存储起来,在有效期之内供系统去调用。
缓冲:Buffer,缓冲的作用是协调上下层应用之间的性能差异。
#比如A-->B,A的流量大速度快,但是B的流量小速度慢,A-->B的时候B接收不了这么多的数据,所以中间加一个缓冲区,A把数据放在缓冲区,B再到缓冲区去拿数据。解决了两这性能不一样的问题。
范例:
#浏览器输入一个域名回车以后背后所作的工作:
名称解析为ip地址:DNS工作过程
连接到对应的主机:TCP三次握手
数据传输:HTTP工作过程
linux DNS服务的实现
提供DNS服务器软件:bind,powerdns,dnsmasq,unbound,coredns(主要用在k8s环境中)
bind实现DNS服务
1.安装bind软件
yum install bind bind-utils
bind-utils是bind的一个管理工具(客户端)。
BIND的相关程序包:yum list all bind*
BIND包相关文件: rpm -ql bind
bind的配置文件:/etc/named.conf
可以通过rpm -ql bind来查看他的对应文件。
配置文件的格式
由三部分组成:
-
选项:配置相关功能
-
日志:(基本不用改)
-
区域:本机能够为哪些zone进行解析(域下面就有很多区域)
/var目录:var:variable(变量、可变的)。目录存放的就是可变的数据
/etc/services文件是记录网络服务名和它们对应使用的端口号及协议的对应关系(相当于一个手册,记录大部分服务使用的默认端口,不用更改)
/etc/services文件:四个字段组成:服务名称”、“使用端口”、“协议名称”以及“别名
查看dns是否生效: /etc/reslve文件
/etc/resolv.conf是DNS客户机的配置文件,用于设置DNS服务器的IP地址及DNS域名
dns服务基础配置实现互联网访问
只需要正确安装bind这个软件包,修改配置文件的一下内容即可。
options {
listen-on port 53 { localhost; }; #需要监听的指定地址端口,可以直接注释掉表示所有iplocalhost表示监听本地所有地址的53端口
......
allow-query { any; }; #允许谁查询 any:代表所有的ip,所有的ip都可以查(包括远程的ip) 注释掉这一行也表示所有ip都能访问
}
#dns配置文件中的:localhost:表示本机配置的所有ip
#hosts中的localhost表示的是127.0.0.1这个地址
#dns务基础配置实现互联网访问:注释掉allow-query和listen-on 表示默认允许所有
DNS服务的管理工具 rndc
rndc 监听端口: 953/tcp
#命令格式:
rndc COMMAND
COMMAND:
status: 查看状态
reload: 重载主配置文件和区域解析库文件
reload zonename: 重载区域解析库文件
retransfer zonename: 手动启动区域传送,而不管序列号是否增加
notify zonename: 重新对区域传送发通知
reconfig: 重载主配置文件
querylog: 开启或关闭查询日志文件/var/log/message
trace: 递增debug一个级别
trace LEVEL: 指定使用的级别
notrace:将调试级别设置为 0
flush:清空DNS服务器的所有缓存记录
DNS解析服务的测试和诊断工具
由bind-utils这个客户端提供。于测试dns系统,不会查询hosts文件进行解析
-
dig
-
host
-
nslookup
例如:查询dns能否正常解析:www.baidu.com
dig www.baidu.com
host www.baidu.com
nslookup www.baidu.com
#查询指定的DNs服务器能否正常解析:www.baidu.com
dig www.baidu.com @10.10.0.11 #服务器的ip地址
搭建私有DNS实现正向解析dns服务(正向主服务器)
需要实现正向解析:FQDN-->IP ,就需要配置对应的区域。
域是一个概念,比如baidu就是一个域,在这个域之下还有区域
bind区域的配置方法
-
在主配置文件中定义区域
-
定义区域解析库文件(区域数据库),由一条条资源记录(RR)组成。
搭建DNS正向主服务器,实现web服务器基于FQDN的访问
环境配置:
关闭SElinux
关闭防火墙
时间同步
设备:
需要三台主机
DNS服务端:10.0.0.8
web服务器:10.0.0.7
DNS客户端:10.0.0.6
修改住配置文件,定义需要解析得区域:
zone "redhat.org" IN { #redhat.org:表示需要管理的域的域名
type master; #DNS的类型 master slave frawalld
file "magedu.org.zone"; #指定定义区域数据库的文件
#区域数据库配置
$TTL 1D #表示有效时间 1D:表示1D内有效
@ IN SOA @ admin.redhat.org. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 192.168.26.129 #需要解析的区域
www A 192.168.26.130 #需要解析的区域
资源记录的格式及类型
资源记录的格式:name [TTL] IN rr_type value
资源记录的类型:
-
SOA:说明当前这个区域解析库为哪一个区域所用,由谁负责
-
A:作用是把FQDN解析成为IPV4的IP地址
-
NS:name server 专用于标识当前区域的DNS服务器
-
MX:Mail eXchanger,邮件交换器
-
CNAME: Canonical Name,别名记录
-
PTR:作用是把IP解析成为FQDN,反向解析
#SOA name [ttl] in rr_type value
(1)name:表示的是当前这个区域解析库的域名。用@可表示当前区域的名字
(2)TTL:表示缓存过期的时间
(3)IN:代表internet,没有实际意义,可以当做固定格式
(4)SOA:表示资源记录的类型为SOA
(5)value: 当前这个域的DNS服务器是谁,可以直接写区域名字,会自动把域名补齐。
#使用value指定当前域的DNS服务器以后,还要使用A这种类型来指定这个DNS服务器的IP地址。
#SOA记录与其它记录不同的是就是value部分,SOA的value部分由很多的字段组成
value:由以下三部分组成:
1.负责当前这个域的主(master)DNS服务器是谁。 可以是FQDN,也可以是当前 域 的名字(用@可表示当前 域的名字),这个名字随便起,但是需要配置A来指定它的ip地址。
2.当前区域管理员的邮箱地址,但是地址不能有@符号,一般用.来代替,例如15069028007.163.com
3.(主从服务器协调属性的定义以及否定的答案的统一的TTL)
#例如:
10235.com 86400 IN SOA ns1.abc.com. root.ns1.abc.com. (
2007061402 ; serial
3600 ; refresh (1 hour)
900 ; retry (15 minutes)
1209600 ; expire (2 weeks)
3600 ; minimum (1 hour)
)
10235.com:代表当前区域的域名,可以用@代替(因为在配置文件中定义区域的时候就定义了域名)
86400:代表86400秒后缓存过期
ns1.abc.com.:指定当前域的主DNS SERVER #主DNS:master,这个名字可以随便起,下面还需要使用A这种类型的资源记录来指定主DNS的ip地址 d
root.ns1.abc.com.:管理员邮箱(@使用.代替),等同于[email protected].
Serial :数值Serial代表这个Zone的序列号。供Slave DNS判断是否从Master DNS获取新数据。每次Zone文件更新,都需要修改Serial数值
refresh:数值Refresh设置Slave DNS多长时间与Master Server进行Serial核对。目前Bind的notify参数可设置每次Master DNS更新都会主动通知Slave DNS更新
retry:数值Retry设置当Slave DNS试图获取Master DNS Serial时,如果Master DNS未响应,多长时间重新进行检查
expire:数值Expire将决定Slave DNS在没有Master DNS的情况下权威地提供域名解析服务的时间长短
minimum:否定答案的TTL,当服务器没有解析到域名时,设置客户端缓存时间
配置文件检查
-
named-checkconf
-
named-checkzone
#检查配置文件
named-checkconf #检查的是named.conf这个配置文件
named-checkzone xxx.org /var/named/redhat.org.zone # 域名 域名对应的区域数据库文件
资源记录的类型详解
NS记录定义规则
-
name: 当前域名(通过定义区域规则的时候指定的域名)。用来标识当前的域名中那些是DNS
-
value: 当前区域的某DNS服务器的名字,例如: ns.redhat.org.
#value的名字是随便起的。只需要添加A这种资源记录的时候,对应上指定的ip地址就可以了。
1. 相邻的两个资源记录的name相同时,后续的可省略。#会自动继承上一条记录的一些信息
2. 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
#表示当前区域中谁是DNS服务器,因为可能存在多个dns服务器,soa只标识了主dns服务器
3. 一个域可以有多个NS记录(一个域名可以有多个dns服务器)
范例:
redhat.org. IN NS ns1.redhat.org. #前面的FQDN可以只写主机名,域名会自动补全
NS ns2.redhat.org. #完整:redhat.org. IN NS ns2.redhat.org.会自动继承上面的内容
A记录定义规则
-
name: 某主机的FQDN,例如:www.redhat.org.
-
value: 主机名对应主机的IP地址
www.redhat.org. IN A 1.1.1.1
www.redhat.org. IN A 2.2.2.2
mx1.redhat.org. IN A 3.3.3.3
mx2.redhat.org. IN A 4.4.4.4
$GENERATE 1-254 HOST$ IN A 1.2.3.$
*.redhat.org. IN A 5.5.5.5 #表示输入任何的子域名都可以解析。例如 wwwwwwwww.redhat.com
redhat.org. IN A 6.6.6.6 #直接输入域名便可解析
#注意:如果有和DNS的IP相同的多个同名的A记录,优先返回DNS的本机IP
#避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
CNAME别名记录
-
name: 别名的FQDN
-
value: 真正名字的FQDN
例如:www.magedu.org. IN CNAME websrv.magedu.org.
PTR记录
name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;
而有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.
value: FQDN
例如:
4.3.2.1.in-addr.arpa. IN PTR www.magedu.org.
#如1.2.3为网络地址,可简写成:
4 IN PTR www.magedu.org.
#注意:网络地址及后缀可省略;主机地址依然需要反着写
反向解析的实现
反向区域:即将IP反向解析为FQDN
区域名称:网络地址反写.in-addr.arpa.
www.baidu.com. 从上到下对应的为:.--com--baidu--www
172.16.100.10 --> 10.100.16.172.in-addr.arpa.
#域名:172.16.100. --> 100.16.172.in-addr.arpa.
定义区域
zone "ZONE_NAME" IN {
type {master|slave|forward};
file "网络地址.zone"
};
zone "26.168.192.in-addr.arpa." IN {
type master;
file "192.168.26.zone";
};
定义解析库:
[root@CentOS8 named]# cat 192.168.26.zone
$TTL 1D
@ IN SOA master rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master IN A 10.0.0.10
10 PTR www.redhad.com
20 PTR www.tom.com
30 PTR www.bob.com
启用DNS客户端缓存功能
客户端启用DNS缓存功能,可以大幅减轻DNS服务器的压力,同时也能提高DNS客户端名称解析速度。
nscd
CentOS 默认没有启用DNS客户端缓存,安装nscd(Name Service Cache Daemon,名称服务缓存守护进
程)包可以支持DNS缓存功能
ubuntu 默认会启用DNS客户端缓存
[root@ubuntu1804 ~]#systemctl status systemd-resolved.service
#清空缓存
[root@ubuntu1804 ~]#systemd-resolve --flush-caches
[root@centos7 ~]#yum -y install nscd
[root@centos7 ~]#systemctl enable --now nscd
#查看缓存统计信息
[root@centos7 ~]#nscd -g
#清除DNS客户端缓存
[root@centos7 ~]#nscd -i hosts
从服务器的实现
DNS的类型:
-
主服务器
-
从服务器
-
转发服务器
从服务器:
(1)时间和主服务器要同步(ntp)
(2)主服务器的区域解析库文件有一条NS资源记录指向从服务器
(3)从服务器只需要定义区域,而无须提供解析库文件(放置于/var/named/slaves/目录)
(4)主服务器需要允许从服务器作区域传送
从服务器区域的定义
zone "ZONE_NAME" IN {
type slave; #定义服务器类型
masters { MASTER_IP; }; #定义使用的主服务器
file "slaves/ZONE_NAME.zone"; #定义区域文件
};
范例:搭建从服务器实现冗余功能
主服务器配置:
配置文件:
//#只允许从服务器进行区域传输,如果不写默认所有的服务器都能进行传输
allow-transfer { 10.0.0.12;};
区域数据库:
$TTL 1D
@ IN SOA master rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
NS slave
master IN A 10.0.0.10
slave IN A 10.0.0.12 #指定slave服务器的ip地址
www IN A 10.0.0.11
blog IN A 10.0.0.110
mail IN A 10.0.0.111
从服务器配置:
//#不允许其它主机进行区域传输,不写就默认所有的主机都可以
allow-transfer { none;};
#指定区域
zone "redhad.com" IN { #域名和主服务器的一样
type slave; #DNS的类型
masters {10.0.0.10;}; #指定主服务器
file "slaves/redhad.com"; #指定同步过来的资源记录存放位置
};
验证:
查看slaves/redhad.com中是否存在数据(乱码)
停止掉主服务器,指定从服务器为测试及其的DNS,测试能否正常访问www.redhad.com等。
DNS实现子域
子域委派授权
子域委派授权:将子域委派给其它主机管理,实现分布式DNS数据库。
父域DNS配置:
#父域中指定子域的DNS服务器和IP地址。然后再子域的DNS服务器上面定义对应的解析规则就行了。
这样通过父域的DNS地址也能找到子域的对应解析。
$TTL 1D
@ IN SOA master rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS master
shanghai IN NS shanghais #指定子域的区域使用的DNS服务器名字
master IN A 10.0.0.10
shanghais IN A 10.0.0.11 #子域DNS对应的IP地址
www IN A 10.0.0.11
子域DNS配置:
zone "shanghai.heyongshen.com" IN {
type master;
file "shanghai.heyongshen.zone";
};
#在子域中定义相应的解析规则
$TTL 1D
@ IN SOA master rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS master
master IN A 10.0.0.11
www IN A 10.0.0.10
测试:
[root@CentOS8 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=none
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=10.0.0.12
PREFIX=24
GATEWAY=10.0.0.2
DNS1=10.0.0.10 #指定DNS服务器
[root@CentOS8 ~]# ping www.heyongshen.com
[root@CentOS8 ~]# ping www.shanghai.heyongshen.com
DNS转发(forward)(缓存)服务器
将用户的DNS请求,转发至指定的DNS服务,而非默认的根DNS服务器,并将指定
服务器查询的返回结果进行缓存,提高效率
#建议关闭加密验证
dnssec-enable no;
dnssec-validation no;
全局转发:对非本机所负责解析区域的请求,全转发给指定的服务器
Options {
forward first|only;
forwarders { ip;};
};
特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高
zone "ZONE_NAME" IN {
type forward;
forward first|only;
forwarders { ip;};
};
两种转发类型:
-
first:先转发至指定DNS服务器,如果无法解析查询请求,则本服务器再去根服务器查询
-
only: 先转发至指定DNS服务器,如果无法解析查询请求,则本服务器将不再去根服务器查询
范例:实现DNs服务器的转发功能
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; }; 允许查询的主机
缓存服务器主要配置:
#关闭加密验证:
dnssec-enable no;
dnssec-validation no;
#配置转发规则
forward first; #转发规则
forwarders {10.0.0.10; }; #主服务器
主服务器主要配置:
#关闭加密验证:
dnssec-enable no;
dnssec-validation no;
#定义区域
zone "heyongshen.com" IN {
type master;
file "heyongshen.zone";
};
#配置规则
$TTL 1D
@ IN SOA master rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.10
www IN A 10.0.0.2
智能DNS的实现
GSLB:
-
GSLB:Global Server Load Balance 全局负载均衡
-
GSLB是用户发起请求后判断由哪个地点的服务器来提供服务
-
GSLB主要的目的:是在整个网络范围内将用户的请求定向到最近的节点(或者区域)
CND服务
CDN: (Content Delivery Network)内容分发网络
工作原理
1. 用户向浏览器输入www.a.com这个域名,浏览器第一次发现本地没有dns缓存,则向网站的DNS服务器请求
2. 网站的DNS域名解析器设置了CNAME,指向了www.a.tbcdn.com,请求指向了CDN网络中的智能DNS负载均衡系统
3. 智能DNS负载均衡系统解析域名,把对用户响应速度最快的IP节点返回给用户;
4. 用户向该IP节点(CDN服务器)发出请求
5. 由于是第一次访问,CDN服务器会通过Cache内部专用DNS解析得到此域名的原web站点IP,向原站点服务器发起请求,并在CDN服务器上缓存内容
6. 请求结果发给用户
CDN服务商
-
服务商:阿里,腾讯,蓝汛,网宿,帝联等
-
智能DNS: dnspod dns.la