域名系统和 DNS

2023-10-30

目录

1 名字解析介绍和DNS

1.2 DNS服务工作原理

1.3 DNS查询类型

 1.4 名称服务器

1.5 解析类型

1.6 完整的查询请求经过的流程

2 DNS 服务相关概念和技术

2.1 DNS服务器的类型

2.1.1 主DNS服务器

2.1.2 从DNS服务器

2.2 区域传输

2.3 解析形式

2.4 负责本地域名的正向和反向解析库

2.5 解析答案

2.6 各种资源记录

2.6.1 资源记录定义的

2.6.2 SOA记录

2.6.3 NS记录

.2.6.4 MX记录

2.6.5 A记录

2.6 6 AAAA记录

2.6.7 PTR记录

2.6.8 CNAME别名记录

2.7 子域授权

2.8 互联网域名

2.9 whois

2.10 HttpDNS

2.10.1 HttpDNS 定义

2.10.2 HttpDNS工作原理

2.10.3 HttpDNS优势

3 DNS软件 bind

3.1 BIND相关程序包

3.2 BIND包相关文件

3.3 主配置文件

4 实现主DNS服务器

4.1 主DNS服务器配置

4.2 主配置文件语法检查

4.3 解析库文件语法检查

4.4 配置生效

4.5 DNS 测试和管理工具

4.5.1 dig 命令

4.5.2 host命令

4.5.3 nslookup命令

4.5.4 rndc 命令

4.6 案例:实现DNS正向主服务器

4.6.1 实验目的

4.6.2 环境要求

4.6.3 前提准备

4.6.4 实现步骤

4.7 允许动态更新

4.8 启用DNS客户端缓存功能

4.8.1 CentOS 启用DNS客户端缓存

4.8.2 Ubuntu 启用DNS客户端缓存

5 实现反向解析区域

5.1 反向解析配置

5.2 案例: 反向解析

 6 实现从服务器

6.1 DNS从服务器

6.2 定义从区域

6.3 案例:实现DNS从服务器

6.3.1 实验目的

6.3.2 环境要求

6.3.3 前提准备

6.3.4 实现步骤

7 实现子域

7.1 子域委派授权

7.2 案例:实现DNS父域和子域服务

7.2.1 实验目的

7.2.2 环境要求

7.2.3 前提准备

7.2.4 实现步骤

8 实现 DNS 转发(缓存)服务器

8.1 DNS转发

8.2 转发方式

8.2.1 全局转发

8.2.2 特定区域转发

8.3 案例:实现DNS forward(缓存)服务器

8.3.1 实验目的

8.3.2 环境要求

8.3.3 前提准备

8.3.4 实现步骤

9 实现智能 DNS

 9.1 GSLB

9.2 CDN (Content Delivery Network)内容分发网络

9.2.1 CDN工作原理

 9.2.2 CDN服务商

9.3 智能DNS相关技术

9.3.1 bind中ACL

9.3.2 bind有四个内置的acl

9.3.3 访问控制的指令

9.3.4 view 视图

9.4 案例:利用view实现智能DNS

9.4.1 实验目的

9.4.2 环境要求

9.4.3 前提准备

9.4.4 实现步骤

10 DNS排错

11 案例:综合案例,实现 Internet 的DNS 服务架构

11.1 实验目的

11.2 环境要求

11.3 前提准备

11.4 实现步骤


1 名字解析介绍和DNS

当前TCP/IP网络中的设备之间进行通信,是利用和依赖于IP地址实现的。但数字形式的IP地址是很难记忆的。当网络设备众多,想要记住每个设备的IP地址,可以说是"不可能完成的任务"。那么如何解决这一难题呢?我们可以给每个网络设备起一个友好的名称,如: www.baidu.com,这种由文字组成的名称,显而易见要更容易记忆。但是计算机不会理解这种名称的,我们可以利用一种名字解析服务将名称转化成(解析)成IP地址。从而我们就可以利用名称来直接访问网络中设备了。除此之外还有一个重要功能,利用名称解析服务可以实现主机和IP的解耦,即:当主机IP变化时,只需要修改名称服务即可,用户仍可以通过原有的名称进行访问而不受影响。

实现此服务的方法是多样的。如下面所述:

本地名称解析配置文件:hosts

Linux: /etc/hosts
windows: %WINDIR%/system32/drivers/etc/hosts


##格式
59.110.144.164 www.aliyun.com. www
93.46.8.89  www.google.com. google

DNS:Domain Name System 域名系统,应用层协议,是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,基于C/S架构,服务器端:53/udp, 53/tcp

BIND:Bekerley Internet Name Domain,由 ISC (www.isc.org)提供的DNS软件实现DNS域名结构

根域: 全球根服务器节点只有13个,10个在美国,1个荷兰,1个瑞典,1个日本
一级域名:Top Level Domain: tld
三类:组织域、国家域(.cn, .ca, .hk, .tw)、反向域
com, edu, mil, gov, net, org, int,arpa
二级域名:xinxin.com
三级域名:study.xinxin.com
最多可达到127级域名

 ICANN(The Internet Corporation for Assigned Names and Numbers)互联网名称与数字地址分配机构,负责在全球范围内对互联网通用顶级域名(gTLD)以及国家和地区顶级域名(ccTLD)系统的管理、以及根服务器系统的管理

1.2 DNS服务工作原理

1.3 DNS查询类型

https://help.aliyun.com/document_detail/102237.html

递归查询:
是指DNS服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果DNS服务器
本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结构提交给用
户。
一般客户机和本地DNS服务器之间属于递归查询,即当客户机向DNS服务器发出请求后,若DNS服
务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到最终的肯定或否定的结果后转交
给客户机。此查询的源和目标保持不变,为了查询结果只需要发起一次查询

递归算法:客户端向LocalDNS发起域名查询-->localDNS不知道域名对应的IP-->但它知道谁知道->他
代为帮客户端去查找-->最后再返回最终结果

迭代查询:
是指DNS服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台DNS服务器的
地址,用户再向这台DNS服务器提交请求,这样依次反复,直到返回查询结果。
一般情况下(有例外)本地的DNS服务器向其它DNS服务器的查询属于迭代查询,如:若对方不能返回
权威的结果,则它会向下一个DNS服务器(参考前一个DNS服务器返回的结果)再次发起进行查询,
直到返回查询的结果为止。此查询的源不变,但查询的目标不断变化,为查询结果一般需要发起多次
查询

迭代算法︰客户端向LocalDNS发起域名查询-->localDNS不知道域名对应的IP-->但它知道谁知道并
推荐客户端应该找谁-->客户端自己去找它


DNS缓存:
DNS缓存是将解析数据存储在靠近发起请求的客户端的位置,也可以说DNS数据是可以缓存在任意
位置,最终目的是以此减少递归查询过程,可以更快的让用户获得请求结果。

 1.4 名称服务器

Name Server,域内负责解析本域内的名称的DNS服务器
IPv4的根名称服务器:全球共13个负责解析根域的DNS服务器,美国10个,荷兰1,瑞典1,日本1
IPv6的根名称服务器:全球共25个,中国1主3从,美国1主2从

1.5 解析类型

FQDN --> IP 正向解析
IP --> FQDN 反向解析
注意:正反向解析是两个不同的名称空间,是两棵不同的解析树

1.6 完整的查询请求经过的流程

Client -->hosts文件 --> Client DNS Service Local Cache --> DNS Server (recursion递
归) --> DNS Server Cache -->DNS iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS…



#例: Windows 客户端DNS缓存
C:\Users\Administrator>ipconfig/displaydns | findstr  redhat
C:\Users\Administrator>ping www.redhat.com
正在 Ping e3396.ca2.s.tl88.net [117.177.243.181] 具有 32 字节的数据:
来自 117.177.243.181 的回复: 字节=32 时间=29ms TTL=53
来自 117.177.243.181 的回复: 字节=32 时间=30ms TTL=53
来自 117.177.243.181 的回复: 字节=32 时间=29ms TTL=53
来自 117.177.243.181 的回复: 字节=32 时间=31ms TTL=53

117.177.243.181 的 Ping 统计信息:
  数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
  最短 = 29ms,最长 = 31ms,平均 = 29ms

C:\Users\Administrator>ipconfig/displaydns | findstr  redhat
  www.redhat.com
  记录名称. . . . . . . : www.redhat.com
  CNAME 记录  . . . . . : ds-www.redhat.com.edgekey.net
  记录名称. . . . . . . : ds-www.redhat.com.edgekey.net
  CNAME 记录  . . . . . : ds-www.redhat.com.edgekey.net.globalredir.akadns.net
  记录名称. . . . . . . : ds-www.redhat.com.edgekey.net.globalredir.akadns.net

C:\Users\Administrator>ipconfig/flushdns

Windows IP 配置

已成功刷新 DNS 解析缓存。

C:\Users\Administrator>ipconfig/displaydns | findstr  redhat
C:\Users\Administrator>

