DNS域名解析服务器

目录

概述

产生原因

  • IP 地址:是互联网上计算机唯一的逻辑地址,通过 IP 地址实现不同计算机之间的相互通信,每台联网计算机都需要通过 IP 地址来互相联系和分别,但由于 IP 地址是由一串容易混淆的数字串构成,人们很难记忆所有计算机的 IP 地址,这样对于我们日常工作生活访问不同网站是很困难的。
  • 基于这种背景,人们在 IP 地址的基础上又发展出了一种更易识别的符号化标识,这种标识由人们自行选择的字母和数字构成,相比 IP 地址更易被识别和记忆,逐渐代替 IP 地址成为互联网用户进行访问互联的主要入口。这种符号化标识就是域名
  • 域名虽然更易被用户所接受和使用,但计算机只能识别纯数字构成的 IP 地址,不能直接读取域名。因此要想达到访问效果,就需要将域名翻译成 IP 地址。而 DNS 域名解析承担的就是这种翻译效果

作用

  • DNS(Domain Name System)是互联网上的一项服务,用于将域名和IP地址进行相互映射,使人更方便的访问互联网
  • 正向解析:域名->IP
  • 反向解析:IP->域名

连接方式

  • DNS使用53端口监听网络
  • 查看方法:
  • DNS默认以UDP这个较快速的数据传输协议来查询,但没有查询到完整的信息时,就会再次以TCP协议重新查询则启动DNS时,会同时启动TCP以及UDP的port53

因特网的域名结构

拓扑

  • 由于因特网的用户数量较多,则因特网命名时采用层次树状结构的命名方法。
  • 域名(domain name):任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名称
  • 域(domain):是名字空间中一个可被管理的划分结构。
  • 注意:域名只是逻辑概念,并不代表计算机所在的物理地点

分类

  • 国家顶级域名:采用ISO3166的规定,如:cn代表中国,us代表美国,uk代表英国,等等。国家域名又常记为CCTLD(country code top-level domains,cc表示国家代码contry-code)
  • 通用顶级域名:最常见的通用顶级域名有7个
    • com (公司企业)
    • net (网络服务机构)
    • org (非营利组织)
    • int (国际组织)
    • gov (美国的政府部门)
    • mil (美国的军事部门)
  • 基础结构域名(infrastructure domain):这种顶级域名只有一个,即arpa,用于反向域名解析,因此称为反向域名

域名服务器类型划分

  • 组织架构:

  • 根域名服务器:最高层次的域名服务器,所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。本地域名服务器要对因特网上任何一个域名进行解析,只要自己无法解析,就首先求助根域名服务器。则根域名服务器是最重要的域名服务器。假定所有的根域名服务器都瘫痪了,那么整个DNS系统就无法工作。所以根域名服务器并不直接把待查询的域名直接解析出IP地址,而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。

  • 在与现有IPv4根服务器体系架构充分兼容基础上,由我国下一代互联网国家工程中心领衔发起的"雪人计划"于2016年在美国、日本、印度、俄罗斯、德国、法国等全球16个国家完成25台IPv6(互联网协议第六版)根服务器架设,事实上形成了13台原有根加25台IPv6根的新格局,为建立多边、民主、透明的国际互联网治理体系打下坚实基础。中国部署了其中的4台,由1台主根服务器和3台辅根服务器组成,打破了中国过去没有根服务器的困境。

  • 顶级域名服务器:负责管理在该顶级域名服务器注册的二级域名

  • 权限域名服务器:负责一个"区"的域名服务器

  • 本地域名服务器:本地域名服务器不属于域名服务器的层次结构,当主机发出DNS查询时,这个查询报文就发送给本地域名服务器

  • 为了提高域名服务器的可靠性,DNS域名服务器都把数据复制到几个域名服务器来保存,如:

    • 主服务器:在特定区域内具有唯一性,负责维护该区域内的域名与 IP 地址之间的对应关系(真正干活的)
    • 从服务器:从主服务器中获得域名与 IP 地址的对应关系并进行维护,以防主服务器宕机等情况(打下手的)
    • 缓存服务器:通过向其他域名解析服务器查询获得域名与 IP 地址的对应关系,并将经常查询的域名信息保存到服务器本地,以此来提高重复查询时的效率,一般部署在企业内网的网关位置,用于加速用户的域名查询请求

