DNS 及 bind

DNS 及 bind

DNS(Domain Name System)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

目前,负责管理域名和IP地址的分配等与互联网相关的任务的组织是ICANN,ICANN是美国加利福尼亚的非营利社团,主要由互联网协会的成员组成。

DNS介绍

DNS域名空间

计算机之间的网络通信是靠IP识别彼此的,目前使用的IPv4地址由32位二进制数组成,对于计算机来说,最擅长的莫过于识别数字,而人类却很难记住这么长的数字,人类容易记住的是有意义的名字,早期的人们为了解决这个问题,将IP与主机名的对应关系存储于电脑的hosts文件中:

  • Linux: /etc/hosts
  • windows: %WINDIR%/system32/drivers/etc/hosts

早期网络还未流行起来的时候,计算机数量不多,使用hosts文件存储的方法还可行,后期网络大规模扩展以后,使用hosts文件存储IP与主机名映射关系遇到了诸多问题:

  • hosts 文件无法同步到所有计算机
  • hosts 文件越来越大,占用过多存储空间,查询缓慢

为了解决这一日益突出的问题,加州大学伯克利分校的研究生设计出了一套分层式IP与名称映射数据库管理系统,就是今天的DNS系统。DNS分层结构如下图所示:

Alt text

这种树状的分层结构我们称之为DNS域名空间,通过分层的方式将DNS划分成多层级区域,最顶层为根域,下一层为顶级域(一级域),二级域,… ,根域不再存储所有的资源记录,仅存储顶级域的资源记录,将其它层级的资源记录委派给其子域,同理顶级域也将更低层级的资源记录委派给下层子域。在逻辑上已将DNS分成诸多区域,物理上我们可以将各区域数据库存储于同一台电脑上,也可以将同一个区域数据库存储于不同的电脑上。

  • 根域
    世界上总共有13组服务器负责根域的解析,这13组服务器分别被编号为A-M,编号相同的根服务器使用同一个IP,全世界504台根服务器总共只使用13个IP,下图为根服务器分布图。

Alt text

  • 顶级域
    顶级域保存在根域的域名空间中,是域名中除了点外的最后一部分:
    .com - 供商业机构使用
    .edu - 供教育机构使用
    .gov - 供政府及其属下机构使用
    .mil - 供军事机构使用
    .net - 供网络服务供应商使用
    .org - 供不属于其他通用顶级域类别的组织使用

DNS解析

DNS解析过程
如下图所示为一次请求 www.zhubiaook.com 域名的 IP 地址的 DNS 解析过程

Alt text

  1. Clinet 访问 www.zhubiaook.com 的时候,先从本机的 /etc/hosts 文件中查找是否有该域名与IP的映射记录。
  2. 若本机的 hosts 文件中无记录则客户端向转发DNS(本地DNS,或缓存DNS)请求解析 www.zhubiaook.com 的 IP,当转发DNS 收到请求后先查询本机的缓存中是否有该记录,若有则直接将结果返回给 Client,若没有则分两种情况:
    • 转发DNS 设置了转发功能,根据转发策略将请求转发到特定的服务器上去解析
    • 转发DNS 未设置转发功能,则转发DNS 将向根域去请求解析(每台DNS服务器上都有根域的A记录)
  3. 根域服务器收到 www.zhubiaook.com 域名解析请求后,根域中没有该 FQDN 的记录,但有 com 域的记录,根域服务器会将 com 域的 IP 地址回复给转发DNS
  4. 转发DNS 将向 com域服务器请求解析 www.zhubiaok.com 的 IP,com域同样只有 zhubiaook.com 域的记录。并将 zhubiaook.com 域的 IP 回复给转发DNS服务器
  5. 转发DNS 将向 zhubiaook.com域服务器请求解析 www.zhubiaok.com 的 IP,zhubiaook.com域中记录了www.zhubiaook.com 的A记录,将 IP 回复给转发DNS服务器
  6. 转发DNS服务器将最终请求到的解析结果返回给客户端Client

