名字解析的作用:
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.:管理员邮箱(@使用.代替),等同于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