DNS服务原理与基础

前言

又到了日常周末学习总结。
linux深度学习,进入服务架设阶段。
这一篇主要讲到DNS服务的原理,与一些基础DNS服务的功能。
应付日常生活与非DNS服务提供公司,足矣。
为什么会有DNS服务的出现?
整个internet大家庭中连接了数以亿记的服务器,个人主机,其中大部分的网站、邮件服务等服务器都是用了域名形式的地址,如www.google.com、mail.163.com等。很显然这种地址形式要比使用64.233.289.147、202.108.33.74的IP地址形式更加直观,更加容易被用户记住。

国际惯例,我先讲一下什么是DNS服务基本原理。(转载至百度百科,原谅我不想使用维基百科)

DNS服务器

    DNS服务器和域名服务器同义。

    DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 
(IP address)转换的服务器。DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP 
address)的表,以解析消息的域名。 域名是Internet上某一台计算机或计算机组的名称,用于在数据
传输时标识计算机的电子方位(有时也指地理位置)。域名是由一串用点分隔的名字组成的,通常包含组织名,
而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区

    DNS是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,它是由域名
解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转
换为IP地址功能的服务器。其中域名必须对应一个IP地址,一个IP地址可以有多个域名,而IP地址不一定有
域名。域名系统采用类似目录树的等级结构。域名服务器通常为客户机/服务器模式中的服务器方,它主要有
两种形式:主服务器和转发服务器。将域名映射为IP地址的过程就称为“域名解析”。

DNS原理

DNS服务,往最简单易懂的方向解释,其实就是:
别人把一个IP地址和一个域名地址绑定到一起,
而我想要访问这个IP,我可以访问这个域名,通过DNS解析找到这个IP。
(这就是DNS最基本功能之一的正向解析)
而我想知道这个IP他到底绑定了多少个域名,可以通过DNS解析找个这些个域名。
(DNS另外一个比较少见的功能,反向解析)

基本概念

DNS 系统在网络中的作用就是维护着一个地址数据库,其中记录了各种主机域名;
与 IP地址的对应关系,以便为客户程序提供正向或反向的地址查询服务,
即正向解析与反向解析

(1)正向解析:根据域名查 IP 地址,是 DNS 服务最常用的基本功能 
(2)反向解析:根据 IP 查域名,不是很常用,应用于例如反垃圾邮件的验证等 

每台 DNS 服务器都负责管理一个有限范围(一个或几个域)内的主机域名和 IP 地址的对应关系,这些特定的 DNS 域或 IP 地址段称为“zone”(区域)。

常见DNS分类

据地址解析的方向不同,DNS 区域相应的分为正向区域(包含域名到 IP 地址的解析记录)
和反向区域(包含 IP 地址到域名的解析记录)。

根据管理的区域地址数据的来源不同,DNS 系统可以分为不同的类型:

(1)缓存域名服务器 
    只提供域名解析结果的缓存功能,目的在于提高数据查询速度和效率,但是没有自己控制的区域地址数据。
构建缓存域名服务器时,必须设置根域或指定其他 DNS 服务器作为解析来源。 
(2)主域名服务器 
    维护某一个特定 DNS 区域的地址数据库,对其中的解析记录具有自主控制权,是指定区域中唯一存在
的权威服务器、官方服务器。构建主域名服务器时,需要自行建立所有负责区域的地址数据文件。 
(3)从域名服务器 
    与主域名服务器提供完全相同的 DNS 解析服务,通常用于 DNS 服务器的热备份。对客户机来说,
无论使用主域名服务器还是从域名服务器,查询结果都是一样的。
    从DNS服务器:从主服务器或从服务器“复制”(区域传输)解析
库副本
    序列号:     解析库版本号,主服务器解析库变化时,其序列递增。
    刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔。
    重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔。
    过期时长:   从服务器联系不到主服务器时,多久后停止服务。