DNS查询类型

  • 递归查询
    如上图所示 Client 向转发DNS服务器请求域名解析时,转发DNS服务器没有该记录,又向其它DNS服务器去查询,这种查询方式称为递归查询
  • 迭代查询
    如上图所示,转发DNS服务器获取最终 www.zhubiaook.com 域名的解析结果分别向根域,com域,zhubiaook.com域去查询,这种查询方式称为迭代查询。

DNS服务器类型

  • 主DNS服务器
  • 从DNS服务器
  • 缓存DNS服务器
    缓存DNS服务器又称为转发DNS服务器

资源记录

资源记录类型
DNS服务器中存储的区域数据库文件是由资源记录(Resource Record)构成的,资源记录常见的类型有以下几种

  • SOA记录
    起始授权记录,一个区域解析库有且有一个SOA记录,必须放于区域数据库最前面,记录了该区域数据库的DNS服务器,管理员邮箱,该区域数据库的版本号等该区域的必要信息
  • NS记录
    记录本域的域名服务器,域名服务器还需有一个A记录
  • A记录
    记录域名与IPv4的对应关系
  • AAAA记录
    记录域名与IPv6的对应关系
  • MX记录
    记录本域的邮件服务器,邮件服务器需有一个A记录
  • CNAME记录
    别名记录
  • PTR记录
    反向解析记录,将IP解析成域名的记录

资源记录格式
NAME [TTL] IN RR_TYPE VALUE
通常资源记录都应该包含五项内容:域名,TTL值,Internet,资源记录类型,值(根据资源记录类型由多项值组成)

  • NAME : 资源记录的名字,域名,或IP
  • TTL : 该项资源记录在客户端内的缓存时间,该项值可以全局设定,单项资源记录中就可以省略不写
  • IN : INternet 之意
  • RR_TYPE : 资源记录类型,SOA,NS,A,…
  • VALUE : 资源记录类型的值或参数,根据资源记录类型的不同,由一个或多个值构成。

DNS端口

DNS协议使用udp 53 端口和 tcp 53 端口,这两个端口的作用如下:

  • udp 53 端口
    用于域名解析查询,主服务器和从服务器同步数据
  • tcp 53 端口
    用于主服务器和从服务器同步数据

DNS 的实现之 BIND

BIND介绍

Linux中实现DNS协议的软件有bind,unbund等。但历史悠久,使用范围广泛的当属BIND

BIND(Berkeley Internet Name Daemon)是现今互联网上最常使用的DNS服务器软件,使用BIND作为服务器软件的DNS服务器约占所有DNS服务器的九成。BIND现在由互联网系统协会(Internet Systems Consortium)负责开发与维护。
20世纪80年代,伯克利大学计算机系统研究小组的四个研究生Douglas B Terry、Mark Painter、David W. Riggle和周松年(Songnian Zhou)一同编写了BIND的第一个版本,并随4.3BSD发布。

bind 相关文件路径

  • 主配置文件
    /etc/named.conf
  • 区域配置文件
    /etc/named.rfc1912.zones
  • 区域数据库解析文件所在目录
    /var/named/

BIND实验

本实验在CentOS6系统上完成

实验介绍
使用 bind 演示一次 web 域名的解析过程,本次实验中一共用到7台虚拟机。实验过程中,这7台虚拟机有很多配置是相同的,为了快速配置,本实验使用 pssh 工具来统一管理这些虚拟机,其中一台作为管理主机,其它作为被管理客户端。

转发DNS服务器配置为特定区域转发,当Client解析 qq.com,jd.com则转发到DNS服务器。

实验拓扑图

Alt text

实验大概按以下步骤进行:

  • 安装pssh工具,批量配置各台虚拟机的实验环境
  • 先配置zhubiaook.com域的两台主从服务器
  • 再配置com域服务器
  • 接着配置根域服务器
  • 然后配置DNS服务器
  • 然后配置DNS转发服务器
  • 测试