DNS域名解析过程

分类

  • 递归解析:DNS 服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果 DNS 服务器本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结果提交给用户
  • 迭代解析(反复):DNS 服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台 DNS 服务器的地址,用户再向这台 DNS 服务器提交请求,依次反复,直到返回查询结果

解析图:

过程分析

  • 第一步:在浏览器中输入www . google .com 域名,本地电脑会检查浏览器缓存中有没有这个域名对应的解析过的 IP 地址,如果缓存中有,这个解析过程就结束。浏览器缓存域名也是有限制的,不仅浏览器缓存大小有限制,而且缓存的时间也有限制,通常情况下为几分钟到几小时不等,域名被缓存的时间限制可以通过 TTL 属性来设置。这个缓存时间太长和太短都不太好,如果时间太长,一旦域名被解析到的 IP 有变化,会导致被客户端缓存的域名无法解析到变化后的 IP 地址,以致该域名不能正常解析,这段时间内有一部分用户无法访问网站。如果设置时间太短,会导致用户每次访问网站都要重新解析一次域名
  • 第二步:如果浏览器缓存中没有数据,浏览器会查找操作系统缓存中是否有这个域名对应的 DNS 解析结果。其实操作系统也有一个[域名解析]的过程,在 Linux 中可以通过 / etc/hosts 文件来设置,而在 windows 中可以通过配置 C:\Windows\System32\drivers\etc\hosts 文件来设置,用户可以将任何域名解析到任何能够访问的 IP 地址。例如,我们在测试时可以将一个域名解析到一台测试服务器上,这样不用修改任何代码就能测试到单独服务器上的代码的业务逻辑是否正确。正是因为有这种本地 DNS 解析的规程,所以有黑客就可能通过修改用户的域名来把特定的域名解析到他指定的 IP 地址上,导致这些域名被劫持
  • 第三步:前两步是在本地电脑上完成的,若无法解析时,就要用到我们网络配置中的 "DNS 服务器地址" 了。操作系统会把这个域名发送给这个本地 DNS 服务器。每个完整的内网通常都会配置本地 DNS 服务器,例如用户是在学校或工作单位接入互联网,那么用户的本地 DNS 服务器肯定在学校或工作单位里面。它们一般都会缓存域名解析结果,当然缓存时间是受到域名的失效时间控制的。大约 80% 的域名解析到这里就结束了,后续的 DNS 迭代和递归也是由本地 DNS 服务器负责
  • 第四步:如果本地 DNS 服务器仍然没有命中,就直接到根 DNS 服务器请求解析
  • 第五步:根 DNS 服务器返回给本地 DNS 域名服务器一个顶级 DNS 服务器地址,它是国际顶级域名服务器,如. com、.cn、.org 等,全球只有 13 台左右
  • 第六步:本地 DNS 服务器再向上一步获得的顶级 DNS 服务器发送解析请求
  • 第七步:接受请求的顶级 DNS 服务器查找并返回此域名对应的 Name Server 域名服务器的地址,这个 Name Server 服务器就是我要访问的网站域名提供商的服务器,其实该域名的解析任务就是由域名提供商的服务器来完成。 比如我要访问 www.baidu.com,而这个域名是从 A 公司注册获得的,那么 A 公司上的服务器就会有 www.baidu.com 的相关信息
  • 第八步:返回该域名对应的 IP 和 TTL 值,本地 DNS 服务器会缓存这个域名和 IP 的对应关系,缓存时间由 TTL 值控制
  • 第九步:Name Server 服务器收到查询请求后再其数据库中进行查询,找到映射关系后将其IP地址返回给本地DNS服务器
  • 第十步:本地DNS服务器把解析的结果返回给本地电脑,本地电脑根据 TTL 值缓存在本地系统缓存中,域名解析过程结束在实际的 DNS 解析过程中,可能还不止这 10 步,如 Name Server 可能有很多级,或者有一个 GTM 来负载均衡控制,这都有可能会影响域名解析过程
  • 注意:
    • 从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间使用的交互查询就是迭代查询
    • 114.114.114.114是国内移动、电信和联通通用的DNS,手机和电脑端都可以使用,干净无广告,解析成功率相对来说更高,国内用户使用的比较多,而且速度相对快、稳定,是国内用户上网常用的DNS。
    • 223.5.5.5和223.6.6.6是阿里提供的免费域名解析服务器地址
    • 8.8.8.8是GOOGLE公司提供的DNS,该地址是全球通用的,相对来说,更适合国外以及访问国外网站的用户使用

