DNS

是什么以及作用

DNS(Domain Name System)是一个用于将域名转换为 IP 地址的系统,它在互联网中起着重要的作用。通常,人们在浏览器中键入域名(例如www.baidu.com)来访问网站,而不是输入网站的 IP 地址。DNS 就是负责将这些域名解析为相应的 IP 地址的系统。

监听端口号:53,UDP协议

DNS 的主要功能包括:

  1. 域名解析(正向解析):最常见的用途是将人们易于记忆的域名(如www.baidu.com)解析为计算机网络上的 IP 地址(如14.215.177.39)。这种转换是必需的,因为互联网通信实际上是通过 IP 地址进行的,而不是域名。

  2. 负载均衡:DNS 还可以根据特定的策略将流量分发到多个服务器上。通过将一个域名映射到多个 IP 地址,DNS 可以将用户的请求分发到可用的服务器上,从而实现负载均衡,提高网站的性能和可靠性。

  3. 电子邮件路由:DNS 在电子邮件交换中起着关键作用。它负责查找目标电子邮件服务器的 IP 地址,以便将电子邮件正确地路由到目标服务器。

  4. 反向解析:除了将域名解析为 IP 地址外,DNS 还可以执行反向解析,即将 IP 地址转换为域名。这在网络安全和故障排除方面非常有用。

DNS 是分层的,由多个服务器组成。当您输入一个域名时,您的计算机首先向本地 DNS 服务器(通常由您的互联网服务提供商提供)发出查询请求。如果本地 DNS 服务器没有所需的信息,它会向其他更高层次的 DNS 服务器发出请求,直到找到能够提供所需信息的服务器为止。

总结来说,DNS 是互联网上用于将域名解析为 IP 地址的系统。它允许我们使用易于记忆的域名来访问网站,而无需记住复杂的 IP 地址。此外,DNS 还支持负载均衡、电子邮件路由和反向解析等功能,为互联网的正常运行提供了重要的基础设施。

hosts文件:只是给本机提供域名解析的服务,不能给其他人提供。

dns:可以给全球的人提供域名查询服务。

下载DNS服务

在Linux系统中,可以使用包管理器来下载和安装DNS服务。以下是几个常见的DNS服务软件和它们在不同的Linux发行版上的安装方法:

  1. BIND (Berkeley Internet Name Domain):

    • 在Ubuntu和其他基于Debian的系统上,可以使用以下命令安装BIND:

      sudo apt-get update
      sudo apt-get install bind9
      
    • 在CentOS和其他基于Red Hat的系统上,可以使用以下命令安装BIND:

      sudo yum install bind*::
      
  2. dnsmasq:

    • 在Ubuntu和其他基于Debian的系统上,可以使用以下命令安装dnsmasq:

      sudo apt-get update
      sudo apt-get install dnsmasq
      
    • 在CentOS和其他基于Red Hat的系统上,可以使用以下命令安装dnsmasq:

      sudo yum install dnsmasq
      
  3. Unbound:

    • 在Ubuntu和其他基于Debian的系统上,可以使用以下命令安装Unbound:

      sudo apt-get update
      sudo apt-get install unbound
      
    • 在CentOS和其他基于Red Hat的系统上,可以使用以下命令安装Unbound:

      sudo yum install unbound
      

这些命令将会自动从软件仓库下载相应的DNS服务软件,并安装到系统中。安装完成后,你可以根据具体的需求对DNS服务进行配置,并启动相应的服务。

named.conf

[root@ydh conf]# cat /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

