主机名控制者:DNS服务器

什么是DNS

用网络主机名取得IP的历史渊源

目前网络种使用的是所谓的TCP/IP协议,其中IP为第四版的IPv4,IPv4是由32位所组成,为了适应人们的习惯已经转成四组十进制的数字了,例如:192.168.100.10这样的格式。当在网络种需要传送数据的时候,就需要这个IP了,否则数据包就不知道要被送到哪里去了

单一文件处理上文的年代:/etc/hosts

早期要上网一定需要IP,为了应付这个问题,早期的人想到一个办法,就是利用某些特定的文件将主机名与IP作一个对应,如此一来,我们就可以通过主机名来取得该主机的IP了,这就是/etc/hosts文件的用途

可惜的是这种方法有点缺陷,那就是主机名与IP的对应无法自动在所有的计算机内更新,且要将主机名加入该文件仅能向国际互联网络信息中心interNIC(国际互联网络信息中心)注册,若IP数量太多,该文件会过大,也就更不利于其他主机同步化了

如下图所示,客户端计算机每次都需要重新下载一次文件才能顺利联网

image-20240402174205032

/etc/hosts这个文件内容就是:IP 主机名 主机别名 主机别名二…

在里面最重要的就是localhost对应到127.0.0.1这个地方。不能删除这条信息

在私网中,最好将所有的私网IP与主机名对应都写入这个文件中

分布式、阶层式主机名管理架构:DNS系统

为了解决日益严重的问题,伯克利大学发展出另一套阶层式管理主机名对应IP的系统Berkeley Internet Name Domain(BIND),也就是域名系统(DNS,Domain Name System)。DNS通过树形目录结构将主机名的管理分配在不同层级的DNS服务器中,实现了轻松维护和快速修改的功能。DNS的重要性日益提升,因为它使我们不需要知道主机的IP,只需要知道主机的名称就能连接到它。未来随着IPv6的普及,主机名解析到IP的DNS服务将变得更加重要。如果DNS发生故障,我们将无法通过主机名连接到互联网,几乎相当于失去了互联网连接

完整主机名:Fully Qualified Domain Name (FQDN)

第一个与DNS有关的主机名概念就是“主机名与域名”的观念,以及由这两者组成的完整主机名Fully Qualified Domain Name (FQDN)的意义

在DNS(Domain Name System)中,域名是按层次结构组织的,顶级域名位于最顶层,它是域名的最后一部分,例如.com、.net、.edu等。每个顶级域名下面可以有多个二级域名,每个二级域名又可以有多个三级域名,依此类推。

在给定域名中,主机名是指域名中除去顶级域名和二级域名部分的部分。它是域名的一部分,用于标识特定的主机或服务。例如,在www.ksu.edu.tw中,主机名是www,它指示特定的Web服务器。域名ksu.edu.tw是由此主机名所决定的。在DNS的层次结构中,每个域名都由上一级域名(父域名)管理。以示例中的www.ksu.edu.tw为例,该域名由.tw顶级域名(域名tw)管理,.edu.tw是在.tw域名的管理下,ksu.edu.tw则是在.edu.tw域名的管理下,最后的www是由ksu.edu.tw域名管理的。这种层次结构的组织方式使得域名之间具有层次关系,并且可以通过不同的部分进行分辨和管理。

通过这种区分方式,即使存在相同的主机名(例如www),只要它们处于不同的域名下(具有不同的顶级域名、二级域名等),它们将被认为是不同的位置或服务,并由各自的DNS服务器进行管理。

DNS的主机名对应IP的查询流程

DNS的阶层架构与TLD

image-20240403022141501

①最上方一定是【.】(小数点)这个DNS服务器(称为root),最早它下面管理的就只有.com、.edu、.net、.org这种特殊区域以及②以国家为分离的第二层的主机名,这两者称为Top Level Domains TLDs

授权与分层负责

我们自己不能设置TLD,必须得向上层ISP申请域名的授权才行。

国家顶级域名:国家顶级域名又叫做国家代码顶级域名,主要指的是所属国家的名字缩写,国家代码顶级域名指示国家区域,比如中国是.cn,美国是.us等

国际顶级域名:国际顶级域名是指用户可注册的通用顶级域名的俗称,它的后缀为.com、.top、.net或.org等

.com只记录下面那一层的这数个主要的 domain 的主机而已,至于例如 baidu.com下面的 www.baidu.com这台机器,就直接授权交给 baidu.com 那台机器去管理了。也就是说每个上一层的 DNS 服务器所记录的信息,其实只有其下一层的主机名而已。至于再下一层,则直接授权给下层的某台主机来管理

通过DNS查询主机名IP的流程

每一台DNS服务器都仅管理自己的下一层主机名的转译而已,至于下层的下层,则授权给下层的DNS主机来管理。

image-20240404013738631

当你在浏览器的地址输入http://blog.csdn.net时,计算机就会依据相关设置(在Linux下面就是利用/etc/resolv.conf这个文件)所提供的DNS的IP去进行连接查询

(1)收到用户的查询请求,先查看本身有没有记录,若无则向.(root)查询

(2)本地DNS服务器向根域服务器发送DNS请求www.csdn.net对应的IP,此时根域发现顶级域名是.net,返回.net顶级域服务器地址给本地DNS服务器

(3)本地DNS服务器继续发起请求给.com顶级域名服务器,顶级域名服务器返回次顶级域名服务器给本地DNS服务器,本地DNS服务器接着发起请求到次顶级域名服务器csdn.net

(4)向csdn.net域名服务器发起请求www.csdn.net对应的IP,csdn.netDNS查询后将对应的IP地址DNS响应本地DNS

(5)记录缓存并回报用户

查到正确IP后,DNS机器不会下次查询www.csdn.net的时候再执行一遍上面的流程,会记录查询的结果再自己的缓存当中,以便响应下一次相同的要求。当过了DNS设置记忆的时间(通常24小时),那么该记录就会被释放

可以通过【dig】命令实现谈到的 . >> .net >> .csdn.net >> www.csdn.net的查询流程,并分析每个查询阶段的DNS服务器有几台

[root@localhost ~]# dig +trace www.csdn.net
# +trace:使用追踪功能