搭建DNS域名解析服务器

概述

  • BIND:Berkeley Internet Name Domain ,伯克利因特网域名解析服务是一种全球使用最广泛的、最高效的、最安全的域名解析服务程序

安装软件

bash 复制代码
[root@server ~]# yum  install  bind  -y

bind中的三个重要文件

  • /etc/named.conf : 主配置文件,共59行,去除注释和空行之和有效行数仅30行左右,用于设置bind服务程序的运行
bash 复制代码
//
// 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 { 127.0.0.1; };
        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     { localhost; };

        /*
         - 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";

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

        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";
include "/etc/named.root.key";
  • /etc/named.rfc1912.zones : 区域配置文件(zone),用于保存域名和IP地址对应关系文件的所在位置,类似于图书目录,当需要修改域名与IP映射关系时需要在此文件中查找相关文件位置
bash 复制代码
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and https://tools.ietf.org/html/rfc6303
// (c)2007 R W Franks
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// Note: empty-zones-enable yes; option is default.
// If private ranges should be forwarded, add
// disable-empty-zone "."; into options
//

zone "localhost.localdomain" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};

zone "localhost" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};

zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};

zone "1.0.0.127.in-addr.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};

zone "0.in-addr.arpa" IN {
        type master;
        file "named.empty";
        allow-update { none; };
};
  • /var/named目录:数据配置文件目录,该目录存储保存域名和IP地址映射关系的数据文件
bash 复制代码
" ============================================================================
" Netrw Directory Listing                                        (netrw v171)
"   /var/named
"   Sorted by      name
"   Sort sequence: [\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,\~\=\*$,*,\.o$,\.obj$,\.inf
"   Quick Help: <F1>:help  -:go up dir  D:delete  R:rename  s:sort-by  x:special
" ==============================================================================
../
./
data/
dynamic/
slaves/
named.ca
named.empty
named.localhost
named.loopback

配置文件分析

  • 主配置文件共4部分组成,options{},logging{},zone{},include
bash 复制代码
options {   # 全局参数设置
        listen-on port 53 { 127.0.0.1; };  # 重点,监听允许访问的ip与端口,可以使用ip地址,网段,所有主机(any)
        listen-on-v6 port 53 { ::1; };  # 重点,监听允许访问的ipv6与端口
        directory       "/var/named";  # DNS数据目录位置,默认即可
        dump-file       "/var/named/data/cache_dump.db";  # 默认缓存文件位置,默认即可
        statistics-file "/var/named/data/named_stats.txt";  # DNS状态文件保存文件,默认即可
        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     { localhost; };   # 重点,表示允许那些客户端进行访问,可以书写IP地址,网段,所有主机(any)

    
        recursion yes;  # 重点,允许递归查询,若删除则为迭代查询

        dnssec-validation yes;   #  开启加密,默认即可

        managed-keys-directory "/var/named/dynamic";    #  指定目录文件保存位置,用于管理密钥(DNSSEC)

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";   # pid文件保存路径,自动生成,默认即可

        include "/etc/crypto-policies/back-ends/bind.config";  # 引用系统的统一加密策略文件,使得bind的加密配置符合系统的安全策略要求
};
logging {   # 指定日志记录的分类及存储目录
        channel default_debug {    # 设置日志输出方式
                file "data/named.run";   # 产生日志信息文件的位置
                severity dynamic;  # 日志级别
        };
};

zone "." IN {     # zone表示区域,"." 表示根,此处设置DNS根服务器的相关信息
        type hint;    # 表示服务器的类型为根
        file "named.ca";  # 用于保存DNS根服务器信息的文件,存储路径/var/named/named.ca,一共有13台ipv4和13台ipv6根服务器信息
};

include "/etc/named.rfc1912.zones";  # 表示当前DNS服务器的区域配置文件位置
include "/etc/named.root.key";  # 密钥存储文件位置
  • 一般需要修改三部分:
    • listen-on port 53 { 127.0.0.1; }; 监听ip及端口
    • allow-query { localhost; }; 允许哪些客户端访问
    • recursion yes; # 是否开启递归查询

区域配置文件

作用

  • /etc/named.rfc1912.zones文件为bind服务程序的区域配置文件,用来保存域名与IP地址映射关系文件的位置,是一系列功能模板的集合

区域配置文件示例分析

  • 正向解析
bash 复制代码
zone "localhost.localdomain" IN {  # 正向解析域名
        type master;  # 服务类型:master表示主服务器,slave表示从服务器,hint表示根服务器
        file "named.localhost";  # 域名与IP地址规则文件存储位置
        allow-update { none; };  # 允许那些客户端动态更新本机域名解析
};

# allow-update:允许更新解析库内容,一般关闭
# allow-query:允许查询的主机,白名单
# allow-tranfter : 允许同步的主机,白名单,常用
# allow-recursion: 允许递归的主机
  • 反向解析
bash 复制代码
zone "1.0.0.127.in-addr.arpa" IN {  # 表示127.0.0.1的反向解析配置,IP地址需要倒置书写,只需书写网段即可
        type master; 
        file "named.loopback";  # 反向解析的规则文件保存位置
        allow-update { none; };
};

正向解析资源文件

  • 查看
bash 复制代码
$TTL 1D  # 设置生存周期时间为1天,$表示宏定义
@       IN SOA  @ rname.invalid. (
# @:表示zone域,现在表示域名,如baidu.com
# IN SOA:授权信息开始
# rname.invalid. :域名管理员的邮箱(不能使用@,使用点代替邮箱分隔符@)
                                        0       ; serial  # 序列号,10位以内的整数
                                        1D      ; refresh  # 更新频率为1天
                                        1H      ; retry  # 失败重试实践为1小时
                                        1W      ; expire  # 失效实践1周
                                        3H )    ; minimum  # 缓存实践为3小时
        NS      @
        A       127.0.0.1
        AAAA    ::1
# A:表示ipv4地址,AAAA表示ipv6地址
  • 域名解析记录分析

    • A记录:A 代表 Address,用来指定域名对应的 IP 地址,如将 item.taobao.com 指定到 115.238.23.xxx,将 switch.taobao.com 指定到 121.14.24.xxx
    • MX记录:Mail Exchange,就是可以将某个域名下的邮件服务器指向自己的 Mail Server,如 taobao.com 域名的 A 记录 IP 地址是 115.238.25.xxx,如果将 MX 记录设置为 115.238.25.xxx,即 xxx@taobao.com 的邮件路由,DNS 会将邮件发送到 115.238.25.xxx 所在的服务器,而正常通过 Web 请求的话仍然解析到 A 记录的 IP 地址
    • NS记录:为某个域名指定 DNS 解析服务器,也就是这个域名由指定的 IP 地址的 DNS 服务器取解析
    • CNAME 记录:Canonical Name,即别名解析。所谓别名解析就是可以为一个域名设置一个或者多个别名,如将 aaa.com 解析到 bbb.net、将 ccc.com 也解析到 bbb.net,其中 bbb.net 分别是 aaa.comccc.com 的别名
    • TXT 记录:为某个主机名或域名设置说明,如可以为 ddd.net 设置 TXT 记录为 "这是 XXX 的博客" 这样的说明

反向解析资源文件

bash 复制代码
$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
IN		 NS       ns.域名.   # 域名服务器记录,注意结尾的点
ns		 IN	  A   域名解析服务器的IP地址
IP地址	PTR      域名.   # PTR 指针记录,用于反向解析

实验1(正向解析)

服务端IP 客户端IP 网址
192.168.160.137 192.168.160.138 www.openlab.com
  • 准备工作
bash 复制代码
[root@server ~]# setenforce 0
[root@server ~]# systemctl stop firewalld
# 服务端及客户端都设置静态IP地址
[root@server ~]# yum  install bind -y
  • DNS解析设置
  • 第一步:服务端操作,配置DNS主配置文件
bash 复制代码
[root@server ~]# vim  /etc/named.conf 

options {
        listen-on port 53 { any ;};
		......
        allow-query     { any ;};
  • 第二步:服务端操作,编辑区域配置文件,可以清空后添加,也推荐选择一个解析模版进行修改
bash 复制代码
 [root@server ~]# vim  /etc/named.rfc1912.zones 
 # 选择一个正向解析模版,进行修改,设置解析区域名及存储解析记录的数据文件名
zone "openlab.com" IN {
        type master;
        file "openlab.com.zone";
        allow-update { none; };
};
  • 第三步:服务端操作,编辑数据配置文件,推荐使用cp -a命令完全拷贝一份正向解析模板,在修改局部
bash 复制代码
[root@server ~]# cd /var/named
[root@server named]# ls
data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves
[root@server named]# cp -a named.localhost  openlab.com.zone
[root@server named]# vim openlab.com.zone
$TTL 1D
openlab.com.    IN SOA  ns.openlab.com. andy.qq.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
openlab.com.    IN      NS      ns.opnelab.com.
ns.openlab.com. IN      A       192.168.160.137
www.openlab.com.        IN      A       192.168.160.137
bbs.openlab.com.        IN      A       192.168.160.137
ftp.openlab.com.        IN      A       192.168.160.137
www1.openlab.com.       IN      CNAME   www.openlab.com.
  • 第四步:服务端操作,重启服务
bash 复制代码
[root@server named]# systemctl start named
  • 第五步:客户端操作,将客户端的网卡配置文件中的DNS解析地址修改为服务端的IP地址
bash 复制代码
[root@node ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32
DNS1=192.168.160.137

[root@node ~]# nmcli connection reload # 重载配置文件
[root@node ~]# nmcli connection up ens32 # 激活
  • 第六步:客户端测试
bash 复制代码
[root@node ~]# nslookup
> www.openlab.com
Server:         192.168.160.137
Address:        192.168.160.137#53

Name:   www.openlab.com
Address: 192.168.160.137
> www1.openalb.com
Server:         192.168.160.137
Address:        192.168.160.137#53

** server can't find www1.openalb.com: SERVFAIL
> # ctrl+d退出


# 或者使用下列方法测试
[root@node1 ~]# host  www.openlab.com
[root@node1 ~]# dig  @192.168.13.134  www.openlab.com

注意:第三步数据配置文件可以进行精简

  • SOA起始授权记录:openlab.com. IN SOA ns.openlab.com. admin.openlab.com. (),表示openlab.com.这个域名指定dns服务器为ns.openlab.com.这台主机,以及其它附加信息
  • ns记录:openlab.com. IN NS ns.openlab.com. ,声明openlab.com.这个域名的dns服务器为ns.openlab.com.主机
  • 以上区别:NS记录仅仅只是声明该域内哪台主机是dns服务器,用来提供名称解析服务,NS记录不会区分哪台dns服务器是master哪台dns服务器是slave。而SOA记录则用于指定哪个NS记录对应的主机是master dns服务器,也就是从多个dns服务器中挑选一台任命其为该域内的master dns服务器,其他的都是slave,都需要从master上获取域相关数据
  • A记录:表示那台主机解析为什么IP地址
  • CNAME记录:别名,www1.openlab.com.主机解析为www.openlab.com.主机在查找对应IP
  • 精简原则:
    • 可以使用@替代域名,如@替代openlab.com.
    • 可以使用空格或tab重复继承上一行第一列的值
    • 可以省略域名,会自动补全,如:www为www.openlab.com.
    • 配置文件可以省略如下:
bash 复制代码
 [root@server named]# vim  openlab.com.zone

$TTL 1D
@    IN SOA  ns.openlab.com. admin.openlab.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
		   NS      ns.openlab.com.
ns         IN      A       192.168.48.130
www        IN      A       192.168.48.130
ftp        IN      A       192.168.48.130
bbs        IN      A       192.168.48.130
www1       IN      CNAME   www

实验二(反向解析)

服务端IP 客户端IP 网址
192.168.160.137 192.168.160.138 www.openlab.com
  • 第一步:服务端操作,修改主配置文件(基于实验1可以不做修改)
bash 复制代码
[root@server ~]# vim  /etc/named.conf 

options {
        listen-on port 53 { any ;};
		......
        allow-query     { any ;};
  • 第二步:修改区域配置文件
bash 复制代码
[root@server ~]# vim  /etc/named.rfc1912.zones   
zone "160.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.160.arpa";
        allow-update { none; };
};
  • 第三步:服务端操作,编辑数据配置文件,复制一份反向解析模版(named.loopback),在修改局部即可
bash 复制代码
[root@server ~]# cd  /var/named/
[root@server named]# cp  -a  named.loopback  192.168.13.arpa
[root@server named]# vim 192.168.160.arpa
$TTL 1D
@       IN SOA  ns.openlab.com. zz.qq.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      ns.openlab.com.
137     IN      PTR     ns.openlab.com.
137     IN      PTR     www.openlab.com.
137     IN      PTR     bbs.openlab.com.
137     IN      PTR     ftp.openlab.com.
  • 第四步 :重启服务
bash 复制代码
[root@server named]# systemctl start named
  • 第五步:客户端测试
bash 复制代码
`[root@node ~]# nslookup
> www.openlab.com
Server:         192.168.160.137
Address:        192.168.160.137#53

Name:   www.openlab.com
Address: 192.168.160.137
> 192.168.160.137
137.160.168.192.in-addr.arpa    name = ftp.openlab.com.
137.160.168.192.in-addr.arpa    name = www.openlab.com.
137.160.168.192.in-addr.arpa    name = ns.openlab.com.
137.160.168.192.in-addr.arpa    name = bbs.openlab.com.
> # Ctrl+d退出

实验3(部署DNS主从服务器)

作用

  • DNS作为重要的互联网基础设施服务,保证 DNS 域名解析服务的正常运转至关重要,只有这样才能提供稳定、快速且不间断的域名查询服务
  • DNS 域名解析服务中,从服务器可以从主服务器上获取指定的区域数据文件,从而起到备份解析记录与负载均衡的作用,因此通过部署从服务器可以减轻主服务器的负载压力,还可以提升用户的查询效率
  • 注意:
    • 时间同步必须保持一致性
    • bind最好使用同一版本

完全区域传送

  • 一个区域文件复制到多个从服务器上的过程称为区域传送
  • 将主服务器的所有信息全部复制到从服务器中,称为完全区域传送,即复制整个区域文件
  • 实验说明
设备 IP 系统
主服务器 192.168.160.137 openeuler22.03
从服务器 192.168.160.138 openeuler22.03
客户端 192.168.160.139 openeuler22.03
  • 第一步:两个服务器server和node恢复快照,安装软件,设置静态ip
bash 复制代码
[root@server ~]# setenforce 0
[root@server ~]# systemctl stop firewalld
[root@node ~]# setenforce 0
[root@node ~]# systemctl stop firewalld
# 服务端及客户端都设置静态IP地址
[root@server ~]# yum  install bind -y
[root@node ~]# yum  install bind -y
  • 第二步:主服务器server端操作,设置DNS主配置文件,修改内容如下:
bash 复制代码
[root@server ~]# vim /etc/named.conf
options {
        listen-on port 53 { any; };
        ......
        allow-query     { any; };
  • 第三步:主服务器server'操作,设置区域配置文件
bash 复制代码
[root@server ~]# vim /etc/named.rfc1912.zones
# 重点:改为同步模式,格式为allow-transfer { 从服务器的IP地址; };
zone "openlab.com" IN {
        type master;
        file "openlab.com.zone";
        allow-tranfer { 192.168.160.138; };
};
  • 第四步:主服务器server端操作,设置正向解析的数据配置文件
bash 复制代码
[root@server named]# cd /var/named
[root@server named]# ls
data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves
[root@server named]# cp -a named.localhost openlab.com.zone
[root@server named]# vim openlab.com.zone
$TTL 1D
openlab.com.    IN SOA  ns.opnelab.com. aa.qq.com (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
openlab.com.    IN      NS      ns.openlab.com.
openlab.com.    IN      NS      slave.openlab.com.   # 增减从
ns.openlab.com. IN      A       192.168.160.137
slave.openlab.com.      IN      A       192.168.160.138    # 增加从
bbs.openlab.com.        IN      A       192.168.160.137
www.openlab.com.        IN      A       192.168.160.137
ftp.openlab.com.        IN      A       192.168.160.137
  • 第五步:主服务器server端操作,重启服务
bash 复制代码
[root@server named]# systemctl restart named
  • 第六步:从服务器node端操作,修改主配置文件
bash 复制代码
[root@node ~]# vim /etc/named.conf
options {
        listen-on port 53 { any; };
        ......
        allow-query     { any; };
  • 第七步:修改区域配置文件
bash 复制代码
zone "openlab.com" IN {
        type slave; 			# 服务类型变更为从
        masters { 192.168.160.137; };	# 设置主服务器的IP地址
        file "slaves/openlab.com.zone";			# 从服务器的数据配置文件存储位置必须为slaves目录下
};
  • 第八步:从服务器node端重启服务,当从服务器服务重启,会向主服务器同步拉取数据到/var/named/slaves
bash 复制代码
[root@node ~]# mkdir -p /var/named/slaves
[root@node ~]# cd /var/named/slaves
[root@node slaves]# ls   # 重启前为空目录
[root@node slaves]# systemctl restart named
[root@node slaves]# ls     # 拉取数据
openlab.com.zone
  • 第九步:node1端测试
bash 复制代码
[root@node ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32    # dns改成137,138都行,改成138是为了测试从服务器
DNS1=192.168.160.138   

[root@node ~]# nmcli connection reload
[root@node ~]# nmcli connection up ens32

[root@node ~]# nslookup www.openlab.com
Server:         192.168.160.138
Address:        192.168.160.138#53

Name:   www.openlab.com
Address: 192.168.160.137

增量区域传送

  • 功能:仅复制区域中变化的数据部分
  • 第一步:主服务器server端操作,修改数据配置文件
bash 复制代码
[root@server ~]# vim /var/named/openlab.com.zone
$TTL 1D
openlab.com.    IN SOA  ns.openlab.com. aa.qq.com (
                                        1       ; serial   # 修改
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
openlab.com.    IN      NS      ns.openlab.com.
openlab.com.    IN      NS      slave.openlab.com.
openlab.com.    IN      MX      8       mail.openlab.com.   # 增加

ns.openlab.com.         IN      A       192.168.160.137
slave.openlab.com.      IN      A       192.168.160.138

mail.openlab.com.       IN      A       192.168.160.137   # 增加
bbs.openlab.com.        IN      A       192.168.160.137
www.openlab.com.        IN      A       192.168.160.137
ftp.openlab.com.        IN      A       192.168.160.137
www1.openlab.com.       IN      CNAME   www.openlab.com.   #增加

# 注意:1       ; serial中序号修改为1,否则从服务器不会更新数据
  • 主服务器server端操作,重启服务
bash 复制代码
[root@server ~]# systemctl restart named
  • 第三步:从服务器node端,重启服务
bash 复制代码
[root@node slaves]# systemctl restart named
  • 第四步:客户端node1测试
bash 复制代码
[root@node ~]# nslookup
> www1.openlab.com
Server:         192.168.160.138
Address:        192.168.160.138#53

** server can't find www1.openlab.com: NXDOMAIN
> www1.openlab.com
Server:         192.168.160.138
Address:        192.168.160.138#53

www1.openlab.com        canonical name = www.openlab.com.
Name:   www.openlab.com
Address: 192.168.160.137

注意

  • 序号必须比原序号要大
  • 更新频率需要改小一些,这样可以更快看到实验结果
  • 增量传送中主服务端需要写关于从服务器的NS记录和A记录,否则从服务器端不更新数据
相关推荐
Youkiup20 分钟前
【linux 常用命令】
linux·运维·服务器
qq_2975046124 分钟前
【解决】Linux更新系统内核后Nvidia-smi has failed...
linux·运维·服务器
weixin_4373982137 分钟前
Linux扩展——shell编程
linux·运维·服务器·bash
小林熬夜学编程1 小时前
【Linux网络编程】第十四弹---构建功能丰富的HTTP服务器:从状态码处理到服务函数扩展
linux·运维·服务器·c语言·网络·c++·http
Hacker_Fuchen1 小时前
天融信网络架构安全实践
网络·安全·架构
上海运维Q先生1 小时前
面试题整理15----K8s常见的网络插件有哪些
运维·网络·kubernetes
ProtonBase1 小时前
如何从 0 到 1 ,打造全新一代分布式数据架构
java·网络·数据库·数据仓库·分布式·云原生·架构
冷心笑看丽美人1 小时前
探秘 DNS 服务器:揭开域名解析的神秘面纱
linux·运维·服务器·dns
wenxiaocsdn1 小时前
某科技局国产服务器PVE虚拟化技术文档
运维·服务器
远游客07139 小时前
centos stream 8下载安装遇到的坑
linux·服务器·centos