注意:“通知”机制,主服务器解析库发生变化时,会主动通知从服务器

DNS查询方式

DNS查询类型:递归查询、迭代查询

递归查询:
    递归查询是最常见的查询方式,域名服务器将代替提出请求的客户机(下级DNS服务器)进行域名查询,
若域名服务器不能直接回答,则域名服务器会在域各树中的各分支的上下进行递归查询,最终将返回查询结果
给客户机,在域名服务器查询期间,客户机将完全处于等待状态。
    当收到DNS工作站的查询请求后,DNS服务器在自己的缓存或区域数据库中查找,如找到则返回结果,
如找不到,返回错误结果。即DNS服务器只会向DNS工作站返回两种信息:要么是在该DNS服务器上查找到的结果,
要么是查询失败。该DNS工作站自行向该DNS服务器询问。“递归”的意思是有来有往,并且来、往的次数是一致的。
一般由DNS工作站提出的查询请求便属于递归查询。
    由于递归查询是两者之间的,所以通常查询起来高效快捷,能最快应答成功或失败的解析,然而无法成功解析
所有域名。一般发生在客户端与服务器间,也特殊情况是dns服务器与dns服务器之间。同时与迭代查询相对.
迭代查询:
    迭代查询又称重指引,当服务器使用迭代查询时能使其他服务器返回一个最佳的查询点提示或主机地址,
若此最佳的查询点中包含需要查询的主机地址,则返回主机地址信息,若此时服务器不能够直接查询到主机地址,
则是按照提示的指引依次查询,直到服务器给出的提示中包含所需要查询的主机地址为止,一般每次指引都会更
靠近根服务器(向上),查寻到根域名服务器后,则会再次根据提示向下查找。B访问CDE、F、G,
都是迭代查询,首先B 访问C,得到了提示访问D的提示信息后,开始访问DD又返回给B提示信息,
告诉B应该访问E,依次类推。

DNS基础知识

关于一些资源解析库的基础知识。
区域解析库是由众多RR组成的。

资源记录

资源记录:Resource Record, RR
记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX

SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录而必须为解析库的第一条记录;
A:internet Address,作用,FQDN --> IP
AAAA: FQDN --> IPv6
PTR: PoinTeR,IP --> FQDN
NS: Name Server,专用于标明当前区域的DNS服务器
CNAME:Canonical Name,别名记录
MX: Mail eXchanger,邮件交换器

资源记录定义的格式

语法:name [TTL] IN rr_type value
注意:
(1) TTL可从全局继承;
(2) @可用于引用当前区域的名字;
(3) 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应;
(4) 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;
此仅表示通过多个不同的名字可以找到同一个主机而已

SOA记录

SOA:
    name: 当前区域的名字,例如“magedu.com.”;
    value: 有多部分组成
        (1) 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;
        (2) 录前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换,
        例如linuxedu.magedu.com;
        (3) (主从服务协调属性的定义以及否定的答案的统一的TTL)

例子:

magedu.com.     86400   IN  SOA     ns.magedu.com.  nsadmin.magedu.com.     (
                2015042201  ;序列号
                2H          ;刷新时间
                10M         ;重试时间
                1W          ;过期时间
                1D          ;否定答案的TTL值
)

NS记录

NS: 
    name: 当前区域的名字
    value: 当前区域的某DNS服务器的名字,例如ns.magedu.com.;注意:一个区域可以有多个NS记录;
例如:
    magedu.com.     IN      NS      ns1.magedu.com.
    magedu.com.     IN      NS      ns2.magedu.com.

注意:
(1) 相邻的两个资源记录的name相同时,后续的可省略;
(2) 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录;

MX记录

MX: 
    name: 当前区域的名字
    value: 当前区域的某邮件服务器(smtp服务器)的主机名;

例如:
    magedu.com.     IN      MX  10  mx1.magedu.com.
                    IN      MX  20  mx2.magedu.com.

