DNS-域名系统

DNS-域名系统

1.工作逻辑

DNS(域名系统)是互联网的一项核心服务,它负责将人类可读的网址(例如 www.google.com)转换为计算机可理解的 IP 地址(例如 172.217.0.4)。下面是 DNS 的基本工作过程:

  1. 用户的请求:当你在浏览器中输入一个 URL(如 www.google.com)并按下)Enter 键时,浏览器首先会检查本地 DNS 缓存(操作系统和浏览器都会维护自己的 DNS 缓存),看是否已经有对应的 IP 地址。如果有,就直接用这个 IP 地址去连接服务器。如果没有,浏览器会向你的 ISP(Internet Service Provider,互联网服务提供商)的 DNS 服务器发送查询请求。
  2. 递归查询:ISP 的 DNS 服务器首先会检查它自己的缓存。如果找到了匹配的记录,就会直接返回。如果没有,它会开始一个递归查询。首先,它会联系互联网的根 DNS 服务器。根服务器不会知道具体的 IP 地址,但会知道负责管理 .com 域的顶级域(TLD)服务器在哪里,然后返回给 ISP 的 DNS 服务器。
  3. 向 TLD 服务器查询:ISP 的 DNS 服务器收到响应后,会向 TLD 服务器发送查询请求,寻找负责 google.com 域的权威 DNS 服务器的地址。
  4. 向权威 DNS 服务器查询:TLD 服务器会返回权威 DNS 服务器的地址,然后 ISP 的 DNS 服务器会向权威 DNS 服务器发送查询请求,这次查询请求是为了得到 www.google.com 的 IP 地址。
  5. 返回 IP 地址:权威 DNS 服务器会查找它的记录,找到 www.google.com 的 IP 地址,并返回给 ISP 的 DNS 服务器。然后 ISP 的 DNS 服务器会将 IP 地址返回给用户的计算机。
  6. 浏览器连接到服务器:浏览器收到 IP 地址后,就可以通过 IP 地址连接到服务器,并请求页面内容。

这个过程可能看起来很复杂,但实际上它是非常快速的,通常只需要几十到几百毫秒。同时,由于 DNS 查询结果会被缓存,所以常访问的网站的 IP 地址查询会更快。

DNS 的工作过程是分层次的,每一层都有专门的服务器执行特定的任务。下面是这个过程的简要说明:

1.根 DNS 服务器:这是 DNS 查询的起点。互联网上有 13 组根服务器(每组都有多个服务器以提高可用性),它们负责知道所有顶级域(TLD)服务器的位置。例如,它们知道哪些服务器负责管理 .com、.net、.org 等顶级域。

2.TLD(顶级域)服务器:这些服务器负责管理特定的顶级域名,例如 .com、.org 等。当根服务器接收到一个请求后,根据请求的 TLD,它会将请求转发到对应的 TLD 服务器。例如,对于请求 www.google.com,根服务器将请求转发到管理 .com 域的 TLD 服务器。

3.权威 DNS 服务器:这些服务器负责管理他们所拥有的域名下的所有子域名。例如,Google 会有一个权威服务器,负责管理所有以 google.com 结尾的子域名(如 mail.google.com,maps.google.com等)。当 TLD 服务器接收到请求后,它会将请求转发到对应的权威 DNS 服务器。

4.递归 DNS 服务器:这类服务器通常由你的网络服务提供商(ISP)运营。当你在浏览器中输入一个 URL(如 www.google.com)时,请求首先发送到递归 DNS 服务器。这个服务器然后按照上述步骤,向根服务器、TLD 服务器和权威 DNS 服务器查询对应的 IP 地址,最后将这个 IP 地址返回给你的电脑。

这个过程中的一个关键特点是缓存。在每一步中,如果一个服务器已经知道请求的答案,它就不需要向上游服务器查询。这就减少了网络流量和延迟,提高了 DNS 查询的速度。

总的来说,DNS 的工作逻辑是一个分层查询的过程,从根服务器开始,然后是 TLD 服务器,然后是权威 DNS 服务器,最后是递归 DNS 服务器。这个过程允许 DNS 系统在全球范围内分布,同时能够快速、可靠地解析域名。

