一、常见的加密算法及其原理
利用加密算法和协议对通信数据进行加密是保证安全通讯的常用方法,以保证通讯数据的保密性、完整性和可用性。常见的加密算法和协议有:对称加密、非对称加密、单项加密和认证协议。
对称加密算法
对称加密算法采用的是单密钥加密方式,加密和解密使用同一个密钥,依赖于算法和密钥,但其安全性依赖于密钥而非算法。在通讯时,发送方将数据按固定大小分割后,用密钥和加密算法逐个加密发送给接收方,接收方接收到加密数据后,通过密钥和解密算法进行解密,并将数据组合后还原原始数据。此算法具有以下特性和缺陷:
- 特性:
- 加密、解密使用同一密钥
- 将明文分割成固定大小的块,逐个进行加密
- 缺陷
- 密钥过多,密钥管理困难
- 密钥分发困难,分发过程安全性难以保证
常见的对称加密算法有:
- DES:分组式加密算法,以64位为分组对数据加密,加解密使用同一个算法。
- 3DES:三重数据加密算法,对每个数据块应用三次DES加密算法。
- AES:高级加密标准算法,用于替代原先的DES
- Blowfish:Blowfish算法是一个64位分组及可变密钥长度的对称密钥分组密码算法,可用来加密64比特长度的字符串。
算法执行过程如图:
非对称加密算法
非对称加密采用公钥加密方法,使用私钥进行解密,公钥和私钥是成对的,公钥是从私钥中提取出来的,使用公钥加密的数据们只能使用与之配对的私钥进行解密,反之亦然。非对称加密算法主要用于数字签名、密钥交换和数据加密这三个方面。
私钥:secret key,仅限个人使用
公钥:public key,公开给所有用户获取
加密流程:
发送方从接收方获取由接收方自己的私钥提取出的公钥,结合加密算法对明文进行加密后发送给接收方,接受方收到密文后,通过自己的密文结合算法进行解密,取得原始数据。
常见的非对称加密算法:
- RSA:RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,可用于加密,也能用于签名
- DSA:数字签名算法,仅能用于签名,不能用于加解密。
- DSS:数字签名标准,可用于签名,也可以用于加解密。
- ELGamal:利用离散对数的原理对数据进行加解密或数据签名,加解密速度很慢。
单项加密算法
单向加密算法常用于提取数据指纹,验证数据的完整性。用这类算法加密的数据,解密过程是一个二次加密的过程,主要是提取出数据的特征码,也称数据指纹。此类算法只用进行加密,无法进行解密。主要用于数据完整性校验和系统账号密码校验。
算法加密过程:
发送者将明文通过单向加密算法加密生成定长的密文串,然后传递给接收方。接收方在收到加密的报文后进行解密,将解密获取到的明文使用相同的单向加密算法进行加密,得出加密后的密文串。随后将之与发送者发送过来的密文串进行对比,若发送前和发送后的密文串相一致,则说明传输过程中数据正确;若不一致,说明数据在参数过程中发生了变化。
此类算法的特征:
- 定长输出:无论原来的数据有多大,其加密结果长度一样
- 雪崩效应:原始数据微小变化,将导致加密结果的巨大变化
- 加密过程不可逆:只能加密,无法解密
密钥交换
密钥交换(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在即的名称
- 有效期:两个日期,起始日期和终止日期
- 证书主体名称:证书拥有者自己的名字
- 证书主体公钥:证书拥有者自己的公钥
- 发行商的唯一标识
- 证书主体的唯一标识
数字证书认证流程:
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
然后进行测试:
测试成功。
三、DNS服务器原理简述
DNS是Domain Name System的简称,即域名系统,是一个记录域名和Ip地址相互映射的系统,主要作用是为了解决域名与IP之间的相互转换。DNS是一个网络服务,其端口为53号端口。通常DNS在查询时是以UDP协议来进行查询,一旦无法查询到完整信息时,再以TCP协议进行重新查询。因此,DNS服务启动时会同时开启UDP和TCP协议的53号端口。
1、DNS域名
DNS是一个分布式、分层次的主机名管理架构,采用是层级树状结构来划分域名。一个合法的域名遵循FQDN格式,以域名系统的级别从低到高,从左而右编写。
最顶层为根域名,主要负责顶级域名的管理;
往下一层是顶级域名,顶级域名主要是定义了一些国家和组织的互联网后缀,负责管理其所对应的二级域名;
再下一层为二级域名,负责对应的的主机名称的解析或三级域名的解析;
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服务器的类型
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解析搭建成功。