; <<>> DiG 9.16.23-RH <<>> +trace www.csdn.net
;; global options: +cmd
# 指示命令执行的版本号,以及使用的选项(+trace)
.                       1941    IN      NS      l.root-servers.net.
.                       1941    IN      NS      d.root-servers.net.
.                       1941    IN      NS      e.root-servers.net.
.                       1941    IN      NS      b.root-servers.net.
.                       1941    IN      NS      m.root-servers.net.
.                       1941    IN      NS      a.root-servers.net.
.                       1941    IN      NS      h.root-servers.net.
.                       1941    IN      NS      j.root-servers.net.
.                       1941    IN      NS      i.root-servers.net.
.                       1941    IN      NS      f.root-servers.net.
.                       1941    IN      NS      c.root-servers.net.
.                       1941    IN      NS      g.root-servers.net.
.                       1941    IN      NS      k.root-servers.net.
# 针对根域名服务器(Root Name Servers)的查询结果
# 其中包含了13个根域名服务器的NS记录(名称服务器记录)
;; Received 251 bytes from 114.114.114.114#53(114.114.114.114) in 39 ms

net.                    172800  IN      NS      a.gtld-servers.net.
net.                    172800  IN      NS      b.gtld-servers.net.
net.                    172800  IN      NS      c.gtld-servers.net.
net.                    172800  IN      NS      d.gtld-servers.net.
net.                    172800  IN      NS      e.gtld-servers.net.
net.                    172800  IN      NS      f.gtld-servers.net.
net.                    172800  IN      NS      g.gtld-servers.net.
net.                    172800  IN      NS      h.gtld-servers.net.
net.                    172800  IN      NS      i.gtld-servers.net.
net.                    172800  IN      NS      j.gtld-servers.net.
net.                    172800  IN      NS      k.gtld-servers.net.
net.                    172800  IN      NS      l.gtld-servers.net.
net.                    172800  IN      NS      m.gtld-servers.net.
net.                    86400   IN      DS      37331 13 2 2F0BEC2D6F79DFBD1D08FD21A3AF92D0E39A4B9EF1E3F4111FFF2824 90DA453B
net.                    86400   IN      RRSIG   DS 8 1 86400 20240416050000 20240403040000 5613 . BnqQ0tbf9s6u4XMHEfYYDr6m5dQiBbrt5N5Sw6P2w4U0rqx9U996T5us GZxv8w5WEFI9cGKwpYV+QsjtzogAczxCQgBBKZcLmlx6nojMVKq6wFuc T+QbpThy6waGLIO1ymSJs+EYCVd3z8w0s5QN/2R3pYmsRuLDYE/pRYTf /gZLtung2fnfvoo9VYsYNENAUxJ19U4BydXrxvPaGJuCo1VlcB8lpfDI G11x06CaHDyLB4C5QBb4NcqL3OZ88vfKtIyILoo9Ozwocib8g6JSGA9H l4QCUexLb5TaBlX9UzSymXvQN5uPROt6LLafVRwUoT/zYor52sNr3kKD U3hKzQ==
# 关于.net顶级域名服务器(gtld-servers.net)的查询结果
# 其中包含了.net顶级域名服务器的NS记录。
;; Received 1169 bytes from 199.7.83.42#53(l.root-servers.net) in 22 ms

csdn.net.               172800  IN      NS      vip3.alidns.com.
csdn.net.               172800  IN      NS      vip4.alidns.com.
A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - A1RTLNPGULOGN7B9A62SHJE1U3TTP8DR NS SOA RRSIG DNSKEY NSEC3PARAM
A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 13 2 86400 20240410065355 20240403054355 34730 net. t8PXdIBitTlQXfexWcLrrTjGNnNc3V45PbKjBbwD/a+vF9JVtmmQ/OLY LKr5SxV23J4rcH7WivlxM+I1zCHGDA==
J7KL5J2J5PPCQ06M81R1BQKJ33JAFMG0.net. 86400 IN NSEC3 1 1 0 - J7KM2SO0EEG3QFC8J87P6RGR2BKBGM7B NS DS RRSIG
J7KL5J2J5PPCQ06M81R1BQKJ33JAFMG0.net. 86400 IN RRSIG NSEC3 13 2 86400 20240407064843 20240331053843 34730 net. ln/dY4rILCPVZh5rTc61OsonmU2VtnzGLesF6ohF9EUjrLMdDZpDc3Na jNqsteb7+c9woSBf6VQVShUXJ5JN5A==
# 关于csdn.net域名的查询结果,其中包含了csdn.net的NS记录。
;; Received 446 bytes from 192.41.162.30#53(l.gtld-servers.net) in 276 ms

www.csdn.net.           600     IN      CNAME   55cb88f4.csdn.net.cname.yunduns.com.
;; Received 90 bytes from 39.103.26.213#53(vip4.alidns.com) in 16 ms
# 找到IP

DNS使用的port number

DNS使用的是53这个port

[root@localhost ~]# cat /etc/services  |grep  -E -w "53\/(tcp|udp)" 
domain          53/tcp                          # name-domain server
domain          53/udp

通常 DNS 是以 UDP 这个较快速的数据传输协议来查询的,但是万一没有办法查询到完整的信息时,就会再次以 TCP 这个协议来重新查询。所以启动 DNS 的 daemon(就是 named)时,会同时启动TCP 及UDP的 port53。所以,防火墙要同时放行 TCP、UDP port 53

合法DNS的关键,申请区域查询授权

要让主机名对应IP且让其他计算机都可以查询到,有两种方式:

(1)上层DNS授权区域查询权,让你自己设置DNS服务器

(2)直接请上层DNS服务器来帮你设置主机名对应

DNS数据库的记录:正解、反解、Zone的意义

  • 主机名查询到IP的流程称为:正解
  • 从IP反解析到主机名的流程称为:反解
  • 不管是正解还是反解,每个域的记录就是一个区域(zone)

正解的设置权以及DNS正解Zone记录的标志

ccTLD 代表“国家代码顶级域”。 也就是说,由国家/地区使用并以相应国家/地区代码结尾的域。

**gTLD(通用顶级域)**是一种域类型,它不是特定于国家的,而是与不同类别的组织配对。 此类域的示例是 .com、.net、.org 和 .biz。 例如 .com 代表“商业”。

只要该域没有人使用,那么谁先抢到了,就能够使用了。不过interNIC以及定义出gTLD以及ccTLD了,所以你不能自定义如centos.csq这种区域。还需要符合上层DNS所给予的域范围才行。

正解的重点在由主机名查询到IP,而且每台DNS服务器还是需要定义清楚,同时,可能还需要假设Master/Slave架构的DNS环境,正解Zone通常具有下面几种标志:

  • SOA:就是开始验证(Start of Authority) 的缩写
  • NS:就是名称服务器(Name Server)的缩写,后面记录的数据是DNS服务器的意思
  • A:就是地址(Address)的缩写,后面记录的是IP的对应

反解的设置权以及DNS反解Zone记录的标志

