Linux 篇| DNS服务器-13455487

Windows Windows 2个月前 (08-15) 9次浏览 未收录 0个评论 扫描二维码

DNS服务器

DNS介绍:

DNS( Domain Name System)是“域名系统”的英文缩写,提供域名解析服务。即将域名(网址)和IP地址进行相互转换,使用TCP和UDP协议的53端口。DNS属于应用层协议。

Linux 篇| DNS服务器-13455487

一.DNS基本概念 1.完全限定域名FQDN:Full Qualified Domain Name 即每个域在全球网络都是唯一的;另外值得提到的一点是:域并不是指诸如www.google.com这样的域名,而google.com才是域,请看下面域的空间结构。 FQDN的组成:主机名+域名。 如www(主机名是www).baidu.com(域名是baidu.com) 还需要注意的是:域名和IP不是完全一一对应的,即一个域名对应一个IP地址。其实一个域名可以对应多个IP地址;多个域名可以对应一个IP地址。目的很多,如高效率、冗余等。 2.域的空间结构 域分类:根域,顶级域,二级域,三级域。 域结构:根域最大,顶级域次之,二、三级以此类推

Linux 篇| DNS服务器-13455487

(1) 根域(.)

表示为“.”,全球13组根域名服务器以英文字母A到M依序命名,域名格式为“字母.root-servers.net”。

我们访问域名,根域默认不显示。例如:百度真实域名“www.baidu.com.”,而不是“www.baidu.com”

(2) 顶级域(如.com)

顶级域(Top Level Domain,简称TLD)分为三类

1> 通用顶级域:如 .com(商业机构) .org(非营利性组织) .net(网络服务机构)等 2> 国家顶级域:如 .cn(中国) .uk(英国) .us(美国) .jp(日本) 3> 反向域(基础建设顶级域):.arpa,即从IP到FQDN(域名)的反向解析

(3) 二级域名(如baidu.com)

baidu.com google.com taobao.com等 注意:二级域名是taobao.com,不是taobao

(4) 三级域名(如www.baidu.com)

www: www.baidu.com mail: mail.aliyun.com

3. DNS服务器查询的类型 递归查询:客户端仅发出一次请求,让DNS服务器去查询返回结果; 迭代查询:要发出多次请求去分别查询不同的DNS服务器;

总结:
从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间的交互查询就是迭代查询。

4.DNS域名解析方式 (1) 正向解析

将FQDN(域名)转化为IP的解析。

例如:www.mage.com(域名) 转化为 192.168.36.7(IP)

Linux 篇| DNS服务器-13455487

(2) 反向解析

将IP转化为FQDN(域名)的解析。

例如:7.36.168.192.in-addr.arpa.(IP) 转化为 http://www.magedu.com(域名)

Linux 篇| DNS服务器-13455487

5. DNS服务器类型 主DNS服务器:负责解析至少一个域。 辅助(从)DNS服务器:负责解析至少一个,是主DNS服务器的辅助。 缓存DNS服务器:不负责解析域,只是缓存域名解析结果。 权威DNS服务器:存放域名和IP地址相对应的记录信息 6. DNS的监听端口

TCP协议53端口实现DNS主、从同步 UDP协议53端口实现DNS解析,及主、从同步。

二.DNS的域名解析过程 三.DNS和BIND Linux使用DNS服务,需要安装软件包,有: bind:字符界面、配置简单 powerdns:WEB界面、配置较复杂 nbound:CentOS7系统新出现的DNS服务软件

下面主要是bind软件的说明

查看系统已有BIND程序包:rpm -ql bind 查看BIND相关程序包:yum list all bind* bind:服务器软件包 bind-libs:相关库 bind-utils:客户端 bind-chroot: /var/named/chroot/

安装bind后,会新生成一个“named用户”和“named用户组”,用来专门启用、管理bind服务(DNS服务)。查看“named用户”命令“cat /etc/passwd”,家目录在“/var/named”,shell类型是“/bin/false”。安装bind软件包后,解压的“/var/named/named.ca”文件存放了互联网中13个根服务器,帮助提供域名解析。  

安装:yum -y install bind
启动服务:systemctl start named
开机自启:systemctl enable named
查看DNS服务使用的端口是TCP和UDP的53,命令是ss -ntlup
查看DNS进程所使用的用户:"ps aux|grep named"会看到是“named用户”  
DNS数据库路径:/var/named  
DNS服务配置文件:/etc/named.conf

修改DNS服务配置文件后,生效有两种办法:方法一,重启named服务;方法二,加载配置文件而不关掉服务在启动服务,这样避免对当前正在访问的用户产生干扰。生效命令:rndc reload 或者 systemctl reload named

1.DNS服务配置文件:/etc/named.conf 每行以分号“;”结尾 注释行用两个斜线“//” “options”为选项,配置DNS很多需要在选项里修改 “logging”为DNS的日志 “zone”为DNS的区域信息。用来解析“域名和域名存放在某个DNS数据库之间的映射关系”。 (1) “options”为选项

1> listen-on port 53 { XXX };

上面行表示53段口绑定本机的哪个IP地址进行DNS解析,可把“XXX”配置成192.168.36.7,表示53端口绑定本机的192.168.36.7进行DNS解析服务。 表示本机所有IP地址:把“XXX”配置成“localhost”,或者注释此行(行首加两个斜线)。

2> allow-query { localhost; };

上面行表示“允许谁向我查询”。“localhost”表示只允许本机查询。 想要其它电脑通过本机查询,即DNS解析,就把“localhost”改为: “对方网段”—适用局域网进行DNS解析 “对方网络”—适用局域网进行DNS解析 “any”——–适用互联网进行DNS解析 注意:any表示所有,把此行用两个斜线注释,也表示所有主机查询 (2)”zone”为区域 解析 “域名” 和 “域名存放在某个DNS数据库(就是一个文件)” 之间的映射关系

例如有:域名(magedu.com)、DNS数据库名(magedu.com.zone)。他们两个一一对应,这种映射关系就写到“zone”里。(说明:DNS数据库magedu.com.zone存放了magedu.com域名对应的IP地址)

zone区域分为:正向区域(正向解析) 和 反向区域(反向解析)


域名 和 反向区域数据库 的映射关系:
例:36.168.192.in-addr.arpa.(域名) 和 192.168.36.zone(数据库名)

域名 和 正向区域数据库 的映射关系:例:magedu.com(域名) 和 magedu.com.zone(数据库名)

四.DNS测试工具

除了系统提供的一些名称解析命令外,DNS的客户端软件包“bind-utils”当中提供了一些测试命令,这些命令是:dig、host、nslookup。

1. 测试工具

1. dig用于测试dns系统,因此,不会查询hosts 文件进行解析;

    1> dig命令的语法: dig[-t type]name[@SERVER][query options]

        查询选项:+[no]trace 跟踪解析过程 / +[no]recurse 进行递归解析

        测试反向解析: dig -x IP@SERVER

        模拟区域传送: dig -t axfr ZONE_NAME @SERVER

    2> 示例1:dig www.baidu.com

        显示结果中:

        DNS是否解析成功,查看“ANSWER SECTION”部分
        提供DNS解析主机的IP地址,查看“显示结果底部SERVER行”

    3> 示例3:dig www.magedu.com @192.168.36.7  
        本机向192.168.36.7请求解析www.magedu.com(适用临时测试)
        显示结果中:

        可看到www.magedu.com的权威服务器是101.200.188.230,
        因为域名和IP的对应关系存放在此服务器,而192.168.36.7没有
        存放对应关系,所以不是www.magedu.com的权威服务器。

        如果192.168.36.7是www.magedu.com的权威服务器,在显示结果中,
        上面部分的“flags行”后面,会出现“aa”

2. host命令语法:  host [-a] name [SERVER]

    示例1:host www.baidu.com

    示例2:host www.baidu.com 192.168.36.7 
            本机向192.168.36.7请求解析www.baidu.com(适用临时测试)

3. nslookup [-option][name |-] [server]

        交互式模式:

            nslookup>

                server IP:指明使用哪个DNS server 进行查询;

                set q=RR_TYPE:指明查询的资源记录类型;

        NAME:要查询的名称;

检查命令

检查主DNS服务器的配置文件是否错误:named-checkconf
说明:检查/etc/named.conf文件和/etc/named.rfc1912.zones文件

检查区域数据库的文件是否错误:named-checkzone 域名 域名对应数据库的文件
例如:named-checkzone magedu.com /var/named/magedu.com.zone
说明:检查magedu.com域对应的数据库文件magedu.com.zone是否有错误

2. rndc命令

rndc --> rndc (953/tcp端口)

格式:rndc COMMAND