地址规划

服务器 IP 备注
client 92.168.17.101
转发DNS 92.168.17.201 做转发DNS使用
DNS 92.168.17.10
根域 92.168.17.11
com 92.168.17.12
主zhubiaook.com 92.168.17.13 主DNS
从zhubiaook.com 92.168.17.13 从DNS

实验环境准备

第一步:安装PSSH工具,使用SSH协议基于key的验证方式管理PSSH客户端

Client作 pssh 管理主机,其它6台虚拟机作为 pssh 被管理的客户端。为了实现这种批量管理方式,需提前完成以下操作:

  • 首先在 Client 上安装 pssh 工具,pssh是epel源中的一个rpm包,所以我们需要配置包含epel源的yum仓库。
# 配置yum仓库
[root@zhubiao yum.repos.d]# cat /etc/yum.repos.d/base.repo
[local-repo] <=本地yum源,使用光盘作为yum源
name=local-repo
enabled=1
baseurl=file:///mnt/cd
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever
[epel-aliyun] <=epel yum源
name=epel-aliyun
enabled=1
baseurl=http://mirrors.aliyun.com/epel/$releasever/$basearch/ <=此处使用阿里云的镜像源。
gpgcheck=0
# 清空原来的缓存
yum clean all
# 查看yum仓库是否配置成功
yum repolist

然后安装 pssh

yum -y install pssh
  • pssh 管理客户端也需要验证 pssh 管理主机的身份,验证身份使用的是 ssh 协议的身份验证。我们使用 ssh 协议基于key的验证方式,避免每次都需要输入6台虚拟机的密码的繁琐操作。那么基于key的验证方式,首先得在Client上生成一对公私钥,然后将Client的公钥发送到被管理客户端的指定文件中。具体操作如下:
# Client 主机上生成一对公私钥
[root@zhubiao yum.repos.d]# ssh-keygen -f ~/.ssh/id_rsa -N ''
Generating public/private rsa key pair.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
e4:d1:a0:e8:6d:3c:49:78:d7:87:73:88:3d:5f:39:38 root@zhubiao
The key's randomart image is:
+--[ RSA 2048]----+
| . |
| o . * o . . |
| o + = O E + |
| . = = . * o . |
| . * S . |
| . . |
| |
| |
| |
+-----------------+
# 查看生成的密钥
[root@zhubiao yum.repos.d]# ls ~/.ssh/
id_rsa id_rsa.pub known_hosts
# 将公钥发送到被管理的 pssh 客户端 ~/.ssh/authorized_keys 文件中
[root@zhubiao yum.repos.d]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.17.201 <=pssh客户端用户和IP
root@192.168.17.201's password:
Now try logging into the machine, with "ssh 'root@192.168.17.201'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
# 按照上面的方法将把 Client 的公钥发送到其它客户端上
  • 将被管理的客户端的IP地址存储于一个文本中,使用 pssh -h 命令批量管理文本中的客户端
[root@zhubiao yum.repos.d]# cat /app/ip.txt
192.168.17.101
192.168.17.201
192.168.17.10
192.168.17.11
192.168.17.12
192.168.17.13
192.168.17.14
  • pssh -h /app/ip.txt 定义为别名,方便输入命令,此处注意,后面所输的pssh 均是 pssh -h /app/ip.txt 命令的组合,请不要混淆喔
# 定义别名
[root@zhubiao yum.repos.d]# alias pssh='pssh -h /app/ip.txt'
  • 测试 pssh 是否正常管理客户端,包括Client自身
# 执行 ls 命令,均返回 SUCCESS,则测试成功
[root@zhubiao yum.repos.d]# pssh ls
[1] 22:22:04 [SUCCESS] 192.168.17.201
[2] 22:22:04 [SUCCESS] 192.168.17.10
[3] 22:22:04 [SUCCESS] 192.168.17.14
[4] 22:22:04 [SUCCESS] 192.168.17.11
[5] 22:22:04 [SUCCESS] 192.168.17.13
[6] 22:22:04 [SUCCESS] 192.168.17.101
[7] 22:22:04 [SUCCESS] 192.168.17.12


