阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

DNS域名解析服务器

210次阅读
没有评论

共计 8772 个字符,预计需要花费 22 分钟才能阅读完成。

为什么需要 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 主从服务器了。
由于篇幅的原因,域名服务器的 子域授权 以及 智能解析 见 http://www.linuxidc.com/Linux/2017-10/147595.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147596.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计8772字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中