常用COMMAND如下:
reload: 重载主配置文件和区域解析库文件
reload zonename: 重载区域解析库文件
retransfer zonename: 手动启动区域传送,而不管序列号是否增加
notify zonename: 重新对区域传送发通知(“推”同步)
reconfig: 重载主配置文件
querylog: 开启或关闭查询日志文件/var/log/message
trace: 递增debug一个级别(级别调试的越高,跟踪日志就更详细)
trace LEVEL: 指定使用的级别(级别越高,跟踪日志就更详细)
notrace:将调试级别设置为 0
flush:清空DNS服务器的所有缓存记录

五.资源记录(RR) 资源记录:Resource Record, RR 区域(zone)解析(数据)库:由众多RR组成 记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX 作为一个DNS区域数据库文件,必须有SOA、A、NS记录,其他记录根据企业情况来加

SOA:Start Of Authority,起始授权记:
    一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录

A:internet Address,作用:域名正向解析成IPv4地址

AAAA:作用:域名正向解析成IPv6地址

PTR:PoinTeR,作用:IPv4地址反向解析成域名  

NS:Name Server,专用于标明当前区域的DNS服务器

CNAME : Canonical Name,别名记录

MX:Mail eXchanger,邮件交换器

TXT:对域名进行标识和说明的一种方式,一般做验证记录时会使用此项。
    如:SPF(反垃圾邮件)记录,https验证等

1. 资源记录定义的格式

语法:name [TTL] IN rr_type value

说明:
(1)name:表示主机名。如blog.magedu.com.默认magedu.com.可不写,因为域名就是它,而资源记录是域名对应数据库,当中的某一行。“name”写blog会默认为blog.magedu.com.(注意blog后面不可加“.”,不然表示结束)  
(2)TTL:表示“DNS缓存时长,一般TTL会统一设置,如“$TTL 1D”表示1天(全局继承);也可在每行记录的“TTL”位置自己设置时间,默认单位是秒
(3) IN:表示Internet(互联网)
(4) rr_type:表示记录的类型
(5) value:记录对应的值。如A记录对应的值是IP地址

注意:
(1) @可用于引用当前区域(即域名)的名字。如 :magedu.com.(@常用在SOA记录的“name”位置)
(2) 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
(3) 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机

2. SOA记录

SOA记录示例:@ TTL IN SOA dns1.magedu.com.

name: 当前区域的名字,例如“magedu.com.”或者用“@”表示当前区域名字

value(值): 有多部分组成。如下

(1) 这个域的主DNS服务器的域名。如dns1.magedu.com.

注意:
     配置SOA记录后,必须有一条A记录,因为SOA的值,即域名,要有对应的IP。
     (对于SOA记录,任何一个SOA记录后面的服务器名字,都应该在后续有一个A记录)

示例:DNS区域数据库文件中:SOA记录和对应的A记录
    SOA:@ TTL IN SOA dns1(“.magedu.com.”不用写,默认它存在)
      A:master TTL IN A IP地址(如192.168.36.7)

(2) 这个域的管理员的邮箱地址。注意地址中不能使用@符号,一般用.替换。
    示例:admin.magedu.com(对应邮箱是admin@magedu.com)

(3) 当前数据库和从DNS服务器的同步策略
    同步策略类型:推和拉

  1>推:以主服务器为主,当主服务器发生变化,推送消息给从服务器

        数据库版本号写在SOA记录的value(值)后面的括号里的第一个位置。
        例:@ TTL IN SOA dns1 (201904221015)

    说明:
        触发条件:主服务器的数据库更新。
        当数据库的版本号(必须是整数)发生变化,视为更新;
        而不是数据库内容发生变化。

  2>拉:以从服务器为主,主动问主服务器是否发生变化

        轮询的时间间隔写在版本号后面,默认单位是秒。
        也可写其他时间,如10m(10分钟)。表示每10分钟询问一次。
        例:@ TTL IN SOA dns1 (201904221015 10m)

    说明:
        以轮询(过一会问一下,过一会问一下)的方式,
        询问主服务器的数据库文件是否发生变化。

  3>重试时间间隔:

        重试时间间隔写在轮询间隔后面,默认单位是秒。
        例:@ TTL IN SOA dns1 (201904221015 10m 2m)

    说明:
        假如轮询间隔是10分钟。当第一次轮询,没有同步,
        又不想等一下次轮询(即不想等10分钟后在询问),
        可设置重试时间间隔,默认单位是秒。如设置2分钟。
        即第一次没结果后,2分钟后在询问主DNS数据库是否变化(版本号是否改变)。

  4>从DNS服务器对应数据库记录的过期时长

        从服务器数据库记录的过期时长,写在重试时间间隔后面,默认单位是秒。
        例:@ TTL IN SOA dns1 (201904221015 10m 2m 1D)-->"1D"为1天

    说明:
        如果第一次轮询,数据库没有同步,
        第二次重试时间及2分钟后也没有同步,
        那么会认为从DNS服务器的数据库记录老旧

  5>不存在的记录的缓存时长

        不存在的记录的缓存时长,
        写在“从DNS服务器的数据库记录,的过期时长”后面,默认单位是秒。
        例:@ TTL IN SOA dns1 (201904221015 10m 2m 1D 6H)-->"6H"为6小时

    说明:
        当访问某个域名,www写成wwwww,用户的本地DNS服务器会返回此记录不存在。
        因为数据库没有这样的记录。但不能不管,因为有可能其他人犯这样的错误,
        所以设置不存在记录的缓存时长,过了时间后,就会清除。

3. NS记录 由NS记录可以知道网络中有几个DNS服务器 NS记录:指明当前区域里,谁是主DNS服务器、谁是从DNS服务器 name: 当前区域的名字,例如“magedu.com.”或者用“@”表示当前区域名字 value(值): 当前区域的某DNS服务器的名字,例如ns2.magedu.com

注意:

(1)对于NS记录,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录

    示例:
        NS:magedu.com. TTL IN NS ns2.magedu.com.
        A:ns2.magedu.com. TTL IN A IP地址(如192.168.36.8)

(2)相邻的两个资源记录的name相同时,后续的可省略

(3)一个区域可以有多个NS记录

    例如:
    NS记录
        magedu.com. IN NS ns1.magedu.com.(TTL没写,就继承全局的TTL)
        magedu.com. IN NS ns2.magedu.com.(TTL没写,就继承全局的TTL)
    对应的A记录
        ns1.magedu.com. TTL IN NS IP地址
        ns2.magedu.com. TTL IN NS IP地址

    从上面的NS记录可以知晓,网络中有三个DNS服务器,分别是:
        主DNS服务器:magedu.com
        从DNS服务器:ns1.magedu.com
        从DNS服务器:ns2.magedu.com

4. A记录 name: 某主机的FQDN(域名),例如:www.magedu.com. value: 主机名对应主机的IP地址 示例1:

A记录示例:
    www.baidu.com. TTL IN A IP地址
    也可以写成:
    www TTL IN A IP地址
    (因为baidu.com.会默认存在,因为这是baidu.com域的数据库文件)

示例2:

通过A记录可以实现:一个域名对应多个IP地址。例如一个网站的页面由3个服务器提供,并且内容一致。当一个服务器坏掉,不影响用户访问网页的解析服务,因为有另一个服务器。

在magedu.com区域的DNS数据库文件里,添加A记录,使得一个域名对应多个IP地址,进行解析,实现冗余功能。

webserver TTL IN A 192.168.1.2

webserver TTL IN A 192.168.1.3

webserver TTL IN A 192.168.1.4

示例3:泛域名解析

泛域名概念:当用户访问www.baidu.com时,把www写成wwwwwww,通过设置泛域名即可把本域(这里是baidu.com)写错的域名指定某一web主机的web页面,这里起个名字叫“错误页面”。目的是:达到不会访问不了,在“错误页面”指定本域首页  

泛域名和上面的某某记录在一个文件,格式是:

*(表示所有) TTL IN A IP地址

示例4:指定访问二级域名

直接写二级域名,有些网站访问不了。如www.boc.cn(中国银行),不写www访问不了。

解决方法:
和上面的某某记录在一个文件,格式是:
    @ TTL IN A IP地址

记得重新加载DNS的配置文件“rndc reload”

示例5:GENERATE语句

功能:生成多条A记录。
    如:访问server1,返回结果是1.1.1.1;访问server2,返回结果是1.1.1.2;访问server100,返回结果是1.1.1.100等等,如下面的示例

和上面的某某记录一样,书写在同一个文件,格式是:
    $GENERATE 1-100 server$(名称) A 1.1.1.$(IP地址)

    添加上面记录后,修改版本号,使用“rndc reload”生效,在DNS客户端使用“dig 域名”验证

5. 别名记录CNAME name: FQDN(域名)的别名名称 value: 真正FQDN(域名)的名字 别名记录经常用于CDN加速。 设置别名,可以把本机解析委托给其他主机进行解析 例如:www TTL IN CNAME dns.aliyun.com(将本机解析,委托主机名是“dns.aliyun.com”的解析)