2.注意点

  1. 负载均衡和智能 DNS:有时,权威 DNS 服务器可能返回多个 IP 地址,这是因为一些大型网站会将其流量分散到多个服务器上以平衡负载。此外,一些先进的 DNS 服务,如 Google’s Global Load Balancer,甚至可以根据用户的地理位置、网络条件和服务器健康状况来智能地选择返回哪个 IP 地址。
  2. DNS 缓存污染和 DNS 欺诈:由于 DNS 查询的结果被缓存,这就有可能被恶意利用。例如,攻击者可能会试图将错误的查询结果插入 DNS 缓存中,导致用户被重定向到恶意网站。这被称为 DNS 缓存污染。此外,攻击者可能会建立一个假的 DNS 服务器,并尝试欺骗用户的计算机或 ISP 的 DNS 服务器使用这个假服务器,这被称为 DNS 欺诈。这两种攻击都可能导致严重的安全问题。
  3. DNSSEC(DNS 安全扩展):为了防止上述攻击,DNSSEC 协议被设计出来。DNSSEC 为 DNS 查询提供了源认证和数据完整性,但不提供保密性。通过使用公钥加密技术,DNSSEC 保证了 DNS 响应的有效性和完整性。
  4. DNS over HTTPS(DoH)或 DNS over TLS(DoT):这两种新技术都是为了提高 DNS 查询的隐私保护。传统的 DNS 查询是明文的,容易被监听和窃取。DoH 和 DoT 通过在 DNS 查询上添加 HTTPS 或 TLS 加密层,使得 DNS 查询变得不易被拦截和篡改。
  5. 分布式 DNS:DNS 系统是一个分布式的数据库系统,这意味着没有中央服务器存储所有的 DNS 记录。相反,DNS 记录被分散在全球数百万台的 DNS 服务器上。这种设计使得 DNS 系统具有极高的可用性和可扩展性,但也使得 DNS 管理和安全性成为一项挑战。

3.安装bind

BIND 是最流行的 DNS 服务器软件之一,它全称为 Berkeley Internet Name Domain,由 Internet Systems Consortium 开发和维护。

#在大多数的 Linux 发行版中,可以使用包管理工具来安装 BIND。以 Ubuntu/Debian 和 CentOS/RHEL 为例:
# Ubuntu/Debian:
sudo apt-get update
sudo apt-get install bind

#CentOS/RHEL:
sudo yum install bind bind-utils

4.使用bind

BIND 的主要配置文件通常位于 /etc/named.conf

# 1.编辑 /etc/named.conf,设置 DNS 转发器。这是可选的,但可以增加解析速度
options {
    directory "/var/cache/bind";
    recursion yes;
    allow-query { any; };
    forwarders {
        8.8.8.8;  // Google 的 DNS
        8.8.4.4;  // Google 的 DNS
    };
    forward only;
};

# 2.在 /etc/named.rfc1912.zones 文件中定义你的 DNS 区域。例如,假设你想要为 example.com 配置 DNS,可以添加以下配置:
zone "example.com" {
    type master;
    file "/etc/bind/zones/db.example.com";
};

# 3.创建你的区域文件(如 /var/named/magedu.org.zone)并设置 DNS 记录。例如:
$TTL    604800
@       IN      SOA     ns.example.com. admin.example.com. (
                          3         ; Serial
                     604800         ; Refresh
                      86400         ; Retry
                    2419200         ; Expire
                     604800 )       ; Negative Cache TTL
;
@       IN      NS      ns.example.com.
@       IN      A       192.0.2.1
@       IN      MX      10 mail.example.com.
ns      IN      A       192.0.2.2
mail    IN      A       192.0.2.3
www     IN      CNAME   @

# 最后,重启 BIND 服务来使改动生效:
sudo systemctl restart named

# 启动named以后,可以通过这个命令来重新加载变动的内容,使配置生效
rndc reload

5.DNS缓存

NSCD (Name Service Cache Daemon) 是一个守护进程,它在本地缓存DNS查询结果和其他命名服务查询结果,以提高查询速度和减轻DNS服务器的负担。在CentOS 7中,可以通过以下步骤安装和配置NSCD:

# 1.安装NSCD:
在CentOS 7上,可以使用yum包管理器来安装NSCD。打开终端并执行以下命令:
sudo yum install nscd

# 2.启动nscd
systemctl enable --now nscd

# 3.查看缓存
nscd -g

# 4.配置nscd
vim /etc/nscd.conf
默认情况下,NSCD已经预配置了一些缓存项,比如hosts(用于DNS查询)和passwd/group(用于用户和组查询)。您可以根据需要自定义这些缓存项的大小和超时时间。

