Linux 域名和DNS

2022/8/16 5:24:58

本文主要是介绍Linux 域名和DNS,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

名字解析的作用:

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

image

缓冲和缓存

缓存: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.:管理员邮箱(@使用.代替),等同于[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";

};
定义解析库:
[[email protected] 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客户端缓存
[[email protected] ~]#systemctl status systemd-resolved.service

#清空缓存
[[email protected] ~]#systemd-resolve --flush-caches
[[email protected] ~]#yum -y install nscd

[[email protected] ~]#systemctl enable --now nscd

#查看缓存统计信息
[[email protected] ~]#nscd -g

#清除DNS客户端缓存
[[email protected] ~]#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

测试:

[[email protected] ~]# 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服务器

[[email protected] ~]# ping www.heyongshen.com
[[email protected] ~]# 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



这篇关于Linux 域名和DNS的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程