2 DNS 服务相关概念和技术

2.1 DNS服务器的类型

主DNS服务器
从DNS服务器
缓存DNS服务器(转发器)

2.1.1 主DNS服务器

管理和维护所负责解析的域内解析库的服务器

2.1.2 从DNS服务器

从主服务器或从服务器"复制"(区域传输)解析库副本
        序列号:解析库版本号,主服务器解析库变化时,其序列递增
        刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔
        重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔
        过期时长:从服务器联系不到主服务器时,多久后停止服务
        通知机制:主服务器解析库发生变化时,会主动通知从服务器

2.2 区域传输

完全传输:传送整个解析库
增量传输:传递解析库变化的那部分内容

2.3 解析形式

正向:FQDN( Fully Qualified Domain Name) --> IP
反向: IP --> FQDN

2.4 负责本地域名的正向和反向解析库

正向区域
反向区域

2.5 解析答案

肯定答案:存在对应的查询结果
否定答案:请求的条目不存在等原因导致无法返回结果
权威答案:直接由存有此查询结果的DNS服务器(权威服务器)返回的答案
非权威答案:由其它非权威服务器返回的查询答案

2.6 各种资源记录

区域解析库:由众多资源记录RR(Resource Record)组成
记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX
SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解
析库的第一条记录
A:internet Address,作用,FQDN --> IP

AAAA:FQDN --> IPv6
PTR:PoinTeR,IP --> FQDN
NS:Name Server,专用于标明当前区域的DNS服务器
CNAME : Canonical Name,别名记录
MX:Mail eXchanger,邮件交换器
TXT:对域名进行标识和说明的一种方式,一般做验证记录时会使用此项,如:SPF(反垃圾邮
件)记录,https验证等,如下示例:

_dnsauth TXT 2012011200000051qgs69bwoh4h6nht4n1h0lr038x

2.6.1 资源记录定义的

name [TTL] IN rr_type value

注意:
1. TTL可从全局继承
2. 使用 "@" 符号可用于引用当前区域的域名
3. 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
4. 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机

2.6.2 SOA记录

name: 当前区域的名字,例如"baidu.com."
value: 有多部分组成

注意:
1. 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字
2. 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换
例如:www.baidu.com
3. 主从服务区域传输相关定义以及否定的答案的统一的TTL

2.6.3 NS记录

name: 当前区域的名字
value: 当前区域的某DNS服务器的名字,例如: ns.baidu.com

注意:
1. 相邻的两个资源记录的name相同时,后续的可省略
2. 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
3. 一个区域可以有多个NS记录

baidu.com. IN NS ns1.baidu.com.
baidu.com. IN NS ns2.baidu.com.

.2.6.4 MX记录

name: 当前区域的名字
value: 当前区域的某邮件服务器(smtp服务器)的主机名

注意:
1. 一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高
2. 对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录

baidu.com. IN MX 10 mx1.baidu.com.
IN MX 20 mx2.baidu.com.
mx1 A  10.0.0.100
mx2 A  10.0.0.200

2.6.5 A记录

name: 某主机的FQDN,例如:www.xinxin.org.
value: 主机名对应主机的IP地址
避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址

www.baidu.com. IN A 1.1.1.1
www.baidu.com. IN A 2.2.2.2
mx1.baidu.com. IN  A 3.3.3.3
mx2.baidu.com. IN  A 4.4.4.4
$GENERATE 1-254 HOST$  IN A 1.2.3.$
*.baidu.com. IN A 5.5.5.5
baidu.com. IN  A 6.6.6.6
#注意:如果有和DNS的IP相同的多个同名的A记录,优先返回DNS的本机IP

2.6 6 AAAA记录

name: FQDN
value: IPv6

2.6.7 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.baidu.com.
#如1.2.3为网络地址,可简写成:
4 IN PTR www.baidu.com.

2.6.8 CNAME别名记录

name: 别名的FQDN
value: 真正名字的FQDN

#例:
www.baidu.com. IN CNAME  websrv.baidu.com.

2.7 子域授权

每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权,类似根域授权tld

#glue record:粘合记录,父域授权子域的记录


#例:
.com.     IN     NS     ns1.com.
.com.     IN     NS     ns2.com.
ns1.com.  IN     A     2.2.2.1
ns2.com.  IN     A     2.2.2.2
#baidu.org.   在.com的名称服务器上,解析库中添加资源记录
baidu.org.       IN     NS     ns1.baidu.org.
baidu.org.       IN     NS     ns2.baidu.org.
baidu.org.       IN     NS     ns3.baidu.org.
ns1.baidu.org.   IN     A     3.3.3.1
ns2.baidu.org.   IN     A     3.3.3.2
ns3.baidu.org.   IN     A     3.3.3.3

2.8 互联网域名

1. 域名注册

代理商:万网, 新网, godaddy

2. 注册完成以后,想自己用专用服务来解析

管理后台:把NS记录指向的服务器名称,和A记录指向的服务器地址

2.9 whois

#例: whois 查询域名信息
[root@centos7 ~]#yum -y install whois
[root@centos7 ~]#whois xinxin.com
 Domain Name: XINXIN.COM
 Registry Domain ID: 1683438754_DOMAIN_COM-VRSN
 Registrar WHOIS Server: grs-whois.hichina.com
 Registrar URL: http://www.net.cn
 Updated Date: 2018-09-08T13:03:33Z
 Creation Date: 2011-10-22T03:22:03Z
 Registry Expiry Date: 2021-10-22T03:22:03Z
 Registrar: Alibaba Cloud Computing (Beijing) Co., Ltd.
。。。。。。



#可以从网站查询信息,查询链接
https://www.toolnb.com/domaininfo/wen.com.html

2.10 HttpDNS

2.10.1 HttpDNS 定义

HttpDNS是使用HTTP协议向DNS服务器的80端口进行请求,代替传统的DNS协议向DNS服务器的53端口进行请求。也就是使用Http协议去进行dns解析请求,将服务器返回的解析结果(域名对应的服务器IP),直接向该IP发起对应的API服务请求,代替使用域名。

2.10.2 HttpDNS工作原理

HttpDNS的原理非常简单,主要有两步:
A、客户端直接访问HttpDNS接口,获取业务在域名配置管理系统上配置的访问延迟最优的IP。(基于容灾考虑,还是保留次选使用运营商LocalDNS解析域名的方式)
B、客户端向获取到的IP后就向直接往此IP发送业务协议请求。以Http请求为例,通过在header中指定host字段,向HttpDNS返回的IP发送标准的Http请求即可。

2.10.3 HttpDNS优势

从原理上来讲,HttpDNS只是将域名解析的协议由DNS协议换成了Http协议,并不复杂。但是这一微小
的转换,却带来了无数的收益:
A、根治域名解析异常:由于绕过了运营商的LocalDNS,用户解析域名的请求通过Http协议直接透传到了腾讯的HttpDNS服务器IP上,用户在客户端的域名解析请求将不会遭受到域名解析异常的困扰。
B、调度精准:HttpDNS能直接获取到用户IP,通过结合腾讯自有专利技术生成的IP地址库以及测速系统,可以保证将用户引导的访问最快的IDC节点上。
C、实现成本低廉:接入HttpDNS的业务仅需要对客户端接入层做少量改造,无需用户手机进行root或越狱;而且由于Http协议请求构造非常简单,兼容各版本的移动操作系统更不成问题;另外HttpDNS的后端配置完全复用现有权威DNS配置,管理成本也非常低。总而言之,就是以最小的改造成本,解决了业务遭受域名解析异常的问题,并满足业务精确流量调度的需求。
D、扩展性强:HttpDNS提供可靠的域名解析服务,业务可将自有调度逻辑与HttpDNS返回结果结合,实现更精细化的流量调度。比如指定版本的客户端连接请求的IP地址,指定网络类型的用户连接指定的IP地址等。 

3 DNS软件 bind

DNS服务器软件:bind,powerdns,dnsmasq,unbound,coredns

3.1 BIND相关程序包

yum list all bind*
        bind:服务器
        bind-libs:相关库
        bind-utils: 客户端
        bind-chroot: 安全包,将dns相关文件放至 /var/named/chroot/

#例:安装bind软件
[root@centos8 ~]#dnf -y install bind bind-utils


#例: DNS客户端相关库
[root@centos8 ~]#ping www.baidu.com
PING www.a.shifen.com (110.242.68.4) 56(84) bytes of data.
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=1 ttl=128 time=10.9 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=2 ttl=128 time=10.5 ms
^C
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 3ms
rtt min/avg/max/mdev = 10.539/10.698/10.857/0.159 ms
[root@centos8 ~]#ldd `which ping` | grep libresolv.so
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f230739b000)

[root@centos8 ~]#ldd `which curl` |grep libresolv.so
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fe95048a000)

3.2 BIND包相关文件