注意:
(1) 对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录;
(2)一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),
表示此服务器的优先级;数字越小优先级越高.

A记录

A:
    name: 某主机的FQDN,例如www.magedu.com.
    value: 主机名对应主机的IP地址;
例如:
    www.magedu.com.     IN      A   1.1.1.1
    www.magedu.com.     IN      A   1.1.1.2

    mx1.magedu.com.     IN      A   1.1.1.3
    mx2.magedu.com.     IN      A   1.1.1.3

注意:避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址。

    *.magedu.com.       IN      A   1.1.1.4

AAAA记录

AAAA:
    name: FQDN
    value: IPv6

PTR记录

PTR:
    name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:
    in-addr.arpa.,所以完整写法为:4.3.2.1.in-addra.arpa.
    value: FQDN

注意:FQDN指的是:Fully Qualified Domain Name 完全合格域名/全称域名

例如:
    4.3.2.1.in-addr.arpa.   IN  PTR     www.magedu.com
    简写成:
        4   IN  PTR     www.magedu.com.

注意:网络地址及后缀可省略;主机地址依然需要反着写。

CNAME记录

CNAM:
    name: 别名的FQDN
    value: 正工名字的FQDN;
例如:
    web.magedu.com.     IN      CNAME   www.magedu.com.

DNS服务基础搭建

BIND的安装配置:
dns服务,程序包名bind,程序名named。

bind:
服务脚本:/etc/rc.d/init.d/named
主配置文件:/etc/named.conf, /etc/named.rfc1912.zones, /etc/rndc.key
解析库文件:/var/named/ZONE_NAME.ZONE

    注意:
        (1) 一台物理服务器可同时为多个区域提供解析;
        (2) 必须要有根区域文件;named.ca
        (3) 应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库;

rndc: remote name domain controller,默认与bind安装在同一主机,
且只能通过127.0.0.1来连接named进程;提供辅助性的管理功能;
端口:953/tcp
主配置文件:
    全局配置:options {}
    日志子系统配置:logging {}
    区域定义:本机能够为哪些zone进行解析,就要定义哪些zone;
        zone "ZONE_NAME" IN {}

注意:任何服务程序如果期望其能够通过网络被其它主机访问,
至少应该监听在一个能与外部主机通信的IP地址上.

缓存名称服务器的配置:
    监听外部地址即可;

dnssec: 
    建议测试时关闭dnssec;

主DNS名称服务器

(1):在主配置文件中定义区域.

zone "ZONE_NAME" IN {
    type {master|slave|hint|forward};
    file "ZONE_NAME.zone";
};

注意:
type类型有 主:从:根:转发。
file指区域解析库文件的文件名,默认放在/var/named/目录下。

(2):定义区域解析库文件

出现的内容:
    宏定义;
    资源记录;
示例:
    $TTL 86400
    $ORIGIN magedu.com.
    @   IN  SOA ns1.magedu.com. admin.magedu.com (
                2015042201
                1H
                5M 
                7D
                1D )
        IN  NS      ns1
        IN  NS      ns2
        IN  MX 10   mx1
        IN  MX 20   mx2
    ns1 IN  A   172.16.100.11
    ns2 IN  A   172.16.100.12
    mx1 IN  A   172.16.100.13
    mx2 IN  A   172.16.100.14
    www IN  A   172.16.100.11
    www IN  A   172.16.100.12
    ftp IN  CNAME   www

注意:
SOA记录里面小括号里面的那五行分别指的是 序列号;刷新时间;重试时间;
过期时间;否定答案时间的TLL值。

配置主DNS名称服务器

现在,我们来做个简单的实验…
搭建一个最普通的正向解析的DNS名称服务器。
并起到简单的轮询效果。
要用到专门的测试命令dig,dig用于测试dns系统,因此,不会查询hosts文件进行解析。
现在我准备了了一台CentOS6.9的虚拟机,IP 是172.18.25.91
记得关闭防火墙,还有SELINUX。
开始实验:
(1)用yum安装bind,并启动named服务