第二步:使用PSSH工具准备bind实验环境

  1. 禁用防火墙和SELinux,并设置开机不启动
# 禁用SElinux
[root@zhubiao yum.repos.d]# pssh setenforce 0
[1] 22:24:17 [SUCCESS] 192.168.17.201
[2] 22:24:17 [SUCCESS] 192.168.17.101
[3] 22:24:17 [SUCCESS] 192.168.17.12
[4] 22:24:17 [SUCCESS] 192.168.17.11
[5] 22:24:17 [SUCCESS] 192.168.17.13
[6] 22:24:17 [SUCCESS] 192.168.17.14
[7] 22:24:17 [SUCCESS] 192.168.17.10
[root@zhubiao yum.repos.d]# pssh sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
[1] 22:27:05 [SUCCESS] 192.168.17.201
[2] 22:27:05 [SUCCESS] 192.168.17.13
[3] 22:27:05 [SUCCESS] 192.168.17.101
[4] 22:27:05 [SUCCESS] 192.168.17.10
[5] 22:27:05 [SUCCESS] 192.168.17.11
[6] 22:27:05 [SUCCESS] 192.168.17.12
[7] 22:27:05 [SUCCESS] 192.168.17.14
# 禁用防火墙
[root@zhubiao yum.repos.d]# pssh service iptables stop
[1] 22:29:38 [SUCCESS] 192.168.17.101
[2] 22:29:38 [SUCCESS] 192.168.17.11
[3] 22:29:38 [SUCCESS] 192.168.17.13
[4] 22:29:38 [SUCCESS] 192.168.17.201
[5] 22:29:39 [SUCCESS] 192.168.17.12
[6] 22:29:39 [SUCCESS] 192.168.17.10
[7] 22:29:39 [SUCCESS] 192.168.17.14
[root@zhubiao yum.repos.d]# pssh chkconfig iptables off
[1] 22:30:01 [SUCCESS] 192.168.17.201
[2] 22:30:01 [SUCCESS] 192.168.17.11
[3] 22:30:01 [SUCCESS] 192.168.17.101
[4] 22:30:01 [SUCCESS] 192.168.17.12
[5] 22:30:01 [SUCCESS] 192.168.17.14
[6] 22:30:01 [SUCCESS] 192.168.17.10
[7] 22:30:02 [SUCCESS] 192.168.17.13
  1. 将Clinet配置好的yum仓库发送到客户端,然后就可以统一安装bind了
[root@zhubiao yum.repos.d]# pscp.pssh -h /app/ip.txt /etc/yum.repos.d/base.repo /etc/yum.repos.d/
[1] 22:33:21 [SUCCESS] 192.168.17.201
[2] 22:33:21 [SUCCESS] 192.168.17.11
[3] 22:33:21 [SUCCESS] 192.168.17.14
[4] 22:33:21 [SUCCESS] 192.168.17.12
[5] 22:33:21 [SUCCESS] 192.168.17.10
[6] 22:33:21 [SUCCESS] 192.168.17.101
[7] 22:33:23 [SUCCESS] 192.168.17.13
  1. 挂载光盘安装 bind