# 要增加DNS查询结果的缓存时间,找到以下行:
positive-time-to-live hosts 3600
将3600更改为所需的缓存时间(以秒为单位)。然后保存并关闭文件。

# 清空缓存
sudo systemctl restart nscd


# 在安装过程可能由于glibc-common包的版本和ndcd的版本不一致安装不上
Error: Package: glibc-2.17-317.el7.i686 (base)
           Requires: glibc-common = 2.17-317.el7
           Installed: glibc-common-2.17-326.el7_9.x86_64 (installed)
               glibc-common = 2.17-326.el7_9
           Available: glibc-common-2.17-317.el7.x86_64 (base)
               glibc-common = 2.17-317.el7
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
[root@centos7 ~]#

# 降级版本
yum downgrade glibc glibc-devel glibc-common glibc-headers

# 查询安装信息
yum list nscd --showduplicate

# 或者更新yum源找到与 glibc-common-2.17-326.el7_9.x86_64 对应版本的nscd
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sed -i  's/$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repo
yum repolist 

yum list nscd --showduplicate
# 输出如下:
Available Packages
nscd.x86_64                                                                              2.17-317.el7                                                                                base
nscd.x86_64                                                                              2.17-322.el7_9                                                                              updates
nscd.x86_64                                                                              2.17-323.el7_9                                                                              updates
nscd.x86_64                                                                              2.17-324.el7_9                                                                              updates
nscd.x86_64                                                                              2.17-325.el7_9                                                                              updates
nscd.x86_64

6.区域数据库的编写

BIND(Berkeley Internet Name Domain)是最广泛使用的DNS服务器软件,它可以将人类可读的网站名称转换为互联网上的IP地址。在BIND中,你可以创建和编辑区域文件,以定义DNS服务器应如何解析特定的域名。

区域文件(也被称为zone file)是BIND DNS服务器中的一个文件,用于定义一个或多个DNS域的参数。区域文件包含一系列的资源记录,包括SOA记录、NS记录、A记录、AAAA记录、CNAME记录、MX记录等。区域文件的目录一般在/var/named/目录下。

# 区域文件包含一组资源记录(Resource Records, RR)。每个资源记录都对应于一个特定的DNS查询类型。以下是一些最常见的资源记录类型:

1.SOA记录(Start of Authority):这是区域文件的第一条记录,包含管理该区域的主 DNS 服务器和管理员的联系信息,以及一些与该区域刷新和过期时间相关的设置,这种记录包含关于DNS区域的全局设置,如负责该区域的邮箱、区域的序列号、刷新时间等。
2.A记录(Address):这种记录将一个主机名解析为一个IPv4地址。
3.AAAA记录:这种记录将一个主机名解析为一个IPv6地址。
4.CNAME记录(Canonical Name):这种记录将一个主机名解析为另一个主机名,也称为别名。
5.MX记录(Mail Exchange):这种记录定义用于电子邮件的服务器。
6.NS记录(Name Server):这种记录定义处理特定区域的DNS服务器。
7.SRV记录:这种记录用于指定特定服务的位置。例如,SRV记录可以被用来在网络上发现SIP(Session Initiation Protocol)服务或LDAP(Lightweight Directory Access Protocol)服务。
# SRV语法:
_service._proto.name. TTL class SRV priority weight port target.

8.TXT记录(Text):这种记录包含任何文本。它们经常被用于各种验证目的,如SPF(Sender Policy Framework)和DKIM(DomainKeys Identified Mail)。
# TXT语法:
name. TTL class TXT "text"

# SOA语法:
name. TTL class SOA MNAME RNAME ( SERIAL REFRESH RETRY EXPIRE MINIMUM )
# 例如:
example.com. 3600 IN SOA ns1.example.com. hostmaster.example.com. (
  	   1 	; Serial
  	   1D  	; Refresh
       1H   ; Retry
       1W	; Expire
       3H   ; Minimum
)
# 含义解释:
serial:这是区域文件的版本号。当你对区域文件进行修改时,应该将此数值增加。这个数字用于从 DNS 服务器通知其从服务器哪些区域已经更新了。
refresh:这个数字定义了从服务器多久去检查一次更新(在主服务器上)。在你的例子中,1D 代表一天(D 是 day 的缩写)。
retry:如果从服务器未能在 refresh 参数定义的时间内达到主服务器,这个数字定义了从服务器在第一次失败后应该等待多久才尝试再次联系主服务器。在你的例子中,1H 代表一小时(H 是 hour 的缩写)。
expire:这个数字定义了从服务器在无法联系主服务器后应该多久停止回答关于这个区域的查询。在你的例子中,1W 代表一周(W 是 week 的缩写)。
minimum:这个数字定义了其他服务器和应用程序在其缓存中保存区域数据多久。在你的例子中,3H 代表三小时
这些参数都用于 DNS 系统中的区域数据复制和缓存过程。