在企业里,部署的域名其实很长,通过设置别名,让用户更容易访问,如下:

域名:bj-tam-web-node1-100-23.magedu.com
说明:北京拼音字母首写--天安门区域拼音字母首写--web服务器--节点1--IP地址的后两位--域名

magedu.com域名的DNS数据库文件中的别名记录,如下:
www TTL IN CNAME bj-tam-web-node1-100-23

实现:访问www.magedu.com其实是访问bj-tam-web-node1-100-23.magedu.com

注意

一般设置某DNS服务器的A记录,添加两个A记录,对应IP地址不同,可实现均衡负载的作用。而且,在主配置文件,添加一条别名记录,用户访问DNS服务器更简单。而管理员最好访问DNS服务器真正的名字,因为存在节点、地域等标识,可以清楚知道是哪台DNS服务器。

6. MX 邮件记录 MX: Mail eXchanger,邮件交换器 邮件发送需要域内DNS服务器的帮助,根据DNS配置,找到MX记录,就找到邮件转发器。 name: 当前区域的名字 value: 当前区域的某邮件服务器(smtp服务器)的主机名 一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高 例如: magedu.com. TTL IN MX 10 mx1.magedu.com. magedu.com. TTL IN MX 20 mx2.magedu.com 注意: 对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录

查询某域名的邮件服务器:dig -t mx 二级域名

六.DNS服务器的ACL 1. 概述 bind(DNS服务器)中基础的安全相关的配置: acl: 把一个或多个地址归并为一个集合,并通过一个统一的名称调用 bind有四个内置的acl:none,any,localhost,localnet 注意:只能先定义ACL后使用;因此一般定义在配置文件中,处于options模块的前面

总结:
在DNS服务器里,内置了一些访问控制列表(ACL)。功能:定义地址集合。系统自带的ACL如localhost(本机所有IP)、any(所有任意IP0)、none(没有一个IP)、localnet(DNS服务器属于哪个网段,这个网段就是localnet)  

2. 格式和示例

格式:
acl acl_name {
ip;
net/prelen;
……
};

示例:
acl mynet {
172.16.0.0/16;
10.10.10.10;
};

3. 访问控制的指令 allow-query {}: 允许查询的主机;白名单 allow-transfer {}:允许区域传送的主机;白名单 allow-recursion {}: 允许递归的主机,建议全局使用 allow-update {}: 允许更新区域数据库中的内容 4. 示例

只在局域网使用DNS,并且只给局域网的某些网段提供解析服务

(1)打开文件“/etc/named.conf”

(2)在options模块的前面,添加ACL,如下:
acl lannet(局域网名) {  
    192.168.238.0/24(网段);
    192.168.234.0/24(网段);
};

(3)在options模块的“allow-query”添加局域网名和本机的所有IP(不添加本机所有IP,你自己就不会解析自己),如下:
allow-query { lannet;localhost; };

(4)使配置生效
rndc reload

七.智能CDN 1. 概述

CDN:Content Delivery Network内容分发网络 提供CDN服务商:蓝汛,网宿,帝联等都是专做CDN服务

CDN又称为智能DNS,意思是:上海用户查询网站A(存放网站A的服务器上海和北京都有),“网站A公司”的主DNS服务器会让“存放在上海的子DNS服务器”查询上海用户的请求,返回给客户端结果,即离客户端最近的DNS服务器给客户端解析。注意:此公司在北京和上海的服务器上,网页内容都一致。  

如果你的公司在全国各地没有机房,就无法进行DNS解析和提供WEB页面的浏览。所以一般是大公司(如阿里)才会搭建智能DNS,大多数普通的公司,都是购买大公司的服务,来实现公司的智能DNS。即:把WEB文件放到租用的CDN节点服务器上(CDN服务商的电脑),并定义域名的别名,别名的IP地址是租用的CDN节点服务器的IP地址。  

2. 用户访问具有智能DNS网站的过程:

Linux 篇| DNS服务器-13455487

1.将我的网站文件放到租用CDN机房的某些服务器上,并定义别名 2.用户访问http:www.a.com,请求发送到用户网络的本地DNS服务器(LDNS) 3.本地DNS服务器(LDNS)查询有没有http:www.a.com的IP地址,没有就从根服务器进行迭代查询 4.查询到a.com服务器的权威服务器(网站授权DNS),而权威服务器不会把IP地址给用户,而是返回域名的别名(www.a.tbcdn.com) 5.本地DNS服务器(LDNS)就认为http:www.a.com是http:www.a.tbcdn.com的别名,就会查询http:www.a.tbcdn.com的IP地址 6.http:www.a.tbcdn.com其实是CDN服务商的服务器(DNS调度系统),这个服务器有智能功能,里面记录了全国或全世界,各地对应的IP地址。收到北京用户的请求后,会返回北京CDN对应的IP地址(2.2.2.2),收到上海用户的请求后,会返回上海CDN对应的IP地址(9.9.9.9) 7.北京用户知道IP后,就会请求在北京CDN的节点服务器(2.2.2.2),改服务器返回内容给用户 8.当租用CDN服务器上的网页没来得及更新数据,北京用户访问时,北京CDN服务器会请求WEB页面的源服务器,更新数据后在返回给北京的用户。

3. 示例:企业网站内部实现智能CDN功能(即下面的实验6) 八.压力测试 /root/bind-xxx/contrib/scripts

编译压力测试工具

[root@centos7dns ~]# cd /root/bind-xxx/contrib/queryperf [root@centos7dns ~]# ./configure [root@centos7dns ~]# make [root@centos7dns ~]# cp queryperf /usr/local/bind9/bin [root@centos7dns ~]# queryperf -h

压力测试:

[root@centos7dns ~]# vim test.txt

http://www.magedu.com A magedu.com NS magedu.com MX pop3.magedu.com A web.magedu.com A

[root@centos7dns ~]# queryperf -d test.txt -s 127.0.0.1

打开日志功能:

[root@centos7dns ~]# rndc querylog[root@centos7dns ~]# rndc status[root@centos7dns ~]# queryperf -d test.txt -s 127.0.0.1[root@centos7dns ~]# wc -l /var/log/message

九. DNS排错 [root@centos7dns ~]# dig A example.com

; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> A example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30523
...
SERVFAIL:The nameserver encountered a problem while processing the query. 
* 可使用dig +trace排错,可能是网络和防火墙导致  

NXDOMAIN:The queried name does not exist in the zone.

可能是CNAME对应的A记录不存在导致

REFUSED:The nameserver refused the client’s DNS request due to policy restrictions.

可能是DNS策略导致

NOERROR不代表没有问题,也可以是过时的记录 查看是否为权威记录,flags:aa标记判断 被删除的记录仍能返回结果,可能是因为*记录存在 如:*.example.com. IN A 172.25.254.254 注意“.”的使用 避免CNAME指向CNAME记录,可能产生回环

test.example.com. IN CNAME lab.example.com. lab.example.com. IN CNAME test.example.com.

正确配置PTR记录,许多服务依赖PTR,如sshd,MTA 正确配置轮询round-robin记录 十.实验

企业环境中,需要把DNS服务用到的端口在防火墙里信任。做实验把防火墙、selinux关掉就可以了。

在防火墙关闭TCP协议53端口:iptables -A INPUT -p tcp --dport 53 -j REJECT
在防火墙关闭UDP协议53端口:iptables -A INPUT -p udp --dport 53 -j REJECT
清空防火墙全部配置:iptables -F

主、从DNS服务器可以实现冗余备份、高效率等功能 主、从DNS服务器之间是同步的,两者之间的数据需一致 主DNS服务器:负责更新(主要)数据、对用户提供解析,管理这个域。可以带多个从DNS服务器。 从DNS服务器:负责同步(主要)数据、对用户提供解析,备份这个域。主DNS坏掉,从DNS还可以继续工作,实现冗余。 1. 正向解析主服务器 (1) 安装DNS包

yum -y install bind

(2) 启动DNS服务

systemctl start named  

(3) 修改DNS主配置文件/etc/named.conf

vim /etc/named.conf  
1> 注释以“listen-on”“allow-query”开头的两行,即在这两行前面加两个斜线  

2> 安全设置:
    指定哪些从DNS服务器可以同步主DNS服务器的数据,可设置多个
    示例:在allow-query的上一行添加
        allow-transfer {从DNS服务器的IP地址;};

    如果不设置此安全命令,在DNS客户端使用“dig -t axfr magedu.com(主域名) @DNS服务器IP地址”可以直接看到DNS服务器的记录。

(4) 打开专门存放区域(zone)数据库文件的配置文件

vim /etc/named.rfc1912.zones

参照区域“zone”的格式,新增区域,创建域名和数据库名的映射关系,如下:

zone "域名(如magedu.com)" IN { 
    type(类型) master(主DNS服务器);  
    file(文件) "之后创建:DNS数据库的文件名(如magedu.com.zone)";  
};