反解的设置权是由IP地址的拥有者或网络服务提供商控制。通常情况下,你需要联系你的网络服务提供商或管理员来设置反解记录。他们将在他们管理的DNS服务器上设置反解记录,将IP地址映射到相应的主机名。

反解Zone通常具有下面几种标志:

  • PTR (Pointer) 标志:反向解析记录,将IP地址映射到主机名

每台DNS都需要的正解Zone:hint

在DNS服务器中,有一个特别重要的Zone,即根Zone(.)。根Zone是整个DNS层级结构的起点,它包含了顶级域名服务器(TLD)的信息,确保DNS服务器能够进行递归查询,找到所需的信息。

根Zone的记录类型被称为hint类型。当DNS服务器在自己的数据库中找不到所需的信息时,它会通过根Zone的hint记录来查找DNS服务器的位置

在一个简单的正解DNS服务器中,通常需要至少两个Zone。

  • 一个是根Zone(.)的HINT记录,用于指示DNS服务器位置;

  • 另一个是自己域的正解Zone,用于将主机名映射到IP地址

DNS数据库的类型:hint、Master/Slave架构

在注册域名时,ISP都会要求你填写两台或三台DNS服务器的IP。因为要作为备份,设置一台DNS的话宕机后,你主机名都不能被找到

如果你的域有两台服务的话,那这两台DNS服务器的内容就必须一模一样,否则,由于是随机找到DNS来询问,因此数据不同步,很可能造成其他用户无法取得正确数据的问题

为了解决这个问题,因此在.(root)这个hint类型的数据库文件外,还有两种基本类型,分别是Master数据库和slave数据库类型。这个Master/slave就是用来解决不同DNS服务器上面的数据同步问题

Master

这种类型的DNS数据库中,里面所有的主机名相关信息等,全部要管理员自己手动修改与设置,设置完毕还需要重新启动DNS服务器区读取正确的数据库内容,才算完成数据库更新。一般来说,说的 DNS 架设,就是指设置这种数据库的类型。同时,这种类型的数据库,还能够提供数据库内容给 Slave 的 DNS 服务器

Slave

slave必须要与Master相互搭配,如果有三台DNS服务器,且三台内容相同,那么只要指定一台服务器为Master,其他两台为slave服务器,那么当要修改内容时,只要手动更新Master那台机器的配置文件,然后重启BIND这个服务后,其他两台Slave就会自动地被通知更新了

Master/Slave的查询优先权

在Master/Slave架构中,每台DNS服务器都需要能够同时提供DNS服务,无论是作为Master还是Slave服务器。这是因为DNS系统中的域名查询是按照先进先出的原则进行处理,无法确定哪台主机的数据会被先查询到。因此,每台DNS服务器都必须正常工作,以确保能够及时响应客户端的查询请求。 每台DNS服务器的数据库内容必须完全一致。如果Master和Slave服务器的数据库内容不一致,可能会导致客户端获取到错误的IP地址。

Master/Slave数据的同步化过程

  • **Master主动告知:**例如在Master修改了数据库内容,并且加大了数据库序号后,重新启动DNS服务,那Master会主动告知Slave来更新数据库,此时就能够实现数据同步
  • **由Slave主动提出要求:**基本上,slave会定时向Master查看数据库的序号,当发现Master数据库的序号比slave自己的序号还要大(比较新),那么Slave就会开始更新。如果序号不变,那么就判断数据库没有更动,因此就不会进行同步更新。

Client端的设置

相关配置文件

  • /etc/hosts:这个是最早的Hostname对应IP的文件
  • /etc/resolv.conf:这个是ISP的DNS服务器IP记录处
  • /etc/nsswitch.conf:这个文件则是来决定先要使用/etc/hosts还是/etc/resolv.conf的设置
[root@localhost ~]# cat /etc/nsswitch.conf |grep -w ^hosts:
hosts:      files dns
# Linux默认主机名与IP的对面解析都以/etc/hosts为优先

上面那个files就是使用/etc/hosts,dns则是使用/etc/resolv.conf的DNS服务器来进行搜寻