# 基础语法:
name ttl class type data

# 含义:
name是你要解析的主机名。
ttl是这个记录在其它DNS服务器的缓存时间,以秒为单位。
class几乎总是IN,表示“Internet”。
type是记录的类型,如A、AAAA、CNAME、MX或NS。
data是对应记录类型的特定数据。

# 案例(;表示注释):
; A 记录
example.com.   3600   IN   A   192.0.2.1

; AAAA 记录
example.com.   3600   IN   AAAA   2001:0db8:85a3::8a2e:0370:7334

; CNAME 记录
www.example.com.   3600   IN   CNAME   example.com.

; MX 记录
example.com.   3600   IN   MX 10   mail.example.com.

; NS 记录
example.com.   3600   IN   NS   ns1.example.com.

; SRV 记录
_sip._tcp.example.com. 3600 IN SRV 10 60 5060 sipserver.example.com.
# 在这里,_sip._tcp定义了服务和协议,10是优先级,60是权重,5060是端口,sipserver.example.com是处理该服务的服务器。

; TXT 记录
example.com. 3600 IN TXT "v=spf1 +mx -all"
# 案例:
$TTL 86400 ;默认是秒。或者写成$TTL 1D
@ IN SOA ns1.example.com. hostmaster.example.com. (
      2023072401 ; Serial
      3600       ; Refresh
      1800       ; Retry
      604800     ; Expire
      86400      ; Minimum
)

; NS记录定义了负责这个区域的名字服务器。
@ IN NS ns1.example.com.

; A记录和AAAA记录将域名解析为IP地址。
example.com. IN A 192.0.2.1
example.com. IN AAAA 2001:0db8:85a3::8a2e:0370:7334

; CNAME记录创建一个别名。
www IN CNAME example.com.

; MX记录定义了用于这个域的邮件服务器。
@ IN MX 10 mail.example.com.

# 解释:
在这个示例中:

# $TTL 86400定义了资源记录的默认生存时间(Time To Live)。如果一个记录没有指定TTL,就会使用这个默认值。
# @:这个符号在区域文件中代表了当前区域的原始或完整名称。例如,如果你的区域是 example.com.,那么 @ 就代表 example.com.。
# 每个资源记录的行首是域名,如果省略了域名(如CNAME记录),就会使用上一条记录的域名。省略了IN也会从最开始的SOA开始继承
# 除了SOA记录,所有的其他记录都可以以任意的顺序出现,但是SOA记录必须是第一条记录,且每个区域只能有一条SOA记录。区域文件结束时,常常以一行只含有一个单独的EOF(End Of File)标记结束,但这不是必须的。
# *:这个符号是一个通配符,代表任何没有显式定义的主机名。例如,如果你有一个 A 记录像 *.example.com. A 192.0.2.1,那么任何像 anything.example.com 这样的主机名都会解析到 192.0.2.1,只要 anything.example.com 没有在其他地方被明确定义。

7.实现主DNS服务器

# 编辑bind的主配置文件
# 前提:关闭selinux,关闭防火墙,时间同步
vim /etc/named.conf

listen-on port 53 { 127.0.0.1; };
allow-query { localhost; };
# 直接注释掉上面两行或者修改为下面的方式即可
# 1. listen-on port 53 { 127.0.0.1; }; 这一行告诉BIND服务器在本地地址(127.0.0.1)的53端口上监听DNS请求。如果你想让服务器在所有可用接口上监听,你可以将其修改为 any,如下所示:
listen-on port 53 { any; };
listen-on port 53 { 192.0.2.1; 203.0.113.1; };
listen-on port 53 { localhost; };
# 这三种方式都可以,这里的localhost不是127.0.0.1的意思,而是获取的本机的实际ip地址
udp               UNCONN             0                  0                                     10.0.0.100:53                                  0.0.0.0:*