注意:
1. magedu.com不要写成www.magedu.com。因为我们要解析magedu.com的很多子域(主机),而不单单是www.magedu.com这一个域(主机)。
2.DNS数据库名的后缀“.zone”可以是任何字符,如“.abc”  

检查错误

检查主DNS服务器的配置文件是否错误:named-checkconf
说明:检查/etc/named.conf文件和/etc/named.rfc1912.zones文件

(5) 创建区域(zone)数据库文件

/var/named是专门存放DNS数据库文件的文件夹,查看DNS主配置文件“/etc/named.conf”,其中directory行表示存放DNS数据库文件的路径

创建区域(zone)数据库文件:

区域(zone)数据库文件可根据“named.localhost”文件为模板,复制一份进行修改,就变成自己的数据库文件了。
[root@centos7dns ~]# ll /var/named
total 16
drwxrwx--- 2 named named   23 Apr 24 00:31 data
drwxrwx--- 2 named named   35 Apr 24 00:31 dynamic
-rw-r----- 1 root  named 2281 May 22  2017 named.ca
-rw-r----- 1 root  named  152 Dec 15  2009 named.empty
-rw-r----- 1 root  named  152 Jun 21  2007 named.localhost
-rw-r----- 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx--- 2 named named    6 Jan 30 01:23 slaves
[root@centos7dns ~]#

创建区域(zone)数据库文件,保留原有属性
cp -p /var/named/named.localhost /var/named/magedu.com.zone

(6 ) 修改区域(zone)数据库文件

区域(zone)数据库文件的内容,是由一行一行的区域数据记录而成。这一行行内容就叫“资源记录(RR)”。

区域数据库文件里必须包含SOA记录、NS记录、A记录

修改区域数据库文件内容如下图

Linux 篇| DNS服务器-13455487

检查错误

检查区域数据库的文件是否错误:
named-checkzone magedu.com /var/named/magedu.com.zone

(7) 使配置生效

[root@centos7dns ~]# rndc reload
server reload successful(成功)
[root@centos7dns ~]#

(8) 验证

临时验证

在客户端使用测试命令 格式:dig 域名主机 @DNS解析服务器 示例:dig dbserver1.magedu.com @192.168.238.134 dbserver1.magedu.com由数据库文件

Linux 篇| DNS服务器-13455487

永久验证

在客户端的网卡配置文件里,DNS设置为“主DNS服务器”的IP地址

2. 反向解析主服务器 使用PTR记录。注意:考虑“将哪个IP地址段”解析成域名 在区域(zone)中,注意“反向解析域名”的书写格式 (1) 安装DNS包

yum -y install bind

(2) 启动DNS服务

systemctl start named  

(3) 修改DNS主配置文件/etc/named.conf

vim /etc/named.conf  
注释以“listen-on”“allow-query”开头的两行,即在这两行前面加两个斜线  

(4) 打开专门存放区域(zone)数据库文件的配置文件

vim /etc/named.rfc1912.zones

参照反向解析区域“zone”的格式,新增区域,创建域名和数据库名的映射关系,如下:

 zone "域名(如238.168.192.in-addr.arpa)" IN { 
    type(类型) master(主DNS服务器);  
    file(文件) "之后创建:DNS数据库的文件名(如192.168.238.zone)";  
};

检查错误

检查主DNS服务器的配置文件是否错误:named-checkconf
说明:检查/etc/named.conf文件和/etc/named.rfc1912.zones文件

(5) 创建区域(zone)数据库文件

/var/named是专门存放DNS数据库文件的文件夹,查看DNS主配置文件“/etc/named.conf”,其中directory行表示存放DNS数据库文件的路径

创建反向解析区域(zone)数据库文件:

区域(zone)数据库文件可根据“named.loopback”文件为模板,复制一份进行修改,就变成自己的数据库文件了。
[root@centos7dns ~]# ll /var/named
total 16
drwxrwx--- 2 named named   23 Apr 24 00:31 data
drwxrwx--- 2 named named   35 Apr 24 00:31 dynamic
-rw-r----- 1 root  named 2281 May 22  2017 named.ca
-rw-r----- 1 root  named  152 Dec 15  2009 named.empty
-rw-r----- 1 root  named  152 Jun 21  2007 named.localhost
-rw-r----- 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx--- 2 named named    6 Jan 30 01:23 slaves
[root@centos7dns ~]#

创建区域(zone)数据库文件,保留原有属性
cp -p /var/named/named.loopback /var/named/192.168.238.zone

(6 ) 修改区域(zone)数据库文件 区域数据库文件里必须包含SOA记录、SOA对应的A记录、NS记录

修改区域数据库文件内容如下

[root@centos7dns ~]# cat /var/named/238.168.36.zone 
$TTL 1D
@   IN SOA  master admin.magedu.com. (
                    1   ; serial
                    1H  ; refresh
                    10M ; retry
                    12H ; expire
                    1D )    ; minimum

    NS master 192.168.238.134
master A 192.168.238.134
134 PTR webserver1.magedu.com.

[root@centos7dns ~]#

(7) 使配置生效

[root@centos7dns ~]# rndc reload
server reload successful(成功)
[root@centos7dns ~]#

3. 正向从(辅助)服务器 目标:实现数据的自动同步 (1) 安装DNS包

yum -y install bind

(2) 启动DNS服务

systemctl start named  

(3) 修改DNS主配置文件/etc/named.conf

vim /etc/named.conf  
1> 注释以“listen-on”“allow-query”开头的两行,即在这两行前面加两个斜线

2> 安全设置:
    指定,不允许任何服务器同步DNS的数据
    示例:在allow-query的上一行添加
        allow-transfer {none;}; 
    此处配置可以指定某从DNS服务器同步本机DNS数据,即“none”改为“从DNS服务器IP地址” 

    如果不设置此安全命令,在DNS客户端使用“dig -t axfr magedu.com(主域名) @DNS服务器IP地址”可以直接看到DNS服务器的记录。

(4) 打开专门存放区域(zone)数据库文件的配置文件

vim /etc/named.rfc1912.zones

参照区域“zone”的格式,新增区域,创建域名和数据库名的映射关系,如下:

zone "域名(如magedu.com 这里写的是主域名)" IN { 
    type(类型) slave(从DNS服务器);  
    masters {192.168.238.134;};《---》指定主DNS服务器
    file(文件) "之后创建:从DNS数据库的文件名(如: slaves/magedu.com.slave)";  
};

注意:"/slaves"表示:把从DNS服务器的zone配置文件放到此文件夹,也推荐放到此文件夹

(5) 重启DNS服务,同步主DNS服务器区域(zone)数据库文件到“/var/named/slaves”目录

1> 重启DNS服务
    systemctl restart named
2> 查看同步的区域(zone)数据库文件(注意权限等信息)
    ll /var/named/slaves

注意:“/var/named/slaves/magedu.com.slave”不是普通文件,看不到里面内容,用来防止信息泄露。可用“file /var/named/slaves/magedu.com.slave”查看“magedu.com.slave”文件的类型

(6) 使配置生效

[root@centos7dns ~]# rndc reload
server reload successful(成功)
[root@centos7dns ~]#

(7) 验证 验证:DNS的冗余和主、从DNS服务器的同步 验证设备:主DNS服务器、从DNS服务器、DNS客户端

DNS的冗余:

1> 在DNS客户端使用命令"dig dbserver1.magedu.com"查询解析“dbserver1.magedu.com”域名的DNS服务器是谁。可以看到,在结果最下面“行SERVER”显示DNS解析服务器是某某某

2> 关闭主DNS服务器主机或禁用网络,在DNS客户端使用命令"dig dbserver1.magedu.com"查询解析。查看是不是从DNS服务器解析

3> 关闭从DNS服务器,恢复主DNS服务器,在DNS客户端使用命令"dig dbserver1.magedu.com"查询解析。查看是不是主DNS服务器解析

主、从DNS服务器的同步:

1> 在主DNS服务器,其“/var/named/magedu.com.zone”文件添加一个A记录
    k8s TTL IN A 6.6.6.6

2> 主、从DNS服务器同步
    同步机制分两种:
    推(主DNS推送给从DNS。注意:需要设置推送的命令才能实现)和
    拉(根据同步时间等待同步。注意:如果版本号没发生变化,就不会同步)

    推:在主DNS服务器的“/var/named/magedu.com.zone”文件添加从DNS服务器
        第一步:@ TTL IN NS slave
        第二步:slave TTL IN A 192.168.238.128(从DNS服务器IP地址)
        第三步:更改版本号,加1

3> 在主DNS服务器上,重新加载DNS配置文件
    rndc reload

4> 关闭主DNS服务器网络

5> 在DNS客户端,使用“dig k8s.magedu.com”是否能解析成功

4. 子域服务器 创建子域有两种情况: 父域和子域在同一主机。适用访问量小的 父域委派子域到另一台服务器(不同主机,使用“粘合记录”)。适用访问量大的 (1) 父域和子域在同一台主机

