DNS域名解析服务器

为什么需要DNS

域名解析服务,全称Domain Name Service,简称为DNS。
DNS是一项基础服务,那他有什么用呢?我们为什么需要他?
他最主要的作用是将全称域名转换成IP

试想一下,假如上网的时候,在浏览器上面的网址都是IP会是什么样的一个状况?
可能我们就需要像电话本一样,把他们都记录下来,需要访问的时候再查看。
因为他们都是IP地址数字,记录起来不像单词一样。

事实上也确实有这么做过,例如我们主机的hosts文件

[root@bc ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.2.201 node1 node1.bc.com
192.168.2.211 node1 node1.bc.com
192.168.2.221 node1 node1.bc.com
192.168.2.202 node2 node2.bc.com
192.168.2.212 node2 node2.bc.com
192.168.2.222 node2 node2.bc.com
192.168.2.203 node3 node3.bc.com
192.168.2.213 node3 node3.bc.com
192.168.2.223 node3 node3.bc.com
192.168.2.204 node4 node4.bc.com
192.168.2.214 node4 node4.bc.com
192.168.2.224 node4 node4.bc.com

这样我们在浏览器中输入node1.bc.com就会自动地转换成192.168.2.201这个地址。
这样的话,即使这个IP地址多么难记,我们要访问的时候只需要键入这个地址就可以了。

那我们有hosts文件了,为什么需要DNS服务呢?

因为hosts文件就像电话簿一样,是写死的。
如果有一天,对方的IP地址换了。我们键入同样的域名就访问不了了。
这个就跟别人换了电话号码,但是你的手机上的电话簿不会即时更新一样。

而DNS则是一个在线同步的电话簿,对方改了电话号码,我们也能够连通。

当我们在浏览器上键入网址,名称解析实际上做了什么?

1.首先,为了解析域名他回去才查找本地的hosts文件
假如hosts文件中有对应的条目,直接就解析成对应的IP地址访问了。

2.hosts文件中没有对应的记录的时候,就会去查找本地的DNS服务器
假如你家连的是电信网络,这个本地的DNS记录一般是由电信维护的。
你访问本地DNS服务器,DNS服务器有记录并返回一个记录。这个叫递归查询
当然,递归查询在DNS服务器中是可以关闭的。

3.本地DNS服务器中也没有的对应记录的时候,就回去找根服务器
根服务器是最顶级的域,总共有13个。
例如访问www.example.com的时候:
a.hosts文件中没有记录
b.本地dns服务器中也没有记录
c.就会去找根服务器,从13个服务器中,从中找到管理com.域名的DNS服务器。

假如,管理com.的服务器告诉我们需要我们去找ns1.example.comDNS服务器。
最后本地dns在ns1.example.com中查找到www.example.com的域名记录
这个过程,就叫做迭代查询

举个通俗的例子,学生问老师一个问题,老师告诉他答案。这叫递归查询。
假如老师也不知道答案,这时老师去问其他老师。这叫迭代查询。

DNS服务器中的资源类型

SOA记录:Start Of Authority,起始授权记录;

SOA记录包含以下信息:
   (1) 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字
   (2) 当前区域管理员的邮箱地址
       但地址中不能使用@符号,一般用.替换@
       如bocai.example.com代表bocai@example.com
   (3)主从服务协调属性的定义以及否定的答案的统一的TTL

区域解析库有且仅能有一个SOA记录,而必须为解析库的第一条记录;

SOA记录的一个示例:
bc.com.  86400  IN  SOA  ns1.bc.com.    nsadmin.bc.com.     (
            2015042201        ;序列号
            2H                ;刷新时间
            10M               ;重试时间
            1W              ;过期时间
            1D              ;否定答案的TTL值
)

A记录:internet Address
作用是将全称域名解析成IP地址。

  node1.bc.com.      IN      A   192.168.2.201
  node2.bc.com.      IN      A   192.168.2.202

PTR记录: PoinTeR
作用是将IP地址解析成全称域名。

  4.3.2.1.in-addr.arpa.     IN  PTR     www.bc.com

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

NS记录: Name Server,
作用是标明当前区域的DNS服务器

  bc.com.       IN      NS      ns1.bc.com.
  bc.com.       IN      NS      ns2.bc.com.

CNAME记录:Canonical Name,别名记录
作用是将多个名字映射到同一台计算机。

    web.bc.com.             IN      CNAME       www.bc.com.
    mail.bc.com.            IN      CNAME         www.bc.com.
    www.bc.com.          IN     A            1.1.1.1

这样的话,当在浏览器中键入web.bc.com或者mail.bc.com实际上都是访问1.1.1.1
这样有利于修改的时候可以只修改一条A记录就达成目的。
MX记录: Mail eXchanger,邮件交换器
记录是邮件交换记录,它指向一个邮件服务器,
用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器。

  bc.com.       IN          MX  10  mx1.bc.com.

这个一般用来设置个性邮箱名字才使用的
例如你的个性域名是user1@bc.com,实际上是交给了mx1.bc.com这个邮件服务器去处理。

搭建两个DNS服务器并配置主从复制

主机名 主机地址 角色
node1 192.168.2.201 主DNS服务器
node2 192.168.2.202 从DNS服务器

以上节点均关闭了iptables和selinux

一、修改配置文件:

1./etc/named.conf

这个配置文件用于设置全局配置

[root@node1 named]# vim /etc/named.conf

options {
        listen-on port 53 { 192.168.2.201;127.0.0.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; };

        dnssec-enable no;
        dnssec-validation no;
        #可以用于防止DNS毒化,但是需要购买证书。

}
#定义一个叫bc.com的域,也就是说这台DNS服务器可以解析这个域
#这里的file使用了相对路径,也就是需要在/var/named/bc.com.zone这个文件里面定义资源记录。

注意:
listen-on port 写成0.0.0.0并不能监听在全部网址的53号端口上.
往后的相对路径全部都是相对于directory而言的。

2./etc/named.rfc1912.zones

用于设置服务器可以解析的域

zone "bc.com" IN {
        type master;
        file "bc.com.zone";
};
3.定义资源记录
[root@node1 named]# vim /var/named/bc.com.zone 
$TTL 86400
$ORIGIN bc.com.
@       IN      SOA     ns1.bc.com.     admin.bc.com (
                        2016042201
                        1H
                        5M
                        7D
                        1D )

                IN      NS      ns1
                IN      NS      ns2
ns1     IN      A               192.168.2.201
ns2     IN      A               192.168.2.202
node1   IN      A               192.168.2.201
node1   IN      A               192.168.2.211
node1   IN      A               192.168.2.221
node2   IN      A               192.168.2.202
node2   IN      A               192.168.2.212
node2   IN      A               192.168.2.222
node3   IN      A               192.168.2.203
node3   IN      A               192.168.2.213
node3   IN      A               192.168.2.223
node4   IN      A               192.168.2.204
node4   IN      A               192.168.2.214
node4   IN      A               192.168.2.224
*               IN      A       192.168.2.201

检查脚本的语法错误(不检查逻辑上的错误)
 [root@node1 named]# named-checkconf

假如没有问题的话,不会有任何输出。
下面我们删除一个分号再运行一次检查错误。

 [root@node1 named]# named-checkconf
  /etc/named.conf:57: missing ';' before '}'
没有问题,就可以重启服务了。
[root@node1 named]# service named restart
Redirecting to /bin/systemctl restart  named.service

需要注意的是,DNS的包名叫做bind,服务器名字叫做named
所以yum install named或者yum install dns也是没有办法安装服务的。

二、测试能否解析域名
[root@node1 named]# dig -t A node1.bc.com @192.168.2.201

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -t A node1.bc.com @192.168.2.201
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12316
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 3

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

;; ANSWER SECTION:
node1.bc.com.       86400   IN  A   192.168.2.211
node1.bc.com.       86400   IN  A   192.168.2.221
node1.bc.com.       86400   IN  A   192.168.2.201

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

;; ADDITIONAL SECTION:
ns1.bc.com.     86400   IN  A   192.168.2.201
ns2.bc.com.     86400   IN  A   192.168.2.202

;; Query time: 0 msec
;; SERVER: 192.168.2.201#53(192.168.2.201)
;; WHEN: Wed Oct 05 03:20:59 EDT 2016
;; MSG SIZE  rcvd: 157
在输出结果中,我们需要关注的几个字段:
;; ANSWER SECTION:
node1.bc.com.       86400   IN  A   192.168.2.211
node1.bc.com.       86400   IN  A   192.168.2.221
node1.bc.com.       86400   IN  A   192.168.2.201

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

;; ADDITIONAL SECTION:
ns1.bc.com.     86400   IN  A   192.168.2.201
ns2.bc.com.     86400   IN  A   192.168.2.202
首先我们的命令是向192.168.2.201这台主机查询node1.bc.com这个域名的IP地址。
dig -t A node1.bc.com @192.168.2.201

;; ANSWER SECTION:指的就是答案,也就是说查找得到的A记录,也就是IP地址。
;; AUTHORITY SECTION:指的是,负责解析这个域的DNS服务器。
;; ADDITIONAL SECTION:指的是负责解析的服务器的A记录,也就是IP地址。

三、配置node2为从服务器
从服务器安装DNS服务的软件包
  [root@node2 ~]# yum install named -y
修改全局配置文件
[root@node2 ~]# vim /etc/named.conf 
options {
        listen-on port 53 { 192.168.2.202;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 yes;

        dnssec-enable no;
        dnssec-validation no;
}

修改区域配置文件
  [root@node2 ~]# vim /etc/named.rfc1912.zones 
  zone "bc.com" IN {
        type slave;
        masters { 192.168.2.201; };
        file "slaves/named.bc.com.zone";
  };
重启服务
  [root@node2 ~]# service named restart
  Redirecting to /bin/systemctl restart  named.service
查看监听端口是否开启
[root@node2 ~]# ss -tnlp
State       Recv-Q Send-Q    Local Address:Port      Peer Address:Port 
LISTEN      0      10        192.168.2.202:53          *:*              users:(("named",4689,21))
LISTEN      0      10        127.0.0.1:53              *:*              users:(("named",4689,20))
四、同步需要注意的几点

1.主从的时间必须同步,否则容易出错。
2.bind程序的版本应该保持一致;否则,应该从高主低;
3.dnssec功能的开启会影响查询。
4.主服务器一旦发生更改,主服务器会通知解析库中有NS记录的从服务器
5.防火墙徐璈开放53号端口的tcp和udp连接,UDP用于查询,TCP用于同步。
6.可以通过手动修改SOA记录中的序列号,手动+1,可以让主从同步。
也就是说,假如主从不同步,可以从这几个方面检查有没有设置好。

五、测试从服务器是否同步成功。
向node2查询node1.bc.com这个域名的A记录
[root@node1 named]# dig -t A node1.bc.com @192.168.2.202

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -t A node1.bc.com @192.168.2.202
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47173
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 3

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

;; ANSWER SECTION:
node1.bc.com.       86400   IN  A   192.168.2.221
node1.bc.com.       86400   IN  A   192.168.2.211
node1.bc.com.       86400   IN  A   192.168.2.201

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

;; ADDITIONAL SECTION:
ns1.bc.com.     86400   IN  A   192.168.2.201
ns2.bc.com.     86400   IN  A   192.168.2.202

;; Query time: 1 msec
;; SERVER: 192.168.2.202#53(192.168.2.202)
;; WHEN: Fri Dec 30 14:37:18 CST 2016
;; MSG SIZE  rcvd: 157

成功向node2这个DNS服务器查找到node1的A记录。
因为从服务器只配置了一个zone,资源记录是空的。
如果没有从master同步到资源记录,是解析不了的。

查看node2是否同步到记录
[root@node2 ~]# vim  /var/named/slaves/named.bc.com.zone 

^@^@^@^B^@^@^@^AXeþ<86>^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@S^@^A^@^F^@^@^@^AQ<80>^@^@^@^A^@^H^Bbc^Ccom^@^@5^Cns1^Bbc^Ccom^@^Eadmin^Bbc^Ccom^Bbc^Ccom^@x+<95>u^@^@^N^P^@^@^A,^@        :<80>^@^AQ<80>^@^@^@8^@^A^@^B^@^@^@^AQ<80>^@^@^@^B^@^H^Bbc^Ccom^@^@^L^Cns1^Bbc^Ccom^@^@^L^Cns2^Bbc^Ccom^@^@^@^@$^@^A^@^A^@^@^@^AQ<80>^@^@^@^A^@
^A*^Bbc^Ccom^@^@^DÀ¨^BÉ^@^@^@4^@^A^@^A^@^@^@^AQ<80>^@^@^@^C^@^N^Enode1^Bbc^Ccom^@^@^DÀ¨^BÉ^@^DÀ¨^BÓ^@^DÀ¨^BÝ^@^@^@4^@^A^@^A^@^@^@^AQ<80>^@^@^@^C^@^N^Enode2^Bbc^Ccom^@^@^DÀ¨^BÊ^@^DÀ¨^BÔ^@^DÀ¨^BÞ^@^@^@4^@^A^@^A^@^@^@^AQ<80>^@^@^@^C^@^N^Enode3^Bbc^Ccom^@^@^DÀ¨^BË^@^DÀ¨^BÕ^@^DÀ¨^Bß^@^@^@4^@^A^@^A^@^@^@^AQ<80>^@^@^@^C^@^N^Enode4^Bbc^Ccom^@^@^DÀ¨^BÌ^@^DÀ¨^BÖ^@^DÀ¨^Bà^@^@^@&^@^A^@^A^@^@^@^AQ<80>^@^@^@^A^@^L^Cns1^Bbc^Ccom^@^@^DÀ¨^BÉ^@^@^@&^@^A^@^A^@^@^@^AQ<80>^@^@^@^A^@^L^Cns2^Bbc^Ccom^@^@^DÀ¨^BÊ

`如果不想是乱码,zone可以定义成这样。
zone "bc.com" IN {
        type slave;
        masters { 192.168.2.201; };
        masterfile-format text; 
        file "slaves/named.bc.com.zone";
};
同步而来的slave文件,显得十分规范。
[root@node2 ~]# cat /var/named/slaves/named.bc.com.zone

$ORIGIN .
$TTL 86400      ; 1 day
bc.com                  IN SOA  ns1.bc.com. admin.bc.com.bc.com. (
                                2016122230 ; serial
                                3600       ; refresh (1 hour)
                                300        ; retry (5 minutes)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )
                        NS      ns1.bc.com.
                        NS      ns2.bc.com.
$ORIGIN bc.com.
*                       A       192.168.2.201
node1                   A       192.168.2.201
                        A       192.168.2.211
                        A       192.168.2.221
node2                   A       192.168.2.202
                        A       192.168.2.212
                        A       192.168.2.222
node3                   A       192.168.2.203
                        A       192.168.2.213
                        A       192.168.2.223
node4                   A       192.168.2.204
                        A       192.168.2.214
                        A       192.168.2.224
ns1                     A       192.168.2.201
ns2                     A       192.168.2.202

这样、我们就配置出一个简单的DNS主从服务器了。
由于篇幅的原因,下一次我们会将域名服务器的子域授权以及智能解析

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

推荐阅读更多精彩内容

  • DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能...
    一直在努力hard阅读 4,642评论 3 19
  • 1. 概述 在网络环境中一般用户只需要在浏览器中输入url如www.sunny.com就可以到对应服务器获取相应的...
    ghbsunny阅读 2,897评论 0 7
  • 目录: 一些基本概念主机名DNS名称解析DNS 解析的后端存储名称解析总结 大规模域名解析的体系架构DNS 解析需...
    C86guli阅读 12,500评论 3 34
  • 如今的我,也算是半个社会人了,毕竟学校的课程寥寥无几,大多数时间都是在为工作而忙碌。 第一次 2016年下半年...
    轻熟阶段阅读 375评论 0 0
  • 这是一个始于校园的故事,非腐勿看~
    爱生活爱瑜洲阅读 205评论 0 0