# 2. allow-query { localhost; }; 这一行定义了哪些客户端可以对BIND服务器进行查询。当前设置只允许本地主机进行查询。如果你想允许所有客户端进行查询,你可以将其修改为 any,如下所示:
allow-query { any; };
allow-query { none; };
# 如果你只想允许某些特定的客户端进行查询,你可以列出它们的IP地址,如下所示:
allow-query { 192.0.2.1; 203.0.113.1; };


# 在listen-on port 53 { };和allow-query { };这两个配置中,你可以指定任何有效的IP地址、网络或者地址匹配列表,包括:
单个IP地址,例如192.0.2.1。
网络,例如192.0.2.0/24。
地址匹配列表,例如{ 192.0.2.0/24; 203.0.113.0/24; };# 除此之外,BIND还提供了一些内置的地址匹配列表:
any:匹配任何IP地址。
localhost:匹配环回地址127.0.0.1和::1。
localnets:匹配与服务器所有接口在同一子网的地址。
none:不匹配任何地址。
# 定义区域,添加主域名
vim /etc/named.rfc1912.zones

# 这里的“IN”可以省略
zone "magedu.org" IN {
    type master;
    file "magedu.org.zone";
};
# 区域数据库
master是主域名,如果后面不加.默认会补全在/etc/named.rfc1912.zones中写的域名就是magedu.org;如果加了.就不会补全;后面的admin.magedu.org.是邮箱,可以自定义写。
cp -p /var/named/named.localhost /var/named/magedu.org.zone
$TTL 1D
@   IN SOA  master admin.magedu.org. (
                    9   ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
            NS  master
master      A   10.0.0.100
www         A   10.0.0.104

#最后用户组是named,权限是640,如果不是需要使用chgrp命令手动更改组;使用chmod命令更改权限

#实现web服务(就是104那台机器)
yum -y install httpd
#配置主页面
echo www.magedu.org > /var/www/html/index.html
#启动服务
systemctl start httpd
# 主配置文件语法检查
named-checkconf

# 区域数据库文件语法检查
named-checkzone "magedu.org" /var/named/magedu.org.zone

#配置生效(三种方式任选其一)
rndc reload
systemctl restart named #第一次启动必须用这个
service named reload
# 客户端测试

# 安装bind客户端工具(包括dig,host,nslookup)
yum -y install bind-utils

8.关闭dnssec功能

# 在实验的过程中有可能造成结果不理想,建议关掉下面两个功能
vim /etc/named.conf
# 将下面两项修改成no
dnssec-enable no;
dnssec-validation no;

9.实现主从服务器

DNS主从服务器模型是一种常见的DNS部署方式,主服务器拥有DNS区域文件并负责管理DNS记录,而从服务器则从主服务器那里获取这些记录。下面是使用BIND实现主从DNS服务器的步骤:

# 1.配置主DNS服务器(为了从服务器能够从主服务器获取区域信息,我们需要在主服务器的配置文件中添加一个allow-transfer语句:)
vim /etc/named.conf

options {
	# 只允许从服务器进行区域传输
	allow-transfer { ip_of_slave; };
};
# 在上述配置中,ip_of_slave应该替换为你的从服务器的IP地址。
# allow-transfer 该选项控制 DNS 区域转换的允许范围.特别地,allow-transfer 定义了哪些主机(通过 IP 地址指定)可以从该 DNS 服务器获取 DNS 区域的完整拷贝。这个完整拷贝的过程被称为 "zone transfer"。
# 这通常是在一个主从 DNS 架构中进行,其中主 DNS 服务器会拥有最初和最完整的 DNS 区域数据,而从 DNS 服务器(即 "slave" 服务器)则需要从主服务器那里获取这些数据的拷贝。这是一种常见的冗余策略,以确保如果主 DNS 服务器出现问题,那么从服务器可以继续提供 DNS 服务。

# 2.配置从DNS服务器(在从服务器上,你需要安装BIND并创建一个从区域的配置。在BIND的配置文件中,添加以下内容:)
vim /etc/named.conf
# 注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
# 不允许其它主机进行区域传输
allow-transfer { none; };

vim /etc/named.rfc1912.zones
zone "magedu.org" IN {
    type slave;
    masters {10.0.0.100;};
    file "slaves/magedu.org.slave";
};


# 编辑主服务器的区域文件
vi /var/named/maedu.org.zone

$TTL 1D
@   IN SOA  master admin.magedu.org. (
                    9   ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
            NS  master
            NS  slave
master      A   10.0.0.100
slave       A   10.0.0.122
www         A   10.0.0.104

# 
rndc reload

# 查看从服务器区域文件是否生成
ll /var/named/slaves/magedu.org.slave

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

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

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

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

10.子域委派

子域委派就是将某个域的一部分(子域)的管理权委派给其他的DNS服务器。下面是使用BIND实现子域委派的基本步骤:

# 1.在主域的DNS服务器上配置子域
#首先,你需要在主域的DNS服务器上添加一个NS记录,以指向负责子域的DNS服务器。这通常在主域的区域文件中完成。例如:将magedu.org子域的管理权委派给shanghai.magedu.org服务器:
vim /var/named/magedu.org.zone
$TTL 1D
@   IN SOA  master admin.magedu.org. (
                    9   ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
            NS  master
            NS  slave1
shanghai    NS  shanghaidns
master      A   10.0.0.100
slave1      A   10.0.0.122
shanghaidns A   10.0.0.123
www         A   10.0.0.104
# 2. 在子域的DNS服务器上配置区域
# 在负责子域的DNS服务器上,你需要创建一个新的区域文件,并在BIND的配置文件中引用它。
vim /etc/named.rfc1912.zones

zone "shanghai.magedu.org" {
    type master;
    file "shanghai.magedu.org.zone";
};


vim /etc/named.conf
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
allow-transfer { none;};
#建议关闭加密验证
dnssec-enable no;
dnssec-validation no;
# 3.写区域数据库文件
vim /var/named/shanghai.magedu.org.zone

$TTL 1D
@   IN  SOA ns1 admin ( 3 12H 10M 3D 3H)
        NS  ns1
ns1     A   10.0.0.123
www     A   10.0.0.203
xing    A   10.0.0.222
test    A   10.0.0.121

chgrp named shanghai.magedu.org.zone
chmod 640 shanghai.magedu.org.zone

# 重启服务
rndc reload


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

11.实现DNS转发服务器

DNS转发在BIND中是一个非常重要的功能。它允许你的DNS服务器将查询请求转发到另一个DNS服务器,而不是自己进行递归查找。这个过程可以提高效率,因为它可以利用其他DNS服务器的缓存,避免了不必要的查询步骤。

# DNS转发可以在BIND的配置文件中设置,通常是在 /etc/named.conf 或 /etc/bind/named.conf 文件中,具体取决于你的系统。在这个配置文件中,你可以设置 forwarders 和 forward 两个选项来实现DNS转发。

# 以下是这两个选项的详细解释:
# 1.forwarders:这个选项定义了一个或多个你想要将查询请求转发到的DNS服务器的IP地址。你应该将这个列表放在花括号中,并使用分号将每个IP地址分隔开。例如:
forwarders {
    8.8.8.8;
    8.8.4.4;
};
# 上述代码将查询请求转发到 Google 的两个公共 DNS 服务器。

# 2.
# forward:这个选项定义了你的DNS服务器如何处理查询。有两种可能的值:first 和 only。
# first:这是默认值。当设置为 first 时,BIND 首先会尝试将查询请求转发到 forwarders 列表中的服务器。如果这些服务器无法回答查询,或者没有响应,BIND 会尝试自己进行递归查询。
# only:当设置为 only 时,BIND 只会尝试将查询请求转发到 forwarders 列表中的服务器。如果这些服务器无法回答查询,或者没有响应,BIND 不会尝试自己进行递归查询,而是返回一个错误。

# 案例:
options {
    directory "/var/cache/bind";

    recursion yes;

    forwarders {
        8.8.8.8;
        8.8.4.4;
    };

    forward only;
};
# 这个配置将所有的 DNS 查询请求转发到 Google 的 DNS 服务器,并且只使用转发,不进行自己的递归查询。

12.CDN服务

CDN是内容分发网络(Content Delivery Network)的缩写。它是一种网络技术,用于通过将网络内容分发到服务器网络中的多个节点,从而为用户提供高效率、高可用性和高性能的网络服务。原则上,这使得用户可以从地理上最近的节点获取内容,从而减少延迟并提高速度。

# 1.首先,我们要理解DNS(域名系统)的基本工作原理。DNS是一种将用户易于理解的网站名称(如www.example.com)转化为机器易于理解的IP地址(如192.168.0.1)的服务。每当您在网络浏览器中输入一个URL时,DNS服务都会找到与该URL关联的IP地址,以便您的计算机能够连接到该网站。

# 2.CDN服务和DNS结合在一起工作,以提供最有效的内容分发方式。当用户访问使用CDN的网站时,DNS解析会考虑到一些因素,如用户的地理位置、服务器的健康状况和当前流量情况等,来决定将用户引导到哪个CDN节点。在处理这个过程时,它的目标是选择最能提供快速、稳定和安全服务的节点。

# 3.例如,假设一个网站的内容分布在美国、欧洲和亚洲的服务器上。当一位在亚洲的用户请求该网站时,DNS服务将会解析到亚洲服务器的IP地址,而不是美国或欧洲的服务器,因为从地理位置上看,亚洲的服务器离用户最近,通常可以提供更快的服务。

# 4.在这种模式下,即使某个服务器或节点出现故障,用户也可以通过其他节点访问内容,因此CDN服务还提供了增强的可靠性和冗余。
# 相关概念

# 1.节点(Point of Presence, PoP):节点是存储和提供内容的服务器。CDN会将其内容复制到世界各地的许多节点上。
# 2.边缘服务器(Edge Server):边缘服务器是节点中的一个服务器,它位于用户和原始内容提供者(也称为原始服务器)之间。用户的请求首先到达边缘服务器,如果边缘服务器上有请求的内容,它将直接返回给用户。如果没有,它将请求转发给原始服务器或其他边缘服务器。
# 3.负载均衡(Load Balancing):负载均衡是一种将网络流量分配到多个服务器的技术,以防止任何一个服务器变得过于繁忙,并确保每个服务器都被充分利用。
# 4.DNS解析(DNS Resolution):当用户请求一个URL时,DNS服务将这个URL解析为与之相关联的IP地址。在CDN中,DNS解析可能会考虑到因素如用户的地理位置和服务器的状态,以决定将用户定向到哪个节点。

# 运行逻辑
# 1.内容的复制和分发:当你作为内容提供者向CDN提供内容时,CDN将这些内容复制并分发到其全球范围内的节点。这可能涉及到数百甚至数千个节点。
# 2.用户的请求:当用户请求某个URL时,他们的请求首先被发送到DNS服务。
# 3.DNS解析:DNS服务解析请求的URL,找到与之关联的IP地址。在CDN中,DNS服务可能会选择最能为用户提供服务的节点的IP地址。
# 4.提供内容:用户的请求被发送到被DNS解析选定的节点。然后,这个节点返回请求的内容给用户。
# 5.负载均衡:如果一个节点变得过于繁忙,CDN可能会将一些流量重定向到其他较少繁忙的节点,以确保所有用户都可以快速、有效地获取内容。
# 6.缓存和更新:CDN节点会缓存内容一段时间,以便能快速提供给用户。然而,如果内容发生更改,CDN需要更新其节点上的内容,以确保用户获取的是最新的版本。

相关推荐

  1. DNS-域名系统

    2024-05-11 06:48:08       8 阅读
  2. <span style='color:red;'>DNS</span><span style='color:red;'>域名</span>

    DNS域名

    2024-05-11 06:48:08      8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-11 06:48:08       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-11 06:48:08       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-11 06:48:08       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-11 06:48:08       20 阅读

热门阅读

  1. SearXNG - 一个注重隐私的互联网元搜索引擎

    2024-05-11 06:48:08       9 阅读
  2. ubuntu中运行c# winform程序

    2024-05-11 06:48:08       10 阅读
  3. TensorFlow与PyTorch:哪个更适合深度学习项目?

    2024-05-11 06:48:08       11 阅读
  4. CentOS常见命令

    2024-05-11 06:48:08       10 阅读
  5. AI智能体|智谱清言开放了智能体API

    2024-05-11 06:48:08       11 阅读
  6. 【第66例】IPD体系进阶:华为IPD发展历程

    2024-05-11 06:48:08       8 阅读
  7. 百度智能云数据仓库 Palo 实战课程

    2024-05-11 06:48:08       12 阅读
  8. haproxy配置安装,实现web服务器负载均衡

    2024-05-11 06:48:08       8 阅读
  9. Zephyr 使用问题记录

    2024-05-11 06:48:08       11 阅读