常见加密算法简介以及DNS服务其原理

一、常见的加密算法及其原理


利用加密算法和协议对通信数据进行加密是保证安全通讯的常用方法,以保证通讯数据的保密性、完整性和可用性。常见的加密算法和协议有:对称加密、非对称加密、单项加密和认证协议。

对称加密算法

对称加密算法采用的是单密钥加密方式,加密和解密使用同一个密钥,依赖于算法和密钥,但其安全性依赖于密钥而非算法。在通讯时,发送方将数据按固定大小分割后,用密钥和加密算法逐个加密发送给接收方,接收方接收到加密数据后,通过密钥和解密算法进行解密,并将数据组合后还原原始数据。此算法具有以下特性和缺陷:

  • 特性:
    • 加密、解密使用同一密钥
    • 将明文分割成固定大小的块,逐个进行加密
  • 缺陷
    • 密钥过多,密钥管理困难
    • 密钥分发困难,分发过程安全性难以保证

常见的对称加密算法有:

  • DES:分组式加密算法,以64位为分组对数据加密,加解密使用同一个算法。
  • 3DES:三重数据加密算法,对每个数据块应用三次DES加密算法。
  • AES:高级加密标准算法,用于替代原先的DES
  • Blowfish:Blowfish算法是一个64位分组及可变密钥长度的对称密钥分组密码算法,可用来加密64比特长度的字符串。

算法执行过程如图:


对称加密算法流程.png

非对称加密算法

非对称加密采用公钥加密方法,使用私钥进行解密,公钥和私钥是成对的,公钥是从私钥中提取出来的,使用公钥加密的数据们只能使用与之配对的私钥进行解密,反之亦然。非对称加密算法主要用于数字签名、密钥交换和数据加密这三个方面。

私钥:secret key,仅限个人使用
公钥:public key,公开给所有用户获取

加密流程:
发送方从接收方获取由接收方自己的私钥提取出的公钥,结合加密算法对明文进行加密后发送给接收方,接受方收到密文后,通过自己的密文结合算法进行解密,取得原始数据。


非对称加密流程.png

常见的非对称加密算法:

  • RSA:RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,可用于加密,也能用于签名
  • DSA:数字签名算法,仅能用于签名,不能用于加解密。
  • DSS:数字签名标准,可用于签名,也可以用于加解密。
  • ELGamal:利用离散对数的原理对数据进行加解密或数据签名,加解密速度很慢。

单项加密算法

单向加密算法常用于提取数据指纹,验证数据的完整性。用这类算法加密的数据,解密过程是一个二次加密的过程,主要是提取出数据的特征码,也称数据指纹。此类算法只用进行加密,无法进行解密。主要用于数据完整性校验和系统账号密码校验。
算法加密过程
发送者将明文通过单向加密算法加密生成定长的密文串,然后传递给接收方。接收方在收到加密的报文后进行解密,将解密获取到的明文使用相同的单向加密算法进行加密,得出加密后的密文串。随后将之与发送者发送过来的密文串进行对比,若发送前和发送后的密文串相一致,则说明传输过程中数据正确;若不一致,说明数据在参数过程中发生了变化。

单项加密流程.png

此类算法的特征:

  • 定长输出:无论原来的数据有多大,其加密结果长度一样
  • 雪崩效应:原始数据微小变化,将导致加密结果的巨大变化
  • 加密过程不可逆:只能加密,无法解密

密钥交换

密钥交换(IKE)是通讯双方通过交换密钥来实现数据加密解密。常见交换方式有以下两种:
1、公钥加密:将公钥加密后通过网络传输到对方进行解密,由于此种方式恨到可能性被截取破解,因此不常用。
2、DH:Deffie-Hellman,是一种密钥交换方式。通讯双方共有一些参数,共同协商加密算法,,都具有各自的私有参数,通过共有参数、私有参数和算法信息来进行加密,然后双方交换结果,交换后再和属于自己私有的参数进行特殊算法,经过双方计算后的结果是相同的,这个结果就是密钥。

A有p和g两个参数,A还有一个属于自己的私有参数x;
B 有p和g两个参数,A还有一个属于自己的私有参数y;
A和B均使用相同的加密算法计算其对应的值:value_A=px%g,value_B=py%g
随后双方交换计算后的值,然后再分别使用自己的私有参数对去求次方,如:
A拿到value_B值后,对其求x次方得(py%g)x=p^xy%g;
B拿到value_A值后,对其求y次方得(px%g)y=p^xy%g;
最终得到的结果是相同的
整个过程中第三方人员智能获取到p、g两个值,AB双方交换的是计算后的结果,因此这种加密方式是安全的

公钥基础设施(PKI)

公钥基础设施是一个包括硬件、软件、人员、策略和规程的集合,用于实现基于公钥密码机制的密钥和证书的生成、管理、存储、分发和撤销的功能。
组成部分:

  • 签证机构CA
  • 注册机构RA
  • 证书吊销列表CRL
  • 证书存取库

数字证书的格式(x.509 v3)的组成:

  • 版本号(version)
  • 序列号(serial number):CA用于唯一标识此证书
  • 签名算法ID(Signature algorithm identifier)
  • 发行者的名称:即CA在即的名称
  • 有效期:两个日期,起始日期和终止日期
  • 证书主体名称:证书拥有者自己的名字
  • 证书主体公钥:证书拥有者自己的公钥
  • 发行商的唯一标识
  • 证书主体的唯一标识

数字证书认证流程:


CA认证流程.png

SSL/TLS

SSL:(Secure Sockets Layer)安全套接层,是为网络通信提供安全及数据完整性的一种安全协议。位于TCP/IP协议与各种应用层协议之间,位数剧痛需提供安全支持。
SSL协议分为两层:

  • SSL记录协议(SSL Record Protocol):建立在可靠的传输协议上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
  • SSL握手协议(SSL Handshake Protocol):他建立的SSL记录协议之上,用于在实际的数据传输开始前,通讯双份进行身份认证、协商加密算法、交换加密密钥等。