BIND主程序:/usr/sbin/named
服务脚本和Unit名称:/etc/rc.d/init.d/named,/usr/lib/systemd/system/named.service
主配置文件:/etc/named.conf, /etc/named.rfc1912.zones, /etc/rndc.key
管理工具:/usr/sbin/rndc:remote name domain controller,默认与bind安装在同一主机,且
只能通过127.0.0.1连接named进程,提供辅助性的管理功能;953/tcp
解析库文件:/var/named/ZONE_NAME.ZONE
注意:
        (1) 一台物理服务器可同时为多个区域提供解析
        (2) 必须要有根区域文件;named.ca
        (3) 应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库

3.3 主配置文件

全局配置:options {};
日志子系统配置:logging {};
区域定义:本机能够为哪些zone进行解析,就要定义哪些zone
        zone "ZONE_NAME" IN {};

注意:
任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的
IP地址上
缓存名称服务器的配置:监听外部地址即可
dnssec: 建议关闭dnssec,设为no

4 实现主DNS服务器

4.1 主DNS服务器配置

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

vim /etc/named.conf      
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query   { localhost; };
zone "ZONE_NAME" IN {
 type {master|slave|hint|forward};
 file "ZONE_NAME.zone";
};

2. 定义区域解析库文件
内容包括 :
        宏定义
        资源记录

#例:区域数据库
$TTL 86400
$ORIGIN xinxin.org.
@ IN SOA ns1.xinxin.org. admin.xinxin.org (
        2015042201
        1H
        5M
        7D
        1D )
        IN NS ns1
        IN NS ns2
        IN MX 10 mx1
        IN MX 20 mx2
ns1 IN A 172.16.100.11
ns2 IN A 172.16.100.12
mx1 IN A 172.16.100.13
mx2 IN A 172.16.100.14
websrv IN A 172.16.100.11
websrv IN A 172.16.100.12
www IN CNAME websrv



#例:抓包观察查询过程
[root@centos8 ~]#tcpdump -i eth0 udp port 53 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
11:37:38.458363 IP 10.0.0.7.42201 > 10.0.0.8.53: 44928+ A? www.baidu.com. (31)
11:37:38.458896 IP 10.0.0.7.54285 > 10.0.0.8.53: 44928+ A? www.baidu.com. (31)
11:37:38.460038 IP 10.0.0.7.42053 > 10.0.0.8.53: 30536+ A?
www.baidu.com.baidu.com. (48)
11:37:38.460884 IP 10.0.0.7.37739 > 10.0.0.8.53: 30536+ A?
www.baidu.com.baidu.com. (48)

[root@centos7 ~]#telnet 10.0.0.8 53
Trying 10.0.0.8...
telnet: connect to address 10.0.0.8: Connection refused



4.2 主配置文件语法检查

named-checkconf 

4.3 解析库文件语法检查

named-checkzone "baidu.org" /var/named/baidu.org.zone

4.4 配置生效

#三种方式
#rndc reload
#systemctl reload named
#service named reload

4.5 DNS 测试和管理工具

4.5.1 dig 命令

dig只用于测试dns系统,不会查询hosts文件进行解析

#格式;
dig [-t type] name [@SERVER] [query options]
query options:
+[no]trace:跟踪解析过程 : dig +trace xinxin.org
+[no]recurse:进行递归解析


#例:
#测试反向解析
dig -x IP = dig –t ptr reverseip.in-addr.arpa
#模拟区域传送
dig -t axfr ZONE_NAME @SERVER
dig -t axfr baidu.org @10.10.10.11
dig –t axfr 100.1.10.in-addr.arpa @172.16.1.1
dig -t NS . @114.114.114.114
dig -t NS . @a.root-servers.net

4.5.2 host命令

#格式:
host [-t type] name [SERVER]



#例:
host -t NS baidu.org 172.16.0.1
host -t soa baidu.org
host -t mx baidu.org
host -t axfr baidu.org
host 1.2.3.4

4.5.3 nslookup命令

#nslookup 可以支持交互和非交互式两种方式执行



#格式:
nslookup [-option] [name | -] [server]



#交互模式:
nslookup>
server IP: 指明使用哪个DNS server进行查询
set q=RR_TYPE: 指明查询的资源记录类型
NAME: 要查询的名称

4.5.4 rndc 命令

#利用rndc工具可以实现管理DNS功能
#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服务器的所有缓存记录

4.6 案例:实现DNS正向主服务器

4.6.1 实验目的

搭建DNS正向主服务器,实现web服务器基于FQDN的访问        

4.6.2 环境要求

DNS服务端:10.0.0.4
web服务器:10.0.0.5
DNS客户端:10.0.0.6

4.6.3 前提准备

关闭SELinux
关闭防火墙
时间同步

4.6.4 实现步骤

# 在DNS服务端安装bind
yum install bind -y


#修改bind 配置文件
vim /etc/named.conf      

#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query   { localhost; };
vim /etc/named.rfc1912.zones  

#加上下面内容
zone "xinxin.org" IN {
 type master;
 file  "xinxin.org.zone";
};


#DNS区域数据库文件
cp -p /var/named/named.localhost /var/named/baidu.org.zone
#如果没有加-p选项,需要修改所有者或权限。chgrp named baidu.org.zone

vim /var/named/baidu.org.zone
$TTL 1D
@ IN SOA master admin.baidu.org. (
                2019042210 ; serial
                1D ; refresh
                1H ; retry
                1W ; expire
                3H ) ; minimum
           NS master
master   A   10.0.0.4    
www   A   10.0.0.5


#检查配置文件和数据库文件格式,并启动服务
named-checkconf
named-checkzone baidu.org /var/named/baidu.org.zone
systemctl start named      #第一次启动服务
rndc reload           #不是第一次启动服务



#实现WEB服务
#安装http服务
yum install httpd            
#配置主页面
echo www.baidu.org > /var/www/html/index.html
#启动服务
systemctl start httpd  



#在客户端实现测试
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=10.0.0.8
#centos7 以上版执行现下面命令生效
nmcli con reload
nmcli con up eth0
#centos 6 执行下面命令生效
service network restart
#有以下记录,算是成功
cat /etc/resolv.conf          
# Generated by NetworkManager
nameserver 10.0.0.8
#测试网页,能显示就是成功
curl www.baidu.org         
www.baidu.org

4.7 允许动态更新

动态更新:可以通过远程更新区域数据库的资源记录
实现动态更新,需要在指定的zone语句块中:

Allow-update {any;};



#例:
chmod 770 /var/named
setsebool  -P named_write_master_zones on   #开启SELinux才需要执行此步
nsupdate
>server 127.0.0.1
>zone xinxin.org
>update add ftp.xinxin.org 88888 IN A 8.8.8.8
>send
>update delete www.xinxin.org A
>send
#测试
dig ftp.xinxin.org @127.0.0.1
ls -l /var/named/xinxin.org.zone.jnl
cat /var/named/xinxin.org.zone

4.8 启用DNS客户端缓存功能

在高并发的服务器场景中,对DNS的服务器查询性能有较高的要求,如果在客户端启用DNS缓存功能,可以大幅减轻DNS服务器的压力,同时也能提高DNS客户端名称解析速度

4.8.1 CentOS 启用DNS客户端缓存

CentOS 默认没有启用DNS客户端缓存,安装nscd(Name Service Cache Daemon,名称服务缓存守护进程)包可以支持DNS缓存功能

#减少DNS服务器压力,提高DNS查询速度
[root@centos7 ~]#yum -y install nscd
[root@centos7 ~]#systemctl enable --now nscd

#查看缓存统计信息
[root@centos7 ~]#nscd -g
nscd configuration:
       0 server debug level
    4m 25s server runtime
。。。。。。


#清除DNS客户端缓存
[root@centos7 ~]#nscd -i hosts

4.8.2 Ubuntu 启用DNS客户端缓存

ubuntu 默认会启用DNS客户端缓存

#例:
[root@ubuntu1804 ~]#systemctl status systemd-resolved.service
● systemd-resolved.service - Network Name Resolution
 Loaded: loaded (/lib/systemd/system/systemd-resolved.service; enabled; vendor
preset: enabled)
 Active: active (running) since Thu 2020-12-31 19:52:58 CST; 3h 6min ago
  Docs: man:systemd-resolved.service(8)
     https://www.freedesktop.org/wiki/Software/systemd/resolved
     https://www.freedesktop.org/wiki/Software/systemd/writing-network-
configuration-managers
     https://www.freedesktop.org/wiki/Software/systemd/writing-resolver-
clients
。。。。。。


[root@ubuntu1804 ~]#systemd-resolve --help
systemd-resolve [OPTIONS...] HOSTNAME|ADDRESS...
systemd-resolve [OPTIONS...] --service [[NAME] TYPE] DOMAIN
systemd-resolve [OPTIONS...] --openpgp EMAIL@DOMAIN...
systemd-resolve [OPTIONS...] --statistics
systemd-resolve [OPTIONS...] --reset-statistics
。。。。。。