options {
	listen-on port 53 { any; };
	listen-on-v6 port 53 { any; };
	directory 	"/var/named";
	dump-file 	"/var/named/data/cache_dump.db";
	statistics-file "/var/named/data/named_stats.txt";
	memstatistics-file "/var/named/data/named_mem_stats.txt";
	recursing-file  "/var/named/data/named.recursing";
	secroots-file   "/var/named/data/named.secroots";
	allow-query     { any; };

	recursion yes;

	dnssec-enable yes;
	dnssec-validation yes;

	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.root.key";

	managed-keys-directory "/var/named/dynamic";

	pid-file "/run/named/named.pid";
	session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
	type hint;
	file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

在Linux系统中,/etc/named.conf是BIND(Berkeley Internet Name Domain)服务的主要配置文件。BIND是一种常用的DNS(Domain Name System)软件,用于将域名转换为IP地址和执行其他DNS相关功能。

/etc/named.conf文件用于配置BIND服务器的行为和属性,其中包含了全局选项、区域定义、区域传送、日志记录等各个方面的配置信息。下面是一些/etc/named.conf文件中常见的配置项和其作用:

  1. options:
    options部分包含了全局选项的配置,如BIND服务器的名称、监听的IP地址和端口、查询缓存设置、递归查询设置等。这些选项决定了BIND服务器的全局行为。
  2. zone:
    zone部分用于定义DNS区域,即域名和IP地址之间的映射关系。每个zone定义包括了区域的名称、类型(如正向区域或反向区域)、文件路径、传输设置等。这些配置项指定了BIND服务器应该如何处理特定的域名区域。
  3. logging:
    logging部分用于配置BIND服务器的日志记录设置。可以定义不同级别的日志信息,如信息、警告、错误等,并指定日志文件的位置和格式。
  4. include:
    include指令用于包含其他配置文件,可以将配置分为多个文件进行管理,提高配置文件的可读性和维护性。

/etc/named.conf是BIND服务的主要配置文件,通过修改该文件可以自定义BIND服务器的行为和属性。管理员可以根据实际需求,对其中的配置项进行调整和定制,以满足特定的DNS服务需求。

DNS查询

本地DNS服务器在递归查询过程中可能会从根域名服务器开始,也可能直接向权威域名服务器发送查询请求。

DNS缓存机制

DNS缓存机制在浏览器、操作系统、路由器、ISP(Internet Service Provider)和递归DNS服务器中都起着重要的作用。下面是对每个部分的详细说明:

  1. 浏览器缓存:
    浏览器会在本地缓存中存储最近访问的域名解析结果。当用户再次访问相同的域名时,浏览器首先检查本地缓存,如果存在相应的解析结果且未过期,则直接使用缓存结果,避免再次发送DNS查询请求。

  2. 操作系统缓存:
    操作系统也会维护一个DNS缓存,存储最近的域名解析结果。这个缓存属于系统级别的缓存,被多个应用程序共享。当应用程序发起域名查询请求时,操作系统首先检查自己的缓存,如果有匹配的解析结果,会直接返回给应用程序,而无需进行网络查询。

  3. 路由器缓存:
    一些路由器也会具有DNS缓存功能,以减少内部网络中的DNS查询次数。当设备连接到路由器并发起DNS查询请求时,路由器会检查自己的缓存,如果存在匹配的解析结果,则直接返回给设备,避免向上游DNS服务器发送查询请求。

  4. ISP缓存:
    ISP(Internet Service Provider,互联网服务提供商)通常会维护自己的DNS缓存。当用户通过ISP的网络连接访问域名时,ISP的DNS服务器会首先检查自己的缓存,如果有相应的解析结果,则直接返回给用户。这样可以减少对上层DNS服务器的查询,提高查询速度。

  5. 递归DNS服务器缓存:
    递归DNS服务器是负责处理DNS解析请求的服务器。它们在处理请求过程中也会进行缓存。当递归DNS服务器接收到查询请求时,它会先检查自己的缓存,如果有匹配的解析结果,则直接返回给请求的客户端。如果缓存中没有,则递归DNS服务器会按照DNS解析过程中的步骤,向上层DNS服务器发送查询请求,并将获取的解析结果保存在缓存中,以备将来使用。

解析过程

追踪整个域名解析的过程。

[root@localhost named]# dig +trace www.baidu.com

DNS(Domain Name System)的解析过程涉及多个步骤和参与者,包括递归查询、缓存查询、迭代查询和权威服务器等。下面是一个详细的、全面的DNS解析过程的说明:

  1. 发起域名查询请求:
    用户在浏览器或其他应用程序中输入一个域名(例如www.baidu.com),然后向本地DNS服务器发送查询请求。

  2. 本地DNS服务器缓存查询:
    本地DNS服务器首先会检查自己的缓存,看是否存在该域名的解析结果。如果在缓存中找到了对应的解析结果,且该结果未过期(根据TTL时间确定),则本地DNS服务器将直接返回解析结果给客户端。

  3. 递归查询:
    如果本地DNS服务器的缓存中没有对应的解析结果,它将执行递归查询。递归查询是指本地DNS服务器负责从根域名服务器开始,一直追踪查询过程,直到获得最终的解析结果。

  4. 根域名服务器查询:
    本地DNS服务器向根域名服务器发送查询请求,询问根域名服务器关于顶级域名(例如.com)的权威域名服务器的IP地址。

  5. 顶级域名服务器查询:
    根域名服务器返回给本地DNS服务器关于顶级域名的权威域名服务器的IP地址。本地DNS服务器接着向该权威域名服务器发送查询请求,询问次级域名(例如baidu.com)的权威域名服务器的IP地址。

  6. 权威域名服务器查询:
    本地DNS服务器继续向次级域名的权威域名服务器发送查询请求,请求获取具体的域名解析结果。

  7. 解析结果返回:
    权威域名服务器返回解析结果给本地DNS服务器。本地DNS服务器将结果保存在缓存中,并将解析结果返回给发起查询请求的客户端。

  8. 解析结果传递:
    本地DNS服务器将解析结果传递给客户端,使客户端能够建立与所查询域名对应的IP地址的连接。

  9. 缓存更新:
    本地DNS服务器将新获得的解析结果保存在缓存中,以便在下次有相同查询请求时可以直接返回结果,提高查询效率。

需要注意的是,DNS解析过程中存在着缓存机制,即在每个DNS服务器上都有一个缓存,用于存储最近的解析结果。缓存可以减轻DNS服务器的负载,加快域名解析速度,并提高整体的网络性能。

优化和变化,例如使用负载均衡的DNS服务器、DNS缓存的更新策略、DNS安全扩展(例如DNSSEC)等。但总体而言,以上步骤描述了DNS解析过程的主要流程和参与者。

递归查询和迭代查询

在DNS中,递归查询和迭代查询是两种不同的查询方式,用于解析域名并获取相应的IP地址。

  1. 递归查询(Recursive Query):
    递归查询是指客户端向本地DNS服务器发送查询请求,并要求本地DNS服务器负责进行完整的解析过程。当本地DNS服务器接收到递归查询请求后,它会负责从根域名服务器开始一直追踪查询过程,直到获得最终的解析结果,并将结果返回给客户端。递归查询的过程中,本地DNS服务器会代表客户端与其他DNS服务器进行通信,获取所需的信息。

使用递归查询的优点是它能够提供完整的解析结果,客户端只需要发送一次查询请求,而无需自己去跟踪查询过程。递归查询适用于普通用户或客户端,因为它简化了查询的过程,让用户能够快速获取所需的IP地址。

  1. 迭代查询(Iterative Query):
    迭代查询是指DNS服务器之间进行的一种查询方式,其中一个DNS服务器向另一个DNS服务器发送查询请求,并且期望得到一个具体的响应,而不是完整的解析结果。当接收到迭代查询请求的DNS服务器接收到请求后,它会返回自己所知道的信息,或者告诉请求的DNS服务器去询问其他DNS服务器。这个过程会一直重复,直到得到最终的解析结果。

使用迭代查询的优点是它更加灵活,DNS服务器之间可以相互交互并进行信息交换,以获得最终的解析结果。迭代查询适用于DNS服务器之间的通信和协作,例如当本地DNS服务器需要向其他DNS服务器查询域名解析结果时,就可以使用迭代查询。

总结:

  • 递归查询用于客户端向本地DNS服务器查询,本地DNS服务器负责从根域名服务器开始追踪查询过程,直到获取最终的解析结果。
  • 迭代查询用于DNS服务器之间的查询,一个DNS服务器向另一个DNS服务器发送查询请求,并且期望得到具体的响应,过程中可能需要多次交互。

在实际使用中,通常客户端使用递归查询方式向本地DNS服务器发送查询请求,而DNS服务器之间则使用迭代查询方式进行通信和协作,以完成域名解析的过程。

DNS服务器的类型

DNS服务器可以根据其角色和功能进一步分为缓存域名服务器、主域名服务器和从域名服务器。

  1. 缓存域名服务器:
    缓存域名服务器是最常见的DNS服务器类型。它们负责缓存最近的域名解析结果,以提高查询性能和减轻上层DNS服务器的负载。当接收到查询请求时,缓存域名服务器首先检查自己的缓存,如果存在匹配的解析结果,则直接返回给请求者。如果缓存中没有相应的结果,它会向上层DNS服务器发送查询请求,并将获取的结果保存在缓存中供将来使用。

  2. 主域名服务器:
    主域名服务器是负责管理特定域名的权威域名服务器之一。它存储了该域名的全部解析记录,包括IP地址、MX记录、CNAME记录等。主域名服务器是授权提供特定域名解析结果的服务器,在域名解析过程中,其他DNS服务器会向主域名服务器查询相关域名的解析信息。

  3. 从域名服务器:
    从域名服务器也是权威域名服务器,它与主域名服务器同步,并存储了主域名服务器的副本。从域名服务器的主要作用是提供冗余和容错性,以确保即使主域名服务器不可用,仍能继续提供域名解析服务。从域名服务器定期与主域名服务器进行数据同步,以保持数据的一致性。

主域名服务器和从域名服务器一起构成了域名的权威域名服务器组。主域名服务器存储并管理域名解析信息的主要副本,而从域名服务器则保存主域名服务器的备份副本,以提供冗余和可靠性。

DNS域名

nslookup是一个查询域名的命令

ping、host、dig

windows里有一个域名查询的命令

ping和nslookup

[root@localhost ~]# nslookup
> set type=ns
> qq.com
Server:		192.168.2.1
Address:	192.168.2.1#53

Non-authoritative answer:
qq.com	nameserver = ns1.qq.com.
qq.com	nameserver = ns2.qq.com.
qq.com	nameserver = ns4.qq.com.
qq.com	nameserver = ns3.qq.com.

DNS服务器的类型

DNS系统中有不同类型的服务器,包括缓存域名服务器、主域名服务器和从域名服务器。下面对它们进行详细解释:

  1. 缓存域名服务器(也称为本地域名服务器或递归域名服务器):
    缓存域名服务器是位于网络中的计算机或设备,它们负责接收来自客户端的DNS查询请求,并尝试解析域名。缓存服务器的主要目标是提供高效的域名解析,并尽可能减少对上层服务器的查询。它们通过在本地缓存中存储最近解析的域名和对应的IP地址,以便快速响应重复的查询请求。如果缓存服务器无法解析请求,它将向上层的主域名服务器发出查询请求。

  2. 主域名服务器(也称为权威域名服务器或域名服务器):
    主域名服务器是负责管理特定域名的服务器。它们存储着特定域名下的DNS记录,例如A记录、CNAME记录、MX记录等。当缓存域名服务器向主域名服务器查询某个域名时,主域名服务器会提供该域名的DNS记录。主域名服务器通常由域名的所有者或管理员进行管理和配置,并确保域名的解析信息是最新的。

  3. 从域名服务器(也称为辅助域名服务器或镜像域名服务器):
    从域名服务器是对主域名服务器进行备份和复制的服务器。它们存储着主域名服务器上的域名解析信息的副本。从域名服务器的主要作用是提高系统的冗余和可靠性。当主域名服务器不可用或负载过高时,从域名服务器可以接收和处理DNS查询请求,确保域名解析的可用性。从域名服务器会定期与主域名服务器同步更新,以确保数据的一致性。

综上所述,缓存域名服务器用于接收和缓存DNS查询请求,以提供快速的域名解析。主域名服务器存储特定域名的DNS记录,并提供域名解析的权威信息。从域名服务器是主域名服务器的备份,并提供冗余和可靠性。这些服务器协同工作,确保DNS系统的正常运行和高效性能。

搭建dns服务器

数据文件: 存放域名解析相关的数据的

[root@localhost named]# pwd
/var/named

SELinuxfirewalld服务关闭。

[root@localhost ~]# getenforce
Disabled
[root@localhost ~]# service firewalld stop

1.下载

[root@localhost ~]# yum install bind*

bind-utils 提供了很多的dns域名查询的命令

[root@localhost ~]# rpm -qf /bin/nslookup
bind-utils-9.11.4-26.P2.el7_9.13.x86_64
[root@localhost ~]# rpm -qf /bin/dig
bind-utils-9.11.4-26.P2.el7_9.13.x86_64

2.设置named服务开机启动,并且立马启动DNS服务

[root@localhost ~]# service named start
Redirecting to /bin/systemctl start named.service

[root@localhost ~]# systemctl start named.service

[root@localhost ~]# systemctl enable named
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.

  1. service named start
    这是一种旧的启动服务的方式,它将根据系统的/etc/init.d/目录中的脚本来启动名为named的服务。在这种情况下,它将执行/etc/init.d/named start命令来启动BIND服务。
  2. systemctl start named.service
    这个命令使用systemctl命令来启动名为named.service的服务。named.service是BIND服务的系统单位(unit),systemctl命令用于管理系统单位。启动服务后,BIND将开始运行并监听DNS请求。
  3. systemctl enable named
    这个命令使用systemctl命令将名为named的服务设置为在系统引导时自动启动。它创建了一个符号链接(symlink),将/usr/lib/systemd/system/named.service链接到/etc/systemd/system/multi-user.target.wants/named.service,从而确保在系统启动时启用BIND服务。

3.看进程和端口看服务是否已经启动了。

[root@localhost ~]# ps aux|grep named
named     42128  0.0  3.0 242032 57628 ?        Ssl  16:42   0:00 /usr/sbin/named -u named -c /etc/named.conf
root      42390  0.0  0.0 112824   988 pts/1    S+   16:46   0:00 grep --color=auto named
[root@localhost ~]# netstat -anplut|grep named
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      42128/named         
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      42128/named         
tcp6       0      0 ::1:53                  :::*                    LISTEN      42128/named         
tcp6       0      0 ::1:953                 :::*                    LISTEN      42128/named         
udp        0      0 127.0.0.1:53            0.0.0.0:*                           42128/named         
udp6       0      0 ::1:53                  :::*                                42128/named    

修改本机的dns解析文件,增加我们自己的dns服务器地址

[root@localhost ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
#nameserver 192.168.2.1
#nameserver 2409:8950:40:a756:81cd:1b25:9622:fc3a
nameserver 127.0.0.1

/etc/resolv.conf 文件中的配置,系统当前使用的 DNS 解析服务器是本地回环地址 127.0.0.1。这意味着系统使用本机上运行的 DNS 解析服务进行域名解析。

测试查询

[root@localhost ~]# nslookup
> www.qq.com
Server:		127.0.0.1
Address:	127.0.0.1#53

Non-authoritative answer:
www.qq.com	canonical name = ins-r23tsuuf.ias.tencent-cloud.net.
Name:	ins-r23tsuuf.ias.tencent-cloud.net
Address: 121.14.77.221
Name:	ins-r23tsuuf.ias.tencent-cloud.net
Address: 121.14.77.201
Name:	ins-r23tsuuf.ias.tencent-cloud.net
Address: 2402:4e00:1020:1404:0:9227:71ab:2b74
Name:	ins-r23tsuuf.ias.tencent-cloud.net
Address: 2402:4e00:1020:1404:0:9227:71a3:83d2

缓存域名服务器

两台机器实验():

修改/etc/named.conf文件

这样外来网也可以用该ip了。

options {
    listen-on port 53 { any; }; 		修改	
    listen-on-v6 port 53 { any; };		修改
    directory   "/var/named";
    dump-file   "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";    recursing-file  "/var/named/data/named.recursing";
    secroots-file   "/var/named/data/named.secroots";
    allow-query     { any; };			修改

另外一台机器的设置如下:
进入/etc/sysconfig/network-scripts修改ifcfg-ens33 如下:

OTPROTO="none"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.2.25
PREFIX=24
GATEWAY=192.168.2.1
DNS1=192.168.2.24			#关键

DNS服务器用于将域名转换为与之关联的IP地址。当你在浏览器中输入一个网址时,例如www.example.com,你的设备会向DNS服务器发送请求,以获取该域名对应的IP地址。在这种情况下,DNS1被设置为192.168.2.24,这是一个本地的DNS服务器地址。

[root@ydh-mysql network-scripts]# nslookup
> qq.com
Server:		192.168.2.24
Address:	192.168.2.24#53

这样就表示设置成功了。

主域名服务器

主配置文件:/etc/named.conf

次要配置文件:/etc/named.rfc1912.zones

主进程名字:named

监听的端口:53 /tcp/udp

记录类型:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X0K1MKPO-1689352566873)(C:\Users\asus\AppData\Roaming\Typora\typora-user-images\image-20230624193052653.png)]

1.在次要配置文件进行修改

在文件中添加

zone "ydh.com" IN {
    type master;
    file "ydh.com.zone";
    allow-update { none; };
};


2.在/var/named目录下创建ydh.com.zone文件,可以直接复制named.localhost 同时重命名为ydh.com.zone

[root@localhost named]# cp -a named.localhost  ydh.com.zone
cp:是否覆盖"ydh.com.zone"? y
[root@localhost named]# ll
总用量 20
drwxr-x--- 7 root  named   61 6月  24 16:39 chroot
drwxr-x--- 7 root  named   61 6月  24 16:39 chroot_sdb
drwxrwx--- 2 named named   23 6月  24 16:42 data
drwxrwx--- 2 named named   60 6月  24 17:41 dynamic
drwxrwx--- 2 root  named    6 4月   1 2020 dyndb-ldap
-rw-r----- 1 root  named 2253 4月   5 2018 named.ca
-rw-r----- 1 root  named  152 12月 15 2009 named.empty
-rw-r----- 1 root  named  152 6月  21 2007 named.localhost
-rw-r----- 1 root  named  168 12月 15 2009 named.loopback
drwxrwx--- 2 named named    6 1月  26 00:48 slaves
-rw-r----- 1 root  named  152 6月  21 2007 ydh.com.zone

-a:这是cp命令的一个选项,表示以递归方式复制文件,并保留源文件的属性(包括权限、所有者、组和时间戳等)。这是一步很重要,这保存了named有权限访问ydh.com.zone文件。

3.在ydh.com.zone文件进行修改

[root@localhost named]# cat ydh.com.zone 
$TTL 1D
@	IN SOA	@ rname.invalid. (
					0	; serial		序列号	
					1D	; refresh		刷新
					1H	; retry			从服务器多长时间重新尝试去连接主服务器
					1W	; expire		从服务器的数据什么时候过去
					3H )	; minimum
	NS	@
	A	127.0.0.1
	AAAA	::1

以上是原记录。

修改如下:

[root@localhost named]# cat ydh.com.zone 
$TTL 1D
@	IN SOA	@ rname.invalid. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS	@
	IN MX 10 mail.ydh.com
	A	192.168.1.24
www IN A 192.168.1.24				集群,轮询解析
www IN A 192.168.1.25
www IN A 192.168.1.26
www IN A 192.168.1.27

main IN A 192.168.1.24
vue IN A 192.168.1.25
ftp IN A 192.168.1.120
xiaoming IN A 192.168.1.28
ming IN CNAME xiaoming				这是别名解析
* IN A 192.168.1.24 				通配符解析(泛域名解析)

在另外一台机器上进行测试:

[root@ydh-mysql ~]# nslookup www.ydh.com
Server:		192.168.2.24
Address:	192.168.2.24#53

Name:	www.ydh.com
Address: 192.168.2.26
Name:	www.ydh.com
Address: 192.168.2.27
Name:	www.ydh.com
Address: 192.168.2.24
Name:	www.ydh.com


[root@ydh-mysql ~]# nslookup xiaoming.ydh.com
Server:		192.168.2.24
Address:	192.168.2.24#53			#这里显示的ip地址是主域名服务器就可以了。

Name:	xiaoming.ydh.com
Address: 192.168.2.23

表示这已经成功了。

从域名服务器

主域名服务器的配置
192.168.2.25 -->slave的ip
192.168.2.24 -->master的ip

vim /etc/named.rfc1912.zones 

主域名服务器的配置

zone "test.com" IN {
	type master;
	file "test.com.zone";
	allow-transfer { 192.168.2.25; };
};

从域名服务器的配置

zone "test.com" IN {
	type slave;
	file "slaves/test.com.zone";
	masters { 192.168.2.24; };
};

/etc/named/slaves下创建对应文件就可以了。

[root@web1 slaves]# ls
test.com.zone

排错

1.权限问题

2.看日志:/var/log/messages

3.使用检查工具:检查配置文件和数据文件

检查数据文件是否有错误

[root@localhost named]# named-checkconf /etc/named.rfc1912.zones 

检查配置文件

[root@localhost named]# named-checkzone ydh.com /var/named/ydh.com.zone
zone ydh.com/IN: loaded serial 0
OK

查看日志:

[root@localhost named]# less /var/log/messages

反向解析

修改/etc/named.rfc1912.zones

zone "0.168.192.in-addr.arpa" IN {
	type master;
	file "192.168.0.zone";
	allow-update { none; };
};

创建数据文件:

[root@ydh namecp named.loopback 192.168.0.zone -a

修改数据文件:

[root@ydh named]# cat 192.168.0.zone 
$TTL 1D
@	IN SOA	@ rname.invalid. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS	@
	A	192.168.0.24
	AAAA	::1
	PTR	localhost.
24 IN PTR www.yan.com

测试

[root@ydh named]# nslookup
> 192.168.0.24
24.0.168.192.in-addr.arpa	name = www.yan.com.0.168.192.in-addr.arpa.

ip能正确解析到域名就方面反向解析配置成功了。

CDN

介绍

CDN(内容分发网络)是一种通过分布在全球不同地点的服务器来提供高效内容交付的网络架构。它的目标是将内容(如网页、图片、视频等)快速传送给用户,提供更好的用户体验。

CDN的工作原理如下:

  1. 原始服务器:网站的内容首先存储在原始服务器上,这是内容的源头。

  2. 边缘服务器:CDN网络由多个位于全球各地的边缘服务器组成。这些服务器分布在离用户较近的位置,通常位于不同的城市或国家。

  3. 负载均衡和缓存:当用户发起请求访问网站时,CDN会通过负载均衡算法将请求路由到最接近用户的边缘服务器。边缘服务器上有缓存,它们会缓存原始服务器上的内容,包括静态文件、图片、视频等。如果用户请求的内容已经缓存在边缘服务器上,边缘服务器会立即将内容返回给用户,减少了请求的响应时间。

  4. 动态内容和就近访问:对于动态内容(如个性化页面或需要实时生成的数据),CDN会将请求转发到原始服务器,原始服务器根据请求生成相应的动态内容,并将其返回给边缘服务器进行缓存。下次同样的请求就可以直接从边缘服务器返回,减少了请求到原始服务器的次数。

通过使用CDN,网站可以获得以下好处:

  1. 加速内容交付:由于边缘服务器分布在全球各地,用户可以从离他们最近的服务器获取内容,减少了延迟和带宽使用,加快了内容的传输速度。

  2. 节省带宽成本:CDN网络可以分担原始服务器的流量负载,减少了对原始服务器的直接请求,从而降低了带宽成本。

  3. 提供高可用性:当原始服务器出现故障或不可用时,CDN可以自动将请求路由到其他可用的边缘服务器,保证了网站的可用性。

  4. 改善用户体验:由于内容更快地交付给用户,加载速度更快,网页响应更迅速,从而提供了更好的用户体验。

总之,CDN是一种通过分布在全球的边缘服务器提供内容的网络架构,它可以加速内容交付,降低带宽成本,并提供高可用性和良好的用户体验。

DNS转发

介绍

DNS转发是指将DNS查询请求从一个DNS服务器转发到另一个DNS服务器以获取查询结果的过程。通常情况下,DNS服务器会根据其配置和功能进行查询的处理,但在某些情况下,DNS服务器可能无法直接提供查询结果,或者需要从其他DNS服务器获取更准确的结果。这时,DNS转发就起到了关键的作用。

以下是DNS转发的详细介绍:

  1. 转发原理:
    当DNS服务器接收到一个查询请求时,如果配置为启用转发功能,它会将查询请求发送给预定义的转发器(也称为上游服务器)。转发器是一个可信赖的、更高级别的DNS服务器,它负责处理查询请求并返回响应结果。

  2. 转发流程:

    • 客户端向本地DNS服务器发送查询请求。
    • 本地DNS服务器检查自身的缓存,如果找到匹配的结果,直接返回响应给客户端。
    • 如果本地DNS服务器的缓存中没有查询结果,它会将查询请求发送给预配置的转发器。
    • 转发器接收到查询请求后,会根据自身的配置和功能处理查询请求,可能会进行递归查询或向其他DNS服务器发送查询请求。
    • 转发器获取查询结果后,将结果返回给本地DNS服务器。
    • 本地DNS服务器将结果缓存,并将响应返回给客户端。
  3. 转发的优点:

    • 提高查询性能:通过转发查询请求给更高级别的DNS服务器,可以利用其更大的资源和更广泛的缓存来提高查询性能和响应速度。
    • 解决递归查询问题:某些网络环境中,DNS服务器可能无法进行递归查询,或者需要使用特定的DNS服务器来进行递归查询。通过转发查询请求,可以将递归查询任务交给配置好的转发器来完成。
    • 过滤恶意请求:通过设置合适的转发器,可以对查询请求进行过滤和安全筛选,防止恶意请求或垃圾查询进入本地DNS服务器。
  4. 转发的配置:
    在DNS服务器的配置中,通常需要指定转发器的IP地址或主机名。可以配置多个转发器,以实现冗余和负载均衡。同时,还可以设置转发超时时间和转发器的优先级,以进一步优化转发过程。

总结而言,DNS转发是一种将查询请求从一个DNS服务器转发到另一个DNS服务器的机制。它能提高查询性能、解决递归查询问题,并允许进行过滤和安全筛选。通过合理配置转发器,可以有效地管理和优化DNS查询过程。

配置

修改/etc/named.conf文件

options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { any; };
       forward  only;
        forwarders { 192.168.2.130; 114.114.114.114; };

BIND的forward转发机制的这样的:
当设置了forwarders转发器后,所有非本域的和在缓存中无法找到的域名查询都将转发到设置的DNS转发器上,由这台DNS来完成解析工作并做缓存,因此这台转发器的缓存中记录了丰富的域名信息。因而对非本域的查询,很可能转发器就可以在缓存中找到答案,避免了再次向外部发送查询,减少了流量。

问题:

转发器没有给我们做解析

在本地dns服务器的配置文件里注释一条配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HtvRpgGz-1689352566874)(C:\Users\asus\AppData\Roaming\Typora\typora-user-images\image-20230630200900358.png)]