TLS:(Transport Layer Security)传输层安全,与SSL在传输层对网络连接进行加密。
TLS的分层设计:

  • 最底层:基础算法原语的实现
  • 向上一层:各种算法的实现
  • 在向上一层:组合算法实现的半成品
  • 用各种组件拼装而成的各种成品密码学协议软件

SSL提供的服务:

  • 认证用户和服务器,确保数据发送到正确的客户机和服务器
  • 加密数据以防止数据中途被窃取
  • 维护数据的完整性,确保数据在传输过程中不被改变

SSL会话主要三步:

  • 客户端向服务器端索要并验证证书
  • 双方协商生成“会话密钥”
  • 双方采用“会话密钥”进行加密通信

SSL握手协议处理流程:

  • 第一阶段:ClientHello
    • 支持的协议版本,
    • 客户端生成一个随机数,稍后用户生成“会话密钥”
    • 支持的压缩算法
  • 第二阶段:ServerHello
    • 确认使用的加密通信协议版本,
    • 服务器端生成一个随机数,稍后用于生成“会话密钥”
    • 确认使用的加密方法
    • 服务器证书
  • 第三阶段:
    • 验证服务器证书,再确认无误后取出器公钥
    • 发送以下信息给服务器端:
      • 1个随机数
      • 编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送
      • 客户端握手结束通知
  • 第四阶段:
    • 收到客户端发来的第三个随机数pre-master-key后,计算生成会话所用到的“会话密钥”
    • 向客户端发送以下信息:
      • 编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送
      • 服务器端握手结束通知

二、搭建nginx并使用自签证书实现https访问


1、搭建nginx

关于编译搭建nginx服务此前的文章已做说明,此处采用yum命令安装nginx

yum install -y nginx

查看nginx编译参数:/usr/local/nginx/sbin/nginx -V

[root@localhost /]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.14.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module

若显示结果中没有--with-http_gzip_static_module这个参数,需要重新编辑nginx。

2、构建私有CA并签发https证书

1、在/etc/pki/CA/private目录下生成CA私钥文件cakey.pem

(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)

2、生成自签证书,并在/etc/pki/CA/目录下CA所需的目录和文件,目录包括certs、crl和newcerts,若这些目录已存在则无需创建。文件包括serial和index.txt。并在证书编号01写入serial文件中。