方法一:创建一条A记录

将父域和子域放到一个文件,缺点是父、子域的记录混杂

在主DNS服务器(即父域magedu.com)的配置文件里,给子域(www.shanghai.magedu.com)添加一条A记录,如下:

第一步:vim /var/named/magedu.com.zone
    www.shanggai TTL IN A 1.1.1.1(IP地址)
第二步:更改版本号
第三步:保存退出
第四步:使用“rndc reload”命令生效
第五步:在DNS客户端,使用“dig www.shanghai.magedu.com”验证子域IP地址是不是1.1.1.1

方法二:创建一个独立的域

在“/etc/named.rfc1912.zones”文件里,除了父域“magedu.com”,在新建一个父域的子域“shenzhen.magedu.com”,如下: 第一步:编辑“/etc/named.rfc1912.zones”文件,创建子域区域(zone)

[root@centos7dns ~]# vim /etc/named.rfc1912.zones
zone "shenzhen.magedu.com" IN {
    type master;
    file "shenzhen.magedu.com.zone";
};

第二步:以父域”magedu.com”配置文件”magedu.com.zone”为模板,复制一份,改名”shenzhen.magedu.com.zone”,当做子域“shenzhen.magedu.com”的配置文件

[root@centos7dns ~]# cp -p /var/named/magedu.com.zone /var/named/shenzhen.magedu.com.zone  

第三步:编辑子域“shenzhen.magedu.com”的配置文件,如图:

Linux 篇| DNS服务器-13455487

第四步:使用“rndc reload”命令生效 第五步:使用DNS客户端命令验证,如图:

Linux 篇| DNS服务器-13455487

(2) 父域委派子域到另一台服务器上 glue record:粘合记录,父域授权子域的记录 父域:magedu.com;子域:chengdu.magedu.com 思路:在父域的配置文件,指定访问子域“chengdu.magedu.com”的位置。

第一步:

在父域(主域)DNS数据库的配置文件“/var/named/magedu.com.zone”里,加入委派记录(粘合记录):即NS记录和NS对应的A记录。(如下图红框)

注意:下图中,“委派DNS主机” 和 “从DNS服务器”的IP地址一样,是因为我把"从DNS服务器"当做新创建的“主DNS服务器”(懒得配置了)

Linux 篇| DNS服务器-13455487

第二步:

在委派主机上,创建主DNS服务器,即在IP地址是192.168.238.128的主机是创建。(可参考上面创建主DNS服务器的实验)

第三步:

编辑委派主机的“/etc/named.rfc1912.zones”文件,添加子域的zone区域
[root@centos7 ~]# vim /etc/named.rfc1912.zones

zone "chengdu.magedu.com" IN {  
        type master;
        file "chengdu.magedu.com.zone";
};

第四步:

编辑DNS数据库文件,即在“/var/named”目录创建的DNS数据库配置文件(var/named/chengdu.magedu.com.zone)。

