Linux 搭建 DNS 服务器

文章
林里克斯

DNS(Domain Name System–域名系统),很多环境是需要内网通信的,全用 IP 有时候机器过多不好记。在没有内网 DNS 的情况,也可以使用 /etc/hosts(Linux),来实现。Windows 也可以

实验平台:CentOS 7.7.1908



一、DNS 相关介绍


1.DNS 服务器的类型

  • 主 DNS 服务器

这些服务器上存放了特定域名的配置文件,并且基于此权威地规定了特定域名的地址。主 DNS 服务器知道全部在它管辖范围的主机和子域名的地址。

  • 辅助 DNS 服务器

这些服务器作为主 DNS 服务器的备份,也承担一定负载。主服务器知道辅助 DNS 服务器的存在,并且会向他们推送更新。

  • 缓存 DNS 服务器

这些服务器上不存放特定域名的配置文件。当客户端请求缓存服务器来解析域名时,该服务器将首先检查其本地缓存。如果找不到匹配项便会询问主服务器。接着这条响应将被缓存起来。也可以轻松地将自己的系统用作缓存服务器。

2.DNS 名词解释

  • 域和域名

DNS 树的每个节点代表一个域,通过这些节点,对整个域名空间进行划分,成为一个层次结构.

域名空间的每个域的名字,通过域名进行表示.

域名:通常由一个完全合格域名(FQDN)标识. FQDN 能准确表示出其相对于 DNS 域树根的位置,也就是节点到 DNS 树根的完整表述方式,从节点到树根采用反向书写,并将每个节点用 “.” 分隔,对于 DNSgoogle 来说,其完全正式域名(FQDN)google.com.

eg:googlecom 域的子域,其表示方法为 google.com,而 wwwgoogle 域中的子域,可以使用www.google.com 表示

注意:通常,FQDN 有严格的命名限制,长度不能超过 256 字节,只允许使用字符 a-z,0-9,A-Z 和减号 (-).点号(.)只允许在域名标志之间(例如“ google.com ”)或者 FQDN 的结尾使用.

域名不区分大小.由最顶层到下层,可以分成:根域、顶级域、二级域、子域.
Internet 域名空间的最顶层是根域(root),其记录着 Internet 的重要 DNS 信息,由 Internet 域名注册授权机构管理,该机构把域名空间各部分的管理责任分配给连接到 Internet 的各个组织.

  • 全球有 13 个根 (root) 服务器

DNS 根域下面是顶级域,也由 Internet 域名注册授权机构管理.共有 3 种类型的顶级域.

  • 组织域

采用 3 个字符的代号,表示 DNS 域中所包含的组织的主要功能或活动.比如 com 为商业机构组织, edu 为教育机构组织, gov 为政府机构组织, mil 为军事机构组织, net 为网络机构组织, org 为非营利机构组织, int 为国际机构组织.

  • 地址域

采用两个字符的国家或地区代号.如 cn 为中国, kr 为韩国, us 为美国.

  • 反向域

这是个特殊域,名字为 in-addr.arpa,用于将 IP 地址映射到名字(反向查询).

对于顶级域的下级域,Internet 域名注册授权机构授权给 Internet 的各种组织.当一个组织获得了对域名空间某一部分的授权后,该组织就负责命名所分配的域及其子域,包括域中的计算机和其他设备,并管理分配域中主机名与 IP 地址的映射信息.

  • 区(Zone)

区是 DNS 名称空间的一部分,其包含了一组存储在 DNS 服务器上的资源记录.

使用区的概念, DNS 服务器回答关于自己区中主机的查询,每个区都有自己的授权服务器.

  • DNS两种查询方式

  • 递归查询

递归查询是一种 DNS 服务器的查询模式,在该模式下 DNS 服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机.如果 DNS 服务器本地没有存储查询 DNS 信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机.

  • 迭代查询

DNS 服务器另外一种查询方式为迭代查询,当客户机发送查询请求时,DNS 服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台 DNS 服务器提交请求,依次循环直到返回查询的结果为止


二、安装 DNS


1.yum 安装

$ yum -y install bind

2.DNS 相关配置文件

/etc/named.conf:        #主配置文件
/var/named/named.ca:        #根域名配置服务器指向文件
/var/named/named.loopback: #localhost区反向解析文件
/var/named/named.localhost:#localhost区正向解析文件
/etc/named.rfc1912.zones:  #区块设置文件
/var/named/named.ca:        #根域名配置服务器指向文件

3.启动

$ systemctl enable named.service 
#设置开机自启
$ systemctl start named
手动启动

4.配置 DNS 服务器

$ vim /etc/named.conf 