[root@ubuntu1804 ~]#systemd-resolve --statistics
DNSSEC supported by current servers: no
Transactions
Current Transactions: 0
Total Transactions: 53
Cache
Current Cache Size: 1
    Cache Hits: 2
   Cache Misses: 52
DNSSEC Verdicts
      Secure: 0
     Insecure: 0
       Bogus: 0
   Indeterminate: 0
#清空缓存
[root@ubuntu1804 ~]#systemd-resolve --flush-caches
[root@ubuntu1804 ~]#systemd-resolve --statistics
DNSSEC supported by current servers: no

Transactions
Current Transactions: 0
Total Transactions: 53
Cache
Current Cache Size: 0
    Cache Hits: 2
   Cache Misses: 52
DNSSEC Verdicts
      Secure: 0
     Insecure: 0
       Bogus: 0
   Indeterminate: 0

5 实现反向解析区域

5.1 反向解析配置

反向区域:即将IP反向解析为FQDN
区域名称:网络地址反写.in-addr.arpa.

#例:
172.16.100. --> 100.16.172.in-addr.arpa.


#(1) 定义区域
zone "ZONE_NAME" IN {
    type {master|slave|forward};
    file "网络地址.zone"
};



#(2) 定义区域解析库文件
注意:不需要A记录,以PTR记录为主


#例:
$TTL 86400
$ORIGIN 16.172.in-addr.arpa.
@ IN SOA ns1.xinxin.org. admin.xinxin.org. (
                2015042201
                1H
                5M
                7D
                1D )
    IN NS ns1.xinxin.org.
1.2 IN PTR www.xinxin.org.
3.4 IN PTR mx1.xinxin.org.


##实现以下解析
172.16.2.1 www.xinxin.org.
172.16.4.3 mx1.xinxin.org.

5.2 案例: 反向解析

[root@centos8 ~]#cat /etc/named.conf
options {
......
listen-on port 53 { localhost; };
......
allow-query   { any; };
......
}
[root@centos8 ~]#vim /etc/named.rfc1912.zones
zone "0.0.10.in-addr.arpa" {
 type master;
 file "10.0.0.zone";
};
[root@centos8 ~]#cd /var/named
[root@centos8 named]#cp -p named.loopback 10.0.0.zone
[root@centos8 named]#cat 10.0.0.zone
$TTL 1D
@ IN SOA ns1 admin.xinxin.org. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1.xinxin.org.
100 PTR www.xinxin.org.
200 PTR app.xinxin.org.
[root@centos8 named]#named-checkzone 0.0.10.in-addr.arpa 10.0.0.zone
zone 0.0.10.in-addr.arpa/IN: loaded serial 0
OK
[root@centos6 ~]#dig -t ptr 100.0.0.10.in-addr.arpa. @10.0.0.8
; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> -t ptr 100.0.0.10.in-addr.arpa.
@10.0.0.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46393
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: a9b985772abbae6d4bcd7aa55f1b8af3efe9c3e53640b037 (good)
;; QUESTION SECTION:
;100.0.0.10.in-addr.arpa. IN PTR
;; ANSWER SECTION:
100.0.0.10.in-addr.arpa. 86400 IN PTR www.xinxin.org.

;; AUTHORITY SECTION:
0.0.10.in-addr.arpa. 86400 IN NS ns1.xinxin.org.
;; ADDITIONAL SECTION:
ns1.xinxin.org. 86400 IN A 10.0.0.7
;; Query time: 0 msec
;; SERVER: 10.0.0.8#53(10.0.0.8)
;; WHEN: Sat Jul 25 09:29:23 CST 2020
;; MSG SIZE rcvd: 142
[root@centos6 ~]#dig -x 10.0.0.100 @10.0.0.8
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> -x 10.0.0.100 @10.0.0.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37893
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;100.0.0.10.in-addr.arpa. IN PTR
;; ANSWER SECTION:
100.0.0.10.in-addr.arpa. 86400 IN PTR www.xinxin.org.
;; AUTHORITY SECTION:
0.0.10.in-addr.arpa. 86400 IN NS ns1.xinxin.org.
;; ADDITIONAL SECTION:
ns1.xinxin.org. 86400 IN A 10.0.0.7
;; Query time: 1 msec
;; SERVER: 10.0.0.8#53(10.0.0.8)
;; WHEN: Sat Jul 25 09:30:46 2020
;; MSG SIZE rcvd: 103
[root@centos6 ~]#host 10.0.0.100
100.0.0.10.in-addr.arpa domain name pointer www.xinxin.org.
[root@centos6 ~]#nslookup 10.0.0.200
Server: 10.0.0.8
Address: 10.0.0.8#53
200.0.0.10.in-addr.arpa name = app.liang.org.
[root@centos6 ~]#nslookup
> 10.0.0.100
Server: 10.0.0.8
Address: 10.0.0.8#53
100.0.0.10.in-addr.arpa name = www.xinxin.org.
> exit
C:\Users\liang>ping -a 10.0.0.100

正在 Ping www.xinxin.org [10.0.0.100] 具有 32 字节的数据:
请求超时。
10.0.0.100 的 Ping 统计信息:
  数据包: 已发送 = 1,已接收 = 0,丢失 = 1 (100% 丢失),
Control-C
^C
C:\Users\liang>ping -a 10.0.0.200
正在 Ping app.liang.org [10.0.0.200] 具有 32 字节的数据:

 6 实现从服务器

只有一台主DNS服务器,存在单点失败的问题,可以建立主DNS服务器的备份服务器,即从服务器来实现DNS服务的容错机制。从服务器可以自动和主服务器进行单向的数据同步,从而和主DNS服务器一样,也可以对外提供查询服务,但从服务器不提供数据更新服务。

6.1 DNS从服务器

1. 应该为一台独立的名称服务器
2. 主服务器的区域解析库文件中必须有一条NS记录指向从服务器
3. 从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中
4. 主服务器得允许从服务器作区域传送
5. 主从服务器时间应该同步,可通过ntp进行
6. bind程序的版本应该保持一致;否则,应该从高,主低

6.2 定义从区域

zone "ZONE_NAME" IN {
type slave;
masters { MASTER_IP; };
file "slaves/ZONE_NAME.zone";
};

6.3 案例:实现DNS从服务器

6.3.1 实验目的

搭建DNS主从服务器架构,实现DNS服务冗余

6.3.2 环境要求

DNS主服务器:10.0.0.3
DNS从服务器:10.0.0.4
web服务器:10.0.0.5
DNS客户端:10.0.0.6

6.3.3 前提准备

关闭SElinux
关闭防火墙
时间同步

6.3.4 实现步骤

#主DNS服务端配置(参看前面案例)
yum install bind -y
vim /etc/named.conf

#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query   { localhost; };

#只允许从服务器进行区域传输
allow-transfer { 从服务器IP;};
vim /etc/named.rfc1912.zones  

#加上这段
zone "xinxin.org" {
 type master;
 file  "xinxin.org.zone";
};

cp -p /var/named/named.localhost /var/named/xinxin.org.zone
#如果没有-p,需要改权限。chgrp named xinxin.org.zone

vim /var/named/xinxin.org.zone
$TTL 1D
@ IN SOA master admin.xinxin.org. (
                1 ; serial
                1D ; refresh
                1H ; retry
                1W ; expire
                3H ) ; minimum
     NS master
     NS slave
master   A   10.0.0.3
slave    A   10.0.0.4


systemctl start named      #第一次启动服务
rndc reload           #不是第一次启动服务



#从DNS服务器配置
yum install bind -y
vim /etc/named.conf
// listen-on port 53 { 127.0.0.1; };
// allow-query   { localhost; };

#不允许其它主机进行区域传输
 allow-transfer { none;};

vim /etc/named.rfc1912.zones
zone "xinxin.org" {
 type slave;
 masters { 主服务器IP;};                           
    
 file "slaves/xinxin.org.slave";
};

systemctl start named      #第一次启动服务
rndc reload           #不是第一次启动服务
ls /var/named/slaves/xinxin.org.slave #查看区域数据库文件是否生成



#客户端测试主从DNS服务架构
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=主服务器
DNS2=从服务器

#验证从DNS服务器是否可以查询
dig www.xinxin.org
curl www.xinxin.org

#在主服务器上停止DNS服务
systemctl stop named

#验证从DNS服务器仍然可以查询
dig www.xinxin.org
curl www.xinxin.org

7 实现子域

7.1 子域委派授权

将子域委派给其它主机管理,实现分布式DNS数据库
正向解析区域子域方法

#例:定义两个子域区域
shanghai.xinxin.org. IN NS ns1.ops.xinxin.org.
shanghai.xinxin.org. IN NS ns2.ops.xinxin.org.
shenzhen.xinxin.org. IN NS ns1.shenzhen.xinxin.org.
shenzhen.xinxin.org. IN NS ns2.shenzhen.xinxin.org.
ns1.shanghai.xinxin.org. IN A 1.1.1.1
ns2.shanghai.xinxin.org. IN A 1.1.1.2
ns1.shenzhen.xinxin.org. IN A 1.1.1.3
ns2.shenzhen.xinxin.org. IN A 1.1.1.4