[root@centos7 ~]# cat /var/named/chengdu.magedu.com.zone 
$TTL 1D
@   IN SOA  master admin.magedu.com. (
                    20190427    ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
        NS  master
master      A   192.168.238.128
webserver2  A   3.3.3.3
www         CNAME   webserver2

[root@centos7 ~]#

第五步:

在主DNS服务器(192.168.238.134)执行生效命令“rndc reload”

在委派DNS服务器(192.168.238.128)执行生效命令“rndc reload”

第六步:

在DNS客户端测试:(如下图)

[root@centos6dns ~]# dig www.chengdu.magedu.com @192.168.238.128
[root@centos6dns ~]# dig www.chengdu.magedu.com @192.168.238.134

结论:由下面两张图的结果可以得知,用户访问“www.chengdu.magedu.com”域,用户的主机先向“192.168.238.134”主机请求解析“www.chengdu.magedu.com”域的IP地址,“192.168.238.134”主机没有“www.chengdu.magedu.com”域的IP地址,就查找子域,发现“192.168.238.128”主机有“www.chengdu.magedu.com”域的IP地址,就委派给“192.168.238.128”主机解析域名,从而让用户正常访问网站。这就是委派主机。

Linux 篇| DNS服务器-13455487

Linux 篇| DNS服务器-13455487

5. 转发(缓存)服务器 迭代查询是:查询根及根下面的DNS服务器。而转发服务器可以查询非根的DNS服务器

注意:被转发的服务器需要能够为请求者做递归查询,否则转发请求不予进行

转发服务器有两种转发策略“first和only” first:“本地DNS服务器”向“域内主、从DNS服务器”请求域名解析,如果没有,“本地DNS服务器”自己向“根服务器”迭代查询 only:“本地DNS服务器”向“域内主、从DNS服务器”请求域名解析,如果没有就不找了

大致过程:
创建并配置DNS转发服务器,
接着在主DNS服务器的主配置文件“/etc/named.conf”里,添加:
    forward first(或only);  --->转发策略
    forwarders {192.168.238.128;(转发服务器的IP地址)}  --->转发给谁
    说明:这两行表示,先转发给转发服务器查询,如果没有,我自己在互联网查询

(1). 安装DNS包 (2). 启动DNS服务 (3). 修改DNS主配置文件/etc/named.conf (4). 修改区域(zone)数据库文件的配置文件

编辑“/etc/named.rfc1912.zones”文件  

zone "wangge.com" IN {
        type master;
        file "wangge.com.zone";
};

(5). 创建数据库文件

vim /var/named/wangge.com.zone

$TTL 1D
@   IN SOA  master admin.wangge.com. (
                    20190427    ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
        NS  master
master      A   192.168.238.128
webserver2  A   5.5.5.5
www         CNAME   webserver2

(6).使配置生效

[root@centos7dns ~]# rndc reload
server reload successful(成功)
[root@centos7dns ~]#

(7).验证DNS转发服务器是否安装配置完成

首先自己本机测试,www.wangge.com是否解析是5.5.5.5
[root@centos7 named]# dig www.wangge.com @127.0.0.1

(8).在“主DNS服务器”添加“DNS转发服务器”的记录(全局转发和特定转发)

建议关闭配置文件“/etc/named.conf”里的dnssec功能 dnssec-enable no; dnssec-validation no;

编辑配置文件“/etc/named.conf”的“Options模块”,配置全局转发:
    forward first(或only);  --->转发策略
    forwarders {192.168.238.128;(转发服务器的IP地址)}  --->转发给谁
    说明:这两行表示,先转发给转发服务器查询,如果没有,我自己在互联网查询

说明:特定转发
特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高
编辑配置文件“/etc/named.rfc1912.zones”
zone "域名(如wangge.com)" IN {
type forward;
forward first|only;
forwarders { ip;};

(9).验证DNS转发服务器是否成功

已有设备:
主DNS服务器“192.168.238.134”
DNS转发服务器“192.168.238.128”
DNS客户端“192.168.238.133”

因为使用的是“first”策略,所以DNS客户端向主DNS服务器查询“www.wangge.com”域名解析,主DNS服务器没有,会转发给“DNS转发服务器”查询,就会查询到想要的结果(5.5.5.5)。如果查询解析“www.zhangge.com”,因为“主DNS服务器和DNS转发服务器”都没有记录,所以“DNS客户端”会自己从互联网查询解析,如果查询到解析结果,就证明“DNS服务器”创建、配置成功。(前提:互联网上真有www.zhangge.com这个域名)

1>在DNS客户端,使用“dig www.wangge.com @192.168.238.134(主DNS服务器IP地址)”查询“www.wangge.com”域名的解析(www.wangge.com对应的IP是否是5.5.5.5,有则成功)

2>在DNS客户端,使用“dig www.zhangge.com @192.168.238.134”查询“www.zhangge.com”域名的解析(www.zhangge.com对应的IP地址是否存在,有则成功)

6. 智能DNS服务器

示例:企业网站内部实现智能CDN功能(即下面的实验6)

针对三个城市:北京、上海、其他城市实现智能CDN (1)在主DNS服务器/var/named/目录里,创建三个区域数据库:magedu.com.bj(北京)、magedu.com.sh(上海)、magedu.com.zone(其他城市)

[root@centos7dns named]# ll
-rw-r----- 1 root  named  373 May  8 19:07 magedu.com.bj
-rw-r----- 1 root  named  373 May  8 19:07 magedu.com.sh
-rw-r----- 1 root  named  373 May  8 19:07 magedu.com.zone
[root@centos7dns named]#

(2).编辑区域数据库文件

目的:北京用户用北京的服务器返回结果;上海和其他地区同理

1.编辑北京的区域数据库文件
[root@centos7dns named]# cat magedu.com.bj 
$TTL 1D
@   IN SOA  master admin.magedu.com. (
                    20190427    ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
        NS  master
master      A   192.168.238.134
webserver2  A   6.6.6.6(北京CDN机房WEB服务器的IP地址)
www         CNAME   webserver2

[root@centos7dns named]#

2.编辑上海的区域数据库文件
[root@centos7dns named]# cat magedu.com.sh 
$TTL 1D
@   IN SOA  master admin.magedu.com. (
                    20190427    ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
        NS  master
master      A   192.168.238.134
webserver2  A   8.8.8.8(上海CDN机房WEB服务器的IP地址)
www         CNAME   webserver2

[root@centos7dns named]#

3.编辑其他地区的区域数据库文件
[root@centos7dns named]# cat magedu.com.zone 
$TTL 1D
@   IN SOA  master admin.magedu.com. (
                    20190427    ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
        NS  master
master      A   192.168.238.134
webserver2  A   9.9.9.9(其他地区CDN机房WEB服务器的IP地址)
www         CNAME   webserver2

[root@centos7dns named]#

3.定义ACL

目录:哪些客户端属于北京、上海、其他地区

打开/etc/named.conf文件,定义三个ACL
acl beijingnet(北京) {  
    192.168.238.0/24;
};
acl shanghainet(上海) {  
    172.22.0.0/16;
};
acl othernet(其他地区) {  
    any;
};
注意:把较小范围的往前写,会优先实现前面的acl。所以,上面其他地区的acl不能千万不能放在前面。

4.将定义的ACL与数据库关联(视图技术:将客户端的IP地址和数据库的关联关系。语法有view等)

编辑/etc/named.conf文件,在最下面的“include行前面”添加:

注意:有了view,所有的区域配置都必须在view里,不然不会生效,还报错。格式是“客户端的IP地址和数据库的关联关系—>创建view”

(1)添加内容1:

新增加行:指定客户端 ACL(北京的ACL)---》来自北京的客户端属于北京view
match-clients { beijingnet;};

(2)添加内容2:

方法一:

新增加行:
北京view对应的数据库,是专门的区域数据库,即第一步创建的区域数据库文件
zone "magedu.com" {  
                type master;
                file "magedu.com.bj";
};

方法二:

* 新增加行:
“include "/etc/named.rfc1912.zones.bj" ;”
* 删除或注释最下面的行:
“include "/etc/named.rfc1912.zones" ;”
* 将“根”的区域信息,放到“/etc/named.rfc1912.zones.bj”文件(因为有了view后,所有的区域信息要放到view里面)

    cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bj

    vim /etc/named.rfc1912.zones.bj
    zone "." IN {
            type hint;
            file "named.ca";
    };

    注意:“/etc/named.rfc1912.zones.bj”文件是
    根据“/etc/named.rfc1912.zones”文件为模板复制的,
    在把上面“根区域信息”添加进去。
    之后,在“/etc/named.rfc1912.zones.bj”文件里,
    指定区域对应的数据库文件,就是最开始创建的文件。

总结:

使用方法二的办法,创建ACL与数据库关联的命令如下:

1. 编辑文件“/etc/named.conf”
vim /etc/named.conf
创建以下行:
view beijingview{  
        match-clients { beijingnet;};
        include "/etc/named.rfc1912.zones.bj";
};
view shanghaiview{  
        match-clients { shanghainet;};
        include "/etc/named.rfc1912.zones.sh";
};
view otherview{  
        match-clients {othernet;};
        include "/etc/named.rfc1912.zones";
};
删除下面一行:
include "/etc/named.rfc1912.zones

2.复制“根的区域信息“到“/etc/named.rfc1912.zones”文件,并以此为模板创建其它地址的区域文件,在文件里指定各个区域的数据库文件,之后把“/etc/named.conf”文件的“根区域信息”删除
复制:
[root@centos7dns ~]# vim /etc/named.rfc1912.zones(其他区域)
zone "." IN {
            type hint;
            file "named.ca";
};
zone "magedu.com" IN {
        type master;
        file "magedu.com.zone";
};
创建:
[root@centos7dns ~]# cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bj
[root@centos7dns ~]# cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.sh

指定各个区域的数据库文件:
北京区域:
vim /etc/named.rfc1912.zones.bj
zone "magedu.com" IN {
        type master;
        file "magedu.com.bj";

上海区域:
vim /etc/named.rfc1912.zones.sh
zone "magedu.com" IN {
        type master;
        file "magedu.com.sh";

使配置文件生效:
[root@centos7dns ~]# rndc reload
server reload successful
[root@centos7dns ~]#

3.在“/etc/named.conf”文件,搜索allow-query,内容改为“any(所有人)”如下:
    allow-query     { any; };

4.检查配置是否有错误
[root@centos7dns ~]# named-checkconf  

5.重新加载配置文件

[root@centos7dns ~]# rndc reload
server reload successful
[root@centos7dns ~]#

6. 验证

在DNS客户端(两个IP地址:192.168.238.133和172.22.0.160)使用dig命令验证:因为客户端的192.168.238.0网段,属于北京区域,如果用DNS主服务器(两个IP地址192.168.238.134和172.22.145.195)解析www.magedu.com域,得到6.6.6.6,就证明:DNS服务器根据DNS客户端的IP,自动分配较近区域的DNS服务器提供解析。同理,用DNS主服务器(172.22.145.195)解析www.magedu.com域,得到8.8.8.8,也能证明。

[root@centos6dns ~]# dig www.magedu.com @192.168.238.134

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.magedu.com @192.168.238.134
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50144
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.magedu.com.            IN  A

;; ANSWER SECTION:
www.magedu.com.     86400   IN  CNAME   webserver2.magedu.com.
webserver2.magedu.com.  86400   IN  A   6.6.6.6

;; AUTHORITY SECTION:
magedu.com.     86400   IN  NS  master.magedu.com.

;; ADDITIONAL SECTION:
master.magedu.com.  86400   IN  A   192.168.238.134

;; Query time: 1 msec
;; SERVER: 192.168.238.134#53(192.168.238.134)
;; WHEN: Thu May 16 11:34:29 2019
;; MSG SIZE  rcvd: 110

[root@centos6dns ~]#

[root@centos6dns ~]# dig www.magedu.com @172.22.145.195

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.magedu.com @172.22.145.195
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36959
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.magedu.com.            IN  A

;; ANSWER SECTION:
www.magedu.com.     86400   IN  CNAME   webserver2.magedu.com.
webserver2.magedu.com.  86400   IN  A   8.8.8.8

;; AUTHORITY SECTION:
magedu.com.     86400   IN  NS  master.magedu.com.

;; ADDITIONAL SECTION:
master.magedu.com.  86400   IN  A   192.168.238.134

;; Query time: 4 msec
;; SERVER: 172.22.145.195#53(172.22.145.195)
;; WHEN: Thu May 16 11:43:12 2019
;; MSG SIZE  rcvd: 110

[root@centos6dns ~]#

十一.总结性试验 实现:互联网 DNS架构

Linux 篇| DNS服务器-13455487

说明:用户使用浏览器访问www.magedu.com网站 首先查询本地DNS服务器是否知道这个网站,本地DNS说没有; 接着用户向”根服务器”递归查询这个网站,“根服务器”说没有; 接着用户向”com服务器”查询这个网站,“com服务器”说没有; 接着用户向”主、从DNS服务器”查询这个网站,“主、从DNS服务器”说有,因为它们是这个网站的权威服务器,解析完成后返回客户端这个网站主机的IP地址,用户得到后就可以访问了。

设备:

编号 设备 作用 IP地址
001 centos6 用户客户端 192.168.238.6
002 centos7 用户本地DNS服务器(LDNS) 192.168.238.7
003 centos7 网络DNS服务器(根) 192.168.238.17
004 centos7 网络DNS服务器(com) 192.168.238.27
005 centos7 网站主DNS服务器(master) 192.168.238.37
006 centos7 网站从DNS服务器(slave) 192.168.238.47
007 centos6 网站WEB服务器(网站) 192.168.238.67

过程:

注意每个主机的主机名对应的命令 建议按照下面顺序完成实验 建议每搭建好一个主机,都用客户端验证,方便知道是否搭建成功,以及后面出错好排查 设置“用户客户端”电脑的DNS是“192.168.238.7”。并使用“用户客户端”的电脑(192.168.238.6),ping其他所有主机。确保能ping通所有主机,在进行下一步。

2.搭建配置WEB网站“www.magedu.com”的页面(192.168.238.67)

1. 安装WEB的包httpd
centos6默认安装了httpd的包,使用“rpm -q httpd”命令查看,所以不用再安装httpd的包

2.启动httpd服务
[root@centos6web ~]# service httpd start

3.创建WEB的网站页面
[root@centos6web ~]# echo "<h1>welcome to magedu.com</h1>" > /var/www/html/index.html
[root@centos6web ~]# cat /var/www/html/index.html 
<h1>welcome to magedu.com</h1>
[root@centos6web ~]#

4.使用用户客户端访问WEB的网站
[root@centos6client ~]# curl 192.168.238.67
<h1>welcome to magedu.com</h1>
[root@centos6client ~]#

发现可以访问,之后我们就搭建DNS服务器,成功后,我们使用域名访问,如果获取到网页内容,即表示DNS服务器解析域名为IP地址成功,即实验成功。

3.搭建配置主DNS服务器(192.168.238.37)

1.确保能联通外网,yum源正常
配置yum源可参考https://www.cnblogs.com/renpingsheng/p/7845096.html

2.安装DNS的软件包bind
[root@centos7master ~]# yum -y install bind

3.编辑主配置文件
[root@centos7master ~]# vim /etc/named.conf
“//”表示注释,注释下面两行。保存退出
//      listen-on port 53 { 127.0.0.1; };
//      allow-query     { localhost; };

4.编辑区域文件
[root@centos7master ~]# vim /etc/named.rfc1912.zones
添加下面的区域配置
zone "magedu.com" IN {  
        type master;
        file "magedu.com.zone";
};

5.在“/var/named”目录创建“magedu.com区域”的数据库文件“magedu.com.zone”
[root@centos7master ~]# cd /var/named
[root@centos7master named]# ls
data     named.ca     named.localhost  slaves
dynamic  named.empty  named.loopback
[root@centos7master named]# vim magedu.com.zone(adm.magedu.com.是邮箱)
$TTL 1D
@ IN SOA ns1 adm.magedu.com. ( 1 1H 10M 1D 3H )
        NS ns1
        NS ns2
ns1 A 192.168.238.37(主DNS服务器)
ns2 A 192.168.238.47(从DNS服务器)
www A 192.168.238.67(WEB服务器)

6.设置区域数据库文件属性,提高安全性
[root@centos7master named]# ll
total 20
drwxrwx--- 2 named named    6 Jan 30 01:23 data
drwxrwx--- 2 named named    6 Jan 30 01:23 dynamic
-rw-r--r-- 1 root  root   136 May 18 02:25 magedu.com.zone
-rw-r----- 1 root  named 2281 May 22  2017 named.ca
-rw-r----- 1 root  named  152 Dec 15  2009 named.empty
-rw-r----- 1 root  named  152 Jun 21  2007 named.localhost
-rw-r----- 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx--- 2 named named    6 Jan 30 01:23 slaves
[root@centos7master named]# chgrp named magedu.com.zone 
[root@centos7master named]# chmod 640 magedu.com.zone 
[root@centos7master named]# ll
total 20
drwxrwx--- 2 named named    6 Jan 30 01:23 data
drwxrwx--- 2 named named    6 Jan 30 01:23 dynamic
-rw-r----- 1 root  named  136 May 18 02:25 magedu.com.zone
-rw-r----- 1 root  named 2281 May 22  2017 named.ca
-rw-r----- 1 root  named  152 Dec 15  2009 named.empty
-rw-r----- 1 root  named  152 Jun 21  2007 named.localhost
-rw-r----- 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx--- 2 named named    6 Jan 30 01:23 slaves
[root@centos7master named]#

7.启动named服务
[root@centos7master named]# systemctl start named

8.在DNS客户端(192.168.238.6)验证主DNS服务器是否搭建配置成功
[root@centos6client ~]# dig www.magedu.com @192.168.238.37

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.magedu.com @192.168.238.37
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59033
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.magedu.com.            IN  A

;; ANSWER SECTION:
www.magedu.com.     86400   IN  A   192.168.238.67(成功)

;; AUTHORITY SECTION:
magedu.com.     86400   IN  NS  ns1.magedu.com.
magedu.com.     86400   IN  NS  ns2.magedu.com.

;; ADDITIONAL SECTION:
ns1.magedu.com.     86400   IN  A   192.168.238.37
ns2.magedu.com.     86400   IN  A   192.168.238.47

;; Query time: 44 msec
;; SERVER: 192.168.238.37#53(192.168.238.37)
;; WHEN: Fri May 17 04:16:31 2019
;; MSG SIZE  rcvd: 116

[root@centos6client ~]# 

4.搭建配置从DNS服务器(192.168.238.47)


1.确保能联通外网,yum源正常
配置yum源可参考https://www.cnblogs.com/renpingsheng/p/7845096.html

2.安装DNS的软件包bind
[root@centos7master ~]# yum -y install bind

3.编辑主配置文件
[root@centos7master ~]# vim /etc/named.conf
“//”表示注释,注释下面两行。保存退出
//      listen-on port 53 { 127.0.0.1; };
//      allow-query     { localhost; };

4.编辑区域文件
[root@centos7master ~]# vim /etc/named.rfc1912.zones
添加下面的区域配置
zone "magedu.com" IN {  
        type slave;
        masters {192.168.238.37;};
        file "slaves/magedu.com.zone";
};

5.安全加固
(1)在主DNS服务器(192.168.238.37)上,进行安全设置,只允许哪些主机“同步主DNS服务器的数据”
在“/etc/named.conf”文件的“Options”模块,"allow-query"行的上面添加下面的一行,如下:
allow-transfer {192.168.238.47;};(从DNS服务器的IP地址,表示只允许从这台从DNS服务器同步主DNS服务器的数据)
之后重启named服务,重新加载DNS配置
[root@centos7master named]# systemctl restart named
[root@centos7master named]# rndc reload
server reload successful
[root@centos7master named]#

(2)在从DNS服务器(192.168.238.47)进行安全设置,不允许其它主机同步DNS数据
在“/etc/named.conf”文件的“Options”模块,"allow-query"行的上面添加下面的一行,如下:
allow-transfer {none;};
重启named服务:[root@centos7master named]# systemctl restart named

6. 查看是否同步成功主DNS服务器的“DNS数据” 
[root@centos7slave ~]# ll /var/named/slaves/
total 4
-rw-r--r-- 1 named named 304 May 18 03:08 magedu.com.zone
[root@centos7slave ~]#

7.在DNS客户端(192.168.238.6)验证从DNS服务器是否搭建配置成功
[root@centos6client ~]# dig www.magedu.com @192.168.238.47

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.magedu.com @192.168.238.47
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42952
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.magedu.com.            IN  A

;; ANSWER SECTION:
www.magedu.com.     86400   IN  A   192.168.238.67(成功)

;; AUTHORITY SECTION:
magedu.com.     86400   IN  NS  ns1.magedu.com.
magedu.com.     86400   IN  NS  ns2.magedu.com.

;; ADDITIONAL SECTION:
ns1.magedu.com.     86400   IN  A   192.168.238.37
ns2.magedu.com.     86400   IN  A   192.168.238.47

;; Query time: 2 msec
;; SERVER: 192.168.238.47#53(192.168.238.47)
;; WHEN: Fri May 17 04:50:40 2019
;; MSG SIZE  rcvd: 116

[root@centos6client ~]#

5.搭建配置网络DNS服务器(com)(192.168.238.27)


1.确保能联通外网,yum源正常
配置yum源可参考https://www.cnblogs.com/renpingsheng/p/7845096.html

2.安装DNS的软件包bind
[root@centos7master ~]# yum -y install bind

3.编辑主配置文件
[root@centos7master ~]# vim /etc/named.conf
“//”表示注释,注释下面两行。保存退出
//      listen-on port 53 { 127.0.0.1; };
//      allow-query     { localhost; };

4.编辑区域文件(创建委派)
[root@centos7master ~]# vim /etc/named.rfc1912.zones
添加下面的区域配置
zone "com" IN {  
        type master;
        file "com.zone";
};

5.创建“com区域”的数据库文件
[root@centos7com ~]# vim /var/named/com.zone(admin.magedu.com是邮箱)
$TTL 1D
@ IN SOA ns1 admin.magedu.com. ( 1 1D 1H 1W 3D )
        NS ns1
magedu  NS mageduns1(主DNS服务器的NS记录)
magedu  NS mageduns2(从DNS服务器的NS记录)
ns1 A 192.168.238.27
mageduns1 A 192.168.238.37
mageduns2 A 192.168.238.47

6.重启named服务
[root@centos7com ~]# systemctl restart named

7.在DNS客户端(192.168.238.6)验证网络DNS服务器(com)是否搭建配置成功

[root@centos6client ~]# dig www.magedu.com @192.168.238.27

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.magedu.com @192.168.238.27
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33275
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.magedu.com.            IN  A

;; ANSWER SECTION:
www.magedu.com.     86400   IN  A   192.168.238.67(委派成功)
;; AUTHORITY SECTION:
magedu.com.     86400   IN  NS  mageduns1.com.
magedu.com.     86400   IN  NS  mageduns2.com.

;; ADDITIONAL SECTION:
mageduns1.com.      86400   IN  A   192.168.238.37
mageduns2.com.      86400   IN  A   192.168.238.47

;; Query time: 10 msec
;; SERVER: 192.168.238.27#53(192.168.238.27)
;; WHEN: Fri May 17 05:16:35 2019
;; MSG SIZE  rcvd: 128

[root@centos6client ~]#

6.搭建配置网络DNS服务器(根)(192.168.238.17)


1.确保能联通外网,yum源正常
配置yum源可参考https://www.cnblogs.com/renpingsheng/p/7845096.html

2.安装DNS的软件包bind
[root@centos7master ~]# yum -y install bind

3.编辑主配置文件
[root@centos7master ~]# vim /etc/named.conf
“//”表示注释,注释下面两行。保存退出
//      listen-on port 53 { 127.0.0.1; };
//      allow-query     { localhost; };

之后,找到“.”的区域信息,默认配置为网络上“根”的区域配置,我们做实验,要把这台机器当做“网络上的根”,所以修改“.”区域信息如下:
zone "." IN {
        type master;
        file "root.zone";
};

4.编辑区域文件  
因为“.”的区域信息直接在"/etc/named.conf"文件里改了,就不用再“/etc/named.rfc1912.zones”文件里修改了。

5.创建“.”区域的数据库文件
[root@centos7com ~]# vim /var/named/root.zone(admin.magedu.com是邮箱)
$TTL 1D
@ IN SOA ns1 admin.magedu.com. ( 1 1D 1H 1W 3D )
        NS ns1
com     NS comns(根的子域com的NS记录)
ns1     A       192.168.238.17
comns   A       192.168.238.27

6.设置“.”区域数据库文件(root.zone)属性,提高安全性
[root@centos7gen ~]# ll /var/named/
total 20
drwxrwx--- 2 named named    6 Jan 30 01:23 data
drwxrwx--- 2 named named    6 Jan 30 01:23 dynamic
-rw-r----- 1 root  named 2281 May 22  2017 named.ca
-rw-r----- 1 root  named  152 Dec 15  2009 named.empty
-rw-r----- 1 root  named  152 Jun 21  2007 named.localhost
-rw-r----- 1 root  named  168 Dec 15  2009 named.loopback
-rw-r--r-- 1 root  root   123 May 18 03:59 root.zone
drwxrwx--- 2 named named    6 Jan 30 01:23 slaves
[root@centos7gen ~]# chgrp named /var/named/root.zone 
[root@centos7gen ~]# chmod 640 /var/named/root.zone 
[root@centos7gen ~]# ll /var/named/
total 20
drwxrwx--- 2 named named    6 Jan 30 01:23 data
drwxrwx--- 2 named named    6 Jan 30 01:23 dynamic
-rw-r----- 1 root  named 2281 May 22  2017 named.ca
-rw-r----- 1 root  named  152 Dec 15  2009 named.empty
-rw-r----- 1 root  named  152 Jun 21  2007 named.localhost
-rw-r----- 1 root  named  168 Dec 15  2009 named.loopback
-rw-r----- 1 root  named  123 May 18 03:59 root.zone
drwxrwx--- 2 named named    6 Jan 30 01:23 slaves
[root@centos7gen ~]# 

7.重启named服务
[root@centos7com ~]# systemctl restart named

8.在DNS客户端(192.168.238.6)验证网络DNS服务器(根)是否搭建配置成功
[root@centos6client ~]# dig www.magedu.com @192.168.238.17

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.magedu.com @192.168.238.17
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46594
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.magedu.com.            IN  A

;; ANSWER SECTION:
www.magedu.com.     86400   IN  A   192.168.238.67

;; AUTHORITY SECTION:
magedu.com.     86400   IN  NS  mageduns2.com.
magedu.com.     86400   IN  NS  mageduns1.com.

;; ADDITIONAL SECTION:
mageduns1.com.      86400   IN  A   192.168.238.37
mageduns2.com.      86400   IN  A   192.168.238.47

;; Query time: 9 msec
;; SERVER: 192.168.238.17#53(192.168.238.17)
;; WHEN: Fri May 17 05:47:48 2019
;; MSG SIZE  rcvd: 128

[root@centos6client ~]#

7.搭建配置网络DNS服务器(根)(192.168.238.7)


1.确保能联通外网,yum源正常
配置yum源可参考https://www.cnblogs.com/renpingsheng/p/7845096.html

2.安装DNS的软件包bind
[root@centos7master ~]# yum -y install bind

3.编辑主配置文件
[root@centos7master ~]# vim /etc/named.conf
“//”表示注释,注释下面两行。保存退出
//      listen-on port 53 { 127.0.0.1; };
//      allow-query     { localhost; };

把下面两行的“yes”改为“no”(转发设置)
dnssec-enable no;
dnssec-validation no;

4.根据实验的要求,我们要把“192.168.238.17”这台主机当做网络上的“根”。所以要修改默认配置,把“根服务器”指定为“192.168.238.17”这台机器,如下:
[root@centos7ldns ~]# vim /var/named/named.ca
(清空里面的配置,只留下下面的两行,并修改第二行的IP地址为我们创建的“根”服务器的IP)
.                       518400  IN      NS      a.root-servers.net.
a.root-servers.net.     3600000 IN      A       192.168.238.17

5.重启named服务  
[root@centos7ldns ~]# systemctl restart named

8.验证结果


1.为了避免干扰,把除了“用户客户端”和“WEB服务器”,其他所有服务器(5台)的DNS缓存清除  
清除命令:[root@centos7ldns ~]# rndc flush

2.查看用户客户端的DNS
[root@centos6client ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 192.168.238.7
[root@centos6client ~]#

3.使用“用户客户端”访问www.magedu.com,解析到IP地址,最终获取到网页
[root@centos6client ~]# dig www.magedu.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.magedu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51250
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.magedu.com.            IN  A

;; ANSWER SECTION:
www.magedu.com.     86400   IN  A   192.168.238.67(成功)

;; AUTHORITY SECTION:
magedu.com.     86400   IN  NS  ns1.magedu.com.
magedu.com.     86400   IN  NS  ns2.magedu.com.

;; ADDITIONAL SECTION:
ns1.magedu.com.     86400   IN  A   192.168.238.37
ns2.magedu.com.     86400   IN  A   192.168.238.47

;; Query time: 16 msec
;; SERVER: 192.168.238.7#53(192.168.238.7)
;; WHEN: Fri May 17 06:17:53 2019
;; MSG SIZE  rcvd: 116

[root@centos6client ~]# curl www.magedu.com
<h1>welcome to magedu.com</h1>(成功)
[root@centos6client ~]#

4.为了验证DNS的主、从功能,我们把主DNS服务器关掉,用从DNS服务器来给用户提供域名解析,实现访问www.magedu.com网站的效果。
(注意:先把所有电脑(5台)的DNS缓存清除,使用“rndc flush”命令)
第一步:清除所有服务器的DNS缓存
第二步:关闭主DNS服务器(关机或关闭网络)
第三步:使用“用户客户端”访问www.magedu.com网站
[root@centos6client ~]# curl www.magedu.com
<h1>welcome to magedu.com</h1>
[root@centos6client ~]#

十二. 编译安装bind 下载bind:

isc.org:
bind-9.10
bind-9.11
bind-10

2.编译安装bind

? tar xvf bind-9.11.0a3.tar.gz
? cd bind-9.11.0a3/
? groupadd -r -g 53 named
? useradd -r -u 53 -g 53 named

? ./configure --prefix=/usr/local/bind9 --sysconfdir=/etc/named/ --withoutopenssl --disable-ipv6 --disable-chroot --enable-threads

? make
? make install

3.vim /etc/named/named.conf

options {
directory “/var/named/”;
};
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost" IN {
type master;
file “named.localhost";
allow-update {none;};
};
zone “1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update {none;};
};

4.区域数据库

? mkdir /var/named
? named-checkconf
? dig +norec @a.root-servers.net > /var/named/named.ca
? vim /var/named/named.localhost
$TTL 1d
@ IN SOA localhost. admin.localhost. (
2016061801
1h
5m
7d
1d)
IN NS localhost.
localhost. IN A 127.0.0.1

5.vim /var/named/named.loopback

$TTL 1d
@ IN SOA localhost. admin.localhost. (
2016061801
1h
5m
7d
1d)
NS @
 A 127.0.0.1
 PTR localhost.

6.设置权限

? chmod 640 /var/named/*
? chmod 640 /etc/named/named.conf
? chgrp -R named /var/named/
? chgrp named /etc/named/named.conf

7.启动服务和测试

? man named
? named -u named -f -g -d 3 前端级别3方式运行
? named -u named 后台运行
? killall named
? ss -tuln
? tail /var/log/message
? named -u named

8.支持rndc

? rndc reload 观察错误提示
? rndc-confgen -r /dev/urandom > /etc/named/rndc.conf 生成key
? tail /etc/named/rndc.conf >> /etc/named/named.conf
? killall -SIGHUP named
? rndc status
喜欢 (0)
[]
分享 (0)
关于作者:
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址