[root@localhost ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 114.114.114.114
nameserver 8.8.8.8
# DNS服务器的IP可以设置多个,因为当一台DNS宕机,客户端可以使用第二台来进行查询。

DNS的正、反解查询命令:host、nslookup、dig

host

[root@localhost ~]# host [-a] FQDN [server]
[root@localhost ~]# host -l [domain] [server]
选项:
-a:代表列出该主机所有的相关信息,包括IP、TTL与排错信息等
-l:若后面接的那个domain设置允许allow-transfer时,则列出该domain
    所管理的所有主机名对应数据
server:这个参数可有可无,当想要利用非/etc/resolv.conf内的DNS主机
        来查询主机名与IP的对应时,就可以利用这个参数
# 示例1 使用默认值查出 www.baidu.com的ip
[root@localhost ~]# host www.baidu.com
www.baidu.com has address 39.156.66.14  # ip
www.baidu.com has address 39.156.66.18  # ip
www.baidu.com has IPv6 address 2409:8c00:6c21:1051:0:ff:b0af:279a  # ipv6地址
www.baidu.com has IPv6 address 2409:8c00:6c21:104f:0:ff:b03f:3ae   # ipv6地址
www.baidu.com is an alias for www.a.shifen.com.  # 别名

# 示例2 查出www.baidu.com的所有重要参数
[root@localhost ~]# host -a www.baidu.com
Trying "www.baidu.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56352
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.baidu.com.                 IN      ANY

;; ANSWER SECTION:
www.baidu.com.          507     IN      CNAME   www.a.shifen.com.

Received 58 bytes from 114.114.114.114#53 in 65 ms  # 使用的DNS

# 示例3 强制以 8.8.8.8这台DNS主机来查询
[root@localhost ~]# host www.baidu.com 8.8.8.8
Using domain server:
Name: 8.8.8.8  # 使用的DNS
Address: 8.8.8.8#53
Aliases: 

www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 39.156.66.14
www.a.shifen.com has address 39.156.66.18
www.a.shifen.com has IPv6 address 2409:8c00:6c21:1051:0:ff:b0af:279a
www.a.shifen.com has IPv6 address 2409:8c00:6c21:104f:0:ff:b03f:3ae
www.a.shifen.com is an alias for www.wshifen.com.

# 示例4 找出www.baidu.com 域的所有主机信息
[root@localhost ~]# host -l www.baidu.com
Host www.baidu.com not found: 9(NOTAUTH)
; Transfer failed.  # 失败了
# 这是因为baidu.com区域的DNS并不允许我们的区域查询,我们不是baidu.com的管理员
# 没权限读取整个baidu.com
# host -l是用在自己的DNS服务器上

nslookup

[root@localhost ~]# nslookup [FQDN] [server]
选项:
1. 可以在nslookup加上待查询的主机名或者是IP,[server]可有可无
2. 如果在nslookup后面没有加上任何主机名或IP,那将进入nslookup的查询功能
   在nslookup的查询功能中,可以输入其他参数来进行特殊查,例如:
   set type=any:列出所有的信息正解方面配置文件
   set type=mx:列出mx相关的信息
# 示例1 直接搜寻 www.baidu.com的IP信息
[root@localhost ~]# nslookup www.baidu.com
Server:         114.114.114.114
Address:        114.114.114.114#53

Non-authoritative answer:
Name:   www.baidu.com
Address: 39.156.66.14  # 回报IP给你
Name:   www.baidu.com
Address: 39.156.66.18
Name:   www.baidu.com
Address: 2409:8c00:6c21:1051:0:ff:b0af:279a
Name:   www.baidu.com
Address: 2409:8c00:6c21:104f:0:ff:b03f:3ae

dig

[root@localhost ~]# dig [options] FQDN [@server]
选项:
@server:如果不以/etc/resolv.conf的设置来作为DNS查询,可以在此填入其他的IP
options:相关的参数有很多,主要有 +trace、-t type 以及 -x
        +trace:就是从 . 开始追踪
        -t type:查询的数据主要有 MX 、NS 、 SOA 等类型
        -x :查询反解信息
# 示例1 使用默认值查询 www.baidu.com
[root@localhost ~]# dig www.baidu.com

; <<>> DiG 9.16.23-RH <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57068
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:  # 提出问题部分
;www.baidu.com.                 IN      A

;; ANSWER SECTION:    # 主要的回答阶段
www.baidu.com.          179     IN      A       39.156.66.18
www.baidu.com.          179     IN      A       39.156.66.14

;; Query time: 42 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: Thu Apr 04 00:24:57 EDT 2024
;; MSG SIZE  rcvd: 74

#  QUESTION:显示所要查询的内容,因为我们查询www.baidu.com的IP,所以这里显示A(address)
#  ANSWER:依据刚刚的QUESTION查询所得到的结果,答案就是回答IP

# 示例2 查询www.baidu.com的SOA相关信息
[root@localhost ~]# dig -t soa www.baidu.com

; <<>> DiG 9.16.23-RH <<>> -t soa www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11891
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;www.baidu.com.                 IN      SOA

;; ANSWER SECTION:
www.baidu.com.          665     IN      CNAME   www.a.shifen.com.

;; AUTHORITY SECTION:
a.shifen.com.           600     IN      SOA     ns1.a.shifen.com. baidu_dns_master.baidu.com. 2404040015 5 5 2592000 3600

;; Query time: 91 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: Thu Apr 04 00:29:56 EDT 2024
;; MSG SIZE  rcvd: 115

安装BIND服务程序

[root@localhost ~]# yum install -y  bind bind-chroot
[root@localhost ~]# rpm -qa |grep ^bind
bind-libs-9.16.23-11.el9.x86_64   # 给bind与相关命令使用的函数库
bind-utils-9.16.23-11.el9.x86_64  # 这个客户端查找主机名的相关命令
bind-9.16.23-11.el9.x86_64        # bind主程序所需软件
bind-chroot-9.16.23-11.el9.x86_64 # 将bind主程序关在家里面

bind-chroot牢笼机制

bind-chroot将根目录切换到/var/named/chroot/

bind服务使用mount --bind 命令将/etc/named-chroot.files中列出的文件保存在/var/named/chroot/中,并且named进程无法访问/var/named/chroot/以外的文件

配置文件

  • /etc/named.conf:主要配置文件
  • /etc/named.rfc1912.zones:BIND服务区域配置文件,用来保存区域数据的位置
  • /var/named/:数据库文件默认放置在这个目录
  • /var/run/named:named这个程序执行时默认放置pid-file在此目录
[root@localhost ~]# vim /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.
//

options {
        listen-on port 53 { any; }; # 监听IP地址和端口
        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";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";
        allow-query     { any; };  # 指定允许进行DNS查询的主机或网络

        /* 
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable 
           recursion. 
         - If your recursive DNS server has a public IP address, you MUST enable access 
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification 
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface 
        */
        recursion yes;

        dnssec-validation yes;

        managed-keys-directory "/var/named/dynamic";
        geoip-directory "/usr/share/GeoIP";

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

        /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
        include "/etc/crypto-policies/back-ends/bind.config";
};

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

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

include "/etc/named.rfc1912.zones";    
# 在默认情况下,这个文件会去读取/etc/named.rfc1912.zones这个区域定义文件
include "/etc/named.root.key";
  • listen-on port 53 { any; };

监听这台主机系统上面的哪个网络接口。默认是监听localhost,就是只有本机可以对DNS服务进行查询,把他改为any,表示服务器上的所有IP地址均可提供DNS域名解析服务

  • directory “/var/named”;

如果此文件下面有规范到正、反解的zone file文件,该文件默认应存储在这个目录下面,由于chroot的关系,最终这些数据库文件被主动链接到/var/named/chroot/var/named/目录下

  • dump-file、 statistics-file、memstatistics-file

统计信息

  • allow-query { any; };

针对客户端的设置,表示到底谁可以对我的DNS服务提出查询请求的意思。原本内容默认是针对localhost开放,这里改为对所有用户开放(防火墙必须放行才行)

如前面所示bind服务程序的区域配置文件(/etc/named.rfc1912.zones)用来保存域名和IP地址对应关系的所在位置。这个文件中,定义域名与IP地址解析规则保存的文件位置以及服务类型等内容,而没有包含具体的域名、IP地址对应关系等信息。

将域名解析为IP地址的正向解析参数如图

image-20240405121236612

将IP地址解析为域名的反向解析参数如图

image-20240404133732200

根区域配置(/etc/named.conf中)

zone "." IN {
        type hint;        # 服务类型
        file "named.ca";  # 文件保存位置
};

常用参数

更多参数查看man named.conf

参数 作用
zone 用于定义一个区域文件的开始。后面跟着区域名称
type 定义区域的类型,可以是 masterslavehint
file 指定区域文件的路径
allow-update 指定允许更新该区域的 IP 地址
masters 定义从属区域获取区域文件的主服务器列表
forward only 表示该服务器只能进行向上游DNS服务器的查询并转发请求,而不能进行递归解析
forwarders 指定需要使用的转发服务器列表
notify 指定是否启用区域更改通知。默认为启用。
also-notify 指定在区域更改时通知的其他服务器的列表
* 泛域名,表示将不存在的主机名,都解析到同一个IP地址
直接域名,不需要输入主机名,通过域名方式直接解析到对应的IP地址

正向解析

在DNS域名解析服务中,正向解析是指根据域名(主机名)查找到对应的IP地址。也就是说用户输入一个域名后,bind服务程序会自动进行查找,并将匹配到的IP地址返给用户

第一步:编辑区域配置文件

该文件默认已经有了一些解析参数,就是让用户有一个参考,可以将下面的参数添加到该区域配置文件下面,当然也可以将该文件信息全部清空,而保留自己的域名解析信息

vim /etc/named.rfc1912.zones

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

第二步:编辑数据配置文件

可以从/var/named目录中复制一份正向解析的模块文件(named.localhost)然后把域名和IP地址的对应数据填写数据配置文件中并保存。在复制的时加上-a参数,可以保留原始文件的权限所以者所属组等信息。

[root@localhost ~]# cd /var/named/
[root@localhost named]# ls -al named.localhost 
-rw-r-----. 1 root named 152  227  2023 named.localhost
[root@localhost named]# cp -a named.localhost linuxcsq.com.zone
[root@localhost named]# vim linuxcsq.com.zone 
$TTL 1D  # 生命周期为1天
@       IN SOA  linuxcsq.com. root.linuxcsq.com. (  
# 【这个.很重要】因为它代表一个完整主机名FQDN,而不仅有hostname而已
# @ INSOA :授权信息开始
# linuxcsq.com.:DNS区域的地址
# root.linuxcsq.com.:域名管理的邮箱
              0       ; serial  # 更新序列号
              1D      ; refresh # 更新时间
              1H      ; retry   # 重试延时
              1W      ; expire  # 失效时间
              3H )    ; minimum # 无效解析记录的缓存时间
        NS      ns.linuxcsq.com.   # 将 ns.linuxcsq.com.设置为域名的名称服务器
        IN  A 192.168.200.10       # 将域名解析为指定的 IPv4 地址
ns      IN  A 192.168.200.10       # 将 ns.linuxcsq.com. 解析为指定的 IPv4 地址
www     IN  A 192.168.200.10       # 将 www.linuxcsq.com. 解析为指定的 IPv4 地址
*       IN  A 192.168.200.10       # 将所有其他未定义的域名解析为指定的 IPv4 地址
# 检查区域配置文件
# named-checkzone 是一个用于验证 BIND 服务配置文件中区域(Zone)文件语法正确性的命令
# named-checkzone <选项> <区域名称> <区域文件路径>
[root@localhost named]# named-checkzone linuxcsq.com /var/named/linuxcsq.com.zone 
zone linuxcsq.com/IN: loaded serial 0
OK
# 检查主配置文件
# named-checkconf 是一个用于验证 BIND 服务配置文件语法正确性的命令
# named-checkconf [选项] [配置文件路径]
[root@localhost named]# named-checkconf /etc/named.conf 
# 启动并设置开机自启named-chroot
[root@localhost named]# systemctl start named-chroot && systemctl enable named-chroot.service          
记录类型 作用
A 将域名指向一个 IPv4 地址
CHAME 将域名指向另外一个域名
AAAA 将域名指向一个 TPv6 地址
NS 将子域名指定由其他 DNS 服务器解析
MX 将域名指向邮件服务器地址
SRV 记录提供特定的服务的服务器
TXT 文本内容一般为512字节,常作为反垃圾邮件SPF记录
CAA CA证书颁发机构授权校验
显性 URL 将域名重定向到另外一个地址
隐性 URL 与显性URL类似,但是会隐藏真实目标地址
*(泛域名) 表示将不存在的主机名都解析到同一个IP地址
不需要输入主机名通过域名方式之间解析到对应IP地址

第三步:检验解析结果

为了检验解析结果,一定要先把 Linux 系统网卡中的 DNS 地址参数修改成本机 I P地址,这样就可以使用由本机提供的 DNS 查询服务了。nslookup命令用于检测能否从 DNS 服务器中查询到域名与 地址的解析记录,进而更准确地检验 DNS服务器是否已经能够为用户提供服务。

[root@localhost named]# nslookup linuxcsq.com
Server:         192.168.200.10
Address:        192.168.200.10#53

Name:   linuxcsq.com
Address: 192.168.200.10

[root@localhost named]# nslookup ns.linuxcsq.com 
Server:         192.168.200.10
Address:        192.168.200.10#53

Name:   ns.linuxcsq.com
Address: 192.168.200.10

[root@localhost named]# nslookup www.linuxcsq.com   
Server:         192.168.200.10
Address:        192.168.200.10#53

Name:   www.linuxcsq.com
Address: 192.168.200.10

[root@localhost named]# nslookup csqcsq.linuxcsq.com
Server:         192.168.200.10
Address:        192.168.200.10#53

Name:   csqcsq.linuxcsq.com
Address: 192.168.200.10

反向解析

在 DNS 域名解析服务中,反向解析的作用是将用户提交的地址解析为对应的域名信息,它一般用于对某个IP地址上绑定的所有域名进行整体屏蔽,屏蔽由某些域名发送的垃圾邮件。它也可以针对某个IP地址进行反向解析,大致判断出有多少个网站运行在上面。当购买虚拟主机时,可以使用这一功能验证虚拟主机提供商是否有严重的超售问题。

第一步:编辑区域配置文件

在编辑该文件时,除了不要写错格式之外,还需要记住此处定义的数据配置文件名称,因为一会儿还需要在/var/named 目录中建立与其对应的同名文件。反向解析是把IP地址解析成域名格式,因此在定义zone(区域)时应该要把IP地址反写,比如原来是192.168.10.0,反写后应该就是10.168.192,而且只需写出IP地址的网络位即可。把下列参数添加至正向解析参数的后面。

vim /etc/named.rfc1912.zones

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

第二步:编辑数据配置文件

首先从/var/named目录这复制一份反向解析的模板文件(named.loopback),然后把下面的参数填写到文件种,其中IP地址仅需要写主机位

[root@localhost ~]# cd /var/named/
[root@localhost named]# cp -a named.loopback  192.168.200.arpa
[root@localhost named]# vim 192.168.200.arpa 
$TTL 1D
@       IN SOA  linuxcsq.com. root.linuxcsq.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      ns.linuxcsq.com.
5       PTR     mail.linuxcsq.com.
10      PTR     ns.linuxcsq.com.
10      PTR     www.linuxcsq.com.
10      PTR     linuxcsq.com.
[root@localhost named]#  named-checkzone 200.168.192.in-addr.arpa /var/named/192.168.200.arpa 
zone 200.168.192.in-addr.arpa/IN: loaded serial 0
OK

[root@localhost named]# systemctl restart named-chroot

第三步:校验解析结果

和正向解析一样设置DNS即可

[root@localhost named]# nslookup 192.168.200.5
5.200.168.192.in-addr.arpa      name = mail.linuxcsq.com.

[root@localhost named]# nslookup 192.168.200.10
10.200.168.192.in-addr.arpa     name = www.linuxcsq.com.
10.200.168.192.in-addr.arpa     name = linuxcsq.com.
10.200.168.192.in-addr.arpa     name = ns.linuxcsq.com.

部署主从从服务器

作为重要的互联网基础设施服务,保证DNS域名解析服务的正常运转至关重要,只有这样才能提供稳定、快速且不间断的域名査询服务。在DNS域名解析服务中,从服务器可以从主服务器上获取指定的区域数据文件,从而起到备份解析记录与负载均衡的作用。因此,通过部署从服务器不仅可以减轻主服务器的负载压力,还可以提升用户的查询效率。

主机名称 IP地址
master 192.168.200.10
slaver 192.168.200.20

修改主机名

# 先修改主机名
[root@localhost ~]# hostnamectl set-hostname slave
[root@localhost ~]# bash
[root@slave ~]# 
[root@localhost ~]# hostnamectl set-hostname master
[root@localhost ~]# bash
[root@master ~]# 

第一步:修改主服务器的区域配置文件

[root@master named]# vim /etc/named.rfc1912.zones    
zone "linuxcsq.com" IN {
        type master;
        file "linuxcsq.com.zone";
        allow-update { 192.168.200.20; };
        notify  yes;
        also-notify  { 192.168.200.20; }; 
};

zone "200.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.200.arpa";
        allow-update { 192.168.200.20; };
        also-notify  { 192.168.200.20; };
};
[root@master named]# named-checkconf /etc/named.conf 
[root@master named]# systemctl restart named-chroot

