Linux进阶学习笔记之——主机名控制者:DNS服务器

DNS服务器

1、用网络主机名取得IP的历史渊源

1.1、单一文件处理上网的年代:/etc/hosts

利用某些特定的文件将主机名与IP地址做一个对应,如此一来,我们就可以通过主机名来取得该主机的IP了。这个文件就是:/etc/hosts

缺点:主机名与IP的对应无法自动在所有的计算机内更新,且要将主机名加入该文件仅能向INTERNIC注册,若IP数量太多,该文件会过大,也就更不利于其他主句同步化了

在私有网络内部,最好将所有的私有IP与主机名对应都写入这个文件中

1.2、分布式、阶层式主机名管理架构:DNS系统

DNS是一种因特网的通信协议,至于BIND则是提供这个DNS服务的软件。

[root@server ~]# yum install bind -y

1.3、完整主机名:Fully Qualified Domain Name(FQDN)

主机名+域名=完整主机名


2、DNS的主机名对应IP的查询流程

2.1、DNS的架构与查询流程

见计算机网络应用层——DNS系统

可以使用dig命令,使用追踪功能(+trace)分析每个查询阶段的DNS服务器:

[root@server ~]# yum install bind-utils -y
[root@server ~]# dig +trace www.baidu.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> +trace www.baidu.com
;; global options: +cmd
.                       156586  IN      NS      l.root-servers.net.
.                       156586  IN      NS      d.root-servers.net.
.                       156586  IN      NS      c.root-servers.net.
.                       156586  IN      NS      i.root-servers.net.
.                       156586  IN      NS      a.root-servers.net.
.                       156586  IN      NS      e.root-servers.net.
.                       156586  IN      NS      f.root-servers.net.
.                       156586  IN      NS      k.root-servers.net.
.                       156586  IN      NS      m.root-servers.net.
.                       156586  IN      NS      j.root-servers.net.
.                       156586  IN      NS      b.root-servers.net.
.                       156586  IN      NS      h.root-servers.net.
.                       156586  IN      NS      g.root-servers.net.
.                       518400  IN      RRSIG   NS 8 0 518400 20200805170000 20200723160000 46594 . 
#上面的在跟踪.的服务器
;; Received 525 bytes from 10.0.0.1#53(10.0.0.1) in 19 ms

com.                    172800  IN      NS      a.gtld-servers.net.
com.                    172800  IN      NS      b.gtld-servers.net.
com.                    172800  IN      NS      c.gtld-servers.net.
com.                    172800  IN      NS      d.gtld-servers.net.
com.                    172800  IN      NS      e.gtld-servers.net.
com.                    172800  IN      NS      f.gtld-servers.net.
com.                    172800  IN      NS      g.gtld-servers.net.
com.                    172800  IN      NS      h.gtld-servers.net.
com.                    172800  IN      NS      i.gtld-servers.net.
com.                    172800  IN      NS      j.gtld-servers.net.
com.                    172800  IN      NS      k.gtld-servers.net.
com.                    172800  IN      NS      l.gtld-servers.net.
com.                    172800  IN      NS      m.gtld-servers.net.
com.                    86400   IN      DS      30909 8 2 
;; Received 1173 bytes from 198.97.190.53#53(h.root-servers.net) in 112 ms

baidu.com.              172800  IN      NS      ns2.baidu.com.
baidu.com.              172800  IN      NS      ns3.baidu.com.
baidu.com.              172800  IN      NS      ns4.baidu.com.
baidu.com.              172800  IN      NS      ns1.baidu.com.
baidu.com.              172800  IN      NS      ns7.baidu.com.
#追踪baidu.com服务器
;; Received 761 bytes from 192.52.178.30#53(k.gtld-servers.net) in 375 ms

www.baidu.com.          1200    IN      CNAME   www.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns3.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns5.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns1.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns2.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns4.a.shifen.com.
;; Received 239 bytes from 14.215.178.80#53(ns4.baidu.com) in 31 ms

2.2、DNS使用的port number

使用的是53这个端口。可以查看**/etc/services**这个文件。

通常DNS是以UDP这个较快的数据传输协议来查询的,但是万一没有办法查询到完整的信息时,就会再次以TCP这个协议来重新查询。

[root@server ~]# cat /etc/services | grep domain
domain          53/tcp                          # name-domain server
domain          53/udp

2.3、合法DNS的关键:申请区域查询授权

2.3.1、向上层区域注册取得合法的区域查询授权