7.2 案例:实现DNS父域和子域服务

7.2.1 实验目的

搭建DNS父域和子域服务器

7.2.2 环境要求

DNS父域服务器:10.0.0.2
DNS子域服务器:10.0.0.3
父域的web服务器:10.0.0.4,www.xinxin.org
子域的web服务器:10.0.0.5,www.shanghai.xinxin.org
DNS客户端:10.0.0.6

7.2.3 前提准备

关闭SElinux
关闭防火墙
时间同步

7.2.4 实现步骤

#在父域DNS服务器上实现主xinxin.org域的主DNS服务
yum install bind -y

vim /etc/named.conf
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query   { localhost; };


#只允许从服务器进行区域传输
allow-transfer { 从服务器IP;};

#建议关闭加密验证
dnssec-enable no;
dnssec-validation no;

vim /etc/named.rfc1912.zones  
#加上这段
zone "xinxin.org" {
 type master;
 file  "xinxin.org.zone";
};


cp -p /var/named/named.localhost /var/named/xinxin.org.zone
#如果没有-p,需要改权限。chgrp named xinxin.org.zone


vim /var/named/xinxin.org.zone
$TTL 1D
@ IN SOA master admin.xinxin.org. (
                1 ; serial
                1D ; refresh
                1H ; retry
                1W ; expire
                3H ) ; minimum
       NS master
shanghai  NS  shanghains
master   A   10.0.0.2
shanghains A   10.0.0.3
www     A   10.0.0.4


systemctl start named      #第一次启动服务
rndc reload           #不是第一次启动服务



#实现子域的DNS服务器

yum install bind -y

vim /etc/named.conf      
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query   { localhost; };
allow-transfer { none;};

vim /etc/named.rfc1912.zones
zone "shanghai.xinxin.org" {
 type master;
 file "shanghai.xinxin.org.zone";
};

cp -p /var/named/named.localhost /var/named/shanghai.xinxin.org.zone
#如果没有-p,需要改权限。chgrp named xinxin.org.zone

vim /var/named/shanghai.xinxin.org.zone
$TTL 1D
@  IN SOA master admin.xinxin.org. (
          2019042214 ; serial
         1D ; refresh
         1H ; retry
         1W ; expire
         3H )  ; minimum
     NS  master
master   A   10.0.0.3
www     A   10.0.0.5


systemctl start named      #第一次启动服务
rndc reload           #不是第一次启动服务


 #在父域和子域的web服务器上安装httpd服务
#父域的web服务器利用上面案例(略)
#在子域的web服务器上安装http服务
yum install httpd            
#配置主页面
echo www.shanghai.xinxin.org > /var/www/html/index.html
#启动服务
systemctl start httpd 

#客户端测试
dig www.shanghai.xinxin.org
www.shanghai.xinxin.org

8 实现 DNS 转发(缓存)服务器

8.1 DNS转发

利用DNS转发,可以将用户的DNS请求,转发至指定的DNS服务,而非默认的根DNS服务器,并将指定服务器查询的返回结果进行缓存,提高效率。

注意:
1. 被转发的服务器需要能够为请求者做递归,否则转发请求不予进行
2. 在/etc/named.conf的全局配置块中,关闭dnssec功能

dnssec-enable no;
dnssec-validation no;

8.2 转发方式

8.2.1 全局转发

对非本机所负责解析区域的请求,全转发给指定的服务器

#在全局配置块中实现:
Options {
    forward first|only;
    forwarders { ip;};
};

8.2.2 特定区域转发

仅转发对特定的区域的请求,比全局转发优先级高

zone "ZONE_NAME" IN {
    type forward;
    forward first|only;
    forwarders { ip;};
};

first:先转发至指定DNS服务器,如果无法解析查询请求,则本服务器再去根服务器查询
only: 先转发至指定DNS服务器,如果无法解析查询请求,则本服务器将不再去根服务器查询

8.3 案例:实现DNS forward(缓存)服务器

8.3.1 实验目的

搭建DNS转发(缓存)服务器

8.3.2 环境要求

DNS只缓存服务器:10.0.0.3
DNS主服务器:10.0.0.4
web服务器:10.0.0.5
DNS客户端:10.0.0.6

8.3.3 前提准备

关闭SElinux
关闭防火墙
时间同步

8.3.4 实现步骤

#实现转发(只缓存)DNS服务器
yum install bind -y

vim /etc/named.conf      
#注释掉两行
// listen-on port 53 { 127.0.0.1; };
// allow-query   { localhost; };

orward first;
forwarders { 10.0.0.4;};

#关闭dnsec功能
dnssec-enable no;
dnssec-validation no;


systemctl start named      #第一次启动服务
rndc reload           #不是第一次启动服务


#实现主DNS服务器
yum install bind -y


vim /etc/named.conf      
#注释掉两行
// listen-on port 53 { 127.0.0.1; };
// allow-query   { localhost; };

vim /etc/named.rfc1912.zones  
#加上下面这段
zone "xinxin.org" {
 type master;
 file  "xinxin.org.zone";
};

cp -p /var/named/named.localhost /var/named/xinxin.org.zone
#如果没有-p,需要改权限。chgrp named xinxin.org.zone

vim /var/named/xinxin.org.zone

$TTL 1D
@  IN SOA master admin.xinxin.org. (
          2019042214 ; serial
         1D ; refresh
         1H ; retry
         1W ; expire
         3H )  ; minimum
     NS  master
master   A   10.0.0.4
websrv   A   10.0.0.5             
www    CNAME websrv

systemctl start named      #第一次启动服务
rndc reload           #不是第一次启动服务

#web服务器配置(参看前面案例,略)
#在客户端测试
#客户端配置(参看前面案例,略)
dig www.xinxin.org  
curl www.xinxin.org

9 实现智能 DNS

 9.1 GSLB

GSLB:Global Server Load Balance全局负载均衡

GSLB 是对服务器和链路进行综合判断来决定由哪个地点的服务器来提供服务,实现异地服务器群服务质量的保证

GSLB主要的目的是在整个网络范围内将用户的请求定向到最近的节点(或者区域)

GSLB分为基于DNS实现、基于重定向实现、基于路由协议实现,其中最通用的是基于DNS解析方式

#例:在北京查询VIP使用网宿的CDN服务
[root@centos6 ~]#dig www.vip.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.vip.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44153
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 5, ADDITIONAL: 0
;; QUESTION SECTION:
;www.vip.com. IN A
;; ANSWER SECTION:
www.vip.com. 180 IN CNAME www.vip.com.wscdns.com.#wscdn 网宿服务商
www.vip.com.wscdns.com. 60 IN A 111.206.176.92
;; AUTHORITY SECTION:
wscdns.com. 172800 IN NS dns2.wscdns.info.
wscdns.com. 172800 IN NS dns3.wscdns.org.
wscdns.com. 172800 IN NS dns4.wscdns.info.
wscdns.com. 172800 IN NS dns5.cdn30.org.
wscdns.com. 172800 IN NS dns1.wscdns.org.
;; Query time: 1290 msec
;; SERVER: 10.0.0.18#53(10.0.0.18)
;; WHEN: Wed Feb 12 18:05:17 2020
;; MSG SIZE rcvd: 200
[root@centos6 ~]#


#例: 在郑州查询VIP使用网宿的CDN服务
[root@centos8 ~]#dig www.vip.com
; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> www.vip.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41846
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 5, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: c64336bd04f5165946e2a4115f5ec84d89fb312a09571ab0 (good)
;; QUESTION SECTION:
;www.vip.com. IN A
;; ANSWER SECTION:
www.vip.com. 121 IN CNAME www.vip.com.wscdns.com.
www.vip.com.wscdns.com. 2 IN A 111.6.176.42
;; AUTHORITY SECTION:
wscdns.com. 172742 IN NS dns5.cdn30.org.
wscdns.com. 172742 IN NS dns3.wscdns.org.
wscdns.com. 172742 IN NS dns2.wscdns.info.
wscdns.com. 172742 IN NS dns1.wscdns.org.
wscdns.com. 172742 IN NS dns4.wscdns.info.
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Sep 14 09:33:01 CST 2020
;; MSG SIZE rcvd: 239

9.2 CDN (Content Delivery Network)内容分发网络