第二步:在主服务器上配置防火墙放行规则,让DNS协议流量可以被顺利传播

[root@master ~]#  firewall-cmd --add-service=dns --permanent
success
[root@master ~]#  firewall-cmd --reload
success

第三步:在从服务器上安装bind-chroot软件包。修改配置文件,让从服务器也能够对外提供DNS服务,并且测试其与主服务器的网络连通性

[root@slave ~]#  yum install -y bind-chroot
[root@slave ~]#  vim /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";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";
        allow-query     { any; };
[root@slave ~]#  ping -c 4 192.168.200.10
PING 192.168.200.10 (192.168.200.10) 56(84) 比特的数据。
64 比特,来自 192.168.200.10: icmp_seq=1 ttl=64 时间=0.226 毫秒
64 比特,来自 192.168.200.10: icmp_seq=2 ttl=64 时间=0.331 毫秒
64 比特,来自 192.168.200.10: icmp_seq=3 ttl=64 时间=0.192 毫秒
64 比特,来自 192.168.200.10: icmp_seq=4 ttl=64 时间=0.367 毫秒

--- 192.168.200.10 ping 统计 ---
已发送 4 个包, 已接收 4 个包, 0% packet loss, time 3081ms
rtt min/avg/max/mdev = 0.192/0.279/0.367/0.072 ms