[root@localhost private]# cd ..
[root@localhost CA]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:sichuan
Locality Name (eg, city) [Default City]:chengdu
Organization Name (eg, company) [Default Company Ltd]:wxqtest
Organizational Unit Name (eg, section) []:ops
Common Name (eg, your name or your server's hostname) []:ca.wxqtest.com
Email Address []:
[root@localhost CA]# touch /etc/pki/CA/{serial,index.txt}
[root@localhost CA]# ll
总用量 4
-rw-r--r--. 1 root root 2021 10月 22 20:52 cacert.pem
drwxr-xr-x. 2 root root    6 4月  11 2018 certs
drwxr-xr-x. 2 root root    6 4月  11 2018 crl
-rw-r--r--. 1 root root    0 10月 22 21:01 index.txt
drwxr-xr-x. 2 root root    6 4月  11 2018 newcerts
drwx------. 2 root root   23 10月 22 19:51 private
-rw-r--r--. 1 root root    0 10月 22 21:01 serial
[root@localhost CA]# echo 01>/etc/pki/CA/serial

3、创建nginx证书签署请求,并将生成的.csr文件通过可靠方式发送给CA主机。此处实验使用的CA主机和请求nginx证书的主机为同一台:

[root@localhost nginx]# mkdir /usr/local/nginx/conf/ssl    #存放私钥的目录
[root@localhost nginx]# cd /usr/local/nginx/conf/ssl
[root@localhost ssl]# (umask 077;openssl genrsa -out /usr/local/nginx/conf/ssl/nginx.key 2048)  #生成私钥
Generating RSA private key, 2048 bit long modulus
.................+++
...........+++
e is 65537 (0x10001)
[root@localhost ssl]# openssl req -new -key /usr/local/nginx/conf/ssl/nginx.key -out /usr/local/nginx/conf/ssl/nginx.csr -days 365    #生成证书签署请求
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:sichuan
Locality Name (eg, city) [Default City]:chengdu
Organization Name (eg, company) [Default Company Ltd]:wxqtest
Organizational Unit Name (eg, section) []:ops
Common Name (eg, your name or your server's hostname) []:www.wxqtest.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@localhost ssl]# ll
总用量 8
-rw-r--r--. 1 root root 1009 10月 22 22:27 nginx.csr
-rw-------. 1 root root 1675 10月 22 22:20 nginx.key

4、在CA主机上签署证书,并发送给服务器主机,将证书文件放置到/usr/local/nginx/ssl目录下即可。此实验中CA主机与服务主机为同一主机。

[root@localhost ssl]# openssl ca -in /usr/local/nginx/conf/ssl/nginx.csr -out /usr/local/nginx/conf/ssl/nginx.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 2 (0x2)
        Validity
            Not Before: Oct 22 14:37:36 2018 GMT
            Not After : Oct 22 14:37:36 2019 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = sichuan
            organizationName          = wxqtest
            organizationalUnitName    = ops
            commonName                = www.wxqtest.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                03:87:43:F2:BF:25:E8:3A:23:1E:78:48:C8:72:0D:FA:67:E3:10:FE
            X509v3 Authority Key Identifier: 
                keyid:F3:1D:26:96:F6:ED:56:9B:C7:F6:5E:EE:83:5D:55:F7:6D:C1:DB:A9

Certificate is to be certified until Oct 22 14:37:36 2019 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@localhost ssl]# cat /etc/pki/CA/index.txt
R   191022133936Z   181022143602Z   01  unknown /C=CN/ST=sichuan/O=wxqtest/OU=ops/CN=www.wxqtest.com
V   191022143736Z       02  unknown /C=CN/ST=sichuan/O=wxqtest/OU=ops/CN=www.wxqtest.com
[root@localhost ssl]# ll
总用量 16
-rw-r--r--. 1 root root 5724 10月 22 22:37 nginx.crt
-rw-r--r--. 1 root root 1009 10月 22 22:27 nginx.csr
-rw-------. 1 root root 1675 10月 22 22:20 nginx.key

5、修改nginx配置文件,加载ssl证书
编辑/usr/local/nginx/conf/nginx.conf文件。

   # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  localhost;

        ssl_certificate      /usr/local/nginx/conf/ssl/nginx.crt;
        ssl_certificate_key  /usr/local/nginx/conf/ssl/nginx.key;
        fastcgi_param HTTPS $https if_not_empty;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

然后重启nginx服务

[root@localhost conf]# systemctl start nginx.service
[root@localhost conf]# systemctl status nginx.service
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since 一 2018-10-22 22:58:23 CST; 7s ago
     Docs: http://nginx.org/en/docs/
  Process: 3897 ExecStop=/bin/kill -s QUIT $MAINPID (code=exited, status=0/SUCCESS)
  Process: 4039 ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf (code=exited, status=0/SUCCESS)
  Process: 4037 ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf (code=exited, status=0/SUCCESS)
 Main PID: 4041 (nginx)
    Tasks: 2
   CGroup: /system.slice/nginx.service
           ├─4041 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
           └─4042 nginx: worker process

此时查看端口,发现https的443端口已启动

[root@localhost conf]# netstat -tan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN     
tcp        0     52 192.168.2.110:22        192.168.2.112:58979     ESTABLISHED
tcp6       0      0 :::111                  :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:631                 :::*                    LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN     
tcp6       0      0 ::1:6010                :::*                    LISTEN     

然后进行测试:


nginxhttps.png

测试成功。


三、DNS服务器原理简述


DNS是Domain Name System的简称,即域名系统,是一个记录域名和Ip地址相互映射的系统,主要作用是为了解决域名与IP之间的相互转换。DNS是一个网络服务,其端口为53号端口。通常DNS在查询时是以UDP协议来进行查询,一旦无法查询到完整信息时,再以TCP协议进行重新查询。因此,DNS服务启动时会同时开启UDP和TCP协议的53号端口。

1、DNS域名

DNS是一个分布式、分层次的主机名管理架构,采用是层级树状结构来划分域名。一个合法的域名遵循FQDN格式,以域名系统的级别从低到高,从左而右编写。

最顶层为根域名,主要负责顶级域名的管理;
往下一层是顶级域名,顶级域名主要是定义了一些国家和组织的互联网后缀,负责管理其所对应的二级域名;
再下一层为二级域名,负责对应的的主机名称的解析或三级域名的解析;

域名层次结构.png

2、DNS的查询方式

DNS的查询和解析过程分为两段,第一段是本地客户端向本地DNS服务器查询,第二段是本地服务器在互联网上分布式的DNS服务器上查询。由此DNS的查询方式也分为了两种,分别是递归查询和迭代查询。

递归查询:客户端发起DNS解析请求,若本地DNS服务器无法直接解析域名,则DNS服务器会向域名系统中个分支的DNS服务器进行递归查询,知道有服务器响应回答该请求后,将结果回馈给客户端。
迭代查询:当本地DNS服务器无法对客户端发起的DNS解析请求进行直接解析时,会向根DNS服务器发送解析请求,根DNS服务器并不能直接提供该DNS的解析结果,则根DNS服务器会告知本地DNS服务器另一个可能查询到该DNS解析结果的DNS服务器IP,本地DNS服务器再次向这个DNS服务器发起解析请求,如此类推,直到查询到对应的结果为止。

通常递归查询这种方式用于PC机与本地DNS服务器之间的查询,而递归查询则多用于DNS服务器之间的查询


dns解析全过程.jpg

DNS服务器的类型

DNS服务是一个分布式数据库系统,每一个数据库都有一台服务器主机负责维护,这个服务器主机就是DNS服务器;这样服务器就分为两类:

  • 一类是只负责地址解析请求,不负责任何域的解析,仅仅作为缓存,加快解析速度。这种服务器叫缓存DNS服务器
  • 一类是负责地址解析的DNS服务器,又分为主名称服务器辅助名称服务器
    • 主名称服务器至少负责解析一个域内的域名,维护所负责解析的域的数据库,可对该域数据库进行读写操作;
    • 辅助名称服务器则负责从主名称服务器或其他辅助名称服务器中复制相关解析库,为主名称服务器缓解解析压力;

4、DNS的名称解析方式

在DNS服务器中逻辑上存在着两个区域,一个是正向解析区域,另一个是反向解析区域。DNS解析方式也分为正向解析和反向解析。

  • 正向解析即我们通常所说的域名解析,实现从域名到IP地址的解析。
  • 反向解析指的是IP反向解析,即通过查询IP地址的PTR记录来得到该IP地址所指向的域名记录。而PTR记录为邮件交换记录的一种,另一种为A记录。A记录解析域名到IP地址,而PTR记录则负责解析IP地址到域名。

DNS服务的配置文件

bind程序是DNS服务的实现,在安装好bind程序后,即可对DNS服务相关配置文件进行配置。
在Centos 系统中与DNS服务相关的配置文件包括:/etc/named.conf主配置文件、/etc/named.rfc1912.zones区域管理文件和/var/named/目录下的区域数据库文件。主配置文件/etc/named.conf和/etc/named.rfc1912.zones设置了DNS服务器能够管理哪些区域并且指定了这些区域对应的区域数据文件的存放路径和名称。

1、主配置文件/etc/named.conf

DNS服务的主配置文件包含了三个段,分别为全局配置段options{ ... }、日志配置段logging{ ... }和区域配置段zone{ ... }。再次配置文件中,每个配置语句必须以分号结尾,花括号中必须要有空格。
编辑完成主配置文件后可使用命令named-checkconf /etc/named.conf进行语法检测。
具体配置情况如下:


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";
        allow-query     { localhost; };
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.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";

2、区域管理文件/etc/named.rfc1912.zones

/etc/named.rfc1912.zones为区域管理文件,用以保存主机负责解析或转发的区域,为/etc/named.conf所调用。其常见内容如下:

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名称以in-addr.apra结尾的为反向解析区域,其命名格式为IP网段的反写.in-addr.apra,剩下的zone则为正向解析区域。其中区域内的可设置选项包括:

  • type:设置此区域的类型,包括master(主名称服务器)、slave(辅助名称服务器)、forward(转发域)、hint(根域名服务器);
  • file FILENAME:指定区域数据文件的相对路径,目录路径由主配置文件/etc/named.conf所指定;
  • allow-update:是否允许客户主机或服务器自行更新DNS记录,上述为不允许更新DNS记录;
3、区域数据文件

区域数据文件存放在/var/named目录下,文件大体分为正向解析区域文件和反向解析区域文件,通常该文件内容如下:

$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
        PTR     localhost.

第一行为设定TTL的值,定义区域数据文件里面的各项记录的宏。
第二行为SOA起始授权记录,一个区域解析库有且只能有一个SOA记录,而且必须放在第一条;上述@表示当前区域的名称。
往下第三到第七行定义了服务器同步信息的相关设置,其含义如下:

  • serial:表示配置版本的序列号,通常情况下,序列号sn遵循“年+月+日+编号”的格式,在修改了区域文件后需要手动修改序列号;
  • refresh:设置DNS服务器进行同步的间隔时间,只针对本区域文件总定义的NS记录的所有主机;
  • retry:表示同步更新失败之后,进行重试的间隔时间;
  • expire:表示同步更新失败之后,多长时间清楚对应的记录,又称过期时间;
  • minimum:指高速缓存否定回答的存活时间;

区域数据文件中的资源记录类型:
1、SOA:起始授权记录;一个区域解析库有且只能有一个SOA记录,而且必须放在第一条

name [TTL] IN SOA value

  • name:当前区域的名称
  • value:有多部分组成
  • 当前区域的区域名称,也可以使用主DNS服务器名称
  • 当前区域管理员的邮箱地址;但地址中的不能使用@符号,一般使用点好来替代
  • 主从服务协调属性的定义以及否定答案的TTL
baidu.com. 7200 IN  SOA dns.baidu.com.

2、NS记录:表示当前区域中的某个DNS服务器的名字,一个区域可有多个NS记录

baidu.com.      35234   IN  NS  ns2.baidu.com.
baidu.com.      35234   IN  NS  ns4.baidu.com.
baidu.com.      35234   IN  NS  dns.baidu.com.
baidu.com.      35234   IN  NS  ns3.baidu.com.
baidu.com.      35234   IN  NS  ns7.baidu.com.

3、MX记录:表示当前区域的某个邮件交换器的主机名;MX记录可以有多个,但每个MX记录之间应有一个数字表示其优先级

baidu.com.      3532    IN  MX  20 mx1.baidu.com.
baidu.com.      3532    IN  MX  20 jpmx.baidu.com.
baidu.com.      3532    IN  MX  20 mx50.baidu.com.
baidu.com.      3532    IN  MX  10 mx.maillb.baidu.com.
baidu.com.      3532    IN  MX  15 mx.n.shifen.com.

4、A记录:表示主机名对应的IP地址,一个主机名可对应多个IP地址

baidu.com.      34  IN  A   123.125.115.110
baidu.com.      34  IN  A   220.181.57.216

5、AAAA记录:ipv6的A记录,不常用
6、PTR记录:反向地址解析记录,用于将IP地址反解析成域名,常见于反向解析区域文件中,其中IP地址要反过来写,并且加上.in-addr.arpa.特定后缀

name [TTL] IN PTR FQDN

如:

69.2.139.61.in-addr.arpa. 34172 IN  PTR ns.sc.cninfo.net.

7、CNAME记录:域名的别名记录,用于记录某个主机域名的别名

www.taobao.com. 204 IN  CNAME www.taobao.com.danuoyi.tbcache.com.

区域数据文件编辑完成之后,可以使用named-checkzone DOMAIN ZONE_FILE命令检查相应的区域数据文件。


四、搭建DNS主-辅服务器并实现智能DNS


1、环境准备

Master Server:Centos 7,192.168.2.104
Slave Server1:Centos 7,192.168.2.106

分别在两台服务器上安装named服务yum install -y bind,并确保主从服务器时区时间一致,可通过ntpdate命令进行网络时间同步。

[root@localhost ~]# ntpdate -u ntp.api.bz
 5 Nov 15:49:09 ntpdate[2396]: adjust time server 47.98.146.45 offset 0.001019 sec

2、相关测试工具级命令

测试工具有:dig、host、nslookup及rndc命令。

  • dig命令
    用于测试dns系统,因此不会查询hosts文件
    语法:

dig [-t RR_TYPE] name [@SERVER] [query options]

常用query options:

  • +[no]trace:跟中解析过程
  • +[no]recurse:进行递归解析

常用用法:

  • 反向解析测试:dig -x IP
  • 测试区域传送:dig -t [axfr|ixfr] DOMAIN [@server]
  • host命令
    用法类似于dig命令,使用语法格式为:

host [-t RR_TYPE] name [server]

  • nslookup命令
    nslookup命令有两种使用模式,一种是命令模式,另一个交互模式。
    其命令模式的使用格式为:

nslookup [-options] [name] [server]

其交互模式的使用格式为:

nslookup>
server ip:已制定的ip为dns服务器进行查询
set q-RR_TYPE:要查询的资源记录类型
name:要查询的名称

  • rndc命令
    rndc命令为named服务的控制命令,其常用的用法:

rndc status:显示服务器状态
rndc reload:在不停止DNS服务器工作的情况下,重新加载配置文件和区域文件
rndc flush:清理DNS缓存

3、搭建DNS主从服务器

1、搭建DNS主服务器

  • 编辑修改/etc/named.conf文件:
    在配置文件中主配置段修改设定、
[root@localhost ~]# vim /etc/named.conf

options {
        listen-on port 53 { 192.168.2.104; };
        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";
        allow-query     { 192.168.2.0/32; };
        recursion yes;
        dnssec-enable no;
        dnssec-validation noi;
        forward only;
        forwarders { 61.139.2.69; };
        bindkeys-file "/etc/named.iscdlv.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";
  • 编辑修改/etc/named.rfc1912.zones配置文件:
[root@localhost ~]# vim /etc/named.rfc1912.zones 

zone "wxqtest.com." IN {    #创建正向解析域
        type master;
        file "wxqtest.com.zone";
        allow-update { none; };
        allow-transfer { 192.168.2.106; }; #允许同步DNS的辅助服务器IP;
        notify yes;     #启用变更通告,当主服务器DNS区域文件发生变更后,通知从服务器进行比较同步;
};      
zone "2.168.192.in-addr.arpa" IN {  #创建反向解析域
        type master;
        file "192.168.2.zone";
        allow-update { none; };
        allow-transfer { 192.168.2.106; };
        notify yes;
};
  • 建立正向区域解析数据库文件/var/named/wxqtest.com.zone
    一般默认是在/var/named目录下建立.
[root@localhost ~]# vim /var/named/wxqtest.com.zone

$TTL 3600
$ORIGIN wxqtest.com.
@       IN      SOA     ns1.wxqtest.com.        7xxxxxx2.qq.com.       (
        2018110501
        1D
        1H
        1W
        3H
)
wxqtest.com.    IN      NS      ns1.wxqtest.com.
                IN      NS      ns2
ns1             IN      MX      10      mx1
ns2             IN      MX      20      mx2
mx1             IN      A       192.168.2.5
mx2             IN      A       192.168.2.6
ns1             IN      A       192.168.2.104
ns2             IN      A       192.168.2.106
www             IN      A       192.168.2.113
web             IN      CNAME   www
master          IN      A       192.168.2.104
bbs             IN      A       192.168.2.115
bbs             IN      A       192.168.2.116 
  • 建立反向区域解析数据库文件/var/named/192.168.2.zone
[root@localhost ~]# vim /var/named/192.168.2.zone

$TTL 3600
$ORIGIN 2.168.192.in-addr.arpa.
@       IN      SOA     ns1.wxqtest.com.        728472362.qq.com.       (
        2018110501
        1D
        1H
        1W
        3H
)
                IN      NS      ns1.wxqtest.com.
                IN      NS      ns2.wxqtest.com.
104             IN      PTR     ns1.wxqtest.com.
106             IN      PTR     ns2.wxqtest.com.
5               IN      PTR     mx1.wxqtest.com.
6               IN      PTR     mx2.wxqtest.com.
104             IN      PTR     master.wxqtest.com.
115             IN      PTR     bbs.wxqtest.com.
116             IN      PTR     bbs.wxqtest.com.
113             IN      PTR     www.wxqtest.com.
  • 修改正、反向区域数据库文件的权限和属主,并检测配置文件是否有语法错误
[root@localhost ~]# chgrp  named  /var/named/wxqtest.com.zone
[root@localhost ~]# chmod  o=  /var/named/wxqtest.com.zone
[root@localhost ~]# chgrp  named  /var/named/192.168.2.zone
[root@localhost ~]# chmod  o=  /var/named/192.168.2.zone
[root@localhost ~]# ll /var/named | grep "zone$"
-rw-r-----  1 root  named  634 11月  5 17:15 192.168.2.zone
-rw-r-----  1 root  named  447 11月  5 17:00 wxqtest.com.zone
[root@localhost ~]# named-checkconf /etc/named.conf
[root@localhost ~]# named-checkzone wxqtest.com /var/named/wxqtest.com.zone 
zone wxqtest.com/IN: loaded serial 2018110501
OK
[root@localhost ~]# named-checkzone 2.168.192.in-addr.arpa /var/named/192.168.2.zone 
zone 2.168.192.in-addr.arpa/IN: loaded serial 2018110501
OK

  • 启动named服务
[root@localhost ~]# systemctl start named.service

2、搭建从服务器

  • 在从服务器slave1上编辑named配置文件/etc/named.conf。
[root@slave1 ~]# vim /etc/named.conf

options {
        listen-on port 53 { 127.0.0.1;192.168.2.106; };
        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";
        allow-query     { 192.168.2.0/32; };
        recursion yes;
        dnssec-enable no;
        dnssec-validation no;
        bindkeys-file "/etc/named.iscdlv.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";
  • 编辑修改/etc/named.rfc1912.zones配置文件:
[root@slave1 ~]# vim /etc/named.rfc1912.zones 

zone "wxqtest.com." IN {
        type slave;
        file "slaves/wxqtest.com.zone";
        masters { 192.168.2.104; };
        masterfile-format text;
        
};
zone "2.168.192.in-addr.arpa" IN {
        type slave;
        file "slaves/192.168.2.zone";
        masters { 192.168.2.104; };
        masterfile-format text;
};

  • 检查相应的配置文件语法,若无报错则启动named服务
[root@slave1 ~]# named-checkconf /etc/named.conf
[root@slave1 ~]# systemctl start named.service
[root@slave1 ~]# systemctl status named.service
● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
   Active: active (running) since 一 2018-11-05 18:00:02 CST; 6s ago
  Process: 1819 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 1816 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
 Main PID: 1821 (named)
    Tasks: 7
   CGroup: /system.slice/named.service
           └─1821 /usr/sbin/named -u named -c /etc/named.conf

11月 05 18:00:02 slave1 named[1821]: transfer of '2.168.192.in-addr.arpa/IN' from 192.168.2.104#53: connected using 192.168.2.106#56028
11月 05 18:00:02 slave1 named[1821]: zone 2.168.192.in-addr.arpa/IN: transferred serial 2018110501
11月 05 18:00:02 slave1 named[1821]: transfer of '2.168.192.in-addr.arpa/IN' from 192.168.2.104#53: Transfer completed: 1 message...tes/sec)
11月 05 18:00:02 slave1 named[1821]: zone 2.168.192.in-addr.arpa/IN: sending notifies (serial 2018110501)
11月 05 18:00:03 slave1 named[1821]: zone wxqtest.com/IN: refresh: unexpected rcode (REFUSED) from master 192.168.2.104#53 (sourc...0.0.0#0)
11月 05 18:00:03 slave1 named[1821]: zone wxqtest.com/IN: Transfer started.
11月 05 18:00:03 slave1 named[1821]: transfer of 'wxqtest.com/IN' from 192.168.2.104#53: connected using 192.168.2.106#38018
11月 05 18:00:03 slave1 named[1821]: zone wxqtest.com/IN: transferred serial 2018110501
11月 05 18:00:03 slave1 named[1821]: transfer of 'wxqtest.com/IN' from 192.168.2.104#53: Transfer completed: 1 messages, 15 recor...tes/sec)
11月 05 18:00:03 slave1 named[1821]: zone wxqtest.com/IN: sending notifies (serial 2018110501)
Hint: Some lines were ellipsized, use -l to show in full.

服务启动后再服务状态中的日志显示正在同步主服务器的正反向揭西区域文件。
3、测试DNS主从服务器的解析
主服务器的正向解析:

[root@slave1 ~]# dig -t A www.wxqtest.com @192.168.2.104

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> -t A www.wxqtest.com @192.168.2.104
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48621
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.wxqtest.com.       IN  A

;; ANSWER SECTION:
www.wxqtest.com.    3600    IN  A   192.168.2.113

;; AUTHORITY SECTION:
wxqtest.com.        3600    IN  NS  ns2.wxqtest.com.
wxqtest.com.        3600    IN  NS  ns1.wxqtest.com.

;; ADDITIONAL SECTION:
ns1.wxqtest.com.    3600    IN  A   192.168.2.104
ns2.wxqtest.com.    3600    IN  A   192.168.2.106

;; Query time: 0 msec
;; SERVER: 192.168.2.104#53(192.168.2.104)
;; WHEN: 一 11月 05 18:07:30 CST 2018
;; MSG SIZE  rcvd: 128

从服务器正向解析:

[root@slave1 ~]# dig -t A www.wxqtest.com @192.168.2.106

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> -t A www.wxqtest.com @192.168.2.106
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10835
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.wxqtest.com.       IN  A

;; ANSWER SECTION:
www.wxqtest.com.    3600    IN  A   192.168.2.113

;; AUTHORITY SECTION:
wxqtest.com.        3600    IN  NS  ns1.wxqtest.com.
wxqtest.com.        3600    IN  NS  ns2.wxqtest.com.

;; ADDITIONAL SECTION:
ns1.wxqtest.com.    3600    IN  A   192.168.2.104
ns2.wxqtest.com.    3600    IN  A   192.168.2.106

;; Query time: 0 msec
;; SERVER: 192.168.2.106#53(192.168.2.106)
;; WHEN: 一 11月 05 18:07:42 CST 2018
;; MSG SIZE  rcvd: 128

主服务器方向解析:

[root@slave1 ~]# dig -x 192.168.2.115 @192.168.2.104

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> -x 192.168.2.115 @192.168.2.104
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57657
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;115.2.168.192.in-addr.arpa.    IN  PTR

;; ANSWER SECTION:
115.2.168.192.in-addr.arpa. 3600 IN PTR bbs.wxqtest.com.

;; AUTHORITY SECTION:
2.168.192.in-addr.arpa. 3600    IN  NS  ns2.wxqtest.com.
2.168.192.in-addr.arpa. 3600    IN  NS  ns1.wxqtest.com.

;; ADDITIONAL SECTION:
ns1.wxqtest.com.    3600    IN  A   192.168.2.104
ns2.wxqtest.com.    3600    IN  A   192.168.2.106

;; Query time: 0 msec
;; SERVER: 192.168.2.104#53(192.168.2.104)
;; WHEN: 一 11月 05 18:14:41 CST 2018
;; MSG SIZE  rcvd: 152

从服务器反向解析:


[root@slave1 ~]# dig -x 192.168.2.115 @192.168.2.106

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> -x 192.168.2.115 @192.168.2.106
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34359
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;115.2.168.192.in-addr.arpa.    IN  PTR

;; ANSWER SECTION:
115.2.168.192.in-addr.arpa. 3600 IN PTR bbs.wxqtest.com.

;; AUTHORITY SECTION:
2.168.192.in-addr.arpa. 3600    IN  NS  ns2.wxqtest.com.
2.168.192.in-addr.arpa. 3600    IN  NS  ns1.wxqtest.com.

;; ADDITIONAL SECTION:
ns1.wxqtest.com.    3600    IN  A   192.168.2.104
ns2.wxqtest.com.    3600    IN  A   192.168.2.106

;; Query time: 0 msec
;; SERVER: 192.168.2.106#53(192.168.2.106)
;; WHEN: 一 11月 05 18:15:26 CST 2018
;; MSG SIZE  rcvd: 152

4、DNS主从服务器的域维护

DNS主从服务器的域维护是指通过DNS协议来在主域名服务器和从域名服务器之间维护同一个区域文件的操作。
DNS支持两种域维护的方式:全量传输(AXFR)和增量传输(IXFR)

  • 全量传输AXFR

全量传输时,DNS从服务器会从DNS主服务器上请求区域文件,其间隔时间由SOA记录中的refresh标签所定义。请求区域文件的过程是DNS从服务器向DNS主服务器发送查询来实现的,如果DNS主服务器中SOA记录中的序列号(serial)大于DNS从服务器SOA记录的序列号,DNS从服务器就会向DNS主服务器发送全量传输请求。全量传输使用TCP的53端口进行传输。

  • 增量传输IXFR

传递非常大的区域文件是非常耗资源的(时间、带宽等),尤其是只有区域中的一个记录改变的时候,没有必要传递整个区域文件,增量传输是允许DNS主服务器和DNS从服务器之间只传输那些改变的记录。

  • 通告notify

DNS从服务器会每隔SOA记录中的设置refresh时间值来向DNS主服务器主服务器发送请求,只有在主服务器的serial大于从服务器的serial时才进行传输,但是倘若refresh值设置得比较大,那么有可能在这段时间中就会积累大量的更新,此时DNS的时效性就会很差。
此时notify通告就提供了这样的功能:DNS主服务器的zone文件发生改变后,它立即向从服务器发送一个NOTIFY消息,告诉从服务器我的zone文件发生改变了,接着从服务器马上对比两者的序列号,再采用上面介绍的全量传输或者增量传输的方法请求zone文件。BIND本身支持通告,通告的配置是在named.conf中的zone中的option中配置,配置指令是notify, also-notify和notify-source。
上述在配置DNS主服务器的/etc/named.rfc1912.zones文件中,启动了notify的选项,因此在DNS主服务器上对区域文件作出的修改,在重启服务或重载服务后均应该能立即同步到相应的从服务器上。
修改DNS主服务器的正反区域文件:

[root@localhost ~]# vim /var/named/wxqtest.com.zone 

$TTL 3600
$ORIGIN wxqtest.com.
@       IN      SOA     ns1.wxqtest.com.        728472362.qq.com.       (
        2018110502  #修改序列号
        1D
        1H
        1W
        3H
)
                IN      NS      ns1
                IN      NS      ns2
ns1             IN      MX      10      mx1
ns2             IN      MX      20      mx2
mx1             IN      A       192.168.2.5
mx2             IN      A       192.168.2.6
ns1             IN      A       192.168.2.104
ns2             IN      A       192.168.2.106
www             IN      A       192.168.2.113
web             IN      CNAME   www
master          IN      A       192.168.2.104
bbs             IN      A       192.168.2.115
bbs             IN      A       192.168.2.116
test            IN      A       192.168.2.117   #新增一条A记录
[root@localhost ~]# vim /var/named/192.168.2.zone 

$TTL 3600
$ORIGIN 2.168.192.in-addr.arpa.
@       IN      SOA     ns1.wxqtest.com.        728472362.qq.com.       (
        2018110502  #修改序列号
        1D
        1H
        1W
        3H
)
                IN      NS      ns1.wxqtest.com.
                IN      NS      ns2.wxqtest.com.
104             IN      PTR     ns1.wxqtest.com.
106             IN      PTR     ns2.wxqtest.com.
5               IN      PTR     mx1.wxqtest.com.
6               IN      PTR     mx2.wxqtest.com.
104             IN      PTR     master.wxqtest.com.
115             IN      PTR     bbs.wxqtest.com.
116             IN      PTR     bbs.wxqtest.com.
113             IN      PTR     www.wxqtest.com.
117             IN      PTR     test.wxqtest.com.   #新增一条A记录

修改完成侯重载named服务,并查看日志/var/log/messages:

[root@localhost ~]# rndc reload
server reload successful
[root@localhost ~]# tail -10 /var/log/messages
Nov  5 19:18:20 localhost named[3705]: all zones loaded
Nov  5 19:18:20 localhost named[3705]: running
Nov  5 19:18:20 localhost named[3705]: zone 2.168.192.in-addr.arpa/IN: loaded serial 2018110502
Nov  5 19:18:20 localhost named[3705]: zone 2.168.192.in-addr.arpa/IN: sending notifies (serial 2018110502)
Nov  5 19:18:20 localhost named[3705]: zone wxqtest.com/IN: loaded serial 2018110502
Nov  5 19:18:20 localhost named[3705]: zone wxqtest.com/IN: sending notifies (serial 2018110502)
Nov  5 19:18:20 localhost named[3705]: client 192.168.2.106#48273 (2.168.192.in-addr.arpa): transfer of '2.168.192.in-addr.arpa/IN': AXFR-style IXFR started
Nov  5 19:18:20 localhost named[3705]: client 192.168.2.106#48273 (2.168.192.in-addr.arpa): transfer of '2.168.192.in-addr.arpa/IN': AXFR-style IXFR ended
Nov  5 19:18:21 localhost named[3705]: client 192.168.2.106#57919 (wxqtest.com): transfer of 'wxqtest.com/IN': AXFR-style IXFR started
Nov  5 19:18:21 localhost named[3705]: client 192.168.2.106#57919 (wxqtest.com): transfer of 'wxqtest.com/IN': AXFR-style IXFR ended

从日志上可以看出,主服务器已将正反区域文件的改动发送到了从服务器上。在从服务器上测试:

[root@slave1 ~]# dig -x 192.168.2.117 @192.168.2.106

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> -x 192.168.2.117 @192.168.2.106
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17970
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;117.2.168.192.in-addr.arpa.    IN  PTR

;; ANSWER SECTION:
117.2.168.192.in-addr.arpa. 3600 IN PTR test.wxqtest.com.

;; AUTHORITY SECTION:
2.168.192.in-addr.arpa. 3600    IN  NS  ns2.wxqtest.com.
2.168.192.in-addr.arpa. 3600    IN  NS  ns1.wxqtest.com.

;; ADDITIONAL SECTION:
ns1.wxqtest.com.    3600    IN  A   192.168.2.104
ns2.wxqtest.com.    3600    IN  A   192.168.2.106

;; Query time: 0 msec
;; SERVER: 192.168.2.106#53(192.168.2.106)
;; WHEN: 一 11月 05 19:21:31 CST 2018
;; MSG SIZE  rcvd: 153

[root@slave1 ~]# dig -t A test.wxqtest.com @192.168.2.104

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> -t A test.wxqtest.com @192.168.2.104
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57451
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;test.wxqtest.com.      IN  A

;; ANSWER SECTION:
test.wxqtest.com.   3600    IN  A   192.168.2.117

;; AUTHORITY SECTION:
wxqtest.com.        3600    IN  NS  ns1.wxqtest.com.
wxqtest.com.        3600    IN  NS  ns2.wxqtest.com.

;; ADDITIONAL SECTION:
ns1.wxqtest.com.    3600    IN  A   192.168.2.104
ns2.wxqtest.com.    3600    IN  A   192.168.2.106

;; Query time: 0 msec
;; SERVER: 192.168.2.104#53(192.168.2.104)
;; WHEN: 一 11月 05 19:22:00 CST 2018
;; MSG SIZE  rcvd: 129

从dns服务器上解析成功,说明同步成功。

4、实现智能DNS

要实现DNS服务器的智能DNS解析,首先需要了解view的概念:view就是将不同IP地址段发来的查询响应到不同的DNS解析。如需要对两个不同的IP地址段进行配置,就需要明确这些IP地址段的范围,这样view才能生效。需要注意的是,一旦使用了view,所有域都必须定义在view中。
此处模拟实验,以192.168.2.106为电信网络,192.168.2.114位连通网络。

  • 修改DNS主服务器的主配置文件named.conf:
[root@localhost ~]# vim /etc/named.conf

acl "telecom" {
        192.168.2.106;
};
acl "unicom" {
        192.168.2.114;
};
options {
        listen-on port 53 { 192.168.2.104; };
        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";
        recursion yes;
        dnssec-enable no;
        dnssec-validation no;
        forward only;
        forwarders { 61.139.2.69; };
        bindkeys-file "/etc/named.iscdlv.key";
view telecom {
        match-clients { telecom; };
        zone "." IN {
                type hint;
                file "named.ca";
        };
        zone "demo.com" IN {
                type master;
                file "demo.com.zone.telecom";
        };

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

};
view unicom {
        match-clients { unicom; };
        zone "." IN {
                type hint;
                file "named.ca";
        };
        zone "demo.com" IN {
                type master;
                file "demo.com.zone.unicom";
        };

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

};

view others {
        match-clients { any; };
        zone "." IN {
                type hint;
                file "named.ca";
        };

        include "/etc/named.rfc1912.zones";
        include "/etc/named.root.key";
};
  • 新建电信正向解析库文件/var/named/charlie.com.zone.telecom:
[root@localhost ~]# vim /var/named/demo.com.zone.telecom

$TTL 3600
$ORIGIN demo.com.
@       IN      SOA     ns1.demo.com.        728472362.qq.com.       (
        2018110502
        1D
        1H
        1W
        3H
)
                IN      NS      ns1
ns1             IN      MX      10      mx1
mx1             IN      A       192.168.2.5
ns1             IN      A       192.168.2.104
www             IN      A       192.168.2.118
web             IN      CNAME   www
master          IN      A       192.168.2.133
bbs             IN      A       192.168.2.119
test            IN      A       192.168.2.121
  • 创建连通正向解析区域数据库文件/var/named/charlie.com.zone.unicom
[root@localhost ~]# vim /var/named/demo.com.zone.unicom

$TTL 3600
$ORIGIN demo.com.
@       IN      SOA     ns1.demo.com.        728472362.qq.com.       (
        2018110501
        1D
        1H
        1W
        3H
)
                IN      NS      ns1
ns1             IN      MX      10      mx1
mx1             IN      A       192.168.2.104
ns1             IN      A       192.168.2.104
www             IN      A       192.168.2.123
web             IN      CNAME   www
bbs             IN      A       1.1.1.1
test            IN      A       1.1.1.2

  • 对相应配置文件进行语法检查,并重载named服务
[root@localhost ~]# named-checkconf /etc/named.conf
[root@localhost ~]# named-checkzone demo.com /var/named/demo.com.zone.telecom
zone demo.com/IN: loaded serial 2018110501
OK
[root@localhost ~]# named-checkzone demo.com /var/named/demo.com.zone.unicom
zone demo.com/IN: loaded serial 2018110501
OK
[root@localhost ~]# rndc reload
server reload successful
  • 在从服务器192.168.2.106上解析测试:
[root@slave1 ~]# dig -t A bbs.demo.com @192.168.2.104

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> -t A bbs.demo.com @192.168.2.104
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21141
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;bbs.demo.com.          IN  A

;; ANSWER SECTION:
bbs.demo.com.       3600    IN  A   192.168.2.119 #解析出的结果为telecom中的IP

;; AUTHORITY SECTION:
demo.com.       3600    IN  NS  ns1.demo.com.

;; ADDITIONAL SECTION:
ns1.demo.com.       3600    IN  A   192.168.2.104

;; Query time: 0 msec
;; SERVER: 192.168.2.104#53(192.168.2.104)
;; WHEN: 一 11月 05 20:41:20 CST 2018
;; MSG SIZE  rcvd: 91
  • 在192.168.2.114从服务器上解析验证:
[root@localhost ~]# nslookup
> server 192.168.2.104
Default server: 192.168.2.104
Address: 192.168.2.104#53
> set q=a^H^H
unknown query type: a
> set q=A
> bbs.demo.com
Server:     192.168.2.104
Address:    192.168.2.104#53

Name:   bbs.demo.com
Address: 1.1.1.1   #解析出的ip为Unicom中的IP

由此可以看出智能DNS解析搭建成功。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容