9.2.1 CDN工作原理

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工作原理就近返回服务器地址
[root@centos6 ~]#cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 54.252.183.4
[root@centos6 ~]#ping www.jd.com -c1
PING jd-abroad.cdn20.com (163.171.197.13) 56(84) bytes of data.
64 bytes from 163.171.197.13: icmp_seq=1 ttl=128 time=266 ms
--- jd-abroad.cdn20.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 739ms
rtt min/avg/max/mdev = 266.711/266.711/266.711/0.000 ms
[root@centos6 ~]#cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 223.6.6.6
nameserver 180.76.76.76
[root@centos6 ~]#ping www.jd.com -c1
PING img2x-v6-sched.jcloudedge.com (123.6.29.3) 56(84) bytes of data.
64 bytes from hn.kd.ny.adsl (123.6.29.3): icmp_seq=1 ttl=128 time=3.04 ms
--- img2x-v6-sched.jcloudedge.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 22ms
rtt min/avg/max/mdev = 3.044/3.044/3.044/0.000 ms
[root@centos6 ~]#

 9.2.2 CDN服务商

        服务商:阿里,腾讯,蓝汛,网宿,帝联等
        智能DNS: dnspod dns.la

#例: 浪潮使用网宿的CDN服务
[root@centos8 ~]#dig www.inspur.com
; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> www.inspur.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24043
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.inspur.com. IN A

;; ANSWER SECTION:
www.inspur.com. 43 IN CNAME www.inspur.com.wscdns.com.
www.inspur.com.wscdns.com. 43 IN A 111.206.179.204

;; Query time: 8 msec
;; SERVER: 223.6.6.6#53(223.6.6.6)
;; WHEN: Tue Jan 05 22:25:03 CST 2021
;; MSG SIZE rcvd: 84



#例: gongshang银行使用网宿的CDN服务
root@ubuntu2004:~# dig www.icbc.com.cn
; <<>> DiG 9.16.1-Ubuntu <<>> www.icbc.com.cn
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14891
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;www.icbc.com.cn. IN A
;; ANSWER SECTION:
www.icbc.com.cn. 15 IN CNAME www.icbc.com.cn.wscdns.com.
www.icbc.com.cn.wscdns.com. 14 IN A 111.206.186.250
;; Query time: 8 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Wed Jan 20 08:24:01 UTC 2021
;; MSG SIZE rcvd: 100

9.3 智能DNS相关技术

9.3.1 bind中ACL

ACL:把一个或多个地址归并为一个集合,并通过一个统一的名称调用
注意:只能先定义后使用;因此一般定义在配置文件中,处于options的前面

#格式:
acl acl_name {
    ip;
    net/prelen;
    ……
};


#例:
acl beijingnet {
    172.16.0.0/16;
    10.10.10.10;
};


9.3.2 bind有四个内置的acl

none 没有一个主机
any 任意主机
localhost 本机
localnet 本机的IP同掩码运算后得到的网络地址

9.3.3 访问控制的指令

allow-query {}: 允许查询的主机;白名单
allow-transfer {}:允许区域传送的主机;白名单
allow-recursion {}: 允许递归的主机,建议全局使用
allow-update {}: 允许更新区域数据库中的内容

9.3.4 view 视图

# View:视图,将ACL和区域数据库实现对应关系,以实现智能DNS

一个bind服务器可定义多个view,每个view中可定义一个或多个zone
每个view用来匹配一组客户端
多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件


#注意:
一旦启用了view,所有的zone都只能定义在view中
仅在允许递归请求的客户端所在view中定义根区域
客户端请求到达时,是自上而下检查每个view所服务的客户端列表


#view 格式
view VIEW_NAME {
    match-clients { beijingnet; };
    zone "xinxin.org" {
        type master;
        file "xinxin.org.zone.bj";
    };
    include "/etc/named.rfc1912.zones";
};

view VIEW_NAME {
    match-clients { shanghainet; };
    zone "xinxin.org" {
        type master;
        file "xinxin.org.zone.sh";
    };
    include "/etc/named.rfc1912.zones";
};

9.4 案例:利用view实现智能DNS

9.4.1 实验目的

搭建DNS主从服务器架构,实现DNS服务冗余

9.4.2 环境要求

DNS主服务器和web服务器1:10.0.0.2/24,172.16.0.2/16
web服务器2:10.0.0.3/24
web服务器3:172.16.0.3/16
DNS客户端1:10.0.0.4/24
DNS客户端2:172.16.0.4/16

9.4.3 前提准备

关闭SElinux
关闭防火墙
时间同步

9.4.4 实现步骤

#DNS 服务器的网卡配置
#配置两个IP地址
#eth0:10.0.0.2/24
#eth1: 172.16.0.2/16
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group
default qlen 1000
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
  valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host
   valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group
default qlen 1000
 link/ether 00:0c:29:f9:8d:90 brd ff:ff:ff:ff:ff:ff
 inet 10.0.0.8/24 brd 10.0.0.255 scope global noprefixroute eth0
   valid_lft forever preferred_lft forever
 inet6 fe80::20c:29ff:fef9:8d90/64 scope link
   valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group
default qlen 1000
 link/ether 00:0c:29:f9:8d:11 brd ff:ff:ff:ff:ff:ff
 inet 172.16.0.8/16 brd 172.16.0.255 scope global noprefixroute eth1
   valid_lft forever preferred_lft forever
 inet6 fe80::20c:29ff:fe11:8d90/64 scope link
   valid_lft forever preferred_lft forever



#主DNS服务端配置文件实现 view
yum install bind -y

vim /etc/named.conf
#在文件最前面加下面行
acl beijingnet {
  10.0.0.0/24;
};
acl shanghainet {
  172.16.0.0/16;
};
acl othernet {
 any;
};

#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query   { localhost; };

#其它略

# 创建view
view beijingview {
 match-clients { beijingnet;};
 include "/etc/named.rfc1912.zones.bj";
};
view shanghaiview {
 match-clients { shanghainet;};
 include "/etc/named.rfc1912.zones.sh";
};
view otherview {
 match-clients { othernet;};
 include "/etc/named.rfc1912.zones.other";
};
include "/etc/named.root.key";



# 实现区域配置文件
vim /etc/named.rfc1912.zones.bj
zone "." IN {
 type hint;
 file "named.ca";
};
zone "xinxin.org" {
 type master;
 file "xinxin.org.zone.bj";
};
vim /etc/named.rfc1912.zones.sh
zone "." IN {
 type hint;
 file "named.ca";
};
zone "xinxin.org" {
 type master;
 file "xinxin.org.zone.sh";
};
vim /etc/named.rfc1912.zones.other
zone "." IN {
 type hint;
 file "named.ca";
};
zone "xinxin.org" {
 type master;
 file "xinxin.org.zone.other";
};
chgrp named /etc/named.rfc1912.zones.bj
chgrp named /etc/named.rfc1912.zones.sh
chgrp named /etc/named.rfc1912.zones.other


#创建区域数据库文件
vim /var/named/xinxin.org.zone.bj
$TTL 1D
@  IN SOA master admin.xinxin.org. (
          2019042214 ; serial
         1D ; refresh
         1H ; retry
         1W ; expire
         3H )  ; minimum
     NS  master
master   A   10.0.0.8
websrv   A   10.0.0.7             
www    CNAME websrv

vim /var/named/xinxin.org.zone.sh
$TTL 1D
@  IN SOA master admin.xinxin.org. (
          2019042214 ; serial
         1D ; refresh
         1H ; retry
         1W ; expire
         3H )  ; minimum
     NS  master
master   A   10.0.0.8
websrv   A   172.16.0.7             
www    CNAME websrv


vim /var/named/xinxin.org.zone.other
$TTL 1D
@  IN SOA master admin.xinxin.org. (
          2019042214 ; serial
         1D ; refresh
         1H ; retry
         1W ; expire
         3H )  ; minimum
     NS  master
master   A   10.0.0.8
websrv   A   127.0.0.1             
www    CNAME websrv

chgrp named /var/named/xinxin.org.zone.bj
chgrp named /var/named/xinxin.org.zone.sh
chgrp named /var/named/xinxin.org.zone.other


systemctl start named      #第一次启动服务
rndc reload           #不是第一次启动服务


#实现位于不同区域的三个WEB服务器
#分别在三台主机上安装http服务
#在web服务器1:10.0.0.8/24实现
yum install httpd            
echo www.xinxin.org in Other > /var/www/html/index.html
systemctl start httpd 
#在web服务器2:10.0.0.7/16
echo www.xinxin.org in Beijing > /var/www/html/index.html
systemctl start httpd 
#在web服务器3:172.16.0.7/16
yum install httpd            
echo www.xinxin.org in Shanghai > /var/www/html/index.html
systemctl start httpd 



#客户端测试
#分别在三台主机上访问
#DNS客户端1:10.0.0.6/24 实现,确保DNS指向10.0.0.8
curl www.xinxin.org
www.xinxin.org in Beijing
#DNS客户端2:172.16.0.6/16 实现,确保DNS指向172.16.0.8
curl www.xinxin.org
www.xinxin.org in Shanghai
#DNS客户端3:10.0.0.8 实现,,确保DNS指向127.0.0.1
curl www.xinxin.org
www.xinxin.org in Other

10 DNS排错

SERVFAIL:The nameserver encountered a problem while processing the query.
可使用dig +trace排错,可能是网络和防火墙导致
NXDOMAIN:The queried name does not exist in the zone.
可能是CNAME对应的A记录不存在导致
REFUSED:The nameserver refused the client's DNS request due to policy restrictions.
可能是DNS策略导致