第四步:在从服务器中填写主服务器的IP地址与要抓取的区域信息,然后重启服务

注意此时的服务类型应该是slave(从),而不再是master(主)。masters参数后面应该为主服务器的IP地址,而且file参数后面定义的是同步数据配置文件后要保存到的位置,稍后可以在该目录内看到同步的文件

[root@slave ~]# vim /etc/named.rfc1912.zones 
zone "linuxcsq.com" IN {
        type slave;
        masters { 192.168.200.10; }; # 注意masters
        file "slaves/linuxcsq.com.zone";  # 注意slaves
};


zone "200.168.192.in-addr.arpa" IN {
        type slave;
        masters { 192.168.200.10; };  # 注意masters
        file "slaves/192.168.200.arpa";  # 注意slaves

};
[root@slave ~]# systemctl restart named-chroot

第五步:校验解析结果

当从服务器的 DNS 服务程序在重启后,一般就已经自动以主服务器上同步了数据配置文件,而且该文件默认会放置在区域配置文件中所定义的目录位置中。随后修改从服务器的网络参数,把 DNS 地址参数修改成 192.168.200.20,这样即可使用从服务器自身提供的 DNS 域名解析服务。最后就可以使用 nslookup 命令顺利看到解析结果了。

[root@slave ~]# cd /var/named/slaves/
[root@slave slaves]# ls -al
总用量 8
drwxrwx---. 2 named named  50  45 10:41 .
drwxrwx--T. 6 root  named 141  45 10:41 ..
-rw-r--r--. 1 named named 333  45 10:41 192.168.200.arpa
-rw-r--r--. 1 named named 356  45 10:41 linuxcsq.com
[root@slave slaves]# nslookup www.linuxcsq.com
Server:         192.168.200.20   
Address:        192.168.200.20#53  # 这里使用的DNS是192.168.200.20

Name:   www.linuxcsq.com
Address: 192.168.200.10

[root@slave slaves]# nslookup 192.168.200.10
10.200.168.192.in-addr.arpa     name = www.linuxcsq.com.
10.200.168.192.in-addr.arpa     name = linuxcsq.com.
10.200.168.192.in-addr.arpa     name = ns.linuxcsq.com.

[root@slave slaves]# nslookup 192.168.200.5
5.200.168.192.in-addr.arpa      name = mail.linuxcsq.com.

第六步:更新区域配置文件看看是否能同步更新

# 1在修改之前先打开从机的日志文件
[root@slave slaves]# journalctl -u named-chroot.service -f  # -f持续更新日志信息