options {
        listen-on port 53 { any; }; #表示监听这台系统上面那个网络接口,默认是localhost,即只有本机可以对DNS服务进行查询
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";   #定义 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";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { any; };       #表示允许哪些主机查询,改成any表示所有
    #将监听地址和运行查询的地址都改为 any,分别表示服务器上的所有IP地址均可提供DNS域名解析服务,以及允许所有人对本服务器发送DNS查询请求。

        recursion yes;      #表示是否允许递归查询

        forward first;                   #这个配置后,当客户端采用我们自己配置的内网 DNS 的 NS 服务器后,当访问别的网站,内网 NS 解析不了的就转发给 8.8.8.8 等的 DNS 服务器解析,保证能正常上网。
        forwarders {
            223.5.5.5;             #阿里云的DNS服务器
            223.6.6.6;
            8.8.8.8;
            8.8.4.4;
          };
        };

        dnssec-enable yes;
        dnssec-validation yes;

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

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

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;       #指定区域类型
        file "named.ca"; #区域文件,需要手动创建。范例文件为named.localhost
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

5.编辑修改区域配置文件

$ vim /etc/named.rfc1912.zones

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

$ cp -rp /var/named/named.localhost /var/named/baidu.com.zone
#复制一份正向解析的模板文件
$ vim /var/named/baidu.com.zone

$TTL 1D     #设置有效地址解析记录的默认缓存时间,默认为1天
baidu.com.       IN SOA  www.baidu.com. root.baidu.com. (
#baidu.com.也可以使用@,表示当前的域
#www.baidu.com.该域的主域名
#root.baidu.com.管理员邮件地址
                                        0       ; serial
#更新序列号,用于标示数据库的变换,可以在10位以内。如果存在辅助DNS区域,建议每次更新完数据库,手动加1
                                        1D      ; refresh
#刷新时间,从域名服务器更新该地址数据库文件的间隔时间,默认为1天
                                        1H      ; retry
#重试延时,从域名服务器更新地址数据库失败后,等待多长时间,默认为1小时
                                        1W      ; expire
#到期失效时间,超过改时间人无法更新地址数据库,那么不再尝试,默认为1周
                                        3H )    ; minimum
#无效地址解析记录默认缓存时间(该数据库中不存在的地址),默认为3小时
@   IN  NS  ns.baidu.com.
ns  IN  A   169.0.0.254
www IN  A   10.10.12.4
test    IN  A   10.10.12.2
cname   IN  CNAME   test.baidu.com.

6.验证修改

$ named-checkconf 
#检查conf文件是否有错误
$ named-checkzone baidu.com /var/named/baidu.com.zone 
#检查zone文件是否有错误
zone baidu.com/IN: loaded serial 0
OK

7.重启服务验证

$ systemctl restart named
或
$ rndc reload
#重载配置文件

三、验证


$ vim /etc/resolv.conf

nameserver 10.10.12.4
在测试机上配置 DNS 服务器

$ ping www.baidu.com
PING www.baidu.com (10.10.12.4) 56(84) bytes of data.
64 bytes from 10.10.12.4 (10.10.12.4): icmp_seq=1 ttl=64 time=0.290 ms
^C

$ ping test.baidu.com
PING test.baidu.com (10.10.12.2) 56(84) bytes of data.
64 bytes from gateway (10.10.12.2): icmp_seq=1 ttl=128 time=0.295 ms
^C

$ ping cname.baidu.com
PING test.baidu.com (10.10.12.2) 56(84) bytes of data.
64 bytes from gateway (10.10.12.2): icmp_seq=1 ttl=128 time=0.089 ms

$ nslookup test.baidu.com
Server:     10.10.12.4
Address:    10.10.12.4#53

Name:   test.baidu.com
Address: 10.10.12.2

$ dig baidu.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57548
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

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

;; AUTHORITY SECTION:
baidu.com.      10800   IN  SOA ns.baidu.com. root.baidu.com. 0 86400 3600 604800 10800

;; Query time: 0 msec
;; SERVER: 10.10.12.4#53(10.10.12.4)
;; WHEN: Wed Aug 05 09:39:42 CST 2020
;; MSG SIZE  rcvd: 82

$ dig www.baidu.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63477
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

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

;; ANSWER SECTION:
www.baidu.com.      86400   IN  A   10.10.12.4

;; AUTHORITY SECTION:
baidu.com.      86400   IN  NS  ns.baidu.com.

;; ADDITIONAL SECTION:
ns.baidu.com.       86400   IN  A   169.0.0.254

;; Query time: 0 msec
;; SERVER: 10.10.12.4#53(10.10.12.4)
;; WHEN: Wed Aug 05 09:39:50 CST 2020
;; MSG SIZE  rcvd: 91

$ dig cname.baidu.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> cname.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59609
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2

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

;; ANSWER SECTION:
cname.baidu.com.    86400   IN  CNAME   test.baidu.com.
test.baidu.com.     86400   IN  A   10.10.12.2

;; AUTHORITY SECTION:
baidu.com.      86400   IN  NS  ns.baidu.com.

;; ADDITIONAL SECTION:
ns.baidu.com.       86400   IN  A   169.0.0.254

;; Query time: 0 msec
;; SERVER: 10.10.12.4#53(10.10.12.4)
;; WHEN: Wed Aug 05 09:40:06 CST 2020
;; MSG SIZE  rcvd: 112