申请一个合法的主机名就需要注册,那么注册取得的数据就有两种:一种是FQDN,一种是申请区域查询权。总之,要让你的主机名对应IP且让其他计算机都可以查询到,有两种方式:

  1. 上层DNS授权区域查询权,让你自己设置DNS服务器;这时,所有的主机名信息都以自己为准,与上层无关。
  2. 直接请上层DNS服务器来帮你设置主机名对应。这时,详细的设置数据由ISP搞定,即域名代管。

2.4、DNS数据库的记录:正解、反解、Zone的意义

DNS服务器里记录的数据成为数据库,而在数据库里面针对每个要解析的域,就称为区域(Zone)。

  • 从主机名查询到IP的流程:正解
  • 从IP查询到主机名的流程:反解
  • 不管是正解还是反解,每个域的记录就是一个区域(Zone)
2.4.1、正解的设置权以及DNS正解Zone记录的标志

那谁可以申请正解的DNS服务器架设权呢?答案是,都可以。正解的域名只需要符合INTERNIC和ISP规范即可只要该域没有人使用,那谁先抢到,就能够使用。通常正解的Zone具有以下几种标志:

  • SOA:就是开始验证(Start of Authority)的缩写;
  • NS:就是名称服务器(Name Server)的缩写,后面记录的数据是DNS服务器的意义
  • A:就是地址(Address)的缩写,后面记录的是IP的对应(很重要)
2.4.2、反解的设置权以及DNS反解Zone记录的标志

若有反解需求,就需要你向你的直属上层ISP申请才行。那么反击的Zone主要记录的信息有哪些呢?除了服务器必备的NS和SOA外,最重要的就是:

  • PTR:就是指向(PointTeR)的缩写,后面记录的数据就是反解到主机名
2.4.3、每台DNS都需要的正解:hint

有没有哪个Zone是特别重要的?有的,那就是.。从DNS查询流程来说**,当DNS服务器在自己的数据库找不到所需的数据时,一定会去找.**。这个记录.的Zone的类型,就被称为hint类型。所以,一台简单的正解DNS服务器,基本上就要两个Zone才行,一个是hint,一个是关于自己的域的正解Zone

2.5、DNS数据库类型:hint、Master/Slave架构

为了解决不同DNS服务器上面的数据同步问题,因此在.(root)这个hint类型的数据库文件外,还有两种基本类型,分别是Master数据库和Slave数据库类型

2.5.1、Master

这种类型的DNS数据库中,里边的所有主机名对应关系信息等,全部要管理员自己动手去修改与设置,设置完成后还需要重新启动DNS去读取正确的数据库内容,才算完成数据库更新

2.2.2、Slave

Slave从Master那取得数据库内容。同步更新。


3、Client端的设置

3.1、相关配置文件

相关配置文件说明
/etc/hosts最早的Hostname对应IP的文件
/etc/resolv.conf就是ISP的DNS服务器IP记录处
/etc/nsswitch.conf决定先要使用/etc/hosts还是/etc/resolv.conf的设置

一般而言,Linux的默认主机名与IP的对应关系都以/etc/hosts为优先:

[root@client ~]# cat /etc/nsswitch.conf | grep ^hosts
hosts:      files dns myhostname
#files:就是/etc/hosts
#dns:就是/etc/resolv.conf
#myhostname:就是本地解析
[root@client ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search lan
nameserver 10.0.0.1

3.2、DNS的正解、反解查询命令

3.2.1、dig命令
[root@client ~]# dig [options] FQDN [@server]
选项与参数:
@server:如果不以/etc/resolv.conf的设置来作为DNS的查询,可在此填入其他IP
options:
	+trace:就是从.开始追踪
	-t type:查询的数据主要有MX、NS、SOA等类型
	-x:查询反解信息,非常重要的项目
#使用默认值查询server.lan(服务器)
[root@client ~]# dig server.lan

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

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:		<==提出问题的部分
;server.lan.                    IN      A

;; ANSWER SECTION:			<==主要的回答阶段
server.lan.             0       IN      A       10.0.0.185

;; Query time: 0 msec
;; SERVER: 10.0.0.1#53(10.0.0.1)
;; WHEN: 五 7月 24 10:13:40 CST 2020
;; MSG SIZE  rcvd: 55

#查询server.lan的SOA信息
[root@client ~]# dig -t SOA server.lan

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> -t SOA server.lan
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7207
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;server.lan.                    IN      SOA

;; Query time: 0 msec
;; SERVER: 10.0.0.1#53(10.0.0.1)
;; WHEN: 五 7月 24 10:18:45 CST 2020
;; MSG SIZE  rcvd: 28

#反解信息
[root@client ~]# dig -x 58.87.106.144

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> -x 58.87.106.144
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 22491
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

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

;; AUTHORITY SECTION:
58.in-addr.arpa.        60      IN      SOA     ns.apnic.net. read-txt-record-of-zone-first-dns-admin.apnic.net. 3006094729 7200 1800 604800 3600

;; Query time: 325 msec
;; SERVER: 10.0.0.1#53(10.0.0.1)
;; WHEN: 五 7月 24 10:21:19 CST 2020
;; MSG SIZE  rcvd: 143
3.2.2、查询域管理者相关信息:whois
[root@client ~]# yum install whois -y
[root@client ~]# whois [domianname]
[root@client ~]# whois csdn.net
   Domain Name: CSDN.NET
   Registry Domain ID: 4252779_DOMAIN_NET-VRSN
   Registrar WHOIS Server: grs-whois.hichina.com
   Registrar URL: http://www.net.cn
   Updated Date: 2020-05-13T09:06:10Z
   Creation Date: 1999-03-11T05:00:00Z
   Registry Expiry Date: 2022-03-11T04:00:00Z
   Registrar: Alibaba Cloud Computing (Beijing) Co., Ltd.
   Registrar IANA ID: 420
   Registrar Abuse Contact Email: DomainAbuse@service.aliyun.com
   Registrar Abuse Contact Phone: +86.95187
   Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
   Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
   Name Server: VIP3.ALIDNS.COM
   Name Server: VIP4.ALIDNS.COM
...

4、DNS服务器的软件、种类与Caching only DNS服务器设置

4.1、搭建DNS服务器所需要的软件

[root@server ~]# yum install bind-chroot bind -y
[root@server ~]# rpm -qa | grep '^bind'
bind-libs-lite-9.11.4-16.P2.el7_8.6.x86_64		
bind-export-libs-9.11.4-16.P2.el7.x86_64		
bind-chroot-9.11.4-16.P2.el7_8.6.x86_64			《==将bind主程序关在家里边!
bind-license-9.11.4-16.P2.el7_8.6.noarch	
bind-libs-9.11.4-16.P2.el7_8.6.x86_64			<==与命令有关的函数库
bind-9.11.4-16.P2.el7_8.6.x86_64				<==主程序所需要的软件
bind-utils-9.11.4-16.P2.el7_8.6.x86_64			<==相关命令

我们将某个目录指定为BIND程序的根目录,由于已经是根目录,所以BIND便不能离开该目录,**默认的根目录是/var/named/chroot/**目录。

4.2、BIND的默认路径设置与chroot

要有两个重要数据要处理:

  • BIND本身的配置文件:主要规范主机设置、zone file的所在、权限等问题
  • 正反解数据库文件(zone file):记录主机名与IP的对应等

BIND的配置文件为/etc/named.conf,在这个文件里可以规范zone file的完整文件名。也就是说,zone file其实是由/etc/named.conf所指定的,多以zone file文件名可以随便取了,只要/etc/named.conf内规范为正确即可。

文件说明
/etc/named.conf主配置文件
/etc/sysconfig/named是否启动chroot及额外的参数,就由这个文件控制
/var/named/数据库文件默认放置在这个目录
/var/run/namednamed这支程序执行时默认放置pid-file在此目录内

4.3、单纯的cache-only DNS服务器与forwarding功能

有个只需要.这个zone file的简单DNS服务器,我们称这种没有自己公开的DNS数据库的服务器为cache-only(唯高速缓存)DNS Server。顾名思义,这个DNS Server只有缓存搜索结果的功能,也就是说,它本身并没有主机名与IP正反解的配置文件,完全是由对外的查询结果来提供它的数据源。通常,搭建cache-only DNS服务器大都是为了系统安全。

那如果连.都不想要呢?那就需要指定一个上层DNS服务器作为forwarding(转发)目标,将原本自己要往.查询的任务,丢给上层DNS服务器去处理即可

4.4、实际设置cache-only DNS Server

4.4.1、编辑主要配置文件/etc/named.conf

设置这个文件的时候请注意:

  • 注释数据是放置在两条斜线“//”后面的数据
  • 每个段落之后都需要以分号“;”来结尾
[root@server ~]# cp /etc/named.conf /etc/named.conf.raw
[root@server ~]# vim /etc/named.conf
options {
        listen-on port 53 { any; };
        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";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { any; };
        forward only;
        forwarders{
                127.0.0.1;
                10.0.0.1;
        };
};

在/etc/named.conf的结构中,与服务器环境有关的是由options这个项目内容设置的,因为options里面还有很多的子参数,所以就以大括号{}括起来。至于options内的子参数比较重要的项目如下:

options内比较重要的子参数说明
listen-on port 53 { any; };默认监听的是localhost,意思是只有本机可以对DNS服务进行查询。需要改成any
directory “/var/named”;如果此文件下面有规范的正反解的zone file文件,该文件名默认应该存储在哪个目录下面。由于chroot的关系,最终这些数据库文件会被主动链接到/var/named/chroot/var/named/这个目录
dump-file、statistics-file、memstatistics-file统计信息
allow-query { any; };针对客户端的设置,表示到底谁可以对我的DNS服务提出查询请求的意思。原本只对localhost开放,改成对所有用户开放
forward only;即使有.这个zone file这个设置,也不会使用.的数据,只会交给上层DNS服务器而已,是cache-only最常见的设置
forwarders{114.114.114.114;223.5.5.5};既然有forward only,那么到底要对哪台上层DNS服务器进行转递呢?这里面就设置转递的DNS服务器
4.4.2、启动named并查看端口
[root@server ~]# systemctl start named
[root@server ~]# systemctl enable named
[root@server ~]# netstat -tulnp | grep named
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      14760/named        
tcp        0      0 172.16.0.1:53           0.0.0.0:*               LISTEN      14760/named        
tcp        0      0 10.0.0.185:53           0.0.0.0:*               LISTEN      14760/named        
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      14760/named        
tcp6       0      0 ::1:953                 :::*                    LISTEN      14760/named        
tcp6       0      0 ::1:53                  :::*                    LISTEN      14760/named        
udp        0      0 172.16.0.1:53           0.0.0.0:*                           14760/named        
udp        0      0 10.0.0.185:53           0.0.0.0:*                           14760/named        
udp        0      0 127.0.0.1:53            0.0.0.0:*                           14760/named        
udp6       0      0 ::1:53                  :::*                                14760/named      

DNS会启动端口TCP和UDP的53端口来监控,而且是针对所有的接口的。还会开启一个953端口针对本地,其实那是named的远程控制功能,称为远程名称解析服务控制功能(RNDC)。

4.4.3、检查/var/log/messages的日志信息(极其重要)

named的记录文件就直接放在/var/log/messages中:

[root@server ~]# tail -n 30 /var/log/messages
Jul 24 17:34:12 server named[14760]: GeoIP Org (type 5) DB not available
Jul 24 17:34:12 server named[14760]: GeoIP AS (type 9) DB not available
Jul 24 17:34:12 server named[14760]: GeoIP Domain (type 11) DB not available
Jul 24 17:34:12 server named[14760]: GeoIP NetSpeed (type 10) DB not available
Jul 24 17:34:12 server named[14760]: using default UDP/IPv4 port range: [32768, 60999]
Jul 24 17:34:12 server named[14760]: using default UDP/IPv6 port range: [32768, 60999]
Jul 24 17:34:12 server named[14760]: listening on IPv4 interface lo, 127.0.0.1#53
Jul 24 17:34:12 server named[14760]: listening on IPv4 interface ens33, 10.0.0.185#53
Jul 24 17:34:12 server named[14760]: listening on IPv4 interface ens33.0, 172.16.0.1#53
Jul 24 17:34:12 server named[14760]: listening on IPv6 interface lo, ::1#53
Jul 24 17:34:12 server named[14760]: generating session key for dynamic DNS
Jul 24 17:34:12 server named[14760]: sizing zone task pool based on 6 zones
Jul 24 17:34:12 server named[14760]: none:104: 'max-cache-size 90%' - setting to 875MB (out of 972MB)
Jul 24 17:34:12 server named[14760]: set up managed keys zone for view _default, file '/var/named/dynamic/managed-keys.bind'
Jul 24 17:34:12 server named[14760]: none:104: 'max-cache-size 90%' - setting to 875MB (out of 972MB)
Jul 24 17:34:12 server named[14760]: configuring command channel from '/etc/rndc.key'
Jul 24 17:34:12 server named[14760]: command channel listening on 127.0.0.1#953
Jul 24 17:34:12 server named[14760]: configuring command channel from '/etc/rndc.key'
Jul 24 17:34:12 server named[14760]: command channel listening on ::1#953
Jul 24 17:34:12 server named[14760]: managed-keys-zone: loaded serial 0
Jul 24 17:34:12 server named[14760]: zone 0.in-addr.arpa/IN: loaded serial 0
Jul 24 17:34:12 server named[14760]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
Jul 24 17:34:12 server named[14760]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
Jul 24 17:34:12 server named[14760]: zone localhost.localdomain/IN: loaded serial 0
Jul 24 17:34:12 server named[14760]: zone localhost/IN: loaded serial 0
Jul 24 17:34:12 server named[14760]: all zones loaded
Jul 24 17:34:12 server named[14760]: running
Jul 24 17:34:12 server systemd: Started Berkeley Internet Name Domain (DNS).
Jul 24 17:34:12 server named[14760]: managed-keys-zone: Unable to fetch DNSKEY set '.': ncache nxrrset
Jul 24 17:42:17 server systemd: Reloading.

即使port 53已经启动,但有可能DNS服务是错误的,每次重启DNS,请务必查阅一下这个文件的内容。

4.4.4、测试
[root@server ~]# systemctl stop networkmanagerd
[root@server ~]# systemctl disable NetworkManager
#如果是DHCP获取的IP地址,请修改/etc/sysconfig/network-scripts/ifcfg-ens33和/etc/resolv.conf
[root@server ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
#增加一行
PEERDNS="no"
[root@server ~]# systemctl restart network
[root@server ~]# vim /etc/resolv.conf
# Generated by NetworkManager
nameserver 127.0.0.1
nameserver 10.0.0.1
[root@server network-scripts]# systemctl restart named
[root@server ~]# dig www.baidu.com @127.0.0.1

; <<>> 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: 2422
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

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

;; ANSWER SECTION:
www.baidu.com.          993     IN      CNAME   www.a.shifen.com.
www.a.shifen.com.       70      IN      A       61.135.169.121
www.a.shifen.com.       70      IN      A       61.135.169.125

;; Query time: 1090 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: 五 7月 24 17:59:37 CST 2020
;; MSG SIZE  rcvd: 101

如果可以显示出IP地址,且显示“SERVER: 127.0.0.1#53(127.0.0.1)”表示成功!


5、DNS服务器的详细设置

经过上述的实验后,我们大概知道DNS的几个小细节就是:

  • NDS服务器的架设需要上层DNS的授权才可以成为合法的DNS服务器(否则只是局域网自己玩玩);
  • 配置文件位置:目前BIND程序已进行chroot,相关目录可参考/etc/sysconfig/named;
  • named主要配置文件是/etc/named.conf;
  • 每个正反解区域都需要一个数据库文件,而文件名则是由/etc/named.conf所设置;
  • 当DNS查询时,若本身没有数据库文件,则前往root(.)或forwarding服务器查询;
  • named能否启动成功务必查询/var/log/messages内的信息。

5.1、正解文件记录的数据(Resource Record,RR)

5.1.1、正解文件资源记录(Resource Record,RR)格式

前面我们在使用dig命令输出结果时,发现输出的数据格式似乎是固定的,我们可以将整个输出的格式简化成如下说明:

[domian]	[ttl]				IN		[[RR type]	[RR data]]
[待查数据]	  [暂存时间(秒)]		 IN		[[资源类型]	[资源内容]]

关键字IN是固定的,而RR type和RR data是相互关联的。此外,在domain的部分,若可能的话,请尽量使用FQDN,亦即是主机名结尾加上一个小数点(.)就被成为FQDN。

正解的RR记录格式汇总如下:

#常见的正解文件RR相关信息
[domain]	IN		[[RR type]	[RR data]]
主机名.	IN		A		IPv4的IP地址
主机名.	IN		AAAA	IPv6的IP地址
域名.		IN		NS		管理这个域名的服务器主机名字
域名.		IN		SOA		管理这个域名的七个重要参数
域名.		IN		MX		顺序数字	接收邮件的服务器主机名字
主机别名.	IN		CNAME	实际代表这个主机别名的主机名字
5.1.2、A、AAAA:查询IP的记录

比如我们查询百度的IP地址:

[root@server ~]# dig [-t a]	www.baidu.com
;; ANSWER SECTION:
www.baidu.com.          1004    IN      CNAME   www.a.shifen.com.
www.a.shifen.com.       42      IN      A       61.135.169.125
www.a.shifen.com.       42      IN      A       61.135.169.121
#主机FQDN				  ttl	   IN				这部主机的IP
5.1.3、NS;查询管理区域(Zone)的服务器主机名

如果想知道www.baidu.com的这笔记录是哪台DNS服务器提供的,那就需要使用NS的RR类型标志来查询。不过,由于NS是管理整个域的,因此,你想要查询的目标将需输入domain,亦即baidu.com:

[root@server ~]# dig -t ns baidu.com
;; ANSWER SECTION:
baidu.com.              85453   IN      NS      ns4.baidu.com.
baidu.com.              85453   IN      NS      dns.baidu.com.
baidu.com.              85453   IN      NS      ns7.baidu.com.
baidu.com.              85453   IN      NS      ns3.baidu.com.
baidu.com.              85453   IN      NS      ns2.baidu.com.
#DNS很重要,因此至少都会有两台以上
5.1.4、SOA:查询管理域名的服务器管理信息

如果有多台DNS服务器管理同一个域名,那么最好使用Master/Slave的方式来进行管理。既然要这样管理,那就需要声明被管理的zone file是如何进行传输的,此时就需要SOA的标志了。

[root@server ~]# dig -t soa baidu.com
;; ANSWER SECTION:
baidu.com.              7200    IN      SOA     dns.baidu.com. sa.baidu.com. 2012143007 300 300 2592000 7200

SOA后面会接七个参数,意义分别是:

  1. Master DNS服务器主机名:这个区域主要是哪台DNS作为Master的意思;
  2. 管理员E-mail
  3. 序号(Serial):这个序号代表的是这个数据库文件的新旧,序号越大表示越新。采用的是“YYYYMMDDNU”的格式。
  4. 更新频率(Refreash)
  5. 失败重新尝试时间(Retry)
  6. 失效时间(Expire):如果一直尝试失败,持续连接到达这个设置值时限,那么Slave将不再继续尝试连接,并且尝试删除这份下载的zone file信息;
  7. 缓存时间(Minumum TTL)
5.1.5、CNAME:设置某主机名的别名(alias)
[root@server ~]# dig [-t a]	www.baidu.com
;; ANSWER SECTION:
www.baidu.com.          1004    IN      CNAME   www.a.shifen.com.
5.1.6、MX:查询某域名的邮件服务器主机名
[root@server ~]# dig -t mx baidu.com
;; ANSWER SECTION:
baidu.com.              7190    IN      MX      10 mx.maillb.baidu.com.
baidu.com.              7190    IN      MX      20 mx50.baidu.com.
baidu.com.              7190    IN      MX      20 jpmx.baidu.com.
baidu.com.              7190    IN      MX      20 mx1.baidu.com.
baidu.com.              7190    IN      MX      15 mx.n.shifen.com.

5.2、反解文件记录的RR数据

反解的Zone就必须将IP反过来写,而在结尾时加上.in-addr.arpa.的结尾字样即可。

[root@server ~]# dig -x 10.0.0.155

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

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

;; ANSWER SECTION:
155.0.0.10.in-addr.arpa. 0      IN      PTR     client.lan.		<==这一行

;; Query time: 1 msec
;; SERVER: 10.0.0.1#53(10.0.0.1)
;; WHEN: 六 7月 25 09:49:30 CST 2020
;; MSG SIZE  rcvd: 76


6、DNS服务器

局域网的域名为.lan;且搭配的网段为172.16.0.0/16;因此正解的区域是.lan;反解的区域是172.16.0.0/16。这台DNS想要自己找寻root(.)而不想通过forwarders的辅助,因此需要.的区域的正解文件。需要设置到的文件如下:

  1. named.conf(主配置文件)
  2. named.lan(主要的.lan正解文件)
  3. named.10(主要的10.0.0.0的反解文件)
  4. named.ca(由bind提供的.正解文件)

DNS的环境规划:

操作系统与IP主机名与RR标志说明
Linux(10.0.0.185)server.lan(NS,A)DNS的设置主要使用server.lan
Win10(10.0.0.100)li-911m.lan(A)测试
Linux(10.0.0.155)client.lan(A)测试

一个IP可以对应多个主机名,一个主机名可以给予多个IP。

6.1、主配置文件/etc/named.conf的设置

将forwarders相关功能取消,并加上禁止传输zone file的参数:

  • options:规范DNS服务器的权限(可否查询、forwarders与否等);
  • zone:设置出Zone(domain name)以及zone file的所在(包含master/slave/hint);
  • 其他:设置出DNS本机管理接口及相关的秘钥文件(key file)。
[root@server ~]# vim /etc/named.conf
options {
        listen-on port 53 { any; };
        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";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { any; };

        allow-transfer {none;};

        recursion yes;

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

//正向解析
    zone "lan" IN { # 指定区域名
            type master; # 指定工作模式 为主dns服务器
            file "named.lan"; # 指定配置文件
    
    };
//反向解析
    zone "10.in-addr.arpa" IN { # 指定区域名
             type master; # 指定工作模式 为主dns服务器
            file "named.10";
   };
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

仅添加了一个新参数:

  • allow-transfer {none;};

这个设置与Master/Slave DNS服务器之间的数据库传输有关。如果没有Slave,不要开放。

至于Zone里边的设置,主要有以下几个:

设置值说明
type该Zone的类型,主要的类型有针对.的hint,以及自己手动修改数据库文件的Master,与可自动更新的Slave
file就是zone file的文件
反解zone主要就是in-addr.arpa

可知,zone file文件名都是通过named.conf这个配置文件来规范的

6.2、最上层.(root)数据库文件的设置

全世界一共有13台管理.的DNS服务器,BIND软件已经提供了一个名为named.ca的文件:

[root@server ~]# cat /var/named/named.ca

; <<>> DiG 9.11.3-RedHat-9.11.3-3.fc27 <<>> +bufsize=1200 +norec @a.root-servers.net
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46900
;; flags: qr aa; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 27

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1472
;; QUESTION SECTION:
;.                              IN      NS

;; ANSWER SECTION:
.                       518400  IN      NS      a.root-servers.net.
.                       518400  IN      NS      b.root-servers.net.
.                       518400  IN      NS      c.root-servers.net.
.                       518400  IN      NS      d.root-servers.net.
.                       518400  IN      NS      e.root-servers.net.
.                       518400  IN      NS      f.root-servers.net.
.                       518400  IN      NS      g.root-servers.net.
.                       518400  IN      NS      h.root-servers.net.
.                       518400  IN      NS      i.root-servers.net.
.                       518400  IN      NS      j.root-servers.net.
.                       518400  IN      NS      k.root-servers.net.
.                       518400  IN      NS      l.root-servers.net.
.                       518400  IN      NS      m.root-servers.net.

;; ADDITIONAL SECTION:
a.root-servers.net.     518400  IN      A       198.41.0.4
b.root-servers.net.     518400  IN      A       199.9.14.201
c.root-servers.net.     518400  IN      A       192.33.4.12
d.root-servers.net.     518400  IN      A       199.7.91.13
e.root-servers.net.     518400  IN      A       192.203.230.10
f.root-servers.net.     518400  IN      A       192.5.5.241
g.root-servers.net.     518400  IN      A       192.112.36.4
h.root-servers.net.     518400  IN      A       198.97.190.53
i.root-servers.net.     518400  IN      A       192.36.148.17
j.root-servers.net.     518400  IN      A       192.58.128.30
k.root-servers.net.     518400  IN      A       193.0.14.129
l.root-servers.net.     518400  IN      A       199.7.83.42
m.root-servers.net.     518400  IN      A       202.12.27.33
a.root-servers.net.     518400  IN      AAAA    2001:503:ba3e::2:30
b.root-servers.net.     518400  IN      AAAA    2001:500:200::b
c.root-servers.net.     518400  IN      AAAA    2001:500:2::c
d.root-servers.net.     518400  IN      AAAA    2001:500:2d::d
e.root-servers.net.     518400  IN      AAAA    2001:500:a8::e
f.root-servers.net.     518400  IN      AAAA    2001:500:2f::f
g.root-servers.net.     518400  IN      AAAA    2001:500:12::d0d
h.root-servers.net.     518400  IN      AAAA    2001:500:1::53
i.root-servers.net.     518400  IN      AAAA    2001:7fe::53
j.root-servers.net.     518400  IN      AAAA    2001:503:c27::2:30
k.root-servers.net.     518400  IN      AAAA    2001:7fd::1
l.root-servers.net.     518400  IN      AAAA    2001:500:9f::42
m.root-servers.net.     518400  IN      AAAA    2001:dc3::35

;; Query time: 24 msec
;; SERVER: 198.41.0.4#53(198.41.0.4)
;; WHEN: Thu Apr 05 15:57:34 CEST 2018
;; MSG SIZE  rcvd: 811

6.3、正解数据库文件的设置

正解文件一定要有的RR标志有以下几个:

  • 关于本区域的基础设置方面:例如缓存记忆时间(TTL)、域名(ORIGIN)等;
  • 关于Master/Slave的认证方面(SOA);
  • 关于本区域的域名服务器所在主机名与IP对应(NS、A);
  • 其他正解反解相关资源记录(A、MX、CNAME等)。

正解文件中的特殊符号:

正解文件中的特殊符号说明
一定从行首开始一定不能有空格
@代表Zone的意思
.代表一个完整的主机名(FQDN)而不是仅有hostname而已
;/#批注
[root@server named]# vim /var/named/named.lan
$TTL 1D
@       IN SOA  @          server.lan. (
                                20181019        ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@ IN    NS      server.lan.

server.lan. IN  A   10.0.0.185

6.4、反解数据库文件的设置

[root@server named]# vim /var/named/named.10
$TTL 1D
@       IN SOA  @ server.lan. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@    IN     NS       server.lan.
185      IN      PTR     server.lan.
100      IN      PTR        li-911m.lan.
155      IN      PTR      client.lan.

6.5、DNS启动、查看与防火墙

[root@server ~]# systemctl restart named
[root@server ~]# tail -n 30 /var/log/messages | grep named
Jul 25 15:05:01 server named[6588]: zone lan/IN: sending notifies (serial 20181019)
Jul 25 15:05:01 server named[6588]: zone 10.in-addr.arpa/IN: sending notifies (serial 0)
Jul 25 15:05:01 server named[6588]: network unreachable resolving './DNSKEY/IN': 2001:500:a8::e#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './NS/IN': 2001:500:a8::e#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './DNSKEY/IN': 2001:500:9f::42#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './NS/IN': 2001:500:9f::42#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './DNSKEY/IN': 2001:503:ba3e::2:30#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './NS/IN': 2001:503:ba3e::2:30#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './DNSKEY/IN': 2001:500:1::53#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './NS/IN': 2001:500:1::53#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './DNSKEY/IN': 2001:500:200::b#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './NS/IN': 2001:500:200::b#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './DNSKEY/IN': 2001:500:2::c#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './NS/IN': 2001:500:2::c#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './DNSKEY/IN': 2001:7fd::1#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './NS/IN': 2001:7fd::1#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './DNSKEY/IN': 2001:503:c27::2:30#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './NS/IN': 2001:503:c27::2:30#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './DNSKEY/IN': 2001:500:2f::f#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './NS/IN': 2001:500:2f::f#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './DNSKEY/IN': 2001:500:2d::d#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './NS/IN': 2001:500:2d::d#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './DNSKEY/IN': 2001:500:12::d0d#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './NS/IN': 2001:500:12::d0d#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './DNSKEY/IN': 2001:dc3::35#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './NS/IN': 2001:dc3::35#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './DNSKEY/IN': 2001:7fe::53#53
Jul 25 15:05:01 server named[6588]: network unreachable resolving './NS/IN': 2001:7fe::53#53
Jul 25 15:05:02 server named[6588]: managed-keys-zone: Key 20326 for zone . acceptance timer complete: key now trusted
Jul 25 15:05:02 server named[6588]: resolver priming query complete

6.6、测试

[root@server ~]# dig server.lan

;; ANSWER SECTION:
server.lan.             86400   IN      A       10.0.0.185

;; AUTHORITY SECTION:
lan.                    86400   IN      NS      server.lan.
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: 六 7月 25 15:05:57 CST 2020
;; MSG SIZE  rcvd: 69
[root@server ~]# dig -t mx client.lan

;client.lan.                    IN      MX

;; AUTHORITY SECTION:
lan.                    10800   IN      SOA     lan. server.lan. 20181019 86400 3600 604800 10800

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: 六 7月 25 15:06:26 CST 2020
;; MSG SIZE  rcvd: 82
[root@server ~]# dig li-911m

;li-911m.                       IN      A

;; ANSWER SECTION:
li-911m.                0       IN      A       10.0.0.100

;; Query time: 0 msec
;; SERVER: 10.0.0.1#53(10.0.0.1)
;; WHEN: 六 7月 25 15:07:42 CST 2020
;; MSG SIZE  rcvd: 52

Windows的验证:

在这里插入图片描述

是可以使用的:

在这里插入图片描述

CentOS的验证:

[root@client ~]# vim /etc/resolv.conf
nameserver 10.0.0.185
#nameserver 10.0.0.1
[root@client ~]# 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: 54133
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 5, ADDITIONAL: 6

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

;; ANSWER SECTION:
www.baidu.com.          1200    IN      CNAME   www.a.shifen.com.
www.a.shifen.com.       300     IN      A       61.135.169.121
www.a.shifen.com.       300     IN      A       61.135.169.125

;; AUTHORITY SECTION:
a.shifen.com.           1198    IN      NS      ns3.a.shifen.com.
a.shifen.com.           1198    IN      NS      ns4.a.shifen.com.
a.shifen.com.           1198    IN      NS      ns2.a.shifen.com.
a.shifen.com.           1198    IN      NS      ns1.a.shifen.com.
a.shifen.com.           1198    IN      NS      ns5.a.shifen.com.

;; ADDITIONAL SECTION:
ns2.a.shifen.com.       1198    IN      A       220.181.33.32
ns1.a.shifen.com.       1198    IN      A       61.135.165.224
ns5.a.shifen.com.       1198    IN      A       180.76.76.95
ns4.a.shifen.com.       1198    IN      A       14.215.177.229
ns3.a.shifen.com.       1198    IN      A       112.80.255.253

;; Query time: 4451 msec
;; SERVER: 10.0.0.185#53(10.0.0.185)
;; WHEN: 六 7月 25 15:35:22 CST 2020
;; MSG SIZE  rcvd: 271
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值