[root@YGL ~]# yum install bind
[root@YGL ~]# service named start
Generating /etc/rndc.key:                                  [  OK  ]
Starting named:                                            [  OK  ]

(2)编辑named的全局配置文件
在options模块中注释掉两行。

[root@YGL ~]# vim /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;

注意:
注释掉第一个,是因为,他默认是监听在本地端口上,这样是不能提供服务的。
可以改成把IP改成localhost,或是你指定的某个IP。注释后默认监听在所有本地端口上。
注释掉第二个,是因为它里面写了localhost,指明了只能被本机所使用查询功能,
注释后默认所有IP都可以使用,也可以把localhost改成any

(3):编辑named.rfc1912.zones配置文件
我们这里添加一个对magedu.com的区域解析模块。

[root@YGL ~]# vim /etc/named.rfc1912.zones

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

注意:找个地方插入的时候,别插入到别的区域定义块里面了,还有格式,标点符号,一个都不能少。

(4)现在进入/var/named/目录下对增加一个区域解析库文件。

[root@YGL named]# vim magedu.com.zone
$TTL 86400 
$ORIGIN magedu.com.
@   IN  SOA dns1.magedu.com. admin.magedu.com. (
                    2017091909 ; serial
                    86400      ; refresh (1 day)
                    3600       ; retry (1 hour)
                    604800     ; expire (1 week)
                    10800      ; minimum (3 hours)
                    )
magedu.com. NS      dns1
magedu.com. NS      dns2
dns1        A       6.6.6.6
dns2        A       7.7.7.7
www         A       6.6.6.6
www         A       7.7.7.7 

(5)在另外一台机器上使用dig命令来进行测试

[root@YGL ~]# yum install bind-utils
[root@YGL ~]# dig www.magedu.com @172.18.25.91

; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> www.magedu.com @172.18.25.91
;; global options: +cmd
;; connection timed out; no servers could be reached
[root@YGL ~]# dig www.magedu.com @172.18.25.91

; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> www.magedu.com @172.18.25.91
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52878
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3

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

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

;; AUTHORITY SECTION:
magedu.com.     86400   IN  NS  dns2.magedu.com.
magedu.com.     86400   IN  NS  dns1.magedu.com.

;; ADDITIONAL SECTION:
dns1.magedu.com.    86400   IN  A   6.6.6.6
dns2.magedu.com.    86400   IN  A   7.7.7.7

;; Query time: 0 msec
;; SERVER: 172.18.25.91#53(172.18.25.91)
;; WHEN: 四 9月 21 03:05:50 CST 2017
;; MSG SIZE  rcvd: 145

再次测试会发现IP地址的顺序发生了变化

[root@YGL named]# dig www.magedu.com @172.18.25.91

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

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

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

;; AUTHORITY SECTION:
magedu.com.     86400   IN  NS  dns2.magedu.com.
magedu.com.     86400   IN  NS  dns1.magedu.com.

;; ADDITIONAL SECTION:
dns1.magedu.com.    86400   IN  A   6.6.6.6
dns2.magedu.com.    86400   IN  A   7.7.7.7

;; Query time: 0 msec
;; SERVER: 172.18.25.91#53(172.18.25.91)
;; WHEN: Sat Sep 23 13:46:54 2017
;; MSG SIZE  rcvd: 134

[root@YGL named]# dig www.magedu.com @172.18.25.91

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

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

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

;; AUTHORITY SECTION:
magedu.com.     86400   IN  NS  dns2.magedu.com.
magedu.com.     86400   IN  NS  dns1.magedu.com.

;; ADDITIONAL SECTION:
dns1.magedu.com.    86400   IN  A   6.6.6.6
dns2.magedu.com.    86400   IN  A   7.7.7.7