在DNS配置中,使用 forward only 指令时,并不需要包含 include "/etc/named.root.key"; 这一行。这两者之间没有直接的关联。

include "/etc/named.root.key"; 是用于引入根域名服务器的密钥文件,用于验证从根域名服务器返回的数据的完整性和真实性。这与 DNS 转发的工作方式没有直接的依赖关系。

forward only 指令指示 DNS 服务器只使用配置的转发器(forwarders)进行域名解析,不会尝试其他解析方式。它独立于密钥文件的设置。

因此,如果你想要使用 forward only 指令进行 DNS 转发,你可以将 include "/etc/named.root.key"; 这一行注释掉,或者保持不包含在配置文件中,不会影响转发的功能。

DNS劫持

当你在浏览器中输入一个网址,比如"www.baidu.com",你的计算机会向域名系统(DNS)服务器发送请求,以获取该网址对应的IP地址。DNS劫持是一种恶意行为,它会干扰这个过程,将用户的DNS请求重定向到一个恶意的IP地址上,而不是正确的IP地址。

DNS劫持可以分为两种类型:本地DNS劫持和远程DNS劫持。

  1. 本地DNS劫持:
    在本地DNS劫持中,恶意软件或黑客修改了用户计算机或本地网络上的DNS设置,以将用户的DNS请求重定向到错误的IP地址。这可以导致用户访问的网站被劫持或重定向到恶意网站,而用户可能不知情。

  2. 远程DNS劫持:
    远程DNS劫持是通过攻击公共的DNS服务器或网络基础设施来实施的。黑客可以通过篡改或破坏DNS服务器的响应,将用户的DNS请求重定向到恶意IP地址上。这种类型的DNS劫持可以广泛地影响多个用户,甚至可能影响整个网络。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