#例:
dig A example.com
; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> A example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30523
...

11 案例:综合案例,实现 Internet 的DNS 服务架构

11.1 实验目的

搭建DNS实现internet dns架构

11.2 环境要求

DNS客户端:10.0.0.9/24
本地DNS服务器(只缓存):10.0.0.2/24
转发目标DNS服务器:10.0.0.3/24
根DNS服务器:10.0.0.4/24
org域DNS服务器:10.0.0.5/24
xinxin.org域主DNS服务器:10.0.0.6/24
xinxin.org域从DNS服务器:10.0.0.7/24
www.xinxin.org的WEB服务器:10.0.0.8/24

11.3 前提准备

关闭SElinux
关闭防火墙
时间同步

11.4 实现步骤

#种主机的网络配置(参看上面的环境要求)
#在客户端配置DNS服务器地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33
NAME=eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=10.0.0.9
NETMASK=255.255.255.0
DNS1=10.0.0.2
ONBOOT=yes
service network restart


#实现WEB服务
#在web服务器10.0.0.8/24上实现
yum install httpd            
echo www.baidu.org > /var/www/html/index.html
systemctl start httpd


#实现xinxin.org域的主DNS服务器
#在xinxin.org域主DNS服务器10.0.0.6/24上实现
yum install bind -y

#vim /etc/named.conf
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query   { localhost; };

#只允许从服务器进行区域传输
allow-transfer { 从服务器IP;};


vim /etc/named.rfc1912.zones  
#加上这段
zone "xinxin.org" {
 type master;
 file  "xinxin.org.zone";
};