;; Query time: 0 msec
;; SERVER: 172.18.25.91#53(172.18.25.91)
;; WHEN: Sat Sep 23 13:46:55 2017
;; MSG SIZE  rcvd: 134

注意:
配置改好了,最好别重启服务,可以使用 rndc reload来重载主配置文件和区域解析库文件,
还有有时候解析有问题,可能是服务器上缓存的问题,可以使用rndc flush来清理缓存,
但是这在生产中是十分危险的事情,丢失缓存会让很多工作变得异常缓慢。

配置主从服务器

从服务器配置起来十分简单,应该就是下面的这些要点了。

主从复制:
    1、应该为一台独立的名称服务器;
    2、主服务器的区域解析库文件中必须有一条NS记录是指向从服务器;
    3、从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中;
    4、主服务器得允许从服务器作区域传送;
    5、主从服务器时间应该同步,可通过ntp进行;
    6bind程序的版本应该保持一致;否则,应该从高,主低;

我从服务器准备的是CentOS7.3的机器,IP是172.18.25.51

首先要安装基础包

[root@YGL ~]# yum install bind
[root@YGL ~]# yum install bind-utils

然后去全局修改配置
修改后的部分

[root@YGL ~]# vim /etc/named.conf 
options {
    listen-on port 53 { 172.18.25.51;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     { any; };

//  recursion no;

//  dnssec-enable no;
//  dnssec-validation no;

    /* Path to ISC DLV key */
//  bindkeys-file "/etc/named.iscdlv.key";

//  managed-keys-directory "/var/named/dynamic";

到这里其实已经成为了一个缓存名称服务器,
接下来我们要把它配置成从名称服务器

我们在区域解析文件中加入我们要求的配置

[root@YGL ~]# vim /etc/named.rfc1912.zones 
找个地方,比如最后面插入
zone "magedu.com" IN {
        type slave;
        masters { 172.18.25.91; };
        file "slaves/magedu.com.zone";
};

注意:一定要写masters!就算只有一个。
还有注意一定要在主服务器上加入一个NS记录是指向从服务器的。
不然是不会通知从服务器,我已经被修改过来,快来同步啊的通知的…

这是在主的那台机器上指向从服务器的操作,修改配置文件
[root@YGL named]# vim /var/named/magedu.com.zone 
$TTL 86400
$ORIGIN magedu.com.
@       IN      SOA     dns1.magedu.com. admin.magedu.com. (
                                        2017091909 ; serial
                                        86400      ; refresh (1 day)
                                        3600       ; retry (1 hour)
                                        604800     ; expire (1 week)
                                        10800      ; minimum (3 hours)
                                        )
                NS              dns1
                NS              dns2
                NS              dns3
dns1            A               6.6.6.6
dns2            A               7.7.7.7
dns3            A               172.18.25.51
www             A               6.6.6.6
www             A               7.7.7.7
www             A               172.18.25.51

我们在从服务器上使用同步命令
查询是否把区域库解析文件同步过来
查看日志

[root@YGL ~]# rndc reload
server reload successful
[root@YGL ~]# ls /var/named/slaves/
magedu.com.zone
[root@YGL ~]# tail /var/log/messages
Sep 21 04:14:42 YGL named[5065]: managed-keys-zone: sync_keyzone:dns_journal_open -> unexpected error
Sep 21 04:14:42 YGL named[5065]: managed-keys-zone: unable to synchronize managed keys: unexpected error
Sep 21 04:14:42 YGL named[5065]: reloading zones succeeded
Sep 21 04:14:42 YGL named[5065]: all zones loaded
Sep 21 04:14:42 YGL named[5065]: running
Sep 21 04:14:42 YGL named[5065]: zone magedu.com/IN: Transfer started.
Sep 21 04:14:42 YGL named[5065]: transfer of 'magedu.com/IN' from 172.18.25.91#53: connected using 172.18.25.51#56166
Sep 21 04:14:42 YGL named[5065]: zone magedu.com/IN: transferred serial 2017091909
Sep 21 04:14:42 YGL named[5065]: transfer of 'magedu.com/IN' from 172.18.25.91#53: Transfer completed: 1 messages, 11 records, 263 bytes, 0.001 secs (263000 bytes/sec)

从日志上我们可以看到清晰的请求传送的过程,还有传送的过程。
到这里基础的主从服务器就建设好了。
嗯这里还有一点要注意的,
CentOS6上传送过来的库文件可以之间看到,CentOS7上传送过来的是加密后的文件…
还有一定要同步时间的。很重要。
还有并不是要等到时间到了才传送,而是只要主的区域解析库被修改了,那么主就会跑过来通知从过来同步数据了,
而且是增量传送,就是只同步修改的那部分。我有点啰嗦了,上文好像已经说到了,但是真的很重要!!!

一个稍微全面点的实验

我们来模拟一个完整的网络中的DNS服务器的各种功能。
就是你想法访问一个网站所经过的DNS服务器的简略版模拟网络。
我先上传一张关于这个模拟过程的草图…
之前做实验的机器都恢复快照,重新安装bind、bind-utils等工具。
下面的实验,
有模拟根服务器
有多成DNS服务器,比如com域服务器。
还有主从服务器。
DNS服务原理与基础_第1张图片
嗯我们开始实验。
实验至少需要6台服务器。如上图,安装好各项工具。
Bind
Openssh-clients
关掉所有机器的防火墙还有SELINUX
systemctl disable firewalld
systemctl stop firewalld
setenforce 0
iptables -X
iptables -F
权限很重要!!!!所属组很重要!!!
第一步我先搭建 172.18.1.1的DNS服务器,并用他做为主服务器
1.编辑named的全局配置文件

vim /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     { localhost;172.18.25.1; };

2.编辑named.rfc1912.zones配置文件

    [ root@ygl /etc ]# cat named.rfc1912.zones 
    在里面插入(注意格式,不要少了任何东西,很重要!!!)
        zone "magedu.com" {
            type master;
            file "magedu.com.zone";
        };

3.现在进入/var/named/目录下对库进行编辑
首先我们要创建magedu.com.zone文件

        [ root@ygl /var/named ]# cat magedu.com.zone 
        $TTL 86400 ; 1 day
        @ IN SOA    dns1.magedu.com. admin.magedu.com. (
                    2017091909 ; serial
                    86400      ; refresh (1 day)
                    3600       ; retry (1 hour)
                    604800     ; expire (1 week)
                    10800      ; minimum (3 hours)
                    )
                NS  dns1.magedu.com.
        dns1        A   172.18.1.1
        dns2        A   172.18.25.51
        websrv      A   6.6.6.6
        www     CNAME   websrv  

4.现在我们要编辑named.ca文件,让他所认为的根是我指定的根。
最后删掉多余的东西,只留下一行记录,并修改。

        [ root@ygl /var/named ]# cat named.ca 
        ;       This file holds the information on root name servers needed to
        ;       initialize cache of Internet domain name servers
        ;       (e.g. reference this file in the "cache  .  "
        ;       configuration file of BIND domain name servers).
        ;
        ;       This file is made available by InterNIC 
        ;       under anonymous FTP as
        ;           file                /domain/named.cache
        ;           on server           FTP.INTERNIC.NET
        ;       -OR-                    RS.INTERNIC.NET
        ;
        ;       last update:    December 01, 2015
        ;       related version of root zone:   2015120100
        ;
        ; formerly NS.INTERNIC.NET
        ;
        .                        3600000      NS    A.ROOT-SERVERS.NET.
        A.ROOT-SERVERS.NET.      3600000      A     172.18.25.1

5.现在我们主的DNS机器已建好了
使用SCP把named.ca文件发像其他的几个DNS服务器,偷懒做法,直接覆盖。

[ root@ygl /var/named ]# scp named.ca 172.18.25.51:/var/named/
[ root@ygl /var/named ]# scp named.ca 172.18.25.52:/var/named/
[ root@ygl /var/named ]# scp named.ca 172.18.25.53:/var/named/
总共4个DNS服务器,都已经知道根了。
[ root@ygl /var/named ]# systemctl restart named

6.现在我们搭建从的服务器
和之前一样,注释掉named.conf里面的两行

//  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; };

现在修改named.rfc1912.zones 文件
插入

    zone "magedu.com" IN {
        type slave;
        masters {172.18.1.1;};
        file "slaves/magedu.com.zone";
    };

7.检查从DNS服务是否能从主DNS那里拿到magedu.com.zone文件
记得每一步做好后都使用dig命令进行检查

    [root@YGL named]# ls
    data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves
    [root@YGL named]# cd slaves/
    [root@YGL slaves]# ls
    magedu.com.zone

8.现在我们要搭建com DNS服务器了(IP 172.18.25.52的机器)
和之前一样,把named.conf里面的两行注释掉。

[root@YGL etc]# cat 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; };

再到named.rfc1912.zones 里面插入

[root@YGL etc]# cat named.rfc1912.zones 
    zone "com" IN {
        type master;
        file "com.zone";
    };

再进入到/var/named/目录创建com.zone文件

[root@YGL named]# cat com.zone 
$TTL 86400 ; 1 day
@ IN SOA    dns1.magedu.com. admin.magedu.com. (
            2017091909 ; serial
            86400      ; refresh (1 day)
            3600       ; retry (1 hour)
            604800     ; expire (1 week)
            10800      ; minimum (3 hours)
            )
        NS  dns1
magedu      NS  dns2
magedu      NS  dns3
dns1        A   172.18.25.52
dns2        A   172.18.1.1
www     CNAME   websrv  

再次到客户端取检验,直接dig IP @com服务器,
还可以检测,主从服务器是否正常,比如把主的服务器给down了。

9.现在我们再取搭建离客户最近的那台服务器。
依然,我们还是先编辑named.conf文件

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

还有连个关于安全的改成no

    dnssec-enable no;
    dnssec-validation no;

然后就不用在编辑了。
因为是只能找根了,我就不配置转发了…

10.我们现在再来编辑根服务器
首先注释named.conf里面的那两行

//  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; };

然后再,因为决定自己是根了,不用再去寻找根了,注释掉寻找的那几行。

//zone "." IN {
//  type hint;
//  file "named.ca";
//};

再然后,编辑name.rfc1912.zone文件
创建root.zone文件

[ root@centos6 /var/named ]# cat root.zone 
$TTL 86400 ; 1 day
@ IN SOA    dns1 admin.magedu.com. (
            2017091909 ; serial
            86400      ; refresh (1 day)
            3600       ; retry (1 hour)
            604800     ; expire (1 week)
            10800      ; minimum (3 hours)
            )
        NS  dns1
com     NS  dns2
dns1        A   172.18.25.1
dns2        A   172.18.25.52

每个服务修改了配置文件之后都要重启服务,
好了到这里就可以取dig你的DNS服务器去寻找www.magedu.com了
试验完成。

最后

其实一个DNS服务可以讲好多,我这里只是一些最最最基本,基础的部分了,
还有身边异地灾备,分布式缓存加速,CDN加速,智能ACL DNS服务…
还有很多很多加深的知识,IT行业这条路是看不到头的…
但是我们又不是准备去那些DNS服务商的公司去工作…(准备去的当我没说,那还要学的东西够多…)
我们一般情况下,会用会排错,会基础修改,足矣…
这篇文章就到这了.






ღ ღ ღ 如果觉得文章对您有用,不妨赞一下ღ ღ ღ

你可能感兴趣的:(linux服务架设阶段)