# 创建挂载点
[root@zhubiao yum.repos.d]# pssh mkdir /mnt/cd
[1] 22:36:30 [SUCCESS] 192.168.17.201
[2] 22:36:31 [SUCCESS] 192.168.17.13
[3] 22:36:31 [SUCCESS] 192.168.17.12
[4] 22:36:31 [SUCCESS] 192.168.17.11
[5] 22:36:31 [SUCCESS] 192.168.17.101
[6] 22:36:31 [SUCCESS] 192.168.17.10
[7] 22:36:31 [SUCCESS] 192.168.17.14
# 挂载光盘
[root@zhubiao yum.repos.d]# pssh mount /dev/sr0 /mnt/cd
[1] 22:37:52 [SUCCESS] 192.168.17.13
[2] 22:37:52 [SUCCESS] 192.168.17.101
[3] 22:37:52 [SUCCESS] 192.168.17.10
[4] 22:37:52 [SUCCESS] 192.168.17.201
[5] 22:37:52 [SUCCESS] 192.168.17.14
[6] 22:37:52 [SUCCESS] 192.168.17.11
[7] 22:37:52 [SUCCESS] 192.168.17.12
# 清空 yum 缓存
[root@zhubiao yum.repos.d]# pssh yum clean all
[1] 22:44:57 [SUCCESS] 192.168.17.13
[2] 22:44:57 [SUCCESS] 192.168.17.201
[3] 22:44:57 [SUCCESS] 192.168.17.12
[4] 22:44:57 [SUCCESS] 192.168.17.101
[5] 22:44:57 [SUCCESS] 192.168.17.11
[6] 22:44:57 [SUCCESS] 192.168.17.14
[7] 22:44:57 [SUCCESS] 192.168.17.10
# 安装bind
[root@zhubiao yum.repos.d]# pssh yum -y install bind
[1] 22:46:31 [SUCCESS] 192.168.17.101
[2] 22:46:45 [SUCCESS] 192.168.17.10
[3] 22:46:47 [SUCCESS] 192.168.17.201
[4] 22:46:47 [SUCCESS] 192.168.17.11
[5] 22:46:48 [SUCCESS] 192.168.17.14
[6] 22:46:48 [SUCCESS] 192.168.17.12
[7] 22:46:50 [SUCCESS] 192.168.17.13


修改配置文件

第一步:修改 /etc/named.conf 使named服务监听本机所有端口,允许任何主机查询,关闭相关功能。本处修改 Client 上的配置文件,然后使用命令 pscp.pssh 将Client主机上的配置文件发送到被管理的主机上,覆盖原来的文件。