四、反向解析


反向解析是把 IP 地址解析成域名格式,因此在定义 zone(区域) 时应该要把IP地址反写,比如原来是 10.10.12.4,反写后应该就是 4.12.10.10,而且只需写出 IP 地址的网络位即可

1.定义区域文件

$ vim /etc/named.rfc1912.zones

zone "12.10.10.in-addr.arpa" IN {
        type master;
        file "10.10.12.zone";
};

2.使用原有模板

$ cp -rp /var/named/named.loopback /var/named/10.10.12.zone

3.编辑区域文件

$ vim /var/named/10.10.12.zone

$TTL 1D
@       IN SOA  ns.baidu.com. root.baidu.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN      NS      ns.baidu.com.
2       IN      PTR     test.baidu.com.
254     IN      PTR     ns.baidu.com.
4       IN      PTR     www.baidu.com.

4.测试配置文件是否有误

$ named-checkconf
$ named-checkzone 10.10.12.zone /var/named/10.10.12.zone

5.重启服务

$ systemctl restart named
或
$ rndc reload
#重载配置文件

6.验证

$ dig -x 10.10.12.2

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> -x 10.10.12.2
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47269
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;2.12.10.10.in-addr.arpa.   IN  PTR

;; ANSWER SECTION:
2.12.10.10.in-addr.arpa. 86400  IN  PTR test.baidu.com.

;; AUTHORITY SECTION:
12.10.10.in-addr.arpa.  86400   IN  NS  ns.baidu.com.

;; ADDITIONAL SECTION:
ns.baidu.com.       86400   IN  A   169.0.0.254

;; Query time: 0 msec
;; SERVER: 10.10.12.4#53(10.10.12.4)
;; WHEN: Mon Aug 10 01:59:38 CST 2020
;; MSG SIZE  rcvd: 113

五、DNS 主从搭建


主从服务器好处是起到备份解析记录与负载均衡的作用,因此通过部署从服务器可以减轻主服务器的负载压力,还可以提升用户的查询效率

1.在从节点上安装 DNS 服务

$ yum -y install bind
$ systemctl enable named
$ systemctl start named

2.编辑主节点域文件

$ vim /etc/named.rfc1912.zones

zone "baidu.com" IN {
        type master;
        file "baidu.com.zone";
        notify yes;    #开启通告,有更新就会通告给从节点
        also-notify { 10.10.12.5; };       #主动通知从域名服务器进行更新
        allow-transfer { 10.10.12.5; };    #指定从节点 10.10.12.5 可以复制域文件
};

3.定义从节点域文件

$ vim /etc/named.rfc1912.zones

zone "baidu.com" IN {
        type slave;
        file "slave/baidu.com.zone";
        masters { 10.10.12.4; };
        allow-notify { 10.10.12.4; };  #定义了一个匹配列表并且只应用于从dns区域(slave zone)
};

zone "12.10.10.in-addr.arpa" IN {
        typre slave;
        file "slave/10.10.12.zone";
        masters { 10.10.12.4; };
        allow-notify { 10.10.12.4; };
};

4..重启从节点 DNS 服务器

$ systemctl restart named
会主动去 主节点上拉去对应的 域文件
$ ls -l /var/named/slaves/
total 8
-rw-r--r-- 1 named named 366 Aug 10 03:47 10.10.12.zone
-rw-r--r-- 1 named named 390 Aug 10 03:39 baidu.com.zone

5.验证测试

在主节点添加个记录
$ vim baidu.com.zone

$TTL 1D
baidu.com.      IN SOA  ns.baidu.com. root.baidu.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN      NS      ns.baidu.com.
@       IN      NS      ns2.baidu.com.
ns      IN      A       169.0.0.254
ns2     IN      A       169.0.0.253
www     IN      A       10.10.12.4
test    IN      A       10.10.12.2
ftp     IN      A       10.10.12.254
cname   IN      CNAME   test.baidu.com.

$ ping ftp.baidu.com
PING ftp.baidu.com (10.10.12.254) 56(84) bytes of data.

Over ~

版权协议须知!

本篇文章来源于 Uambiguous ,如本文章侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意

692 0 2020-08-05


分享:
icon_mrgreen.gificon_neutral.gificon_twisted.gificon_arrow.gificon_eek.gificon_smile.gificon_confused.gificon_cool.gificon_evil.gificon_biggrin.gificon_idea.gificon_redface.gificon_razz.gificon_rolleyes.gificon_wink.gificon_cry.gificon_surprised.gificon_lol.gificon_mad.gificon_sad.gificon_exclaim.gificon_question.gif
博主卡片
林里克斯 博主大人
一个致力于Linux的运维平台
运维时间
搭建这个平台,只为分享及记载自己所遇之事和难题。

现在时间 2024-05-19

今日天气
站点统计
  • 文章总数:240篇
  • 分类总数:29个
  • 评论总数:10条
  • 本站总访问量 223101 次

@奥奥

@Wong arrhenius 牛比

@MakerFace 厉害了!