vim /var/named/xinxin.org.zone
$TTL 1D
@ IN SOA master admin.xinxin.org. (
1 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
   NS master
     NS slave
master   A   10.0.0.6
slave    A   10.0.0.7
www    A   10.0.0.8

chgrp named /var/named/xinxin.org.zone

systemctl start named      #第一次启动服务
rndc reload           #不是第一次启动服务



#实现xinxin.org域的从DNS服务器配置
#在xinxin.org域从DNS服务器10.0.0.7/24上实现
yum install bind -y


vim /etc/named.conf
// listen-on port 53 { 127.0.0.1; };
// allow-query   { localhost; };
#不允许其它主机进行区域传输
allow-transfer { none;};

vim /etc/named.rfc1912.zones
zone "xinxin.org" {
 type slave;
 masters { 主服务器IP;};                           
    
 file "slaves/xinxin.org.slave";
};

systemctl start named      #第一次启动服务
rndc reload           #不是第一次启动服务

ls /var/named/slaves/xinxin.org.slave #查看区域数据库文件是否生成



#实现org域的主DNS服务器
#在org域的主DNS服务器10.0.0.5/24上实现
yum install bind -y

#vim /etc/named.conf      
#注释掉两行
// listen-on port 53 { 127.0.0.1; };
// allow-query   { localhost; };

vim /etc/named.rfc1912.zones  
#加上这段
zone "org" {
 type master;
 file  "org.zone";
};


vim /var/named/org.zone
$TTL 1D
@  IN SOA master admin.xinxin.org. ( 1 1D 1H 1W 3D )
     NS  master
xinxin   NS xinxinns1
xinxin   NS xinxinns2
master   A 10.0.0.5
xinxinns1 A 10.0.0.6
xinxinns2 A 10.0.0.7

chgrp named /var/named/org.zone

systemctl start named      #第一次启动服务
rndc reload           #不是第一次启动服务


#实现根域的主DNS服务器
#在根域的主DNS服务器10.0.0.4/24上实现
yum install bind -y

vim /etc/named.conf      
#注释掉两行,第13行和第21行
// listen-on port 53 { 127.0.0.1; };
// allow-query   { localhost; };

#将下面行改为:
zone "." IN {
   type master;
   file "root.zone";
};
vim /var/named/root.zone
$TTL 1D
@  IN SOA master admin.xinxin.org. ( 1 1D 1H 1W 3D )
     NS  master
org     NS  orgns
master   A 10.0.0.4
orgns   A 10.0.0.5

#安全加固
chgrp named /var/named/root.zone  
chmod 640 /var/named/root.zone

systemctl start named  #第一次启动
rndc reload       #不是第一次启动


#实现转发目标的DNS服务器
#在转发目标的DNS服务器10.0.0.3/24上实现
yum install bind -y

vim /etc/named.conf      
#注释掉两行,第13行和第21行
// listen-on port 53 { 127.0.0.1; };
// allow-query   { localhost; };
dnssec-enable no;
dnssec-validation no

vim /var/named/named.ca
.            518400 IN   NS   a.root-servers.net.
a.root-servers.net.   3600000 IN   A    10.0.0.4

systemctl start named  #第一次启动
rndc reload       #不是第一次启动



# 实现本地只缓存DNS服务器
#在转发目标的DNS服务器10.0.0.2/24上实现
yum install bind -y


vim /etc/named.conf      
#注释掉两行,第13行和第21行
// listen-on port 53 { 127.0.0.1; };
// allow-query   { localhost; };

forward only;
forwarders { 10.0.0.3;};

dnssec-enable no;
dnssec-validation no

systemctl start named  #第一次启动
rndc reload       #不是第一次启动


#客户端测试
cat /etc/resolv.conf
nameserver 10.0.0.2


dig www.xinxin.org
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> www.xinxin.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40755
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.xinxin.org. IN A
;; ANSWER SECTION:
www.xinxin.org. 86181 IN A 10.0.0.8
;; AUTHORITY SECTION:
xinxin.org. 86181 IN NS ns2.xinxin.org.
xinxin.org. 86181 IN NS ns1.xinxin.org.
;; ADDITIONAL SECTION:
ns2.xinxin.org. 86181 IN A 10.0.0.6
ns1.xinxin.org. 86181 IN A 10.0.0.7
;; Query time: 1 msec
;; SERVER: 10.0.0.2#53(10.0.0.8)
;; WHEN: Fri May 10 17:28:39 CST 2019
;; MSG SIZE rcvd: 127     成功
curl www.xinxin.org
www.xinxin.org

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

域名系统和 DNS 的相关文章

  • Web 应用程序的带宽和流量模拟器?

    您能否建议如何创建一个测试环境来模拟 Web 应用程序中的各种类型的带宽和流量 或者也许是一个针对本地主机执行此操作的开源程序 我认为在编写网络应用程序时这是一个非常重要的主题 但这不是一个常见的主题 我能想象创建这种环境的唯一方法是在本地
  • 无法在 64 位 Linux 上从汇编 (yasm) 代码调用 C 标准库函数

    我有一个函数foo以汇编语言编写 并在 Linux Ubuntu 64 位上使用 yasm 和 GCC 编译 它只是使用以下命令将消息打印到标准输出puts 如下所示 bits 64 extern puts global foo secti
  • 配置:错误:无法运行C编译的程序

    我正在尝试使用 Debian Wheezy 操作系统在我的 Raspberry Pi 上安装不同的软件 当我运行尝试配置软件时 我尝试安装我得到此输出 checking for C compiler default output file
  • 在 Linux 上访问 main 之外的主要参数

    是否可以访问参数main在外面main 即在共享库构造函数中 在 Linux 上除了通过解析之外 proc self cmdline 您可以通过将构造函数放入 init array部分 功能在 init array 不像 init 使用相同
  • pprof 和 ps 之间的内存使用差异

    我一直在尝试分析用 cobra 构建的 cli 工具的堆使用情况 这pprof工具显示如下 Flat Flat Sum Cum Cum Name Inlined 1 58GB 49 98 49 98 1 58GB 49 98 os Read
  • 这种 bash 文件名提取技术有何用途?

    我有一部分 bash 脚本正在获取不带扩展名的文件名 但我试图了解这里到底发生了什么 是做什么用的 有人可以详细说明 bash 在幕后做了什么吗 如何在一般基础上使用该技术 bin bash for src in tif do txt sr
  • 码头无故停止

    我需要经验丰富的码头用户的建议 我在负载均衡器 亚马逊云 后面维护着 2 台 Linux 机器 使用 Jetty 9 0 3 有时我的 Jetty 容器会被 Thread 2 无故关闭 同时地 显示以下日志并且容器无故停止 没有错误 没有例
  • 用于编辑 /etc/sudoers 文件的正则表达式模式

    我想删除 etc sudoers 文件中的 uncommnet 轮组 那么我应该使用什么正则表达式模式 cat etc sudoers Allows members of the sys group to run networking so
  • 在 Docker 容器中以主机用户身份运行

    在我的团队中 我们在进行开发时使用 Docker 容器在本地运行我们的网站应用程序 假设我正在开发 Flask 应用程序app py具有依赖关系requirements txt 工作流程大致如下 I am robin and I am in
  • 无需 root 访问权限即可安装 zsh? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有可能 以及如何 我确实需要在几台具有 ssh 访问权限 但没有 root 访问权限 的远程计算机上使用此功能 下载 zsh wget O zsh t
  • ubuntu 的 CSS 更少(并且自动编译)? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我尝试过 simples 但现在 l
  • 使用c在linux上分块读写

    我有一个 ASCII 文件 其中每一行都包含一个可变长度的记录 例如 Record 1 15 characters Record 2 200 characters Record 3 500 characters Record n X cha
  • 在 Linux 控制台中返回一行?

    我知道我可以返回该行并用以下内容覆盖其内容 r 现在我怎样才能进入上一行来改变它呢 或者有没有办法打印到控制台窗口中的特定光标位置 我的目标是使用 PHP 创建一些自刷新的多行控制台应用程序 Use ANSI 转义码 http en wik
  • SMP 上如何处理中断?

    SMP 对称多处理器 多核 机器上如何处理中断 内存管理单元是只有一个还是多个 假设两个线程 A 和 B 运行在不同的内核上 同时 访问页表中不存在的内存页面 在这种情况下 将会出现页面错误 并从内存中引入新页面 将会发生的事件的顺序是什么
  • 了解 Linux oom-killer 日志

    我的应用程序被 oom killer 杀死了 它是在实时 USB 上运行的 Ubuntu 11 10 无需交换 PC 具有 1 Gig 的 RAM 唯一运行的应用程序 除了所有内置的 Ubuntu 东西 是我的程序 flasherav 请注
  • pthread_self() 返回的线程 ID 与调用 gettid(2) 返回的内核线程 ID 不同

    这句话来自于pthread self 的手册页 http linux die net man 3 pthread self 那么 我应该根据什么来决定是否应该使用pthread self or gettid确定哪个线程正在运行该函数 两者都
  • 如何在linux中使用iptables将http和https流量转发到透明代理[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题似乎不是关于主要由程序员使用的特定编程问题 软件算法或软件工具 help on topic 如果您认为该问题与主题相关另一个 St
  • php_network_getaddresses: getaddrinfo 失败: 名称或服务未知 (0) 连接失败..!

    我正在使用 php 邮件程序功能 但出现以下错误 如何修复它 2016 01 22 06 15 48 SMTP 错误 无法连接到服务器 php network getaddresses getaddrinfo失败 名称或服务未知 0 连接失
  • 由于 abi::cxx11 符号导致的链接问题?

    我们最近收到一份报告 因为GCC 5 1 libstdc 和双 ABI http gcc gnu org onlinedocs libstdc manual using dual abi html 它似乎Clang 不知道 GCC 内联名称
  • 隐式声明“gets”

    据我所知 隐式声明 通常意味着该函数必须在调用之前放置在程序的顶部 或者我需要声明原型 然而 gets应该在stdio h文件 我已包含 有没有什么办法解决这一问题 include

随机推荐

  • 1004 成绩排名 (20 分) Java写法 读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

    读入 n gt 0 名学生的姓名 学号 成绩 分别输出成绩最高和成绩最低学生的姓名和学号 输入格式 每个测试输入包含 1 个测试用例 格式为 第 1 行 正整数 n 第 2 行 第 1 个学生的姓名 学号 成绩 第 3 行 第 2 个学生的
  • chorme唤起Java开发的本地程序全采坑记

    chorme唤起Java开发的本地程序全踩坑记 背景说明 在开发企业web应用时 往往需要进行订单通知 状态通知 或者需要一些插件式本地应用来扩展一些网页 实现不了的功能等 以通知为例 如果网页标签页或者浏览器切出去了 意味着网页内部的通知
  • 毕业设计-基于深度学习的网络流量异常检测系统

    目录 前言 课题背景和意义 实现技术思路 一 网络流量异常检测方法 二 基于 的物联网流量异常检测 三 实验 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费
  • docker 删除容器 找回容器内文件_如何管理 Docker 容器里的文件

    之前的文章里介绍了 Docker 的基本操作 再来水一篇文章说说怎么对容器里的文件进行管理 Docker 容器虽然类似虚拟机 但如果想要物理机和容器内系统进行文件传输时 还是有点区别的 如果只是单纯对容器内的系统进行本地文件管理的话 那么用
  • 1、Apache Hudi简介

    1 Hudi简介 Hudi是Hadoop Updates and Incrementals的缩写 用于管理HDFS上的大型分析数据集存储 主要目的是高效的减少入库延时 Hudi是一个开源Spark三方库 支持在Hadoop上执行upsert
  • 单词分析(蓝桥杯)

    单词分析 题目描述 小蓝正在学习一门神奇的语言 这门语言中的单词都是由小写英文字母组 成 有些单词很长 远远超过正常英文单词的长度 小蓝学了很长时间也记不住一些单词 他准备不再完全记忆这些单词 而是根据单词中哪个字母出现得最多来分辨单词 现
  • C语言宏定义运算式计算错误的问题

    RT Thread Studio编译器里使用宏定义计算如下公式 按照正常的数学运算关系 算出来的结果是453 59 如果不加括号算出来的值完全不对 结果是 1050360954 1510059952 把计算过程全都加上括号后计算正确 由此可
  • android基础:android页面添加滚动条

    1 建立一个android项目 2 打开layout下的activity main xml文件 如果创建项目事修改了activity main xml文件就选择你修改的文件名 3 删除activity main xml文件中内容 4 将下列
  • Nacos配置中心使用(Spring Cloud版)

    目标 向项目中集成Nacos配置 原项目是一个SpringBoot项目 这里假设我们无法修改原有项目的SpringBoot版本 注意 在不动SpringBoot版本的前提下 根据SpringBoot的版本 确定Spring Cloud和Na
  • unity3d关节物体连接方式 Joint 简介

    Unity3D 在components physics里有很多种Joint方式 用于模拟物体与物体间的联系 物体间作用力等 由于上次辛苦写了一堆没成功保存后 这次就不写那么详细了 做个引子 真的用到的时候大家可以查官网再做具体研究 Hing
  • 花生壳PHTunnel嵌入Openwrt实例

    下载 下载自己的编译平台的二进制PHTunnel文件是第一步要做的 我们可以到贝锐科技开放平台网站 https developer oray com sdk 进行下载 根据自己的型号进行下载 比如我的路由器是基于mipsel c库使用的是u
  • 你值得拥有——流星雨下的告白(Python实现)

    目录 1 前言 2 霍金说移民外太空 3 浪漫的流星雨展示 4 Python代码 1 前言 我们先给个小故事 提一下大家兴趣 然后我给出论据 得出结论 最后再浪漫的流星雨表白代码奉上 还有我自创的一首诗 开始啦 2 霍金说移民外太空 霍金说
  • Python-继承

    单继承 多继承 面向对象三大特性 封装根据职责将属性和方法封装到一个抽象的类中 继承实现代码的重用 相同的代码不需要重复的缩写 多态不同的对象调用相同的方法 产生不同的执行结果 增加代码的灵活度 1 单继承 1 1继承的概念 语法和特点 继
  • mysql批量插入、更新

    1 创建表 CREATE TABLE user id int 11 UNSIGNED NOT NULL AUTO INCREMENT COMMENT id name varchar 255 CHARACTER SET utf8 COLLAT
  • mysql 安装教程(详细说明)

    如果你装过 一定要先卸载干净 并且重启重新装 卸载教程 保证成功 https www cnblogs com qzhc p 11354678 html 大家都知道MySQL是一款中 小型关系型数据库管理系统 很具有实用性 对于我们学习很多技
  • SpringBoot的ApplicationRunner

    场景 在开发过程中 需要在容器启动的时候查询数据库 将数据加载到程序中 代码 Component Slf4j RequiredArgsConstructor public class InitAppRunner implements App
  • monaco-editor基本使用以及monaco-editor封装成vue组件

    文章目录 一 monaco editor基本使用 二 monaco editor封装成vue组件 一 monaco editor基本使用 以vue2项目为例 安装依赖 npm i monaco editor npm i monaco edi
  • Redis知识总结

    Redis的全称是 Remote Dictionary Server Redis是一个开源 BSD许可 内存数据结构存储 可以用作数据库 缓存和消息代理 它支持数据结构 如字符串 散列 列表 集合 带有范围查询的排序集 位图 超级日志 具有
  • unity3D 鼠标滚轮实现物体的大小缩放

    这个实现的方法不难 难的可能是要弄懂鼠标滚轮响应函数的机制 响应函数是Input GetAxis Mouse ScrollWheel 其中 这个函数是有返回值的 类型是float 向前滚是返回正数 向后滚是返回负数 所以 下面这个脚本操作的
  • 域名系统和 DNS

    目录 1 名字解析介绍和DNS 1 2 DNS服务工作原理 1 3 DNS查询类型 1 4 名称服务器 1 5 解析类型 1 6 完整的查询请求经过的流程 2 DNS 服务相关概念和技术 2 1 DNS服务器的类型 2 1 1 主DNS服务