# 修改Clinet的配置文件 /etc/named.conf
[root@zhubiao yum.repos.d]# head -n 30 /etc/named.conf
...
options {
listen-on port 53 { localhost; }; <=修改了监听本地所有端口
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 { any; }; <=允许所有主机查询
recursion yes;
dnssec-enable no; <=改为no
dnssec-validation no; <=改为no
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
...
# 将配置文件发送的所有被管理的主机上,覆盖原来的文件
[root@zhubiao yum.repos.d]# pscp.pssh -h /app/ip.txt /etc/named.conf /etc/
[1] 23:02:47 [SUCCESS] 192.168.17.201
[2] 23:02:47 [SUCCESS] 192.168.17.13
[3] 23:02:47 [SUCCESS] 192.168.17.101
[4] 23:02:48 [SUCCESS] 192.168.17.11
[5] 23:02:48 [SUCCESS] 192.168.17.14
[6] 23:02:48 [SUCCESS] 192.168.17.12
[7] 23:02:48 [SUCCESS] 192.168.17.10


第二步:修改 /var/named/named.ca,将所有主机的根域A记录IP地址改为我们规划的 192.168.17.11

# 修改Client上的named.ca
[root@zhubiao yum.repos.d]# cat /var/named/named.ca
. 3600000 NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 A 192.168.17.11
# 使用 pscp.pssh 命令将named.ca发送到所有被管理的主机上覆盖原来的文件
[root@zhubiao yum.repos.d]# pscp.pssh -h /app/ip.txt /var/named/named.ca /var/named/
[1] 23:13:03 [SUCCESS] 192.168.17.101
[2] 23:13:03 [SUCCESS] 192.168.17.13
[3] 23:13:03 [SUCCESS] 192.168.17.201
[4] 23:13:03 [SUCCESS] 192.168.17.14
[5] 23:13:03 [SUCCESS] 192.168.17.10
[6] 23:13:04 [SUCCESS] 192.168.17.11
[7] 23:13:04 [SUCCESS] 192.168.17.12


启动named,并设置为开机启动

[root@zhubiao yum.repos.d]# pssh service named start
[1] 23:15:16 [SUCCESS] 192.168.17.201
[2] 23:15:16 [SUCCESS] 192.168.17.101
[3] 23:15:17 [SUCCESS] 192.168.17.13
[4] 23:15:17 [SUCCESS] 192.168.17.14
[5] 23:15:17 [SUCCESS] 192.168.17.12
[6] 23:15:17 [SUCCESS] 192.168.17.11
[7] 23:15:17 [SUCCESS] 192.168.17.10
[root@zhubiao yum.repos.d]# pssh chkconfig named on
[1] 23:15:29 [SUCCESS] 192.168.17.12
[2] 23:15:29 [SUCCESS] 192.168.17.13
[3] 23:15:29 [SUCCESS] 192.168.17.201
[4] 23:15:29 [SUCCESS] 192.168.17.101
[5] 23:15:30 [SUCCESS] 192.168.17.11
[6] 23:15:30 [SUCCESS] 192.168.17.10
[7] 23:15:30 [SUCCESS] 192.168.17.14


配置zhubiaook.com域主服务器

192.168.17.11 主机上的配置

  1. 定义区域 zhubiaook.com
# 定义区域
[root@zhubiao named]# tail -5 /etc/named.rfc1912.zones
//zhubiaook.com
zone "zhubiaook.com" IN {
type master; <=类型为master,主DNS服务器
file "zhubiaook.com.zone"; <=解析库文件名字
};
# 检查语法
[root@zhubiao named]# named-checkconf
  1. 定义解析库文件 zhubiaook.com.zone
# 定义解析库文件
[root@zhubiao named]# cat /var/named/zhubiaook.com.zone
$TTL 3D
SOA dns1 zb.zhubiaook.com. (
00 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
NS dns2
MX 10 mail
dns1 A 192.168.17.13
dns2 A 192.168.17.14
web A 6.6.6.6
www CNAME web
mail A 7.7.7.7
# 修改属主属组为named
[root@zhubiao named]# chown named:named zhubiaook.com.zone
# 检查语法
[root@zhubiao named]# named-checkzone "zhubiaook.com" /var/named/zhubiaook.com.zone
zone zhubiaook.com/IN: loaded serial 0
OK
  1. 重启 named 服务,并测试
# 重启服务
[root@zhubiao named]# service named restart
Stopping named: [ OK ]
Starting named: [ OK ]
# 使用 dig 命令测试
# 在 192.168.17.101 Client上测试
[root@zhubiao yum.repos.d]# dig www.zhubiaook.com @192.168.17.13
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> www.zhubiaook.com @192.168.17.13
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24797
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;www.zhubiaook.com. IN A
;; ANSWER SECTION:
www.zhubiaook.com. 259200 IN CNAME web.zhubiaook.com.
web.zhubiaook.com. 259200 IN A 6.6.6.6
;; AUTHORITY SECTION:
zhubiaook.com. 259200 IN NS dns1.zhubiaook.com.
zhubiaook.com. 259200 IN NS dns2.zhubiaook.com.
;; ADDITIONAL SECTION:
dns1.zhubiaook.com. 259200 IN A 192.168.17.13
dns2.zhubiaook.com. 259200 IN A 192.168.17.14
;; Query time: 2 msec
;; SERVER: 192.168.17.13#53(192.168.17.13)
;; WHEN: Mon Aug 21 23:57:42 2017
;; MSG SIZE rcvd: 139


配置zhubiaook.com域从服务器

192.168.17.14 上的配置

  1. 定义区域 zhubiaook.com
[root@zhubiao named]# tail -n 6 /etc/named.rfc1912.zones
//zhubiaook.com
zone "zhubiaook.com" IN {
type slave; <=类型为slave,从DNS服务器
masters {192.168.17.13;}; <=主DNS服务器的IP地址
file "slaves/zhubiaook.com.zone"; <=解析库文件名字
};
  1. 重启named服务,并检查是否从主DNS服务器上同步到解析库文件
# 重启named服务
[root@zhubiao named]# service named restart
Stopping named: [ OK ]
Starting named: [ OK ]
# 检查是否从主DNS服务器上同步到解析库文件
[root@zhubiao named]# ls /var/named/slaves/
zhubiaook.com.zone
# 查看同步到解析库文件版本号是否和主DNS的一样
[root@zhubiao named]# cat /var/named/slaves/zhubiaook.com.zone
$ORIGIN .
$TTL 259200 ; 3 days
zhubiaook.com IN SOA dns1.zhubiaook.com. zb.zhubiaook.com. (
0 ; serial
86400 ; refresh (1 day)
3600 ; retry (1 hour)
604800 ; expire (1 week)
10800 ; minimum (3 hours)
)
NS dns1.zhubiaook.com.
NS dns2.zhubiaook.com.
MX 10 mail.zhubiaook.com.
$ORIGIN zhubiaook.com.
dns1 A 192.168.17.13
dns2 A 192.168.17.14
mail A 7.7.7.7
web A 6.6.6.6
www CNAME web
  1. 测试
# 使用 dig 命令测试
# 在 192.168.17.101 Client上测试
[root@zhubiao yum.repos.d]# dig www.zhubiaook.com @192.168.17.14


配置com域服务器

192.168.17.12 上的配置

  1. 定义区域 com
# 定义区域
[root@zhubiao ~]# tail -n 5 /etc/named.rfc1912.zones
zone "com" IN {
type master;
file "com.zone";
};
# 检查语法
[root@zhubiao ~]# named-checkconf
  1. 定义解析库文件 com.zone
# 定义解析库文件
[root@zhubiao named]# cat /var/named/com.zone
$TTL 3D
SOA dns1 zb.zhubiaook.com. (
00 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
dns1 A 192.168.17.12
zhubiaook NS zbdns1
zhubiaook NS zbdns2
zbdns1 A 192.168.17.13
zbdns2 A 192.168.17.14
# 修改属主、属组
[root@zhubiao named]# chown named:named /var/named/com.zone
# 检查语法
[root@zhubiao named]# named-checkzone "com.zone" /var/named/com.zone
zone com.zone/IN: loaded serial 0
OK
  1. 测试
# 使用 dig 命令测试
# 在 192.168.17.101 Client上测试
[root@zhubiao yum.repos.d]# dig www.zhubiaook.com @192.168.17.12


配置根域服务器

192.168.17.11 上的配置

  1. 修改根区域
    因为根域服务器自己做根域,修改原来的根区域配置类型hint为master
[root@zhubiao named]# tail -n 10 /etc/named.conf
};
...
zone "." IN {
type master; <=修改hint类型为master
file "named.ca";
};
...
  1. 定义根域解析库文件
    同样修改named.ca如下:
[root@zhubiao named]# cat /var/named/named.ca
$TTL 3D
@ SOA dns1.root. zb.zhubiaook.com. (
00 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1.root.
dns1.root. A 192.168.17.11
com NS dns.root.
dns.root. A 192.168.17.12
  1. 重启named服务,测试
# 重启named服务
service named restart
# 使用 dig 命令测试
# 在 192.168.17.101 Client上测试
dig www.zhubiaook.com @192.168.17.11


配置DNS服务器

192.168.17.10 上的配置 jd.com 和 qq.com 域

  1. 定义区域 jd.com 和 qq.com
# 定义区域
[root@zhubiao named]# tail -n11 /etc/named.rfc1912.zones
//jd.com
zone "jd.com" IN {
type master;
file "jd.com.zone";
};
//qq.com
zone "qq.com" IN {
type master;
file "qq.com.zone";
};
  1. 定义解析库文件 jd.com.zone 和 qq.com.zone
# 解析库文件 jd.com.zone
[root@zhubiao named]# cat /var/named/jd.com.zone
$TTL 3D
@ SOA dns1 zb.zhubiaook.com. (
00 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
dns1 A 192.168.17.10
www A 192.168.17.10
# 解析库文件 qq.com.zone
[root@zhubiao named]# cat /var/named/qq.com.zone
$TTL 3D
@ SOA dns1 zb.zhubiaook.com. (
00 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
dns1 A 192.168.17.10
www A 192.168.17.10
# 修改属主属组为named
[root@zhubiao named]# chown -R named:named /var/named
# 重启named服务
service named restart
  1. 测试
# 使用 dig 命令测试
# 在 192.168.17.101 Client上测试
[root@zhubiao ~]# dig www.qq.com @192.168.17.10
[root@zhubiao ~]# dig www.jd.com @192.168.17.10


配置转发DNS服务器

192.168.17.11 上的配置特定区域转发,当Client访问qq.com和jd.com区域则转发到 192.168.17.10 DNS服务器上进行解析。

  1. 定义特定区域转发 jd.com 和 qq.com
[root@zhubiao ~]# tail -13 /etc/named.rfc1912.zones
//jd.com
zone "jd.com" IN {
type forward;
forward first;
forwarders {192.168.17.10;};
};
//qq.com
zone "qq.com" IN {
type forward;
forward first;
forwarders {192.168.17.10;};
};
# 重启named服务
service named restart


测试
在Client上测试解析 www.zhubiaook.com,www.jd.com,www.qq.com 的 IP 地址。

测试解析 www.zhubiaook.com

[root@zhubiao ~]# dig www.zhubiaook.com @192.168.17.201
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> www.zhubiaook.com @192.168.17.201
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36688
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;www.zhubiaook.com. IN A
;; ANSWER SECTION:
www.zhubiaook.com. 258709 IN CNAME web.zhubiaook.com.
web.zhubiaook.com. 258709 IN A 6.6.6.6
;; AUTHORITY SECTION:
zhubiaook.com. 258709 IN NS dns2.zhubiaook.com.
zhubiaook.com. 258709 IN NS dns1.zhubiaook.com.
;; ADDITIONAL SECTION:
dns2.zhubiaook.com. 258709 IN A 192.168.17.14
dns1.zhubiaook.com. 258709 IN A 192.168.17.13
;; Query time: 1 msec
;; SERVER: 192.168.17.201#53(192.168.17.201)
;; WHEN: Tue Aug 22 12:59:39 2017
;; MSG SIZE rcvd: 139

测试解析 www.jd.com,www.qq.com

# www.qq.com
[root@zhubiao ~]# dig www.qq.com @192.168.17.201
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> www.qq.com @192.168.17.201
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56166
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;www.qq.com. IN A
;; ANSWER SECTION:
www.qq.com. 258630 IN A 192.168.17.10
;; AUTHORITY SECTION:
qq.com. 258630 IN NS dns1.qq.com.
;; ADDITIONAL SECTION:
dns1.qq.com. 258630 IN A 192.168.17.10
;; Query time: 2 msec
;; SERVER: 192.168.17.201#53(192.168.17.201)
;; WHEN: Tue Aug 22 13:00:49 2017
;; MSG SIZE rcvd: 79
# www.jd.com
[root@zhubiao ~]# dig www.jd.com @192.168.17.201
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> www.jd.com @192.168.17.201
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3152
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;www.jd.com. IN A
;; ANSWER SECTION:
www.jd.com. 259200 IN A 192.168.17.10
;; AUTHORITY SECTION:
jd.com. 259200 IN NS dns1.jd.com.
;; ADDITIONAL SECTION:
dns1.jd.com. 259200 IN A 192.168.17.10
;; Query time: 4 msec
;; SERVER: 192.168.17.201#53(192.168.17.201)
;; WHEN: Tue Aug 22 13:00:57 2017
;; MSG SIZE rcvd: 79

参考资料
DNS解析过程 :https://www.verisign.com/en_US/website-presence/online/how-dns-works/index.xhtml