Linux 域名和DNS

  • Linux 域名和DNS已关闭评论
  • 41 次浏览
  • A+
所属分类:linux技术
摘要

TCP/IP网络中,设备之间的通信依赖IP地址来实现,但是IP地址不好记忆,所以就将每一台设备用一个名字来进行标识,但是这个名字计算机不能解析。所以就需要借助名字解析服务来实现将名字解析为IP地址。


名字解析的作用:

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服务器 

Linux 域名和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区域的配置方法

  1. 在主配置文件中定义区域

  2. 定义区域解析库文件(区域数据库),由一条条资源记录(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.:管理员邮箱(@使用.代替),等同于root@ns1.abc.com.  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