# 2在主服务器下的/var/named/linuxcsq.com.zone 添加如下一条信息,要在泛域名的前面添加
[root@master named]# vim linuxcsq.com.zone         
$TTL 1D
@       IN SOA  linuxcsq.com. root.linuxcsq.com. (
                                        1      ; serial  # 序列号要比之前大
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      ns.linuxcsq.com.
        IN  A 192.168.200.10
ns      IN  A 192.168.200.10
www     IN  A 192.168.200.10  
csq     IN  A 192.168.200.50        # 更新的信息
*       IN  A 192.168.200.10
[root@master named]# systemctl restart named-chroot # 重启
# 3 查看从机日志更新信息,看看是否更新
# 4 正向解析csq.linuxcsq.com
[root@slave slaves]# nslookup csq.linuxcsq.com   
Server:         192.168.200.20
Address:        192.168.200.20#53

Name:   csq.linuxcsq.com
Address: 192.168.200.50

安全的加密传输

域名解析服务是互联网基础设施中重要的一环,几乎所有的网络应用都依赖于 DNS 才能正常运行。如果 DNS服务发生故障,那么即便 Web 网站或电子邮件系统服务等都正常运行,用户也无法找到并使用它们了。
互联网中的绝大多数 DNS 服务器(超过 95%)都是基于 BIND 域名解析服务搭建的,而bind 服务程序为了提供安全的解析服务,已经对TSIG(见RFC2845)加密机制提供了支持。TSIG 主要是利用了密码编码的方式来保护区域信息的传输(Zone Transfer ),即 TSIG 加密机制保证了 DNS 服务器之间传输域名区域信息的安全性。

将从主服务器中获取到的配置文件删除

[root@slave slaves]# ls -al
总用量 8
drwxrwx---. 2 named named  50  45 10:48 .
drwxrwx--T. 6 root  named 141  45 10:41 ..
-rw-r--r--. 1 named named 333  45 10:41 192.168.200.arpa
-rw-r--r--. 1 named named 356  45 10:41 linuxcsq.com
[root@slave slaves]# cd ..
[root@slave named]# rm -rf slaves/*
[root@slave named]# 

第一步:在主服务器中生成密钥

tsig-keygen 是一个实用程序,可生成用于 TSIG 签名。例如,生成的密钥可用于保护动态 DNS 更新到区域或 rndc 命令通道。

可以在命令行上指定域名以用作 生成的密钥的名称。如果未指定名称,则默认为 tsig-key

tsig-keygen [-a] 密钥名
选项:
-a:此选项指定用于 TSIG 密钥的算法。
   可用 选项有:HMAC-MD5、HMAC-SHA1、HMAC-SHA224、HMAC-SHA256、HMAC-SHA384、 
   和 HMAC-SHA512。默认值为 hmac-sha256。选项不区分大小写, 并且可以省略“hmac-”前缀。

使用tsig-keygen命令生成一个主机名称为master-slave的密钥,并保存在/etc/named.conf的最后一行

[root@master ~]# tsig-keygen master-slave | tee  -a /etc/named.conf 
key "master-slave" {
        algorithm hmac-sha256;
        secret "HHdjkvPt/vws7D8HIHZpdgJ673NrEWjTZX/Uv30z9t8=";
};

第二步:将之前同步的文件删除

[root@slave ~]# rm -rf /var/named/slaves/*

第三步:在master服务器的主配置文件中添加信息

[root@master ~]# vim /etc/named.conf 
# 添加如下信息
allow-transfer  { key "master-slave"; };
# 这意味着只有使用该密钥进行区域传输的服务器才被允许进行传输操作

[root@master ~]# named-checkconf /etc/named.conf 

第四步:将master服务器的key密钥复制过来,并写入到slave的/etc/named.conf文件下,重启named-chroot服务

[root@slave ~]# vim /etc/named.conf 
# 添加进去

key "master-slave" {
        algorithm hmac-sha256;
        secret "HHdjkvPt/vws7D8HIHZpdgJ673NrEWjTZX/Uv30z9t8=";
};
# 为了对区域传输进行身份验证,以确保从服务器(slave)可以受信任地从主服务器(master)获取区域数据
server 192.168.200.10 {
                keys { master-slave; };
};

# 重启同步slave节点
[root@master ~]# systemctl restart named-chroot
# 查看是否同步
[root@slave ~]# ls /var/named/slaves/         
192.168.200.arpa  linuxcsq.com
# 在master节点修改区域配置文件信息,看看是否同步
[root@master ~]# vim /var/named/linuxcsq.com.zone 
$TTL 1D
@       IN SOA  linuxcsq.com. root.linuxcsq.com. (
                                        104     ; serial  # 更新序号
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      ns.linuxcsq.com.
        IN  A 192.168.200.10
ns      IN  A 192.168.200.10
www     IN  A 192.168.200.10
abc     IN  A 192.168.200.30  # 修改的内容
*       IN  A 192.168.200.10
[root@master ~]# systemctl restart named-chroot
[root@slave ~]# nslookup abc.linuxcsq.com
Server:         192.168.200.20
Address:        192.168.200.20#53

Name:   abc.linuxcsq.com
Address: 192.168.200.30

部署缓存和转发服务器

部署缓存服务器

image-20240405165450045

目的:Client通过 DNS Server 连接到外网

主机名称 IP
DNS Server ens160
IP:192.168.100.10
dns:192.168.100.10
ens224:
IP:192.168.200.10
dns:192.168.100.10
网关:192.168.200.2
Client ens160:
IP :192.168.100.20
dns: 192.168.100.10
网关:192.168.100.10
# 1.修改主机名
[root@localhost ~]# hostnamectl set-hostname dns-server
[root@localhost ~]# bash
[root@dns-server ~]# 
[root@localhost ~]# hostnamectl set-hostname client
[root@localhost ~]# bash
[root@client ~]# 
# 2.配置DNS Server网卡信息
# 3.配置Client 网卡
# 4.在DNS server安装bind bind-chroot
[root@dns-server ~]# yum install -y bind bind-chroot

# 放行dns规则
[root@dns-server ~]# firewall-cmd --add-service=dns --permanent
success
# 开启地址伪装
[root@dns-server ~]# firewall-cmd --add-masquerade --permanent
success
[root@dns-server ~]# firewall-cmd --reload
success

# 修改bind服务主配置文件
[root@dns-server ~]# vim /etc/named.conf
listen-on port 53 { any; };
allow-query     { any; };
# 默认是有缓存服务器的,下面这个就是,会从根区域一级一级开始查找域名
zone "." IN {
        type hint;
        file "named.ca";
};
[root@dns-server ~]# systemctl restart named-chroot

# 5 测试在DNS server端解析blog.csdn.net的IP,缓存到本地
[root@dns-server ~]# time nslookup blog.csdn.net
Server:		192.168.100.10
Address:	192.168.100.10#53

Non-authoritative answer:
blog.csdn.net	canonical name = 2734556a.csdn.net.cname.yunduns.com.
Name:	2734556a.csdn.net.cname.yunduns.com
Address: 117.149.203.51


real	0m1.085s   # 1秒
user	0m0.003s
sys	0m0.020s
# 6 Client端再次解析blog.csdn.net就会很快
[root@client ~]# time nslookup blog.csdn.net
Server:		192.168.100.10
Address:	192.168.100.10#53

Non-authoritative answer:
blog.csdn.net	canonical name = 2734556a.csdn.net.cname.yunduns.com.
Name:	2734556a.csdn.net.cname.yunduns.com
Address: 117.149.203.51


real	0m0.211s  # 0.2秒
user	0m0.001s
sys	0m0.006s

部署转发服务器

image-20240405162317121

目的:client端通过访问具有转发服务器的DNS server 访问到上层DNS server从而解析IP地址

# 基于缓存服务器的设置
# 1. 修改 DNS server端的 named主配置文件
[root@dns-server ~]# vim /etc/named.conf 
# 将递归查询的根域注释掉,就是如下信息
# zone "." IN {
#         type hint;
#         file "named.ca";
# };
# 添加转发
      forward only;
      forwarders { 114.114.114.114;8.8.8.8; };

# 关闭DNS验证        
        dnssec-validation no;
# 重新启动 生效配置文件
[root@dns-server ~]# systemctl restart named-chroot

# 2 client端测试 访问一个DNS server没有缓存过的域名
[root@client ~]# time nslookup www.aliyun.com
Server:		192.168.100.10
Address:	192.168.100.10#53

Non-authoritative answer:
Name:	www.aliyun.com
Address: 183.201.240.233
Name:	www.aliyun.com
Address: 183.201.242.210
Name:	www.aliyun.com
Address: 183.201.235.215
Name:	www.aliyun.com
Address: 2409:8c0c:310:500:3::3f5
Name:	www.aliyun.com
Address: 2409:8c0c:310:500:3::3f4


real	0m0.017s  
# 速度很快,这是因为,他不用递归的进行查找域名
# 直接转发到114.114.114.114或8.8.8.8 DNS服务器上了
user	0m0.002s
sys	0m0.004s

分离解析技术

分离解析技术是指将不同地理范围内的用户通过访问相同的地址,从不同的服务器获取到相同的数据,以提升访问效率

image-20240405234326484

主机名 IP
DNS 北京网络:122.71.115.10
美国网络:106.185.25.10
国外用户 122.71.155.11
国内用户 106.185.25.11

第一步: 修改bind服务程序

# 修改主机名
[root@localhost ~]# hostnamectl set-hostname dns
[root@localhost ~]# bash
[root@dns ~]# 
# 安装并放行bind服务
yum install -y bind-chroot
firewall-cmd --add-service=dns --permanent
firewall-cmd --reload
# 1. 修改bind服务的主配置文件
[root@dns ~]# vim /etc/named.conf 
将默认的递归查询域名解析注释掉
#zone "." IN {
#       type hint;
#       file "named.ca";
#};
isten-on port 53 { any; };
allow-query     { any; };

第二步:编辑区域配置文件

[root@dns ~]# vim /etc/named.rfc1912.zones
# 定义了两个变量名称
acl "china" { 122.71.115.0/24; };    # 中国地区的IP地址段  
acl "usa" { 106.185.25.0/24; };      # 代表美国地区的IP地址段
# view作用是判读用户的IP地址是中国的还是美国的,然后分别加载不同的配置文件
view "china" {                       # 创建了名为china的视图
        match-clients { "china"; };  # 指定了该视图适用于china的客户端
        zone "linuxcsq.com" {        # 定义了linuxcsq.com域名的区域配置
        type master;
        file "linuxcsq.com.china";   # 指定了用于该区域的DNS记录文件
        };
};

view "usa" {
        match-clients { "usa"; };
        zone "linuxcsq.com"{
        type master;
        file "linuxcsq.com.usa";
        };
};
[root@dns named]# named-checkconf /etc/named.conf 

第三步:建立数据配置文件

分别创建两份不一样名称的区域配置数据文件

[root@dns ~]# cd /var/named/
[root@dns named]# cp -a named.localhost linuxcsq.com.china
[root@dns named]# cp -a named.localhost linuxcsq.com.usa
[root@dns named]# vim linuxcsq.com.china 
$TTL 1D
@       IN SOA  linuxcsq.com. root.linuxcsq.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      ns.linuxcsq.com.
ns      IN A 122.71.115.10
www     IN A 122.71.115.15
[root@dns named]# named-checkzone linuxcsq.com /var/named/linuxcsq.com.china 
[root@dns named]# vim /var/named/linuxcsq.com.usa 
$TTL 1D
@       IN SOA  linuxcsq.com. root.linuxcsq.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      ns.linuxcsq.com.
ns      IN A 106.185.25.10
www     IN A 106.185.25.15
[root@dns named]# named-checkzone linuxcsq.com /var/named/linuxcsq.com.usa 

第四步:重新启动named服务程序,验证结果

其中,122.71.115.15 和106.185.25.15 两台主机并没有在实验环节中配置,需要大家自行设置。如果不想太过麻烦,可以直接将 www.linuxcsq.com 域名解析到 122.71.115.10 和106.185.25.10 服务器上面,这样只需要准备一台服务器就够了

# DNS服务端IP设置
[root@dns named]# hostname -I
122.71.115.10 106.185.25.10 

# 中国用户访问
[root@localhost ~]# nslookup www.linuxcsq.com
Server:		122.71.115.10
Address:	122.71.115.10#53

Name:	www.linuxcsq.com
Address: 122.71.115.15

[root@localhost ~]# hostname -I
122.71.115.11

# 美国用户访问
[root@localhost ~]# nslookup www.linuxcsq.com
Server:		106.185.25.10
Address:	106.185.25.10#53

Name:	www.linuxcsq.com
Address: 106.185.25.15

[root@localhost ~]# hostname -I
106.185.25.11

相关推荐

  1. RHCE 【DNS服务主从服务器

    2024-04-07 17:00:01       60 阅读
  2. linux配置DNS主从服务器

    2024-04-07 17:00:01       58 阅读
  3. CentOS 7 安装配置基础DNS服务主从域名服务器

    2024-04-07 17:00:01       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-07 17:00:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-07 17:00:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-07 17:00:01       87 阅读
  4. Python语言-面向对象

    2024-04-07 17:00:01       96 阅读

热门阅读

  1. MySQL基础学习内容指南

    2024-04-07 17:00:01       28 阅读
  2. 设计模式:组合模式

    2024-04-07 17:00:01       41 阅读
  3. 【DevOps工具篇】身份验证管理及SSO登录:Keycloak

    2024-04-07 17:00:01       33 阅读
  4. 【TypeScript系列】代码库结构

    2024-04-07 17:00:01       35 阅读
  5. dfs,LeetCode 1026. 节点与其祖先之间的最大差值

    2024-04-07 17:00:01       39 阅读
  6. QT各种锁及线程同步应用

    2024-04-07 17:00:01       33 阅读
  7. C语言形参与实参

    2024-04-07 17:00:01       43 阅读